NewsServiceImpl.java 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927
  1. package com.xjrsoft.module.oa.service.impl;
  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.alibaba.fastjson.JSONObject;
  7. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  8. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  9. import com.baomidou.mybatisplus.core.metadata.IPage;
  10. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  11. import com.github.yulichang.base.MPJBaseServiceImpl;
  12. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  13. import com.xjrsoft.common.enums.EnabledMark;
  14. import com.xjrsoft.common.exception.MyException;
  15. import com.xjrsoft.common.page.ConventPage;
  16. import com.xjrsoft.common.utils.LocalDateTimeUtil;
  17. import com.xjrsoft.common.utils.TreeUtil;
  18. import com.xjrsoft.common.utils.VoToColumnUtil;
  19. import com.xjrsoft.config.CommonPropertiesConfig;
  20. import com.xjrsoft.module.base.entity.BaseClass;
  21. import com.xjrsoft.module.base.entity.BaseGrade;
  22. import com.xjrsoft.module.base.mapper.BaseClassMapper;
  23. import com.xjrsoft.module.base.mapper.BaseGradeMapper;
  24. import com.xjrsoft.module.oa.dto.AddNewsAppendixDto;
  25. import com.xjrsoft.module.oa.dto.AddNewsDto;
  26. import com.xjrsoft.module.oa.dto.AddNewsRelationDto;
  27. import com.xjrsoft.module.oa.dto.AddProclamationDto;
  28. import com.xjrsoft.module.oa.dto.ChangeNewsDto;
  29. import com.xjrsoft.module.oa.dto.DeleteNewsRelationDto;
  30. import com.xjrsoft.module.oa.dto.NewsPageDto;
  31. import com.xjrsoft.module.oa.dto.NewsRelationConfigDto;
  32. import com.xjrsoft.module.oa.dto.ProclamationPageDto;
  33. import com.xjrsoft.module.oa.dto.UpdateNewsDto;
  34. import com.xjrsoft.module.oa.dto.UpdateNewsRelationDto;
  35. import com.xjrsoft.module.oa.dto.UpdateProclamationDto;
  36. import com.xjrsoft.module.oa.entity.News;
  37. import com.xjrsoft.module.oa.entity.NewsAppendix;
  38. import com.xjrsoft.module.oa.entity.NewsRelation;
  39. import com.xjrsoft.module.oa.entity.NewsRelationConfig;
  40. import com.xjrsoft.module.oa.mapper.NewsAppendixMapper;
  41. import com.xjrsoft.module.oa.mapper.NewsMapper;
  42. import com.xjrsoft.module.oa.mapper.NewsRelationConfigMapper;
  43. import com.xjrsoft.module.oa.mapper.NewsRelationMapper;
  44. import com.xjrsoft.module.oa.service.INewsAppendixService;
  45. import com.xjrsoft.module.oa.service.INewsRelationService;
  46. import com.xjrsoft.module.oa.service.INewsService;
  47. import com.xjrsoft.module.oa.vo.DeptIdOrClassIdVo;
  48. import com.xjrsoft.module.oa.vo.NewsAppendixVo;
  49. import com.xjrsoft.module.oa.vo.NewsGradeClassTreeVo;
  50. import com.xjrsoft.module.oa.vo.NewsPageVo;
  51. import com.xjrsoft.module.oa.vo.NewsRelationConfigVo;
  52. import com.xjrsoft.module.oa.vo.NewsRelationVo;
  53. import com.xjrsoft.module.oa.vo.ProclamationPageVo;
  54. import com.xjrsoft.module.oa.vo.ProclamationVo;
  55. import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
  56. import com.xjrsoft.module.organization.entity.Department;
  57. import com.xjrsoft.module.organization.entity.User;
  58. import com.xjrsoft.module.organization.entity.UserDeptRelation;
  59. import com.xjrsoft.module.organization.mapper.DepartmentMapper;
  60. import com.xjrsoft.module.organization.mapper.UserDeptRelationMapper;
  61. import com.xjrsoft.module.organization.mapper.UserMapper;
  62. import com.xjrsoft.module.organization.service.IWeChatService;
  63. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  64. import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper;
  65. import com.xjrsoft.module.system.entity.File;
  66. import com.xjrsoft.module.teacher.entity.XjrUser;
  67. import com.xjrsoft.module.teacher.mapper.XjrUserMapper;
  68. import lombok.AllArgsConstructor;
  69. import org.springframework.stereotype.Service;
  70. import org.springframework.transaction.annotation.Transactional;
  71. import java.time.LocalDateTime;
  72. import java.util.ArrayList;
  73. import java.util.Date;
  74. import java.util.List;
  75. import java.util.concurrent.CompletableFuture;
  76. import java.util.stream.Collectors;
  77. /**
  78. * <p>
  79. * 新闻中心表 服务实现类
  80. * </p>
  81. *
  82. * @author zlf
  83. * @since 2022-06-16
  84. */
  85. @Service
  86. @AllArgsConstructor
  87. public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implements INewsService {
  88. private final NewsMapper newsMapper;
  89. private final NewsAppendixMapper newsAppendixMapper;
  90. private final NewsRelationMapper newsRelationMapper;
  91. private final NewsRelationConfigMapper newsRelationConfigMapper;
  92. private final UserDeptRelationMapper userDeptRelationMapper;
  93. private final BaseStudentSchoolRollMapper baseStudentSchoolRollMapper;
  94. private final IWeChatService weChatService;
  95. private final UserMapper userMapper;
  96. private final BaseGradeMapper baseGradeMapper;
  97. private final DepartmentMapper departmentMapper;
  98. private final BaseClassMapper baseClassMapper;
  99. private final XjrUserMapper xjrUserMapper;
  100. private final CommonPropertiesConfig commonPropertiesConfig;
  101. private INewsRelationService newsRelationService;
  102. private INewsAppendixService newsAppendixService;
  103. @Override
  104. public List<NewsGradeClassTreeVo> getGradeClassTree() {
  105. List<NewsGradeClassTreeVo> treeVoList = new ArrayList<NewsGradeClassTreeVo>();
  106. //虚拟父级
  107. treeVoList.add(new NewsGradeClassTreeVo() {{
  108. setId(666666L);
  109. setName("班级");
  110. }});
  111. //获取所有班级的年级作为树的父级
  112. MPJLambdaWrapper<BaseClass> queryGrade = new MPJLambdaWrapper<>();
  113. queryGrade
  114. .distinct()
  115. .selectAs(BaseGrade::getId, BaseGrade::getId)
  116. .selectAs(BaseGrade::getName, BaseGrade::getName)
  117. .leftJoin(BaseGrade.class, BaseGrade::getId, BaseClass::getGradeId);
  118. List<BaseGrade> gradeList = baseClassMapper.selectJoinList(BaseGrade.class, queryGrade);
  119. gradeList.forEach((node) -> {
  120. treeVoList.add(new NewsGradeClassTreeVo() {{
  121. setId(node.getId());
  122. setName(node.getName());
  123. setParentId(666666L);
  124. }});
  125. });
  126. List<BaseClass> classList = baseClassMapper.selectList(new QueryWrapper<BaseClass>());
  127. //获取班级荣誉中出现的学期下的所有班级作为树的子级
  128. classList.forEach((node) -> {
  129. treeVoList.add(new NewsGradeClassTreeVo() {{
  130. setId(node.getId());
  131. setName(node.getName());
  132. setParentId(node.getGradeId());
  133. }});
  134. });
  135. List<NewsGradeClassTreeVo> resultTreeVoList = TreeUtil.build(treeVoList);
  136. return resultTreeVoList;
  137. }
  138. @Override
  139. @Transactional(rollbackFor = Exception.class)
  140. public Long addProclamation(AddProclamationDto addProclamationDto) {
  141. News news = BeanUtil.toBean(addProclamationDto, News.class);
  142. news.setTypeId(2);
  143. news.setEnabledMark(EnabledMark.ENABLED.getCode());
  144. //LambdaQueryWrapper<News> queryWrapperSortcode = new LambdaQueryWrapper<>();
  145. //queryWrapperSortcode.select("SELECT IFNULL(MAX(sort_code),1)");
  146. newsMapper.insert(news);
  147. //添加附件子表
  148. if (addProclamationDto.getAppendixList() != null) {
  149. for (AddNewsAppendixDto appendixDto : addProclamationDto.getAppendixList()) {
  150. NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class);
  151. newsAppendix.setNewsId(news.getId());
  152. newsAppendixMapper.insert(newsAppendix);
  153. }
  154. }
  155. //公告需要添加阅读关系配置,关系类型 1=部门 2=人员 3=班级
  156. if (addProclamationDto.getSendRange() == 3 && addProclamationDto.getRelationList() != null && addProclamationDto.getRelationList().size() > 0) {
  157. addRelationConfig(news, addProclamationDto);
  158. }
  159. //如果状态是2,表示立即发布的公告,需要将阅读人添加进阅读关系表
  160. if(addProclamationDto.getStatus() == 2){
  161. addRelation(news, addProclamationDto, 2);
  162. return news.getId();
  163. }
  164. //没有任何问题返回
  165. return -1L;
  166. }
  167. @Override
  168. public ProclamationVo getProclamationById(Long id) {
  169. MPJLambdaWrapper<News> queryWrapperNews = new MPJLambdaWrapper<>();
  170. queryWrapperNews
  171. .select(News::getId)
  172. .selectAs(Department::getName, ProclamationVo::getSendDeptIdCN)
  173. .select(News.class, x -> VoToColumnUtil.fieldsToColumns(ProclamationVo.class).contains(x.getProperty()))
  174. .leftJoin(Department.class, Department::getId, News::getSendDeptId)
  175. .eq(News::getId, id);
  176. ProclamationVo proclamationVo = this.selectJoinOne(ProclamationVo.class, queryWrapperNews);
  177. if (proclamationVo == null) {
  178. return null;
  179. }
  180. //添加阅读关系集合
  181. List<NewsRelationConfigVo> newsRelationConfigVoList = new ArrayList<>();
  182. //公告在草稿状态还没有阅读状态,只有阅读关系
  183. if (proclamationVo.getStatus() == 1) {
  184. MPJLambdaWrapper<NewsRelationConfig> queryWrapperNewsRelationConfig = new MPJLambdaWrapper<>();
  185. queryWrapperNewsRelationConfig
  186. .select(NewsRelationConfig.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationConfigVo.class).contains(x.getProperty()))
  187. .eq(NewsRelationConfig::getNewsId, proclamationVo.getId());
  188. newsRelationConfigVoList = newsRelationConfigMapper.selectJoinList(NewsRelationConfigVo.class, queryWrapperNewsRelationConfig);
  189. }
  190. proclamationVo.setNewsRelationConfigVoList(newsRelationConfigVoList);
  191. //添加阅读状态集合
  192. List<NewsRelationVo> newsRelationVoList = new ArrayList<>();
  193. //公告在发布状态或下架状态
  194. if (proclamationVo.getStatus() == 2 || proclamationVo.getStatus() == 3) {
  195. MPJLambdaWrapper<NewsRelation> queryWrapper = new MPJLambdaWrapper<>();
  196. queryWrapper
  197. .select(NewsRelation::getId)
  198. .selectAs(XjrUser::getName, NewsRelationVo::getUserName)
  199. .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
  200. .leftJoin(XjrUser.class, XjrUser::getId, NewsRelation::getUserId)
  201. .eq(NewsRelation::getNewsId, proclamationVo.getId())
  202. .disableSubLogicDel();
  203. //当是发布人点击了该公告可以看到其下所有人的回复
  204. if (ObjectUtil.isNotNull(proclamationVo.getCreateUserId()) && StpUtil.getLoginIdAsLong() == proclamationVo.getCreateUserId()) {
  205. newsRelationVoList = newsRelationService.selectJoinList(NewsRelationVo.class, queryWrapper);
  206. } else {//当不是发布人点击了该公告只能看到自己的回复
  207. queryWrapper.eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong());
  208. NewsRelationVo newsRelationVo = newsRelationService.selectJoinOne(NewsRelationVo.class, queryWrapper);
  209. if (ObjectUtil.isNotNull(newsRelationVo)) {
  210. newsRelationVoList.add(newsRelationVo);
  211. }
  212. }
  213. }
  214. proclamationVo.setRelationList(newsRelationVoList);
  215. //添加附件
  216. List<NewsAppendixVo> newsAppendixVoList = newsAppendixService.selectJoinList(NewsAppendixVo.class,
  217. new MPJLambdaWrapper<NewsAppendix>().eq(NewsAppendix::getNewsId, id)
  218. .select(NewsRelation::getId)
  219. .select(NewsAppendix.class, x -> VoToColumnUtil.fieldsToColumns(NewsAppendixVo.class).contains(x.getProperty()))
  220. .leftJoin(File.class, File::getFolderId, NewsAppendix::getFileId, ext -> ext.selectAs(File::getFileName, NewsAppendixVo::getFileName)
  221. .selectAs(File::getFolderId, NewsAppendixVo::getFolderId)
  222. .selectAs(File::getFileUrl, NewsAppendixVo::getFileUrl))
  223. );
  224. if (newsAppendixVoList.size() > 0) {
  225. proclamationVo.setAppendixList(newsAppendixVoList);
  226. }
  227. return proclamationVo;
  228. }
  229. @Override
  230. public IPage<ProclamationPageVo> proclamationManageBox(ProclamationPageDto dto) {
  231. MPJLambdaWrapper<News> queryNews = new MPJLambdaWrapper<>();
  232. queryNews
  233. .select(News::getId)
  234. .selectAs(Department::getName, ProclamationPageVo::getSendDeptIdCN)
  235. .select(News.class, x -> VoToColumnUtil.fieldsToColumns(ProclamationPageVo.class).contains(x.getProperty()))
  236. .leftJoin(Department.class, Department::getId, News::getSendDeptId)
  237. .eq(News::getCreateUserId, StpUtil.getLoginIdAsLong())
  238. .eq(News::getTypeId, 2)
  239. .like(dto.getFullHead() != null, News::getFullHead, dto.getFullHead())
  240. .like(dto.getKeyword() != null, News::getNewsContent, dto.getKeyword())
  241. .orderByDesc(News::getId)
  242. .disableSubLogicDel();
  243. IPage<ProclamationPageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), ProclamationPageVo.class, queryNews);
  244. return page;
  245. }
  246. @Override
  247. public IPage<ProclamationPageVo> proclamationReceiptBox(ProclamationPageDto dto) {
  248. MPJLambdaWrapper<News> queryNews = new MPJLambdaWrapper<>();
  249. queryNews
  250. .select(News::getId)
  251. .selectAs(Department::getName, ProclamationPageVo::getSendDeptIdCN)
  252. .select(News.class, x -> VoToColumnUtil.fieldsToColumns(ProclamationPageVo.class).contains(x.getProperty()))
  253. .leftJoin(Department.class, Department::getId, News::getSendDeptId)
  254. .leftJoin(NewsRelation.class, NewsRelation::getNewsId, News::getId)
  255. .eq(News::getTypeId, 2)
  256. .eq(News::getStatus, 2)
  257. .gt(News::getSendEndDate, new Date())
  258. .eq(NewsRelation::getUserId, StpUtil.getLoginIdAsLong())
  259. .or()
  260. .eq(News::getSendRange, 2)
  261. .orderByDesc(News::getId)
  262. .disableSubLogicDel();
  263. ;
  264. IPage<ProclamationPageVo> page = this.selectJoinListPage(ConventPage.getPage(dto), ProclamationPageVo.class, queryNews);
  265. return page;
  266. }
  267. @Override
  268. @Transactional(rollbackFor = Exception.class)
  269. public Boolean changeStatus(ChangeNewsDto changeNewsDto) {
  270. News xjrNews = this.getById(changeNewsDto.getId());
  271. if (changeNewsDto.getStatus() == null || xjrNews == null) {
  272. throw new MyException("参数异常");
  273. }
  274. if (changeNewsDto.getStatus().equals(xjrNews.getStatus())) {
  275. if (changeNewsDto.getStatus() == 2) {
  276. throw new MyException("公告已发布!!!");
  277. } else if (changeNewsDto.getStatus() == 3) {
  278. throw new MyException("公告已下架!!!");
  279. }
  280. }
  281. xjrNews.setStatus(changeNewsDto.getStatus());
  282. //发布公告,将阅读关系中选择的阅读人添加到关系表
  283. if (xjrNews.getStatus() == 2) {
  284. //将发布时间改为当前时间
  285. xjrNews.setReleaseTime(LocalDateTime.now());
  286. //将张贴时间改为当前时间
  287. xjrNews.setSendStartDate(LocalDateTime.now());
  288. xjrNews.setModifyUserId(StpUtil.getLoginIdAsLong());
  289. xjrNews.setModifyDate(LocalDateTime.now());
  290. addRelation(xjrNews, null, 1);
  291. }
  292. if (xjrNews.getStatus() == 3) {
  293. //应该将关系配置表和关系表的数据设置为删除
  294. }
  295. return this.updateById(xjrNews);
  296. }
  297. @Override
  298. @Transactional(rollbackFor = Exception.class)
  299. public boolean updateProclamation(UpdateProclamationDto updateProclamationDto) {
  300. News news = BeanUtil.toBean(updateProclamationDto, News.class);
  301. news.setModifyDate(LocalDateTime.now());
  302. news.setModifyUserId(StpUtil.getLoginIdAsLong());
  303. newsMapper.updateById(news);
  304. newsAppendixMapper.delete(Wrappers.lambdaQuery(NewsAppendix.class).eq(NewsAppendix::getNewsId, news.getId()));
  305. if (updateProclamationDto.getAppendixList() != null) {
  306. for (AddNewsAppendixDto appendixDto : updateProclamationDto.getAppendixList()) {
  307. NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class);
  308. newsAppendix.setNewsId(news.getId());
  309. newsAppendixMapper.insert(newsAppendix);
  310. }
  311. }
  312. if (updateProclamationDto.getSendRange() == 3 && updateProclamationDto.getRelationList() != null) {
  313. newsRelationMapper.delete(Wrappers.lambdaQuery(NewsRelation.class).eq(NewsRelation::getNewsId, news.getId()));
  314. newsRelationConfigMapper.delete(Wrappers.lambdaQuery(NewsRelationConfig.class).eq(NewsRelationConfig::getNewsId, news.getId()));
  315. updateRelationConfig(news, updateProclamationDto);
  316. }
  317. return true;
  318. }
  319. /**
  320. * 添加阅读关系配置表
  321. * @param news
  322. * @return
  323. */
  324. private Boolean updateRelationConfig(News news, UpdateProclamationDto updateProclamationDto){
  325. AddProclamationDto addProclamationDto = BeanUtil.toBean(updateProclamationDto, AddProclamationDto.class);
  326. return addRelationConfig(news, addProclamationDto);
  327. }
  328. private Boolean addRelationConfig(News news, AddProclamationDto addProclamationDto){
  329. for (AddNewsRelationDto relationDto : addProclamationDto.getRelationList()) {
  330. if (relationDto.getRelationType() == 1) {
  331. Department department = departmentMapper.selectById(relationDto.getRelationId());
  332. newsRelationConfigMapper.insert(new NewsRelationConfig() {{
  333. setNewsId(news.getId());
  334. setRelationId(relationDto.getRelationId());
  335. setRelationType(relationDto.getRelationType());
  336. if (department != null) {
  337. setRelationName(department.getName());
  338. //setRelationName("中小微企业是经济发展的“毛细血管,十二条措施明确推进破产审判全域智治集成改革,通过推广智慧破产平台、推动执破融合机制改革、推行小微企业破产特别保护,力求在涉企破产纠纷办理中提质效、降成本。扬州中院党组成员、副院长沈红表示,将以提升经营主体司法获得感和满意度为出发点和落脚点,让法治成为扬州营商环境核心竞争力。中小微企业是经济发展的毛细血管,十二条措施明确推进破产审判全域智治集成改革,通过推广智慧破产平台、推动执破融合机制改革、推行小微企业破产特别保护,力求在涉企破产纠纷办理中提质效、降成本。扬州中院党组成员、副院长沈红表示,将以提升经营主体司法获得感和满意度为出发点和落脚点,让法治成为扬州营商环境核心竞争力。");
  339. }
  340. }});
  341. }
  342. if (relationDto.getRelationType() == 2) {
  343. XjrUser xjrUser = xjrUserMapper.selectById(relationDto.getRelationId());
  344. newsRelationConfigMapper.insert(new NewsRelationConfig() {{
  345. setNewsId(news.getId());
  346. setRelationId(relationDto.getRelationId());
  347. setRelationType(relationDto.getRelationType());
  348. if (xjrUser != null) {
  349. setRelationName(xjrUser.getName());
  350. }
  351. }});
  352. }
  353. if (relationDto.getRelationType() == 3) {
  354. BaseClass baseClass = baseClassMapper.selectById(relationDto.getRelationId());
  355. BaseGrade baseGrade = null;
  356. if (baseClass == null) {
  357. baseGrade = baseGradeMapper.selectById(relationDto.getRelationId());
  358. }
  359. BaseGrade finalBaseGrade = baseGrade;
  360. newsRelationConfigMapper.insert(new NewsRelationConfig() {{
  361. setNewsId(news.getId());
  362. setRelationId(relationDto.getRelationId());
  363. setRelationType(relationDto.getRelationType());
  364. if (baseClass != null) {
  365. setRelationName(baseClass.getName());
  366. }
  367. if (finalBaseGrade != null) {
  368. setRelationName(finalBaseGrade.getName());
  369. }
  370. }});
  371. }
  372. }
  373. return true;
  374. }
  375. /**
  376. * 添加阅读关系到关系表
  377. * @param xjrNews
  378. * @return
  379. */
  380. private Boolean addRelation(News xjrNews ,AddProclamationDto addProclamationDto, int flag){
  381. if (xjrNews.getSendRange() == 3) {
  382. List<Long> deptIdList = new ArrayList<>();
  383. List<Long> personalIdList = new ArrayList<>();
  384. List<Long> classIdList = new ArrayList<>();
  385. if(flag == 1) {
  386. //查出当前公告的关系配置
  387. //部门
  388. LambdaQueryWrapper<NewsRelationConfig> queryDeptList = new LambdaQueryWrapper<>();
  389. queryDeptList
  390. .eq(NewsRelationConfig::getNewsId, xjrNews.getId())
  391. .eq(NewsRelationConfig::getRelationType, 1);
  392. List<NewsRelationConfig> deptList = newsRelationConfigMapper.selectList(queryDeptList);
  393. for (NewsRelationConfig newsRelationConfig : deptList) {
  394. deptIdList.add(newsRelationConfig.getRelationId());
  395. }
  396. //人员
  397. LambdaQueryWrapper<NewsRelationConfig> queryPersonalList = new LambdaQueryWrapper<>();
  398. queryPersonalList
  399. .eq(NewsRelationConfig::getNewsId, xjrNews.getId())
  400. .eq(NewsRelationConfig::getRelationType, 2);
  401. List<NewsRelationConfig> personalList = newsRelationConfigMapper.selectList(queryPersonalList);
  402. for (NewsRelationConfig newsRelationConfig : personalList) {
  403. personalIdList.add(newsRelationConfig.getRelationId());
  404. }
  405. //班级
  406. LambdaQueryWrapper<NewsRelationConfig> queryClassList = new LambdaQueryWrapper<>();
  407. queryClassList
  408. .eq(NewsRelationConfig::getNewsId, xjrNews.getId())
  409. .eq(NewsRelationConfig::getRelationType, 3);
  410. List<NewsRelationConfig> classList = newsRelationConfigMapper.selectList(queryClassList);
  411. for (NewsRelationConfig newsRelationConfig : classList) {
  412. classIdList.add(newsRelationConfig.getRelationId());
  413. }
  414. }
  415. if(flag == 2){
  416. for (AddNewsRelationDto addNewsRelationDto : addProclamationDto.getRelationList()) {
  417. if(addNewsRelationDto.getRelationType() == 1){
  418. deptIdList.add(addNewsRelationDto.getRelationId());
  419. }
  420. if(addNewsRelationDto.getRelationType() == 2){
  421. personalIdList.add(addNewsRelationDto.getRelationId());
  422. }
  423. if(addNewsRelationDto.getRelationType() == 3){
  424. classIdList.add(addNewsRelationDto.getRelationId());
  425. }
  426. }
  427. }
  428. //对人员进行筛选,避免重复添加
  429. List<Long> userIdList = new ArrayList<>();
  430. if (personalIdList.size() > 0) {
  431. //获取人员的班级或者部门
  432. List<DeptIdOrClassIdVo> deptIdOrClassIdVoList = newsMapper.getDeptIdOrClassId(personalIdList);
  433. for (DeptIdOrClassIdVo deptIdOrClassIdVo : deptIdOrClassIdVoList) {
  434. if (deptIdOrClassIdVo.getClassId() != null) {//有班级是学生
  435. if (!classIdList.contains(deptIdOrClassIdVo.getClassId())) {
  436. userIdList.add(deptIdOrClassIdVo.getUserId());
  437. }
  438. } else {
  439. if (!deptIdList.contains(deptIdOrClassIdVo.getDeptId())) {
  440. userIdList.add(deptIdOrClassIdVo.getUserId());
  441. }
  442. }
  443. }
  444. }
  445. //添加部门人员
  446. if (deptIdList.size() > 0) {
  447. newsRelationMapper.insertDeptUser(xjrNews.getId(), deptIdList);
  448. }
  449. //添加部门人员
  450. if (classIdList.size() > 0) {
  451. newsRelationMapper.insertClassUser(xjrNews.getId(), classIdList);
  452. }
  453. //添加部门人员
  454. if (userIdList.size() > 0) {
  455. newsRelationMapper.insertPersonl(xjrNews.getId(), userIdList);
  456. }
  457. }
  458. //遍历所有关系配置
  459. /* for (NewsRelationConfig newsRelationConfig : newsRelationConfigList) {
  460. //阅读关系是部门
  461. if (newsRelationConfig.getRelationType() == 1) {
  462. // 获取部门下的人员添加
  463. Long deptId = newsRelationConfig.getRelationId();
  464. MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
  465. queryUser
  466. .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId)
  467. .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
  468. .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, XjrUser::getId)
  469. .leftJoin(Role.class, Role::getId, UserRoleRelation::getRoleId)
  470. .eq(Department::getId, deptId)
  471. .eq(Role::getId, 2);
  472. List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class, queryUser);
  473. for (XjrUser user : userList) {
  474. if (!userMap.containsKey(user.getId())) {
  475. userMap.put(user.getId(), user);
  476. newsRelationMapper.insert(new NewsRelation() {{
  477. setNewsId(xjrNews.getId());
  478. setUserId(user.getId());
  479. setReadMark(0);
  480. setCreateDate(LocalDateTime.now());
  481. }});
  482. }
  483. }
  484. }
  485. //阅读关系是人员
  486. if (newsRelationConfig.getRelationType() == 2) {
  487. if (!userMap.containsKey(newsRelationConfig.getRelationId())) {
  488. userMap.put(newsRelationConfig.getRelationId(), new XjrUser() {{
  489. setId(newsRelationConfig.getRelationId());
  490. }});
  491. newsRelationMapper.insert(new NewsRelation() {{
  492. setNewsId(xjrNews.getId());
  493. setUserId(newsRelationConfig.getRelationId());
  494. setReadMark(0);
  495. setCreateDate(LocalDateTime.now());
  496. }});
  497. }
  498. }
  499. //阅读关系是班级
  500. if (newsRelationConfig.getRelationType() == 3) {
  501. // 获取班级下的人员添加
  502. Long classId = newsRelationConfig.getRelationId();
  503. MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
  504. queryUser
  505. .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, XjrUser::getId)
  506. .eq(BaseStudentSchoolRoll::getClassId, classId);
  507. List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class, queryUser);
  508. for (XjrUser user : userList) {
  509. if (!userMap.containsKey(user.getId())) {
  510. userMap.put(user.getId(), user);
  511. newsRelationMapper.insert(new NewsRelation() {{
  512. setNewsId(xjrNews.getId());
  513. setUserId(user.getId());
  514. setReadMark(0);
  515. setCreateDate(LocalDateTime.now());
  516. }});
  517. }
  518. }
  519. }
  520. }*/
  521. if (xjrNews.getSendRange() == 2) {
  522. // MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
  523. // queryUser
  524. // .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, XjrUser::getId)
  525. // .leftJoin(Role.class, Role::getId, UserRoleRelation::getRoleId)
  526. // .eq(Role::getId, 2);
  527. // List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class, queryUser);
  528. // for (XjrUser user : userList) {
  529. // newsRelationMapper.insert(new NewsRelation() {{
  530. // setNewsId(xjrNews.getId());
  531. // setUserId(user.getId());
  532. // setReadMark(0);
  533. // setCreateDate(LocalDateTime.now());
  534. // }});
  535. // }
  536. newsRelationMapper.insertAllTeaStaff(xjrNews.getId());
  537. }
  538. return true;
  539. }
  540. @Override
  541. @Transactional(rollbackFor = Exception.class)
  542. public Boolean add(AddNewsDto addNewsDto) {
  543. News news = BeanUtil.toBean(addNewsDto, News.class);
  544. news.setEnabledMark(EnabledMark.ENABLED.getCode());
  545. newsMapper.insert(news);
  546. //添加附件子表
  547. if (addNewsDto.getAppendixList() != null) {
  548. for (AddNewsAppendixDto appendixDto : addNewsDto.getAppendixList()) {
  549. NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class);
  550. newsAppendix.setNewsId(news.getId());
  551. newsAppendixMapper.insert(newsAppendix);
  552. }
  553. }
  554. //公告需要添加阅读关系,发送范围 1=全校教职工 2=全校师生 3=指定人员
  555. //1=全校教职工,添加全校教职工到关系表
  556. // if(addNewsDto.getTypeId() == 2 && addNewsDto.getSendRange() == 1){
  557. // MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
  558. // queryUser
  559. // .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, XjrUser::getId)
  560. // .leftJoin(Role.class, Role::getId, UserRoleRelation::getRoleId)
  561. // .eq(Role::getId, 2);
  562. // List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class,queryUser);
  563. // for (XjrUser user: userList) {
  564. // newsRelation.setUserId(user.getId());
  565. // newsRelationMapper.insert(newsRelation);
  566. // }
  567. // }
  568. if (addNewsDto.getTypeId() == 2 && addNewsDto.getSendRange() == 1) {
  569. for (AddNewsRelationDto relationDto : addNewsDto.getRelationList()) {
  570. NewsRelationConfig newsRelationConfig = BeanUtil.toBean(relationDto, NewsRelationConfig.class);
  571. newsRelationConfig.setNewsId(news.getId());
  572. newsRelationConfigMapper.insert(newsRelationConfig);
  573. NewsRelation newsRelation = BeanUtil.toBean(relationDto, NewsRelation.class);
  574. newsRelation.setNewsId(news.getId());
  575. newsRelation.setReadMark(0);
  576. if (relationDto.getRelationType() == 1) {
  577. // 获取部门下的人员添加
  578. Long deptId = relationDto.getRelationId();
  579. MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
  580. queryUser
  581. .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId)
  582. .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
  583. .eq(Department::getId, deptId);
  584. List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class, queryUser);
  585. for (XjrUser user : userList) {
  586. newsRelation.setUserId(user.getId());
  587. newsRelationMapper.insert(newsRelation);
  588. }
  589. }
  590. if (relationDto.getRelationType() == 2) {
  591. newsRelation.setUserId(relationDto.getRelationId());
  592. newsRelationMapper.insert(newsRelation);
  593. }
  594. if (relationDto.getRelationType() == 3) {
  595. // 获取班级下的人员添加
  596. Long deptId = relationDto.getRelationId();
  597. MPJLambdaWrapper<XjrUser> queryUser = new MPJLambdaWrapper<>();
  598. queryUser
  599. .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId)
  600. .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId)
  601. .eq(Department::getId, deptId);
  602. List<XjrUser> userList = xjrUserMapper.selectJoinList(XjrUser.class, queryUser);
  603. List<Long> userIdList = new ArrayList<>();
  604. for (XjrUser user : userList) {
  605. userIdList.add(user.getId());
  606. }
  607. for (Long userId : userIdList) {
  608. newsRelation.setUserId(userId);
  609. newsRelationMapper.insert(newsRelation);
  610. }
  611. }
  612. }
  613. }
  614. //添加新闻和公告的时候,如果状态是2,表示新闻和公告实时发布了,张贴开始时间就应该是发布时间需要发送消息
  615. if (ObjectUtil.isNotNull(addNewsDto.getStatus()) && addNewsDto.getStatus() == 2) {
  616. SendMessage(news.getId());
  617. }
  618. return true;
  619. }
  620. @Override
  621. public IPage<NewsPageVo> manageBox(NewsPageDto dto) {
  622. dto.setLoginId(StpUtil.getLoginIdAsLong());
  623. IPage<NewsPageVo> page = newsMapper.manageBox(ConventPage.getPage(dto), dto);
  624. return page;
  625. }
  626. @Override
  627. public IPage<NewsPageVo> receiptBox(NewsPageDto dto) {
  628. dto.setLoginId(StpUtil.getLoginIdAsLong());
  629. IPage<NewsPageVo> page = newsMapper.receiptBox(ConventPage.getPage(dto), dto);
  630. return page;
  631. }
  632. @Override
  633. @Transactional(rollbackFor = Exception.class)
  634. public boolean update(UpdateNewsDto updateNewsDto) {
  635. News news = BeanUtil.toBean(updateNewsDto, News.class);
  636. newsMapper.updateById(news);
  637. newsAppendixMapper.delete(Wrappers.lambdaQuery(NewsAppendix.class).eq(NewsAppendix::getNewsId, news.getId()));
  638. if (updateNewsDto.getAppendixList() != null) {
  639. for (AddNewsAppendixDto appendixDto : updateNewsDto.getAppendixList()) {
  640. NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class);
  641. newsAppendix.setNewsId(news.getId());
  642. newsAppendixMapper.insert(newsAppendix);
  643. }
  644. }
  645. if (updateNewsDto.getRelationList() != null) {
  646. newsRelationMapper.delete(Wrappers.lambdaQuery(NewsRelation.class).eq(NewsRelation::getNewsId, news.getId()));
  647. newsRelationConfigMapper.delete(Wrappers.lambdaQuery(NewsRelationConfig.class).eq(NewsRelationConfig::getNewsId, news.getId()));
  648. for (AddNewsRelationDto relationDto : updateNewsDto.getRelationList()) {
  649. NewsRelationConfig newsRelationConfig = BeanUtil.toBean(relationDto, NewsRelationConfig.class);
  650. newsRelationConfig.setNewsId(news.getId());
  651. newsRelationConfigMapper.insert(newsRelationConfig);
  652. NewsRelation newsRelation = BeanUtil.toBean(relationDto, NewsRelation.class);
  653. newsRelation.setNewsId(news.getId());
  654. newsRelation.setReadMark(0);
  655. if (relationDto.getRelationType() == 1) {
  656. // 获取部门下的人员添加
  657. } else {
  658. newsRelation.setUserId(relationDto.getRelationId());
  659. newsRelationMapper.insert(newsRelation);
  660. }
  661. }
  662. }
  663. return true;
  664. }
  665. /**
  666. * 设置新闻阅读权限
  667. */
  668. @Override
  669. @Transactional(rollbackFor = Exception.class)
  670. public boolean updateRelation(UpdateNewsRelationDto updateRelationDto) {
  671. if (updateRelationDto.getRelationList() != null) {
  672. for (NewsRelationConfigDto newsRelationConfigDto : updateRelationDto.getRelationList()) {
  673. NewsRelationConfig newsRelationConfig = new NewsRelationConfig();
  674. newsRelationConfig.setNewsId(updateRelationDto.getId());
  675. newsRelationConfig.setRelationId(newsRelationConfigDto.getRelationId());
  676. newsRelationConfig.setRelationName(newsRelationConfigDto.getRelationName());
  677. newsRelationConfig.setRelationType(updateRelationDto.getRelationType());
  678. newsRelationConfigMapper.insert(newsRelationConfig);
  679. // 部门
  680. if (updateRelationDto.getRelationType() == 1) {
  681. List<UserDeptRelation> userDeptRelationList = userDeptRelationMapper.selectList(Wrappers.<UserDeptRelation>query().lambda()
  682. .eq(UserDeptRelation::getDeptId, newsRelationConfigDto.getRelationId()));
  683. for (UserDeptRelation userDeptRelation : userDeptRelationList) {
  684. NewsRelation newsRelation = new NewsRelation();
  685. newsRelation.setUserId(userDeptRelation.getUserId());
  686. newsRelation.setNewsId(updateRelationDto.getId());
  687. newsRelation.setReadMark(0);
  688. newsRelationMapper.insert(newsRelation);
  689. }
  690. }
  691. // 人员
  692. if (updateRelationDto.getRelationType() == 2) {
  693. NewsRelation newsRelation = new NewsRelation();
  694. newsRelation.setUserId(newsRelationConfigDto.getRelationId());
  695. newsRelation.setNewsId(updateRelationDto.getId());
  696. newsRelation.setReadMark(0);
  697. newsRelationMapper.insert(newsRelation);
  698. }
  699. // 班级
  700. if (updateRelationDto.getRelationType() == 3) {
  701. List<BaseStudentSchoolRoll> baseStudentSchoolRollList = baseStudentSchoolRollMapper.selectList(Wrappers.<BaseStudentSchoolRoll>query().lambda()
  702. .eq(BaseStudentSchoolRoll::getClassId, newsRelationConfigDto.getRelationId()));
  703. for (BaseStudentSchoolRoll baseStudentSchoolRoll : baseStudentSchoolRollList) {
  704. NewsRelation newsRelation = new NewsRelation();
  705. newsRelation.setUserId(baseStudentSchoolRoll.getUserId());
  706. newsRelation.setNewsId(updateRelationDto.getId());
  707. newsRelation.setReadMark(0);
  708. newsRelationMapper.insert(newsRelation);
  709. }
  710. }
  711. }
  712. }
  713. return true;
  714. }
  715. @Override
  716. @Transactional(rollbackFor = Exception.class)
  717. public boolean deleteRelation(DeleteNewsRelationDto deleteNewsRelationDto) {
  718. if (deleteNewsRelationDto.getRelationId() != null) {
  719. List<NewsRelationConfig> newsRelationConfigList = newsRelationConfigMapper.selectList(Wrappers.<NewsRelationConfig>query().lambda()
  720. .eq(NewsRelationConfig::getNewsId, deleteNewsRelationDto.getNewsId())
  721. .in(NewsRelationConfig::getId, deleteNewsRelationDto.getRelationId())
  722. );
  723. for (NewsRelationConfig newsRelationConfig : newsRelationConfigList) {
  724. // 部门
  725. if (newsRelationConfig.getRelationType() == 1) {
  726. List<UserDeptRelation> userDeptRelationList = userDeptRelationMapper.selectList(Wrappers.<UserDeptRelation>query().lambda()
  727. .eq(UserDeptRelation::getDeptId, newsRelationConfig.getRelationId()));
  728. List<Long> userIdList = userDeptRelationList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList());
  729. newsRelationMapper.delete(Wrappers.<NewsRelation>query().lambda()
  730. .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId())
  731. .in(NewsRelation::getUserId, userIdList));
  732. }
  733. // 人员
  734. if (newsRelationConfig.getRelationType() == 2) {
  735. newsRelationMapper.delete(Wrappers.<NewsRelation>query().lambda()
  736. .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId())
  737. .eq(NewsRelation::getUserId, newsRelationConfig.getRelationId()));
  738. }
  739. // 班级
  740. if (newsRelationConfig.getRelationType() == 3) {
  741. List<BaseStudentSchoolRoll> baseStudentSchoolRollList = baseStudentSchoolRollMapper.selectList(Wrappers.<BaseStudentSchoolRoll>query().lambda()
  742. .eq(BaseStudentSchoolRoll::getClassId, newsRelationConfig.getRelationId()));
  743. List<Long> userIdList = baseStudentSchoolRollList.stream().map(BaseStudentSchoolRoll::getUserId).collect(Collectors.toList());
  744. newsRelationMapper.delete(Wrappers.<NewsRelation>query().lambda()
  745. .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId())
  746. .in(NewsRelation::getUserId, userIdList));
  747. }
  748. }
  749. newsRelationConfigMapper.deleteBatchIds(deleteNewsRelationDto.getRelationId());
  750. }
  751. return true;
  752. }
  753. @Override
  754. @Transactional(rollbackFor = Exception.class)
  755. public boolean delete(List<Long> ids) {
  756. newsMapper.deleteBatchIds(ids);
  757. return true;
  758. }
  759. @Override
  760. public boolean SendMessage(Long id) {
  761. try {
  762. News news = newsMapper.selectById(id);
  763. Department department = departmentMapper.selectById(news.getSendDeptId());
  764. if (news.getSendRange() == 1) {
  765. List<User> userList = userMapper.selectList(Wrappers.<User>query().lambda().isNotNull(User::getOpenId).ne(User::getOpenId, ""));
  766. if (userList.size() > 0) {
  767. for (User user : userList) {
  768. WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
  769. weChatSendMessageDto.setUserId(user.getOpenId());
  770. weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo");
  771. weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/message/notice/detail?id={}", commonPropertiesConfig.getDomainApp(), id));
  772. weChatSendMessageDto.setMsgId(id.toString());
  773. JSONObject data = new JSONObject();
  774. JSONObject data1 = new JSONObject();
  775. String hValue = news.getFullHead().replace("“", "").replace("”", "").replace("\"", "").replace("\n", "").replace("\r", "").replace("\t", "");
  776. data1.put("value", hValue);
  777. data.put("thing23", data1);
  778. JSONObject data2 = new JSONObject();
  779. data2.put("value", (department == null) ? "重庆铜梁职业教育中心" : department.getName());
  780. data.put("thing29", data2);
  781. JSONObject data3 = new JSONObject();
  782. data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(), "yyyy-MM-dd HH:mm:ss"));
  783. data.put("time17", data3);
  784. weChatSendMessageDto.setContent(data);
  785. weChatService.sendTemplateMessage(weChatSendMessageDto);
  786. }
  787. }
  788. } else {
  789. List<NewsRelationVo> newsRelationVoList = newsRelationMapper.selectJoinList(NewsRelationVo.class,
  790. new MPJLambdaWrapper<NewsRelation>().distinct()
  791. .eq(NewsRelation::getNewsId, id)
  792. .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
  793. .innerJoin(User.class, onWrapper -> onWrapper.eq(NewsRelation::getUserId, User::getId).isNotNull(User::getOpenId).ne(User::getOpenId, ""))
  794. .selectAs(User::getOpenId, NewsRelationVo::getUserName)
  795. );
  796. if (newsRelationVoList.size() > 0) {
  797. for (NewsRelationVo newsRelationVo : newsRelationVoList) {
  798. WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
  799. weChatSendMessageDto.setUserId(newsRelationVo.getUserName());
  800. weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4On6BJhR92UZ00eod2-6IcGo");
  801. weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/message/notice/detail?id={}", commonPropertiesConfig.getDomainApp(), id));
  802. weChatSendMessageDto.setMsgId(id.toString());
  803. JSONObject data = new JSONObject();
  804. JSONObject data1 = new JSONObject();
  805. data1.put("value", news.getFullHead());
  806. data.put("thing23", data1);
  807. JSONObject data2 = new JSONObject();
  808. data2.put("value", (department == null) ? "重庆铜梁职业教育中心" : department.getName());
  809. data.put("thing29", data2);
  810. JSONObject data3 = new JSONObject();
  811. data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(), "yyyy-MM-dd HH:mm:ss"));
  812. data.put("time17", data3);
  813. weChatSendMessageDto.setContent(data);
  814. weChatService.sendTemplateMessage(weChatSendMessageDto);
  815. }
  816. }
  817. }
  818. } catch (Exception ex) {
  819. }
  820. return true;
  821. }
  822. @Override
  823. public boolean dataHandle(Long id) {
  824. CompletableFuture.runAsync(() -> {
  825. this.SendMessage(id);
  826. });
  827. return true;
  828. }
  829. }