123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- package com.xjrsoft.module.oa.controller;
- import cn.dev33.satoken.stp.StpUtil;
- import cn.hutool.core.bean.BeanUtil;
- import cn.hutool.core.util.ObjectUtil;
- import cn.hutool.core.util.StrUtil;
- import com.baomidou.mybatisplus.core.conditions.Wrapper;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
- import com.github.yulichang.interfaces.MPJBaseJoin;
- import com.github.yulichang.toolkit.MPJWrappers;
- import com.github.yulichang.wrapper.MPJLambdaWrapper;
- import com.xjrsoft.common.annotation.XjrLog;
- import com.xjrsoft.common.constant.GlobalConstant;
- import com.xjrsoft.common.enums.EnabledMark;
- import com.xjrsoft.common.model.result.R;
- import com.xjrsoft.common.page.ConventPage;
- import com.xjrsoft.common.page.PageOutput;
- import com.xjrsoft.common.utils.VoToColumnUtil;
- import com.xjrsoft.module.authority.entity.DataAuth;
- import com.xjrsoft.module.oa.dto.AddNewsDto;
- import com.xjrsoft.module.oa.dto.NewsPageDto;
- import com.xjrsoft.module.oa.dto.UpdateNewsDto;
- import com.xjrsoft.module.oa.entity.Message;
- import com.xjrsoft.module.oa.entity.News;
- import com.xjrsoft.module.oa.entity.NewsAppendix;
- import com.xjrsoft.module.oa.entity.NewsRelation;
- import com.xjrsoft.module.oa.service.IMessageService;
- import com.xjrsoft.module.oa.service.INewsAppendixService;
- import com.xjrsoft.module.oa.service.INewsRelationService;
- import com.xjrsoft.module.oa.service.INewsService;
- import com.xjrsoft.module.oa.vo.*;
- import com.xjrsoft.module.student.vo.BaseStudentUserPageVo;
- import com.xjrsoft.module.system.entity.DictionaryDetail;
- import com.xjrsoft.module.system.entity.File;
- import com.xjrsoft.module.teacher.entity.XjrUser;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import lombok.AllArgsConstructor;
- import org.apache.commons.lang3.BooleanUtils;
- import org.springframework.web.bind.annotation.*;
- import java.time.LocalDateTime;
- import java.util.ArrayList;
- import java.util.List;
- /**
- * <p>
- * 新闻中心表 前端控制器
- * </p>
- *
- * @author zlf
- * @since 2022-06-16
- */
- @RestController
- @RequestMapping(GlobalConstant.OA_MODULE_PREFIX + "/news")
- @Api(value = GlobalConstant.OA_MODULE_PREFIX + "/news", tags = "新闻公告")
- @AllArgsConstructor
- public class NewsController {
- private INewsService newsService;
- private INewsRelationService newsRelationService;
- private INewsAppendixService newsAppendixService;
- @GetMapping
- @ApiOperation(value = "获取新闻分页")
- public R page(NewsPageDto dto) {
- Wrapper<News> wrapper = Wrappers.<News>query().lambda()
- .eq(News::getTypeId, dto.getType())
- .like(StrUtil.isNotBlank(dto.getKeyword()), News::getFullHead, dto.getKeyword())
- .select(News.class, x -> VoToColumnUtil.fieldsToColumns(NewsPageVo.class).contains(x.getProperty()));
- IPage<News> page = newsService.page(ConventPage.getPage(dto), wrapper);
- PageOutput<NewsPageVo> pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class);
- return R.ok(pageOutput);
- }
- @GetMapping("/box")
- @ApiOperation(value = "获取新闻分页")
- public R box(NewsPageDto dto) {
- MPJLambdaWrapper<News> wrapper = MPJWrappers.<News>lambdaJoin()
- .distinct()
- .eq(ObjectUtil.isNotEmpty(dto.getType()) && dto.getType() > 0, News::getTypeId, dto.getType())
- .and(wq->wq.eq(News::getLevel,1).or().eq(News::getLevel,2).eq(News::getClassId, dto.getClassId()))
- .eq(ObjectUtil.isNotEmpty(dto.getLevel()) && dto.getLevel() > 0, News::getLevel, dto.getLevel())
- .and(wq->wq.eq(News::getSendRange,1).or().eq(News::getSendRange,2).in(News::getId,"select id from xjr_oa_news_relation where news_id=t.id and user_id="+StpUtil.getLoginIdAsLong()))
- .like(StrUtil.isNotBlank(dto.getKeyword()), News::getFullHead, dto.getKeyword())
- // .leftJoin(NewsRelation.class, onWrapper -> onWrapper.eq(NewsRelation::getNewsId, News::getId).eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()))
- // .selectAs(NewsRelation::getId, NewsPageVo::getReadId)
- .selectAs(News::getId, NewsPageVo::getId)
- .select(News.class, x -> VoToColumnUtil.fieldsToColumns(NewsPageVo.class).contains(x.getProperty()));
- IPage<NewsPageVo> page = newsService.selectJoinListPage(ConventPage.getPage(dto), NewsPageVo.class, wrapper);
- PageOutput<NewsPageVo> pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class);
- return R.ok(pageOutput);
- }
- @PostMapping
- @ApiOperation(value = "新增新闻")
- public R add(@RequestBody AddNewsDto addNewsDto) {
- News news = BeanUtil.toBean(addNewsDto, News.class);
- news.setEnabledMark(EnabledMark.DISABLED.getCode());
- return R.ok(newsService.save(news));
- }
- @GetMapping(value = "/info")
- @ApiOperation(value = "新闻详情")
- public R info(@RequestParam Long id, @RequestParam(required = false) Boolean isRead) {
- News news = newsService.getById(id);
- if (news == null) {
- R.error("找不到此新闻!");
- }
- if (BooleanUtils.isTrue(isRead)) {
- // NewsRelation newsRelation = new NewsRelation();
- // newsRelation.setNewsId(id);
- // newsRelation.setUserId(StpUtil.getLoginIdAsLong());
- // newsRelationService.remove(Wrappers.<NewsRelation>query().lambda()
- // .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())
- // .eq(NewsRelation::getNewsId, id));
- // newsRelationService.save(newsRelation);
- }
- NewsVo newsVo = BeanUtil.toBean(news, NewsVo.class);
- List<NewsRelationVo> newsRelationVoList = newsRelationService.selectJoinList(NewsRelationVo.class,
- new MPJLambdaWrapper<NewsRelation>()
- .eq(NewsRelation::getNewsId, id)
- .select(NewsRelation::getId)
- .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
- .leftJoin(XjrUser.class, XjrUser::getId, NewsRelation::getUserId, ext -> ext.selectAs(XjrUser::getName, NewsRelationVo::getUserName)));
- if (newsRelationVoList.size() > 0) {
- newsVo.setRelationList(newsRelationVoList);
- }
- List<NewsAppendixVo> newsAppendixVoList = newsAppendixService.selectJoinList(NewsAppendixVo.class,
- new MPJLambdaWrapper<NewsAppendix>().eq(NewsAppendix::getNewsId, id)
- .select(NewsRelation::getId)
- .select(NewsAppendix.class, x -> VoToColumnUtil.fieldsToColumns(NewsAppendixVo.class).contains(x.getProperty()))
- .leftJoin(File.class, File::getId, NewsAppendix::getFileId, ext -> ext.selectAs(File::getFileName, NewsAppendixVo::getFileName)
- .selectAs(File::getFolderId,NewsAppendixVo::getFolderId)
- .selectAs(File::getFileUrl,NewsAppendixVo::getFileUrl))
- );
- if (newsAppendixVoList.size() > 0) {
- newsVo.setAppendixList(newsAppendixVoList);
- }
- return R.ok(newsVo);
- }
- @PutMapping
- @ApiOperation(value = "修改新闻")
- public R update(@RequestBody UpdateNewsDto updateNewsDto) {
- //News news = BeanUtil.toBean(updateNewsDto, News.class);
- return R.ok(newsService.update(updateNewsDto));
- }
- @DeleteMapping
- @ApiOperation(value = "删除新闻")
- public R delete(@RequestBody List<Long> ids) {
- return R.ok(newsService.delete(ids));
- }
- @PutMapping("/change-status")
- @ApiOperation(value = "发布或下架新闻")
- public R changeStatus(@RequestParam("id") String id, @RequestParam("type") Integer type) throws Exception {
- News xjrNews = newsService.getById(id);
- if (type == null || xjrNews == null) {
- throw new Exception("参数异常");
- }
- if (type.equals(xjrNews.getEnabledMark())) {
- if (type == 1) {
- throw new Exception("新闻已发布!!!");
- } else if (type == 0) {
- throw new Exception("新闻已下架!!!");
- }
- }
- xjrNews.setEnabledMark(type);
- return R.ok(newsService.updateById(xjrNews));
- }
- @PutMapping("/read")
- @ApiOperation(value = "读新闻")
- public R read(@RequestBody List<Long> ids) {
- List<NewsRelation> toSaveList = newsRelationService.list(
- Wrappers.<NewsRelation>query().lambda()
- .in(NewsRelation::getNewsId, ids)
- .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()));
- for (NewsRelation newsRelation : toSaveList) {
- newsRelation.setReadMark(1);
- newsRelation.setReadDate(LocalDateTime.now());
- }
- // newsRelationService.remove(Wrappers.<NewsRelation>query().lambda()
- // .in(NewsRelation::getNewsId, ids)
- // .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()));
- return R.ok(newsRelationService.updateBatchById(toSaveList));
- }
- @PutMapping("/reply")
- @ApiOperation(value = "新闻回复")
- public R reply(@RequestBody String id, @RequestBody String replyContent) throws Exception {
- NewsRelation newsRelation = newsRelationService.getOne(
- Wrappers.<NewsRelation>query().lambda()
- .eq(NewsRelation::getNewsId,id)
- .eq(NewsRelation::getUserId,StpUtil.getLoginIdAsLong()));
- if (replyContent == null || newsRelation == null) {
- throw new Exception("参数异常");
- }
- if (newsRelation.getReadMark()==null || newsRelation.getReadMark() == 0) {
- newsRelation.setReadMark(1);
- newsRelation.setReadDate(LocalDateTime.now());
- }
- newsRelation.setReplyContent(replyContent);
- return R.ok(newsRelationService.updateById(newsRelation));
- }
- }
|