NewsServiceImpl.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330
  1. package com.xjrsoft.module.oa.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5. import com.github.yulichang.base.MPJBaseServiceImpl;
  6. import com.github.yulichang.toolkit.MPJWrappers;
  7. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  8. import com.xjrsoft.common.enums.EnabledMark;
  9. import com.xjrsoft.common.utils.LocalDateTimeUtil;
  10. import com.xjrsoft.common.utils.VoToColumnUtil;
  11. import com.xjrsoft.module.authority.entity.DataAuthConfig;
  12. import com.xjrsoft.module.oa.dto.*;
  13. import com.xjrsoft.module.oa.entity.News;
  14. import com.xjrsoft.module.oa.entity.NewsAppendix;
  15. import com.xjrsoft.module.oa.entity.NewsRelation;
  16. import com.xjrsoft.module.oa.entity.NewsRelationConfig;
  17. import com.xjrsoft.module.oa.mapper.NewsAppendixMapper;
  18. import com.xjrsoft.module.oa.mapper.NewsMapper;
  19. import com.xjrsoft.module.oa.mapper.NewsRelationConfigMapper;
  20. import com.xjrsoft.module.oa.mapper.NewsRelationMapper;
  21. import com.xjrsoft.module.oa.service.INewsService;
  22. import com.xjrsoft.module.oa.vo.NewsAppendixVo;
  23. import com.xjrsoft.module.oa.vo.NewsRelationVo;
  24. import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
  25. import com.xjrsoft.module.organization.entity.User;
  26. import com.xjrsoft.module.organization.entity.UserDeptRelation;
  27. import com.xjrsoft.module.organization.entity.UserRoleRelation;
  28. import com.xjrsoft.module.organization.mapper.UserDeptRelationMapper;
  29. import com.xjrsoft.module.organization.mapper.UserMapper;
  30. import com.xjrsoft.module.organization.service.WeChatService;
  31. import com.xjrsoft.module.student.entity.BaseStudentContact;
  32. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  33. import com.xjrsoft.module.student.entity.BaseStudentUser;
  34. import com.xjrsoft.module.student.mapper.BaseStudentSchoolRollMapper;
  35. import lombok.AllArgsConstructor;
  36. import org.springframework.stereotype.Service;
  37. import org.springframework.transaction.annotation.Transactional;
  38. import java.util.List;
  39. import java.util.stream.Collectors;
  40. /**
  41. * <p>
  42. * 新闻中心表 服务实现类
  43. * </p>
  44. *
  45. * @author zlf
  46. * @since 2022-06-16
  47. */
  48. @Service
  49. @AllArgsConstructor
  50. public class NewsServiceImpl extends MPJBaseServiceImpl<NewsMapper, News> implements INewsService {
  51. private final NewsMapper newsMapper;
  52. private final NewsAppendixMapper newsAppendixMapper;
  53. private final NewsRelationMapper newsRelationMapper;
  54. private final NewsRelationConfigMapper newsRelationConfigMapper;
  55. private final UserDeptRelationMapper userDeptRelationMapper;
  56. private final BaseStudentSchoolRollMapper baseStudentSchoolRollMapper;
  57. private final com.xjrsoft.module.organization.service.WeChatService weChatService;
  58. private final UserMapper userMapper;
  59. @Override
  60. @Transactional(rollbackFor = Exception.class)
  61. public Long add(AddNewsDto addNewsDto) {
  62. News news = BeanUtil.toBean(addNewsDto, News.class);
  63. news.setEnabledMark(EnabledMark.ENABLED.getCode());
  64. newsMapper.insert(news);
  65. if (addNewsDto.getAppendixList() != null) {
  66. for (AddNewsAppendixDto appendixDto : addNewsDto.getAppendixList()) {
  67. NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class);
  68. newsAppendix.setNewsId(news.getId());
  69. newsAppendixMapper.insert(newsAppendix);
  70. }
  71. }
  72. if (addNewsDto.getRelationList() != null) {
  73. for (AddNewsRelationDto relationDto : addNewsDto.getRelationList()) {
  74. NewsRelationConfig newsRelationConfig = BeanUtil.toBean(relationDto, NewsRelationConfig.class);
  75. newsRelationConfig.setNewsId(news.getId());
  76. newsRelationConfigMapper.insert(newsRelationConfig);
  77. NewsRelation newsRelation = BeanUtil.toBean(relationDto, NewsRelation.class);
  78. newsRelation.setNewsId(news.getId());
  79. newsRelation.setReadMark(0);
  80. if (relationDto.getRelationType() == 1) {
  81. // 获取部门下的人员添加
  82. } else {
  83. newsRelation.setUserId(relationDto.getRelationId());
  84. newsRelationMapper.insert(newsRelation);
  85. }
  86. }
  87. }
  88. SendMessage(news.getId());
  89. return news.getId();
  90. }
  91. @Override
  92. @Transactional(rollbackFor = Exception.class)
  93. public boolean update(UpdateNewsDto updateNewsDto) {
  94. News news = BeanUtil.toBean(updateNewsDto, News.class);
  95. newsMapper.updateById(news);
  96. newsAppendixMapper.delete(Wrappers.lambdaQuery(NewsAppendix.class).eq(NewsAppendix::getNewsId,news.getId()));
  97. if (updateNewsDto.getAppendixList() != null) {
  98. for (AddNewsAppendixDto appendixDto : updateNewsDto.getAppendixList()) {
  99. NewsAppendix newsAppendix = BeanUtil.toBean(appendixDto, NewsAppendix.class);
  100. newsAppendix.setNewsId(news.getId());
  101. newsAppendixMapper.insert(newsAppendix);
  102. }
  103. }
  104. if(updateNewsDto.getRelationList()!=null) {
  105. newsRelationMapper.delete(Wrappers.lambdaQuery(NewsRelation.class).eq(NewsRelation::getNewsId, news.getId()));
  106. newsRelationConfigMapper.delete(Wrappers.lambdaQuery(NewsRelationConfig.class).eq(NewsRelationConfig::getNewsId, news.getId()));
  107. for (AddNewsRelationDto relationDto : updateNewsDto.getRelationList()) {
  108. NewsRelationConfig newsRelationConfig = BeanUtil.toBean(relationDto, NewsRelationConfig.class);
  109. newsRelationConfig.setNewsId(news.getId());
  110. newsRelationConfigMapper.insert(newsRelationConfig);
  111. NewsRelation newsRelation = BeanUtil.toBean(relationDto, NewsRelation.class);
  112. newsRelation.setNewsId(news.getId());
  113. newsRelation.setReadMark(0);
  114. if (relationDto.getRelationType() == 1) {
  115. // 获取部门下的人员添加
  116. } else {
  117. newsRelation.setUserId(relationDto.getRelationId());
  118. newsRelationMapper.insert(newsRelation);
  119. }
  120. }
  121. }
  122. return true;
  123. }
  124. /**
  125. * 设置新闻阅读权限
  126. */
  127. @Override
  128. @Transactional(rollbackFor = Exception.class)
  129. public boolean updateRelation(UpdateNewsRelationDto updateRelationDto) {
  130. if (updateRelationDto.getRelationList() != null) {
  131. for (NewsRelationConfigDto newsRelationConfigDto : updateRelationDto.getRelationList()) {
  132. NewsRelationConfig newsRelationConfig = new NewsRelationConfig();
  133. newsRelationConfig.setNewsId(updateRelationDto.getId());
  134. newsRelationConfig.setRelationId(newsRelationConfigDto.getRelationId());
  135. newsRelationConfig.setRelationName(newsRelationConfigDto.getRelationName());
  136. newsRelationConfig.setRelationType(updateRelationDto.getRelationType());
  137. newsRelationConfigMapper.insert(newsRelationConfig);
  138. // 部门
  139. if (updateRelationDto.getRelationType() == 1) {
  140. List<UserDeptRelation> userDeptRelationList = userDeptRelationMapper.selectList(Wrappers.<UserDeptRelation>query().lambda()
  141. .eq(UserDeptRelation::getDeptId, newsRelationConfigDto.getRelationId()));
  142. for (UserDeptRelation userDeptRelation : userDeptRelationList) {
  143. NewsRelation newsRelation = new NewsRelation();
  144. newsRelation.setUserId(userDeptRelation.getUserId());
  145. newsRelation.setNewsId(updateRelationDto.getId());
  146. newsRelation.setReadMark(0);
  147. newsRelationMapper.insert(newsRelation);
  148. }
  149. }
  150. // 人员
  151. if (updateRelationDto.getRelationType() == 2) {
  152. NewsRelation newsRelation = new NewsRelation();
  153. newsRelation.setUserId(newsRelationConfigDto.getRelationId());
  154. newsRelation.setNewsId(updateRelationDto.getId());
  155. newsRelation.setReadMark(0);
  156. newsRelationMapper.insert(newsRelation);
  157. }
  158. // 班级
  159. if (updateRelationDto.getRelationType() == 3) {
  160. List<BaseStudentSchoolRoll> baseStudentSchoolRollList = baseStudentSchoolRollMapper.selectList(Wrappers.<BaseStudentSchoolRoll>query().lambda()
  161. .eq(BaseStudentSchoolRoll::getClassId, newsRelationConfigDto.getRelationId()));
  162. for (BaseStudentSchoolRoll baseStudentSchoolRoll : baseStudentSchoolRollList) {
  163. NewsRelation newsRelation = new NewsRelation();
  164. newsRelation.setUserId(baseStudentSchoolRoll.getUserId());
  165. newsRelation.setNewsId(updateRelationDto.getId());
  166. newsRelation.setReadMark(0);
  167. newsRelationMapper.insert(newsRelation);
  168. }
  169. }
  170. }
  171. }
  172. return true;
  173. }
  174. @Override
  175. @Transactional(rollbackFor = Exception.class)
  176. public boolean deleteRelation(DeleteNewsRelationDto deleteNewsRelationDto) {
  177. if (deleteNewsRelationDto.getRelationId() != null) {
  178. List<NewsRelationConfig> newsRelationConfigList = newsRelationConfigMapper.selectList(Wrappers.<NewsRelationConfig>query().lambda()
  179. .eq(NewsRelationConfig::getNewsId, deleteNewsRelationDto.getNewsId())
  180. .in(NewsRelationConfig::getId, deleteNewsRelationDto.getRelationId())
  181. );
  182. for (NewsRelationConfig newsRelationConfig : newsRelationConfigList) {
  183. // 部门
  184. if (newsRelationConfig.getRelationType() == 1) {
  185. List<UserDeptRelation> userDeptRelationList = userDeptRelationMapper.selectList(Wrappers.<UserDeptRelation>query().lambda()
  186. .eq(UserDeptRelation::getDeptId, newsRelationConfig.getRelationId()));
  187. List<Long> userIdList = userDeptRelationList.stream().map(UserDeptRelation::getUserId).collect(Collectors.toList());
  188. newsRelationMapper.delete(Wrappers.<NewsRelation>query().lambda()
  189. .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId())
  190. .in(NewsRelation::getUserId, userIdList));
  191. }
  192. // 人员
  193. if (newsRelationConfig.getRelationType() == 2) {
  194. newsRelationMapper.delete(Wrappers.<NewsRelation>query().lambda()
  195. .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId())
  196. .eq(NewsRelation::getUserId, newsRelationConfig.getRelationId()));
  197. }
  198. // 班级
  199. if (newsRelationConfig.getRelationType() == 3) {
  200. List<BaseStudentSchoolRoll> baseStudentSchoolRollList = baseStudentSchoolRollMapper.selectList(Wrappers.<BaseStudentSchoolRoll>query().lambda()
  201. .eq(BaseStudentSchoolRoll::getClassId, newsRelationConfig.getRelationId()));
  202. List<Long> userIdList = baseStudentSchoolRollList.stream().map(BaseStudentSchoolRoll::getUserId).collect(Collectors.toList());
  203. newsRelationMapper.delete(Wrappers.<NewsRelation>query().lambda()
  204. .eq(NewsRelation::getNewsId, deleteNewsRelationDto.getNewsId())
  205. .in(NewsRelation::getUserId, userIdList));
  206. }
  207. }
  208. newsRelationConfigMapper.deleteBatchIds(deleteNewsRelationDto.getRelationId());
  209. }
  210. return true;
  211. }
  212. @Override
  213. @Transactional(rollbackFor = Exception.class)
  214. public boolean delete(List<Long> ids) {
  215. newsMapper.deleteBatchIds(ids);
  216. return true;
  217. }
  218. @Override
  219. public boolean SendMessage(Long id) {
  220. News news = newsMapper.selectById(id);
  221. if (news.getSendRange() == 1) {
  222. List<User> userList = userMapper.selectList(Wrappers.<User>query().lambda().isNotNull(User::getOpenId).ne(User::getOpenId,""));
  223. if(userList.size()>0) {
  224. for (User user : userList) {
  225. WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
  226. weChatSendMessageDto.setUserId(user.getOpenId());
  227. weChatSendMessageDto.setTemplateId("sHsmz7LRj7HLd7GSTS3r2uKMhE2f1iDAW15RqSK_6KM");
  228. weChatSendMessageDto.setUrl("https://zhxy.cqtlzjzx.com/app/#/pages/message/notice/detail?id="+id);
  229. weChatSendMessageDto.setMsgId(id.toString());
  230. JSONObject data = new JSONObject();
  231. JSONObject data1 = new JSONObject();
  232. data1.put("value", news.getFullHead());
  233. data.put("thing2", data1);
  234. JSONObject data2 = new JSONObject();
  235. data2.put("value", news.getAuthorName());
  236. data.put("phrase5", data2);
  237. JSONObject data3 = new JSONObject();
  238. data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(),"yyyy-MM-dd HH:mm:ss") );
  239. data.put("time3", data3);
  240. weChatSendMessageDto.setContent(data);
  241. weChatService.sendTemplateMessage(weChatSendMessageDto);
  242. }
  243. }
  244. } else {
  245. List<NewsRelationVo> newsRelationVoList = newsRelationMapper.selectJoinList(NewsRelationVo.class,
  246. new MPJLambdaWrapper<NewsRelation>().distinct()
  247. .eq(NewsRelation::getNewsId, id)
  248. .select(NewsRelation.class, x -> VoToColumnUtil.fieldsToColumns(NewsRelationVo.class).contains(x.getProperty()))
  249. .innerJoin(User.class, onWrapper -> onWrapper.eq(NewsRelation::getUserId, User::getId).isNotNull(User::getOpenId).ne(User::getOpenId,""))
  250. .selectAs(User::getOpenId, NewsRelationVo::getUserName)
  251. );
  252. if (newsRelationVoList.size() > 0) {
  253. for (NewsRelationVo newsRelationVo : newsRelationVoList) {
  254. WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
  255. weChatSendMessageDto.setUserId(newsRelationVo.getUserName());
  256. weChatSendMessageDto.setTemplateId("sHsmz7LRj7HLd7GSTS3r2uKMhE2f1iDAW15RqSK_6KM");
  257. weChatSendMessageDto.setUrl("https://zhxy.cqtlzjzx.com/app/#/pages/message/notice/detail?id="+id);
  258. weChatSendMessageDto.setMsgId(id.toString());
  259. JSONObject data = new JSONObject();
  260. JSONObject data1 = new JSONObject();
  261. data1.put("value", news.getFullHead());
  262. data.put("thing2", data1);
  263. JSONObject data2 = new JSONObject();
  264. data2.put("value", news.getAuthorName());
  265. data.put("phrase5", data2);
  266. JSONObject data3 = new JSONObject();
  267. data3.put("value", LocalDateTimeUtil.format(news.getReleaseTime(),"yyyy-MM-dd HH:mm:ss") );
  268. data.put("time3", data3);
  269. weChatSendMessageDto.setContent(data);
  270. weChatService.sendTemplateMessage(weChatSendMessageDto);
  271. }
  272. }
  273. }
  274. return true;
  275. }
  276. }