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.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.xjrsoft.common.constant.GlobalConstant; import com.xjrsoft.common.enums.DeleteMark; import com.xjrsoft.common.model.result.RT; import com.xjrsoft.common.page.ConventPage; import com.xjrsoft.common.page.PageOutput; import com.xjrsoft.common.utils.VoToColumnUtil; import com.xjrsoft.module.oa.dto.*; 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.entity.NewsRelationConfig; import com.xjrsoft.module.oa.service.INewsAppendixService; import com.xjrsoft.module.oa.service.INewsRelationConfigService; import com.xjrsoft.module.oa.service.INewsRelationService; import com.xjrsoft.module.oa.service.INewsService; import com.xjrsoft.module.oa.vo.*; 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; /** *

* 新闻中心表 前端控制器 *

* * @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; private INewsRelationConfigService newsRelationConfigService; @GetMapping @ApiOperation(value = "获取新闻分页") public RT> page(NewsPageDto dto) { Wrapper wrapper = Wrappers.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())) .orderByDesc(News::getSendEndDate); IPage page = newsService.page(ConventPage.getPage(dto), wrapper); PageOutput pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class); return RT.ok(pageOutput); } @GetMapping("/manage-box") @ApiOperation(value = "获取管理新闻分页") public RT> manageBox(NewsPageDto dto) { IPage page = newsService.manageBox(dto); PageOutput pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class); return RT.ok(pageOutput); } @GetMapping("/receipt-box") @ApiOperation(value = "获取接受新闻分页") public RT> receiptBox(NewsPageDto dto) { IPage page = newsService.receiptBox(dto); PageOutput pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class); return RT.ok(pageOutput); } @PostMapping @ApiOperation(value = "新增新闻") public RT add(@RequestBody AddNewsDto addNewsDto) { return RT.ok(newsService.add(addNewsDto)); } @GetMapping(value = "/info") @ApiOperation(value = "新闻详情") public RT info(@RequestParam Long id, @RequestParam(required = false) Boolean isRead) { News news = newsService.getById(id); if (news == null) { RT.error("找不到此新闻!"); } LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper .eq(NewsRelation::getNewsId , id) .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelation.class).contains(x.getProperty())); List newsRelationVoList = new ArrayList<>(); if(ObjectUtil.isNotNull(news.getCreateUserId()) && StpUtil.getLoginIdAsLong() == news.getCreateUserId()){ List newsRelationList = newsRelationService.list(queryWrapper); newsRelationList.stream().forEach(element -> { // 对元素进行操作 NewsRelationVo newsRelationVo = BeanUtil.toBean(element, NewsRelationVo.class); newsRelationVoList.add(newsRelationVo); }); }else{ queryWrapper.eq(NewsRelation::getUserId , StpUtil.getLoginIdAsLong()); NewsRelation newsRelation = newsRelationService.getOne(queryWrapper); NewsRelationVo newsRelationVo = BeanUtil.toBean(newsRelation, NewsRelationVo.class); newsRelationVoList.add(newsRelationVo); } NewsVo newsVo = BeanUtil.toBean(news, NewsVo.class); newsVo.setRelationList(newsRelationVoList); if (BooleanUtils.isTrue(isRead)) { // NewsRelation newsRelation = new NewsRelation(); // newsRelation.setNewsId(id); // newsRelation.setUserId(StpUtil.getLoginIdAsLong()); // newsRelationService.remove(Wrappers.query().lambda() // .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()) // .eq(NewsRelation::getNewsId, id)); // newsRelationService.save(newsRelation); } // List newsRelationVoList = newsRelationService.selectJoinList(NewsRelationVo.class, // new MPJLambdaWrapper() // .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 newsAppendixVoList = newsAppendixService.selectJoinList(NewsAppendixVo.class, new MPJLambdaWrapper().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 RT.ok(newsVo); } @PutMapping @ApiOperation(value = "修改新闻") public RT update(@RequestBody UpdateNewsDto updateNewsDto) { //News news = BeanUtil.toBean(updateNewsDto, News.class); return RT.ok(newsService.update(updateNewsDto)); } @DeleteMapping @ApiOperation(value = "删除新闻") public RT delete(@RequestBody List ids) { return RT.ok(newsService.delete(ids)); } @PutMapping("/change-status") @ApiOperation(value = "发布或下架新闻") public RT changeStatus(@RequestBody ChangeNewsDto changeNewsDto) throws Exception { News xjrNews = newsService.getById(changeNewsDto.getId()); if (changeNewsDto.getStatus() == null || xjrNews == null) { throw new Exception("参数异常"); } if (changeNewsDto.getStatus().equals(xjrNews.getStatus())) { if (changeNewsDto.getStatus() == 2) { throw new Exception("新闻已发布!!!"); } else if (changeNewsDto.getStatus() == 3) { throw new Exception("新闻已下架!!!"); } } //将原来的修改enabled_mark改为修改status xjrNews.setStatus(changeNewsDto.getStatus()); if(xjrNews.getStatus() == 2){ newsService.SendMessage(xjrNews.getId()); } return RT.ok(newsService.updateById(xjrNews)); } @PutMapping("/read") @ApiOperation(value = "读新闻") public RT read(@RequestBody List ids) { List toSaveList = newsRelationService.list( Wrappers.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.query().lambda() // .in(NewsRelation::getNewsId, ids) // .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())); return RT.ok(newsRelationService.updateBatchById(toSaveList)); } @PutMapping("/reply") @ApiOperation(value = "新闻回复") public RT reply(@RequestBody NewsReplyDto newsReplyDto) { NewsRelation newsRelation = newsRelationService.getOne( Wrappers.query().lambda() .eq(NewsRelation::getNewsId, newsReplyDto.getId()) .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())); if (newsRelation == null) { newsRelation = new NewsRelation(); newsRelation.setNewsId(newsReplyDto.getId()); newsRelation.setUserId(StpUtil.getLoginIdAsLong()); newsRelation.setReadMark(1); newsRelation.setReadDate(LocalDateTime.now()); newsRelation.setReplyContent(newsReplyDto.getReplyContent()); return RT.ok(newsRelationService.save(newsRelation)); } if (newsRelation.getReadMark() == null || newsRelation.getReadMark() == 0) { newsRelation.setReadMark(1); newsRelation.setReadDate(LocalDateTime.now()); } newsRelation.setReplyContent(newsReplyDto.getReplyContent()); return RT.ok(newsRelationService.updateById(newsRelation)); } @GetMapping("/page-relation") @ApiOperation(value = "获取新闻阅读权限分页") public RT> pageRelation(NewsRelationPageDto dto) { IPage page = newsRelationService.selectJoinListPage(ConventPage.getPage(dto), NewsRelationVo.class, new MPJLambdaWrapper() .eq(NewsRelation::getNewsId, dto.getNewsId()) .eq(ObjectUtil.isNotEmpty(dto.getReadMark()) && dto.getReadMark() > 0, NewsRelation::getReadMark, dto.getReadMark() == 1 ? 0 : 1) .isNull(ObjectUtil.isNotEmpty(dto.getReplyMark()) && dto.getReplyMark() == 1, NewsRelation::getReplyContent) .isNotNull(ObjectUtil.isNotEmpty(dto.getReplyMark()) && dto.getReplyMark() == 2, NewsRelation::getReplyContent) .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)) ); PageOutput pageOutput = ConventPage.getPageOutput(page); return RT.ok(pageOutput); } @GetMapping("/page-relation-config") @ApiOperation(value = "获取新闻权限分页") public RT> pageRelationConfig(NewsRelationPageDto dto) { Wrapper wrapper = Wrappers.query().lambda() .eq(NewsRelationConfig::getNewsId, dto.getNewsId()) .select(NewsRelationConfig.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationConfigVo.class).contains(x.getProperty())); IPage page = newsRelationConfigService.page(ConventPage.getPage(dto), wrapper); PageOutput pageOutput = ConventPage.getPageOutput(page, NewsRelationConfigVo.class); return RT.ok(pageOutput); } @GetMapping("/count-relation") @ApiOperation(value = "新闻阅读权限统计") public RT countRelation(@RequestParam Long id) { Long total = newsRelationService.count(Wrappers.query().lambda().eq(NewsRelation::getNewsId, id)); Long notRead = newsRelationService.count(Wrappers.query().lambda().eq(NewsRelation::getNewsId, id).eq(NewsRelation::getReadMark, 0)); Long isRead = newsRelationService.count(Wrappers.query().lambda().eq(NewsRelation::getNewsId, id).eq(NewsRelation::getReadMark, 1)); Long isReply = newsRelationService.count(Wrappers.query().lambda().eq(NewsRelation::getNewsId, id).isNull(NewsRelation::getReplyContent)); Long notReply = newsRelationService.count(Wrappers.query().lambda().eq(NewsRelation::getNewsId, id).isNotNull(NewsRelation::getReplyContent)); Long[] arrayRefVar = {total, notRead, isRead, isReply, notReply}; return RT.ok(arrayRefVar); } @PutMapping("/update-relation") @ApiOperation(value = "设置新闻阅读权限") public RT updateRelation(@RequestBody UpdateNewsRelationDto updateRelationDto) { return RT.ok(newsService.updateRelation(updateRelationDto)); } @DeleteMapping("/delete-relation") @ApiOperation(value = "删除新闻阅读权限") public RT deleteRelation(@RequestBody DeleteNewsRelationDto deleteNewsRelationDto) { return RT.ok(newsService.deleteRelation(deleteNewsRelationDto)); } @GetMapping("/count-type") @ApiOperation(value = "未读类型统计") public RT> countType() { List newsCountTypeVoList = new ArrayList<>(); Integer typeIds[] = {1, 2, 3}; for (Integer typeId : typeIds) { Long totalType = newsRelationService.count(Wrappers.query().lambda().eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()).eq(NewsRelation::getReadMark, 0).in(NewsRelation::getNewsId, "SELECT id from xjr_oa_news where type_id=" + typeId)); NewsCountTypeVo newsCountTypeVo = new NewsCountTypeVo(); newsCountTypeVo.setTypeId(typeId); newsCountTypeVo.setTotal(totalType); News news = new News(); if(typeId == 1){ news = newsService.getOne(Wrappers.query().lambda().eq(News::getTypeId, typeId).orderByDesc(News::getReleaseTime).last("limit 1")); } if(typeId == 2){ news = newsService.selectJoinOne(News.class, new MPJLambdaWrapper() .disableSubLogicDel() .eq(News::getTypeId, typeId) .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()) .orderByDesc(News::getReleaseTime) .last("limit 1") .innerJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId)); } if (news != null) { newsCountTypeVo.setTime(news.getReleaseTime()); newsCountTypeVo.setTitle(news.getBriefHead()); } newsCountTypeVoList.add(newsCountTypeVo); } return RT.ok(newsCountTypeVoList); } @GetMapping("/send-message") @ApiOperation(value = "发送消息") public RT sendMessage(@RequestParam Long id) { return RT.ok(newsService.SendMessage(id)); } @GetMapping("/unread-count") @ApiOperation(value = "获取登录人未读消息数量") public RT unreadCount() { Integer count = newsService.selectJoinCount( new MPJLambdaWrapper() .eq(NewsRelation::getReadMark, 0) .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()) .eq(News::getDeleteMark, DeleteMark.NODELETE.getCode()) .innerJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId) ); return RT.ok(count); } }