NewsController.java 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491
  1. package com.xjrsoft.module.oa.controller;
  2. import cn.dev33.satoken.stp.StpUtil;
  3. import cn.hutool.core.bean.BeanUtil;
  4. import cn.hutool.core.util.ObjectUtil;
  5. import cn.hutool.core.util.StrUtil;
  6. import com.baomidou.mybatisplus.core.conditions.Wrapper;
  7. import com.baomidou.mybatisplus.core.metadata.IPage;
  8. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  9. import com.github.yulichang.toolkit.MPJWrappers;
  10. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  11. import com.xjrsoft.common.constant.GlobalConstant;
  12. import com.xjrsoft.common.enums.DeleteMark;
  13. import com.xjrsoft.common.model.result.RT;
  14. import com.xjrsoft.common.page.ConventPage;
  15. import com.xjrsoft.common.page.PageOutput;
  16. import com.xjrsoft.common.utils.VoToColumnUtil;
  17. import com.xjrsoft.module.oa.dto.AddNewsDto;
  18. import com.xjrsoft.module.oa.dto.ChangeNewsDto;
  19. import com.xjrsoft.module.oa.dto.DeleteNewsRelationDto;
  20. import com.xjrsoft.module.oa.dto.NewsPageDto;
  21. import com.xjrsoft.module.oa.dto.NewsRelationPageDto;
  22. import com.xjrsoft.module.oa.dto.NewsReplyDto;
  23. import com.xjrsoft.module.oa.dto.UpdateNewsDto;
  24. import com.xjrsoft.module.oa.dto.UpdateNewsRelationDto;
  25. import com.xjrsoft.module.oa.entity.News;
  26. import com.xjrsoft.module.oa.entity.NewsAppendix;
  27. import com.xjrsoft.module.oa.entity.NewsRelation;
  28. import com.xjrsoft.module.oa.entity.NewsRelationConfig;
  29. import com.xjrsoft.module.oa.service.INewsAppendixService;
  30. import com.xjrsoft.module.oa.service.INewsRelationConfigService;
  31. import com.xjrsoft.module.oa.service.INewsRelationService;
  32. import com.xjrsoft.module.oa.service.INewsService;
  33. import com.xjrsoft.module.oa.vo.NewsAppendixVo;
  34. import com.xjrsoft.module.oa.vo.NewsCountTypeVo;
  35. import com.xjrsoft.module.oa.vo.NewsPageVo;
  36. import com.xjrsoft.module.oa.vo.NewsRelationConfigVo;
  37. import com.xjrsoft.module.oa.vo.NewsRelationVo;
  38. import com.xjrsoft.module.oa.vo.NewsVo;
  39. import com.xjrsoft.module.organization.entity.Department;
  40. import com.xjrsoft.module.organization.mapper.DepartmentMapper;
  41. import com.xjrsoft.module.system.entity.File;
  42. import com.xjrsoft.module.system.entity.SystemUpdateMessage;
  43. import com.xjrsoft.module.system.entity.SystemUpdateMessageNotice;
  44. import com.xjrsoft.module.system.service.ISystemUpdateMessageService;
  45. import com.xjrsoft.module.teacher.entity.XjrUser;
  46. import io.swagger.annotations.Api;
  47. import io.swagger.annotations.ApiOperation;
  48. import lombok.AllArgsConstructor;
  49. import org.apache.commons.lang3.BooleanUtils;
  50. import org.springframework.web.bind.annotation.DeleteMapping;
  51. import org.springframework.web.bind.annotation.GetMapping;
  52. import org.springframework.web.bind.annotation.PostMapping;
  53. import org.springframework.web.bind.annotation.PutMapping;
  54. import org.springframework.web.bind.annotation.RequestBody;
  55. import org.springframework.web.bind.annotation.RequestMapping;
  56. import org.springframework.web.bind.annotation.RequestParam;
  57. import org.springframework.web.bind.annotation.RestController;
  58. import java.time.LocalDateTime;
  59. import java.util.ArrayList;
  60. import java.util.List;
  61. /**
  62. * 新闻
  63. * @author zlf
  64. * @since 2022-06-16
  65. */
  66. @RestController
  67. @RequestMapping(GlobalConstant.OA_MODULE_PREFIX + "/news")
  68. @Api(value = GlobalConstant.OA_MODULE_PREFIX + "/news", tags = "新闻")
  69. @AllArgsConstructor
  70. public class NewsController {
  71. private INewsService newsService;
  72. private INewsRelationService newsRelationService;
  73. private INewsAppendixService newsAppendixService;
  74. private DepartmentMapper departmentMapper;
  75. private INewsRelationConfigService newsRelationConfigService;
  76. private final ISystemUpdateMessageService systemUpdateMessageService;
  77. @GetMapping
  78. @ApiOperation(value = "获取新闻分页")
  79. public RT<PageOutput<NewsPageVo>> page(NewsPageDto dto) {
  80. Wrapper<News> wrapper = Wrappers.<News>query().lambda()
  81. .eq(News::getTypeId, dto.getType())
  82. .like(StrUtil.isNotBlank(dto.getKeyword()), News::getFullHead, dto.getKeyword())
  83. .select(News.class, x -> VoToColumnUtil.fieldsToColumns(NewsPageVo.class).contains(x.getProperty()))
  84. .orderByDesc(News::getSendEndDate);
  85. IPage<News> page = newsService.page(ConventPage.getPage(dto), wrapper);
  86. PageOutput<NewsPageVo> pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class);
  87. return RT.ok(pageOutput);
  88. }
  89. @GetMapping("/manage-box")
  90. @ApiOperation(value = "获取管理新闻分页")
  91. public RT<PageOutput<NewsPageVo>> manageBox(NewsPageDto dto) {
  92. IPage<NewsPageVo> page = newsService.manageBox(dto);
  93. PageOutput<NewsPageVo> pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class);
  94. return RT.ok(pageOutput);
  95. }
  96. @GetMapping("/receipt-box")
  97. @ApiOperation(value = "获取接受新闻分页")
  98. public RT<PageOutput<NewsPageVo>> receiptBox(NewsPageDto dto) {
  99. IPage<NewsPageVo> page = newsService.receiptBox(dto);
  100. PageOutput<NewsPageVo> pageOutput = ConventPage.getPageOutput(page, NewsPageVo.class);
  101. return RT.ok(pageOutput);
  102. }
  103. @PostMapping
  104. @ApiOperation(value = "新增新闻")
  105. public RT<Boolean> add(@RequestBody AddNewsDto addNewsDto) {
  106. return RT.ok(newsService.add(addNewsDto));
  107. }
  108. @GetMapping(value = "/info")
  109. @ApiOperation(value = "新闻详情")
  110. public RT<NewsVo> info(@RequestParam Long id, @RequestParam(required = false) Boolean isRead) {
  111. News news = newsService.getById(id);
  112. if (news == null) {
  113. return RT.error("该内容不存在或已被删除!");
  114. }
  115. List<NewsRelationVo> newsRelationVoList = new ArrayList<>();
  116. MPJLambdaWrapper<NewsRelation> queryWrapper = new MPJLambdaWrapper<>();
  117. queryWrapper
  118. .select(NewsRelation::getId)
  119. .selectAs(XjrUser::getName,NewsRelationVo::getUserName)
  120. .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
  121. .leftJoin(XjrUser.class,XjrUser::getId,NewsRelation::getUserId)
  122. .eq(NewsRelation::getNewsId , id)
  123. .disableSubLogicDel();
  124. if(ObjectUtil.isNotNull(news.getCreateUserId()) && StpUtil.getLoginIdAsLong() == news.getCreateUserId()){
  125. newsRelationVoList = newsRelationService.selectJoinList(NewsRelationVo.class, queryWrapper);
  126. }else{
  127. queryWrapper.eq(NewsRelation::getUserId , StpUtil.getLoginIdAsLong());
  128. NewsRelationVo newsRelationVo = newsRelationService.selectJoinOne(NewsRelationVo.class, queryWrapper);
  129. if(ObjectUtil.isNotNull(newsRelationVo)){
  130. newsRelationVoList.add(newsRelationVo);
  131. }
  132. }
  133. NewsVo newsVo = BeanUtil.toBean(news, NewsVo.class);
  134. newsVo.setRelationList(newsRelationVoList);
  135. Department department = departmentMapper.selectById(newsVo.getSendDeptId());
  136. if(department != null){
  137. newsVo.setSendDeptIdCN(department.getName());
  138. }
  139. if (BooleanUtils.isTrue(isRead)) {
  140. // NewsRelation newsRelation = new NewsRelation();
  141. // newsRelation.setNewsId(id);
  142. // newsRelation.setUserId(StpUtil.getLoginIdAsLong());
  143. // newsRelationService.remove(Wrappers.<NewsRelation>query().lambda()
  144. // .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())
  145. // .eq(NewsRelation::getNewsId, id));
  146. // newsRelationService.save(newsRelation);
  147. }
  148. // List<NewsRelationVo> newsRelationVoList = newsRelationService.selectJoinList(NewsRelationVo.class,
  149. // new MPJLambdaWrapper<NewsRelation>()
  150. // .eq(NewsRelation::getNewsId, id)
  151. // .select(NewsRelation::getId)
  152. // .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
  153. // .leftJoin(XjrUser.class, XjrUser::getId, NewsRelation::getUserId, ext -> ext.selectAs(XjrUser::getName, NewsRelationVo::getUserName)));
  154. // if (newsRelationVoList.size() > 0) {
  155. // newsVo.setRelationList(newsRelationVoList);
  156. // }
  157. List<NewsAppendixVo> newsAppendixVoList = newsAppendixService.selectJoinList(NewsAppendixVo.class,
  158. new MPJLambdaWrapper<NewsAppendix>().eq(NewsAppendix::getNewsId, id)
  159. .select(NewsRelation::getId)
  160. .select(NewsAppendix.class, x -> VoToColumnUtil.fieldsToColumns(NewsAppendixVo.class).contains(x.getProperty()))
  161. .leftJoin(File.class, File::getFolderId, NewsAppendix::getFileId, ext -> ext.selectAs(File::getFileName, NewsAppendixVo::getFileName)
  162. .selectAs(File::getFolderId, NewsAppendixVo::getFolderId)
  163. .selectAs(File::getFileUrl, NewsAppendixVo::getFileUrl))
  164. );
  165. if (newsAppendixVoList.size() > 0) {
  166. newsVo.setAppendixList(newsAppendixVoList);
  167. }
  168. return RT.ok(newsVo);
  169. }
  170. @PutMapping
  171. @ApiOperation(value = "修改新闻")
  172. public RT<Boolean> update(@RequestBody UpdateNewsDto updateNewsDto) {
  173. //News news = BeanUtil.toBean(updateNewsDto, News.class);
  174. return RT.ok(newsService.update(updateNewsDto));
  175. }
  176. @DeleteMapping
  177. @ApiOperation(value = "删除新闻")
  178. public RT<Boolean> delete(@RequestBody List<Long> ids) {
  179. return RT.ok(newsService.delete(ids));
  180. }
  181. @PutMapping("/change-status")
  182. @ApiOperation(value = "发布或下架新闻")
  183. public RT<Boolean> changeStatus(@RequestBody ChangeNewsDto changeNewsDto) throws Exception {
  184. News xjrNews = newsService.getById(changeNewsDto.getId());
  185. if (changeNewsDto.getStatus() == null || xjrNews == null) {
  186. throw new Exception("参数异常");
  187. }
  188. if (changeNewsDto.getStatus().equals(xjrNews.getStatus())) {
  189. if (changeNewsDto.getStatus() == 2) {
  190. throw new Exception("新闻已发布!!!");
  191. } else if (changeNewsDto.getStatus() == 3) {
  192. throw new Exception("新闻已下架!!!");
  193. }
  194. }
  195. //将原来的修改enabled_mark改为修改status
  196. xjrNews.setStatus(changeNewsDto.getStatus());
  197. if(xjrNews.getStatus() == 2){
  198. //将发布时间改为当前时间
  199. xjrNews.setReleaseTime(LocalDateTime.now());
  200. //将张贴时间改为当前时间
  201. xjrNews.setSendStartDate(LocalDateTime.now());
  202. newsService.SendMessage(xjrNews.getId());
  203. }
  204. return RT.ok(newsService.updateById(xjrNews));
  205. }
  206. @PutMapping("/read")
  207. @ApiOperation(value = "读新闻")
  208. public RT<Boolean> read(@RequestBody List<Long> ids) {
  209. for (Long id : ids) {
  210. NewsRelation newsRelation = newsRelationService.getOne(
  211. Wrappers.<NewsRelation>query().lambda()
  212. .eq(NewsRelation::getNewsId, id)
  213. .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()));
  214. if (newsRelation == null) {
  215. newsRelationService.save(new NewsRelation(){{
  216. setNewsId(id);
  217. setUserId(StpUtil.getLoginIdAsLong());
  218. setReadMark(1);
  219. setReadDate(LocalDateTime.now());
  220. }});
  221. continue;
  222. }
  223. newsRelationService.updateById(new NewsRelation(){{
  224. setId(newsRelation.getId());
  225. setReadMark(1);
  226. setReadDate(LocalDateTime.now());
  227. }});
  228. }
  229. return RT.ok(true);
  230. }
  231. @PutMapping("/reply")
  232. @ApiOperation(value = "新闻回复")
  233. public RT<Boolean> reply(@RequestBody NewsReplyDto newsReplyDto) {
  234. NewsRelation newsRelation = newsRelationService.getOne(
  235. Wrappers.<NewsRelation>query().lambda()
  236. .eq(NewsRelation::getNewsId, newsReplyDto.getId())
  237. .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong()));
  238. if (newsRelation == null) {
  239. newsRelation = new NewsRelation();
  240. newsRelation.setNewsId(newsReplyDto.getId());
  241. newsRelation.setUserId(StpUtil.getLoginIdAsLong());
  242. newsRelation.setReadMark(1);
  243. newsRelation.setReadDate(LocalDateTime.now());
  244. newsRelation.setReplyContent(newsReplyDto.getReplyContent());
  245. return RT.ok(newsRelationService.save(newsRelation));
  246. }
  247. if (newsRelation.getReadMark() == null || newsRelation.getReadMark() == 0) {
  248. newsRelation.setReadMark(1);
  249. newsRelation.setReadDate(LocalDateTime.now());
  250. }
  251. newsRelation.setReplyContent(newsReplyDto.getReplyContent());
  252. return RT.ok(newsRelationService.updateById(newsRelation));
  253. }
  254. @GetMapping("/page-relation")
  255. @ApiOperation(value = "获取新闻阅读权限分页")
  256. public RT<PageOutput<NewsRelationVo>> pageRelation(NewsRelationPageDto dto) {
  257. IPage<NewsRelationVo> page = newsRelationService.selectJoinListPage(ConventPage.getPage(dto), NewsRelationVo.class,
  258. new MPJLambdaWrapper<NewsRelation>()
  259. .eq(NewsRelation::getNewsId, dto.getNewsId())
  260. .eq(ObjectUtil.isNotEmpty(dto.getReadMark()) && dto.getReadMark() > 0, NewsRelation::getReadMark, dto.getReadMark() == 1 ? 0 : 1)
  261. .isNull(ObjectUtil.isNotEmpty(dto.getReplyMark()) && dto.getReplyMark() == 1, NewsRelation::getReplyContent)
  262. .isNotNull(ObjectUtil.isNotEmpty(dto.getReplyMark()) && dto.getReplyMark() == 2, NewsRelation::getReplyContent)
  263. .select(NewsRelation::getId)
  264. .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
  265. .leftJoin(XjrUser.class, XjrUser::getId, NewsRelation::getUserId, ext -> ext.selectAs(XjrUser::getName, NewsRelationVo::getUserName))
  266. );
  267. PageOutput<NewsRelationVo> pageOutput = ConventPage.getPageOutput(page);
  268. return RT.ok(pageOutput);
  269. }
  270. @GetMapping("/page-relation-config")
  271. @ApiOperation(value = "获取新闻权限分页")
  272. public RT<PageOutput<NewsRelationConfigVo>> pageRelationConfig(NewsRelationPageDto dto) {
  273. Wrapper<NewsRelationConfig> wrapper = Wrappers.<NewsRelationConfig>query().lambda()
  274. .eq(NewsRelationConfig::getNewsId, dto.getNewsId())
  275. .select(NewsRelationConfig.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationConfigVo.class).contains(x.getProperty()));
  276. IPage<NewsRelationConfig> page = newsRelationConfigService.page(ConventPage.getPage(dto), wrapper);
  277. PageOutput<NewsRelationConfigVo> pageOutput = ConventPage.getPageOutput(page, NewsRelationConfigVo.class);
  278. return RT.ok(pageOutput);
  279. }
  280. @GetMapping("/count-relation")
  281. @ApiOperation(value = "公告阅读权限统计")
  282. public RT<Long[]> countRelation(@RequestParam Long id) {
  283. Long total = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id));
  284. Long notRead = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id).eq(NewsRelation::getReadMark, 0));
  285. Long isRead = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id).eq(NewsRelation::getReadMark, 1));
  286. Long isReply = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id).isNotNull(NewsRelation::getReplyContent));
  287. Long notReply = newsRelationService.count(Wrappers.<NewsRelation>query().lambda().eq(NewsRelation::getNewsId, id).isNull(NewsRelation::getReplyContent));
  288. Long[] arrayRefVar = {total, notRead, isRead, isReply, notReply};
  289. return RT.ok(arrayRefVar);
  290. }
  291. @PutMapping("/update-relation")
  292. @ApiOperation(value = "设置新闻阅读权限")
  293. public RT<Boolean> updateRelation(@RequestBody UpdateNewsRelationDto updateRelationDto) {
  294. return RT.ok(newsService.updateRelation(updateRelationDto));
  295. }
  296. @DeleteMapping("/delete-relation")
  297. @ApiOperation(value = "删除新闻阅读权限")
  298. public RT<Boolean> deleteRelation(@RequestBody DeleteNewsRelationDto deleteNewsRelationDto) {
  299. return RT.ok(newsService.deleteRelation(deleteNewsRelationDto));
  300. }
  301. @GetMapping("/count-type")
  302. @ApiOperation(value = "未读类型统计")
  303. public RT<List<NewsCountTypeVo>> countType() {
  304. List<NewsCountTypeVo> newsCountTypeVoList = new ArrayList<>();
  305. Integer typeIds[] = {1, 2, 3, 4};
  306. for (Integer typeId : typeIds) {
  307. NewsCountTypeVo newsCountTypeVo = new NewsCountTypeVo();
  308. News news = new News();
  309. //新闻
  310. if(typeId == 1){
  311. Long notReadCount = newsService.count(
  312. MPJWrappers.<News>lambdaJoin()
  313. .leftJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId)
  314. .eq(News::getStatus, 2)
  315. .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())
  316. .eq(News::getTypeId, typeId)
  317. .eq(NewsRelation::getReadMark, 0)
  318. .gt(News::getSendEndDate, LocalDateTime.now())
  319. );
  320. newsCountTypeVo.setTypeId(typeId);
  321. newsCountTypeVo.setTotal(notReadCount);
  322. news = newsService.getOne(Wrappers.<News>query().lambda()
  323. .eq(News::getTypeId, typeId)
  324. .eq(News::getStatus, 2)
  325. .gt(News::getSendEndDate, LocalDateTime.now())
  326. .eq(News::getWfStatus, 1)
  327. //.notInSql(News::getId, "select distinct news_id from xjr_oa_news_relation where read_mark = 1 and user_id = " + StpUtil.getLoginIdAsLong())
  328. .orderByDesc(News::getReleaseTime)
  329. .last("limit 1"));
  330. }
  331. //公告
  332. if(typeId == 2){
  333. //公告发给全体的
  334. Long notReadCountProclamation = newsService.count(
  335. MPJWrappers.<News>lambdaJoin()
  336. .leftJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId)
  337. .eq(News::getStatus, 2)
  338. .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())
  339. .eq(News::getTypeId, typeId)
  340. .gt(News::getSendEndDate, LocalDateTime.now())
  341. .eq(NewsRelation::getReadMark, 0)
  342. );
  343. News newsAll = newsService.getOne(Wrappers.<News>query().lambda()
  344. .eq(News::getTypeId, 2)
  345. .eq(News::getStatus, 2)
  346. .eq(News::getSendRange, 1)
  347. .and(wp -> wp.gt(News::getSendEndDate, LocalDateTime.now())
  348. .or()
  349. .isNull(News::getSendEndDate))
  350. .orderByDesc(News::getReleaseTime)
  351. .last("limit 1"));
  352. MPJLambdaWrapper<News> queryNews = new MPJLambdaWrapper<>();
  353. queryNews
  354. .leftJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId)
  355. .eq(News::getTypeId, typeId)
  356. .eq(News::getStatus, 2)
  357. .and(wp -> wp.eq(News::getSendRange, 2)
  358. .or()
  359. .eq(News::getSendRange, 3))
  360. .and(wp -> wp.gt(News::getSendEndDate, LocalDateTime.now())
  361. .or()
  362. .isNull(News::getSendEndDate))
  363. //.eq(NewsRelation::getReadMark, 0)
  364. .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())
  365. .orderByDesc(News::getReleaseTime)
  366. .last("limit 1");
  367. News newsNotAll = newsService.selectJoinOne(News.class, queryNews);
  368. if(newsAll != null && newsNotAll != null){
  369. if(newsAll.getReleaseTime().compareTo(newsNotAll.getReleaseTime()) < 0){
  370. news = newsNotAll;
  371. }else {
  372. news = newsAll;
  373. }
  374. }
  375. if(newsAll != null && newsNotAll == null){
  376. news = newsAll;
  377. }
  378. if(newsAll == null && newsNotAll != null){
  379. news = newsNotAll;
  380. }
  381. newsCountTypeVo.setTypeId(typeId);
  382. newsCountTypeVo.setTotal(notReadCountProclamation);
  383. }
  384. if (news != null) {
  385. newsCountTypeVo.setTime(news.getReleaseTime());
  386. newsCountTypeVo.setTitle(news.getFullHead());
  387. }
  388. if(typeId == 4){
  389. long count = systemUpdateMessageService.count(
  390. MPJWrappers.<SystemUpdateMessage>lambdaJoin()
  391. .leftJoin(SystemUpdateMessageNotice.class, SystemUpdateMessageNotice::getSystemUpdateMessageId, SystemUpdateMessage::getId)
  392. .eq(SystemUpdateMessageNotice::getUserId, StpUtil.getLoginIdAsLong())
  393. .eq(SystemUpdateMessage::getDeleteMark, DeleteMark.NODELETE.getCode())
  394. .eq(SystemUpdateMessage::getStatus, 1)
  395. .eq(SystemUpdateMessageNotice::getStatus, 0)
  396. );
  397. newsCountTypeVo.setTypeId(typeId);
  398. newsCountTypeVo.setTotal(count);
  399. }
  400. newsCountTypeVoList.add(newsCountTypeVo);
  401. }
  402. return RT.ok(newsCountTypeVoList);
  403. }
  404. @GetMapping("/send-message")
  405. @ApiOperation(value = "发送消息")
  406. public RT<Boolean> sendMessage(@RequestParam Long id) {
  407. return RT.ok(newsService.SendMessage(id));
  408. }
  409. @GetMapping("/unread-count")
  410. @ApiOperation(value = "获取登录人未读消息数量")
  411. public RT<Long> unreadCount() {
  412. Long notReadCountNews = newsService.count(
  413. MPJWrappers.<News>lambdaJoin()
  414. .leftJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId)
  415. .eq(News::getStatus, 2)
  416. .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())
  417. .eq(NewsRelation::getReadMark, 0)
  418. );
  419. //公告发给非全体的
  420. long systemUpdateMessageCount = systemUpdateMessageService.count(
  421. MPJWrappers.<SystemUpdateMessage>lambdaJoin()
  422. .leftJoin(SystemUpdateMessageNotice.class, SystemUpdateMessageNotice::getSystemUpdateMessageId, SystemUpdateMessage::getId)
  423. .eq(SystemUpdateMessageNotice::getUserId, StpUtil.getLoginIdAsLong())
  424. .eq(SystemUpdateMessage::getDeleteMark, DeleteMark.NODELETE.getCode())
  425. .eq(SystemUpdateMessage::getStatus, 1)
  426. .eq(SystemUpdateMessageNotice::getStatus, 0)
  427. );
  428. Long notReadCount = notReadCountNews + systemUpdateMessageCount;
  429. return RT.ok(notReadCount);
  430. }
  431. @GetMapping("/all-read")
  432. @ApiOperation(value = "全部已读")
  433. public RT<Boolean> allRead() {
  434. return RT.ok(newsService.allRead(StpUtil.getLoginIdAsLong()));
  435. }
  436. }