MaterialTaskServiceImpl.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512
  1. package com.xjrsoft.module.material.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import cn.hutool.extra.spring.SpringUtil;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  7. import com.fasterxml.jackson.core.type.TypeReference;
  8. import com.github.yulichang.base.MPJBaseServiceImpl;
  9. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  10. import com.xjrsoft.common.constant.GlobalConstant;
  11. import com.xjrsoft.common.enums.DeleteMark;
  12. import com.xjrsoft.common.enums.MaterialCategoryEnum;
  13. import com.xjrsoft.common.utils.RedisUtil;
  14. import com.xjrsoft.common.utils.VoToColumnUtil;
  15. import com.xjrsoft.config.CommonPropertiesConfig;
  16. import com.xjrsoft.module.concat.service.IXjrUserService;
  17. import com.xjrsoft.module.form.dto.FormExecuteAddOrUpdateDto;
  18. import com.xjrsoft.module.form.service.IFormExecuteService;
  19. import com.xjrsoft.module.material.dto.AddMaterialTaskAppendixDto;
  20. import com.xjrsoft.module.material.dto.AddMaterialTaskDto;
  21. import com.xjrsoft.module.material.dto.MaterialAssignUserDto;
  22. import com.xjrsoft.module.material.dto.MaterialTaskAssignAppendixDto;
  23. import com.xjrsoft.module.material.dto.MaterialTaskAssignListDto;
  24. import com.xjrsoft.module.material.entity.MaterialTask;
  25. import com.xjrsoft.module.material.entity.MaterialTaskAppendix;
  26. import com.xjrsoft.module.material.entity.MaterialTaskAssign;
  27. import com.xjrsoft.module.material.entity.MaterialType;
  28. import com.xjrsoft.module.material.entity.MaterialTypeAssign;
  29. import com.xjrsoft.module.material.mapper.MaterialTaskAppendixMapper;
  30. import com.xjrsoft.module.material.mapper.MaterialTaskAssignMapper;
  31. import com.xjrsoft.module.material.mapper.MaterialTaskMapper;
  32. import com.xjrsoft.module.material.service.IMaterialTaskService;
  33. import com.xjrsoft.module.material.service.IMaterialTypeService;
  34. import com.xjrsoft.module.material.vo.MaterialTaskAssignListVo;
  35. import com.xjrsoft.module.material.vo.MaterialTaskAssignUserVo;
  36. import com.xjrsoft.module.material.vo.MaterialTaskVo;
  37. import com.xjrsoft.module.material.vo.MaterialTypeVo;
  38. import com.xjrsoft.module.organization.dto.WeChatSendMessageDto;
  39. import com.xjrsoft.module.organization.entity.Department;
  40. import com.xjrsoft.module.organization.entity.User;
  41. import com.xjrsoft.module.organization.entity.UserDeptRelation;
  42. import com.xjrsoft.module.organization.entity.UserRoleRelation;
  43. import com.xjrsoft.module.organization.service.IUserService;
  44. import com.xjrsoft.module.organization.service.IWeChatService;
  45. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  46. import com.xjrsoft.module.system.entity.DictionaryDetail;
  47. import com.xjrsoft.module.teacher.entity.XjrUser;
  48. import com.xjrsoft.module.teacher.vo.XjrUserVo;
  49. import lombok.AllArgsConstructor;
  50. import org.springframework.stereotype.Service;
  51. import org.springframework.transaction.annotation.Transactional;
  52. import java.time.LocalDate;
  53. import java.util.*;
  54. import java.util.concurrent.CompletableFuture;
  55. import java.util.stream.Collectors;
  56. /**
  57. * @title: 材料提交任务
  58. * @Author baicai
  59. * @Date: 2023-10-31
  60. * @Version 1.0
  61. */
  62. @Service
  63. @AllArgsConstructor
  64. public class MaterialTaskServiceImpl extends MPJBaseServiceImpl<MaterialTaskMapper, MaterialTask> implements IMaterialTaskService {
  65. private final MaterialTaskMapper materialTaskMaterialTaskMapper;
  66. private final MaterialTaskAssignMapper materialTaskMaterialTaskAssignMapper;
  67. private final MaterialTaskAppendixMapper materialTaskMaterialTaskAppendixMapper;
  68. private final IMaterialTypeService materialTypeService;
  69. private final IWeChatService weChatService;
  70. private final IXjrUserService xjrUserService;
  71. private final IFormExecuteService formExecuteService;
  72. @Override
  73. @Transactional(rollbackFor = Exception.class)
  74. public Long add(AddMaterialTaskDto dto) {
  75. MaterialTask materialTask = BeanUtil.toBean(dto, MaterialTask.class);
  76. //梳理提交人
  77. Map<Long, MaterialTaskAssign> materialTaskAssignMap = new HashMap<>();
  78. for (MaterialAssignUserDto materialAssignUserDto : dto.getUserList()){
  79. if(materialAssignUserDto.getUserType() == 1){
  80. List<XjrUserVo> xjrUserVos = xjrUserService.selectJoinList(XjrUserVo.class,
  81. new MPJLambdaWrapper<XjrUser>()
  82. .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, XjrUser::getId)
  83. .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, XjrUser::getId)
  84. .eq(UserDeptRelation::getDeptId, materialAssignUserDto.getUserId())
  85. .eq(UserRoleRelation::getRoleId, 2)
  86. .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
  87. );
  88. for (XjrUserVo xjrUserVo : xjrUserVos) {
  89. materialTaskAssignMap.put(xjrUserVo.getId(), new MaterialTaskAssign(){{
  90. setUserId(xjrUserVo.getId());
  91. setUserType(1);
  92. setUserNumber(xjrUserVo.getUserName());
  93. setStatus(1);
  94. setExecutiveStatus(1);
  95. setSendMessage(dto.getSendMessage());
  96. }});
  97. }
  98. }else if(materialAssignUserDto.getUserType() == 2){
  99. List<XjrUserVo> xjrUserVos = xjrUserService.selectJoinList(XjrUserVo.class,
  100. new MPJLambdaWrapper<XjrUser>()
  101. .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, XjrUser::getId)
  102. .eq(BaseStudentSchoolRoll::getClassId, materialAssignUserDto.getUserId())
  103. .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
  104. );
  105. for (XjrUserVo xjrUserVo : xjrUserVos) {
  106. materialTaskAssignMap.put(xjrUserVo.getId(), new MaterialTaskAssign(){{
  107. setUserId(xjrUserVo.getId());
  108. setUserType(2);
  109. setUserNumber(xjrUserVo.getUserName());
  110. setStatus(1);
  111. setExecutiveStatus(1);
  112. setSendMessage(dto.getSendMessage());
  113. }});
  114. }
  115. }else if(materialAssignUserDto.getUserType() == 3){
  116. List<MaterialTaskAssignUserVo> materialTaskAssignUserVoList = xjrUserService.selectJoinList(MaterialTaskAssignUserVo.class,
  117. new MPJLambdaWrapper<XjrUser>()
  118. .select(XjrUser::getId)
  119. .selectAs(XjrUser::getUserName, MaterialTaskAssignUserVo::getUserName)
  120. .selectAs(UserRoleRelation::getRoleId, MaterialTaskAssignUserVo::getRoleId)
  121. .leftJoin(UserRoleRelation.class, UserRoleRelation::getUserId, XjrUser::getId)
  122. .eq(XjrUser::getId, materialAssignUserDto.getUserId())
  123. .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
  124. );
  125. if(materialTaskAssignUserVoList != null && !materialTaskAssignUserVoList.isEmpty()){
  126. MaterialTaskAssignUserVo materialTaskAssignUserVo = materialTaskAssignUserVoList.get(0);
  127. materialTaskAssignMap.put(materialTaskAssignUserVo.getId(), new MaterialTaskAssign(){{
  128. setUserId(materialAssignUserDto.getUserId());
  129. setUserType(materialTaskAssignUserVo.getRoleId() == 3 ? 2 : 1);
  130. setUserNumber(materialTaskAssignUserVo.getUserName());
  131. setStatus(1);
  132. setExecutiveStatus(1);
  133. setSendMessage(dto.getSendMessage());
  134. }});
  135. }
  136. }
  137. }
  138. List<MaterialTaskAssign> materialTaskAssignList = new ArrayList<>(materialTaskAssignMap.values());
  139. //新增任务
  140. materialTask.setStatus(2);
  141. if(dto.getUserList() != null && !dto.getUserList().isEmpty()){
  142. materialTask.setAssignPerson(materialTaskAssignList.size());
  143. }
  144. materialTaskMaterialTaskMapper.insert(materialTask);
  145. //新增任务人
  146. for(MaterialTaskAssign materialTaskAssign : materialTaskAssignList){
  147. materialTaskAssign.setMaterialTaskId(materialTask.getId());
  148. materialTaskMaterialTaskAssignMapper.insert(materialTaskAssign);
  149. }
  150. // materialTaskMaterialTaskMapper.insert(materialTask);
  151. // if (materialTask.getMaterialTaskAssignList() != null && materialTask.getMaterialTaskAssignList().size() > 0) {
  152. // for (MaterialTaskAssign materialTaskAssign : materialTask.getMaterialTaskAssignList()) {
  153. // materialTaskAssign.setMaterialTaskId(materialTask.getId());
  154. // materialTaskMaterialTaskAssignMapper.insert(materialTaskAssign);
  155. // }
  156. // }
  157. // for (MaterialTaskAppendix materialTaskAppendix : materialTask.getMaterialTaskAppendixList()) {
  158. // materialTaskAppendix.setMaterialTaskId(materialTask.getId());
  159. // materialTaskMaterialTaskAppendixMapper.insert(materialTaskAppendix);
  160. // }
  161. return materialTask.getId();
  162. }
  163. @Override
  164. @Transactional(rollbackFor = Exception.class)
  165. public Boolean update(MaterialTask materialTask) {
  166. materialTaskMaterialTaskMapper.updateById(materialTask);
  167. //********************************* MaterialTaskAssign 增删改 开始 *******************************************/
  168. {
  169. if (materialTask.getMaterialTaskAssignList() != null && materialTask.getMaterialTaskAssignList().size() > 0) {
  170. // 查出所有子级的id
  171. List<MaterialTaskAssign> materialTaskAssignList = materialTaskMaterialTaskAssignMapper.selectList(Wrappers.lambdaQuery(MaterialTaskAssign.class).eq(MaterialTaskAssign::getMaterialTaskId, materialTask.getId()).select(MaterialTaskAssign::getId));
  172. List<Long> materialTaskAssignIds = materialTaskAssignList.stream().map(MaterialTaskAssign::getId).collect(Collectors.toList());
  173. //原有子表单 没有被删除的主键
  174. List<Long> materialTaskAssignOldIds = materialTask.getMaterialTaskAssignList().stream().map(MaterialTaskAssign::getId).filter(Objects::nonNull).collect(Collectors.toList());
  175. //找到需要删除的id
  176. List<Long> materialTaskAssignRemoveIds = materialTaskAssignIds.stream().filter(item -> !materialTaskAssignOldIds.contains(item)).collect(Collectors.toList());
  177. for (MaterialTaskAssign materialTaskAssign : materialTask.getMaterialTaskAssignList()) {
  178. //如果不等于空则修改
  179. if (materialTaskAssign.getId() != null) {
  180. materialTaskMaterialTaskAssignMapper.updateById(materialTaskAssign);
  181. }
  182. //如果等于空 则新增
  183. else {
  184. //已经不存在的id 删除
  185. materialTaskAssign.setMaterialTaskId(materialTask.getId());
  186. materialTaskMaterialTaskAssignMapper.insert(materialTaskAssign);
  187. }
  188. }
  189. //已经不存在的id 删除
  190. if (materialTaskAssignRemoveIds.size() > 0) {
  191. materialTaskMaterialTaskAssignMapper.deleteBatchIds(materialTaskAssignRemoveIds);
  192. }
  193. }
  194. }
  195. //********************************* MaterialTaskAssign 增删改 结束 *******************************************/
  196. //********************************* MaterialTaskAppendix 增删改 开始 *******************************************/
  197. {
  198. // 查出所有子级的id
  199. List<MaterialTaskAppendix> materialTaskAppendixList = materialTaskMaterialTaskAppendixMapper.selectList(Wrappers.lambdaQuery(MaterialTaskAppendix.class).eq(MaterialTaskAppendix::getMaterialTaskId, materialTask.getId()).select(MaterialTaskAppendix::getId));
  200. List<Long> materialTaskAppendixIds = materialTaskAppendixList.stream().map(MaterialTaskAppendix::getId).collect(Collectors.toList());
  201. //原有子表单 没有被删除的主键
  202. List<Long> materialTaskAppendixOldIds = materialTask.getMaterialTaskAppendixList().stream().map(MaterialTaskAppendix::getId).filter(Objects::nonNull).collect(Collectors.toList());
  203. //找到需要删除的id
  204. List<Long> materialTaskAppendixRemoveIds = materialTaskAppendixIds.stream().filter(item -> !materialTaskAppendixOldIds.contains(item)).collect(Collectors.toList());
  205. for (MaterialTaskAppendix materialTaskAppendix : materialTask.getMaterialTaskAppendixList()) {
  206. //如果不等于空则修改
  207. if (materialTaskAppendix.getId() != null) {
  208. materialTaskMaterialTaskAppendixMapper.updateById(materialTaskAppendix);
  209. }
  210. //如果等于空 则新增
  211. else {
  212. //已经不存在的id 删除
  213. materialTaskAppendix.setMaterialTaskId(materialTask.getId());
  214. materialTaskMaterialTaskAppendixMapper.insert(materialTaskAppendix);
  215. }
  216. }
  217. //已经不存在的id 删除
  218. if (materialTaskAppendixRemoveIds.size() > 0) {
  219. materialTaskMaterialTaskAppendixMapper.deleteBatchIds(materialTaskAppendixRemoveIds);
  220. }
  221. }
  222. //********************************* MaterialTaskAppendix 增删改 结束 *******************************************/
  223. return true;
  224. }
  225. @Override
  226. @Transactional(rollbackFor = Exception.class)
  227. public Boolean delete(List<Long> ids) {
  228. materialTaskMaterialTaskMapper.deleteBatchIds(ids);
  229. materialTaskMaterialTaskAssignMapper.delete(Wrappers.lambdaQuery(MaterialTaskAssign.class).in(MaterialTaskAssign::getMaterialTaskId, ids));
  230. materialTaskMaterialTaskAppendixMapper.delete(Wrappers.lambdaQuery(MaterialTaskAppendix.class).in(MaterialTaskAppendix::getMaterialTaskId, ids));
  231. return true;
  232. }
  233. @Override
  234. @Transactional(rollbackFor = Exception.class)
  235. public Boolean submited(MaterialTaskAssignAppendixDto materialTaskAssignAppendixDto) {
  236. if(materialTaskAssignAppendixDto.getMaterialCategory().equals(MaterialCategoryEnum.MT0001.getCode())){
  237. if (materialTaskAssignAppendixDto.getMaterialTaskAppendixList() != null && materialTaskAssignAppendixDto.getMaterialTaskAppendixList().size() > 0) {
  238. MaterialTaskAssign materialTaskAssign = materialTaskMaterialTaskAssignMapper.selectByIdDeep(materialTaskAssignAppendixDto.getMaterialTaskAssignId());
  239. Integer oldStatus = materialTaskAssign.getStatus();
  240. materialTaskAssign.setStatus(2);
  241. if (oldStatus == 1) {
  242. MaterialTask materialTask = materialTaskMaterialTaskMapper.selectByIdDeep(materialTaskAssign.getMaterialTaskId());
  243. LocalDate requiredCompleteTime = materialTask.getRequiredCompleteTime();
  244. LocalDate today = LocalDate.now();
  245. int comparison = today.compareTo(requiredCompleteTime);
  246. if (comparison > 0) {//超时提交
  247. materialTaskAssign.setExecutiveStatus(3);
  248. materialTask.setTimeDelay(materialTask.getTimeDelay() + 1);
  249. } else {//准时提交(包含当天)
  250. materialTaskAssign.setExecutiveStatus(2);
  251. materialTask.setOnTimePerson(materialTask.getOnTimePerson() + 1);
  252. }
  253. materialTask.setSubmitedPerson(materialTask.getSubmitedPerson() + 1);
  254. materialTaskMaterialTaskMapper.updateById(materialTask);
  255. }
  256. materialTaskMaterialTaskAssignMapper.updateById(materialTaskAssign);
  257. if (oldStatus == 4) { // 重做删除原来的
  258. materialTaskMaterialTaskAppendixMapper.delete(Wrappers.lambdaQuery(MaterialTaskAppendix.class).eq(MaterialTaskAppendix::getMaterialTaskId, materialTaskAssignAppendixDto.getMaterialTaskAssignId()));
  259. }
  260. for (AddMaterialTaskAppendixDto materialTaskAppendixDto : materialTaskAssignAppendixDto.getMaterialTaskAppendixList()) {
  261. MaterialTaskAppendix materialTaskAppendix = new MaterialTaskAppendix();
  262. materialTaskAppendix.setMaterialTaskId(materialTaskAssignAppendixDto.getMaterialTaskAssignId());
  263. materialTaskAppendix.setFileId(materialTaskAppendixDto.getFileId());
  264. materialTaskMaterialTaskAppendixMapper.insert(materialTaskAppendix);
  265. }
  266. }
  267. }
  268. if(materialTaskAssignAppendixDto.getMaterialCategory().equals(MaterialCategoryEnum.MT0002.getCode())){
  269. if (materialTaskAssignAppendixDto.getTemplateId() != null && !materialTaskAssignAppendixDto.getFormData().isEmpty()) {
  270. MaterialTaskAssign materialTaskAssign = materialTaskMaterialTaskAssignMapper.selectByIdDeep(materialTaskAssignAppendixDto.getMaterialTaskAssignId());
  271. Integer oldStatus = materialTaskAssign.getStatus();
  272. materialTaskAssign.setStatus(2);
  273. //状态 1=未提交 2=待审核 3=通过 4=重做
  274. if (oldStatus == 1) {
  275. MaterialTask materialTask = materialTaskMaterialTaskMapper.selectByIdDeep(materialTaskAssign.getMaterialTaskId());
  276. LocalDate requiredCompleteTime = materialTask.getRequiredCompleteTime();
  277. LocalDate today = LocalDate.now();
  278. int comparison = today.compareTo(requiredCompleteTime);
  279. if (comparison > 0) {//超时提交
  280. materialTaskAssign.setExecutiveStatus(3);
  281. materialTask.setTimeDelay(materialTask.getTimeDelay() + 1);
  282. } else {//准时提交(包含当天)
  283. materialTaskAssign.setExecutiveStatus(2);
  284. materialTask.setOnTimePerson(materialTask.getOnTimePerson() + 1);
  285. }
  286. materialTask.setSubmitedPerson(materialTask.getSubmitedPerson() + 1);
  287. materialTaskMaterialTaskMapper.updateById(materialTask);
  288. }
  289. materialTaskMaterialTaskAssignMapper.updateById(materialTaskAssign);
  290. if (oldStatus == 4) { // 重做删除原来的
  291. materialTaskMaterialTaskAppendixMapper.delete(Wrappers.lambdaQuery(MaterialTaskAppendix.class).eq(MaterialTaskAppendix::getMaterialTaskId, materialTaskAssignAppendixDto.getMaterialTaskAssignId()));
  292. }
  293. long id = formExecuteService.addByTemplateId(new FormExecuteAddOrUpdateDto(){{
  294. setReleaseId(materialTaskAssignAppendixDto.getTemplateId());
  295. setFormData(materialTaskAssignAppendixDto.getFormData());
  296. }});
  297. MaterialTaskAppendix materialTaskAppendix = new MaterialTaskAppendix();
  298. materialTaskAppendix.setMaterialTaskId(materialTaskAssignAppendixDto.getMaterialTaskAssignId());
  299. materialTaskAppendix.setFileId(id);
  300. materialTaskMaterialTaskAppendixMapper.insert(materialTaskAppendix);
  301. }
  302. }
  303. return true;
  304. }
  305. @Override
  306. public MaterialTaskVo getInfoById(Long id) {
  307. MPJLambdaWrapper<MaterialTask> queryWrapper = new MPJLambdaWrapper<>();
  308. queryWrapper
  309. .orderByDesc(MaterialTask::getId)
  310. .eq(MaterialTask::getId, id)
  311. .select(MaterialTask::getId)
  312. .selectAs(MaterialType::getName, MaterialTaskVo::getMaterialTypeIdCn)
  313. .selectAs(MaterialType::getCreateDate, MaterialTaskVo::getCreateDate)
  314. .selectAs(DictionaryDetail::getName, MaterialTaskVo::getMaterialCategoryCn)
  315. .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskVo.class).contains(x.getProperty()))
  316. .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, MaterialTask::getMaterialCategory)
  317. .leftJoin(MaterialType.class, MaterialType::getId, MaterialTask::getMaterialTypeId);
  318. MaterialTaskVo materialTaskVo = this.selectJoinOne(MaterialTaskVo.class, queryWrapper);
  319. if (materialTaskVo == null) {
  320. return materialTaskVo;
  321. }
  322. MaterialTypeVo materialTypeVo = materialTypeService.getInfoById(materialTaskVo.getMaterialTypeId());
  323. if(materialTypeVo == null){
  324. return materialTaskVo;
  325. }
  326. if(materialTaskVo.getMaterialCategory().equals(MaterialCategoryEnum.MT0001.getCode())){
  327. materialTaskVo.setFolderId(materialTypeVo.getFolderId());
  328. materialTaskVo.setFolderIdCn(materialTypeVo.getFolderIdCn());
  329. materialTaskVo.setFiles(materialTypeVo.getFiles());
  330. }
  331. if(materialTaskVo.getMaterialCategory().equals(MaterialCategoryEnum.MT0002.getCode())){
  332. materialTaskVo.setFormReleaseId(materialTypeVo.getFormReleaseId());
  333. materialTaskVo.setFormReleaseIdCn(materialTypeVo.getFormReleaseIdCn());
  334. }
  335. // MPJLambdaWrapper<MaterialTaskAssign> materialTaskAssignMPJLambdaWrapper = new MPJLambdaWrapper<>();
  336. // materialTaskAssignMPJLambdaWrapper
  337. // .orderByDesc(MaterialTaskAssign::getCreateDate)
  338. // .eq(MaterialTaskAssign::getMaterialTaskId, id)
  339. // .select(MaterialTask::getId)
  340. // .selectAs(MaterialType::getName, MaterialTaskVo::getMaterialTypeIdCn)
  341. // .selectAs(MaterialType::getCreateDate, MaterialTaskVo::getCreateDate)
  342. // .selectAs(DictionaryDetail::getName, MaterialTaskVo::getMaterialCategoryCn)
  343. // .select(MaterialTask.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskVo.class).contains(x.getProperty()))
  344. // .leftJoin(DictionaryDetail.class, DictionaryDetail::getCode, MaterialTask::getMaterialCategory)
  345. // .leftJoin(MaterialType.class, MaterialType::getId, MaterialTask::getMaterialTypeId);
  346. // MaterialTaskVo materialTaskVo = materialTaskMaterialTaskAssignMapper.selectJoinOne(MaterialTaskVo.class, queryWrapper);
  347. // List<MaterialTaskAppendixVo> newsAppendixVoList = materialTaskAppendixService.selectJoinList(MaterialTaskAppendixVo.class,
  348. // new MPJLambdaWrapper<MaterialTaskAppendix>().eq(MaterialTaskAppendix::getMaterialTaskId, id)
  349. // .select(MaterialTaskAppendix::getId)
  350. // .select(MaterialTaskAppendix.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAppendixVo.class).contains(x.getProperty()))
  351. // .leftJoin(File.class, File::getId, MaterialTaskAppendix::getFileId, ext -> ext.selectAs(File::getFileName, MaterialTaskAppendixVo::getFileName)
  352. // .selectAs(File::getFolderId, MaterialTaskAppendixVo::getFolderId)
  353. // .selectAs(File::getFileUrl, MaterialTaskAppendixVo::getFileUrl))
  354. // );
  355. //
  356. // if (newsAppendixVoList.size() > 0) {
  357. // materialTaskVo.setMaterialTaskAppendixList(newsAppendixVoList);
  358. // }
  359. return materialTaskVo;
  360. }
  361. @Override
  362. public void sendMessage(Long materialTaskId) {
  363. MaterialTask materialTask = this.getById(materialTaskId);
  364. if(materialTask == null){
  365. return;
  366. }
  367. LambdaQueryWrapper<MaterialTaskAssign> materialTaskAssignLambdaQueryWrapper = new LambdaQueryWrapper<>();
  368. materialTaskAssignLambdaQueryWrapper
  369. .orderByDesc(MaterialTaskAssign::getCreateDate)
  370. .eq(MaterialTaskAssign::getMaterialTaskId, materialTaskId)
  371. .select(MaterialTaskAssign::getId)
  372. .select(MaterialTaskAssign.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAssign.class).contains(x.getProperty()));
  373. List<MaterialTaskAssign> materialTaskAssignList = materialTaskMaterialTaskAssignMapper.selectList(materialTaskAssignLambdaQueryWrapper);
  374. if(!materialTaskAssignList.isEmpty()){
  375. materialTask.setMaterialTaskAssignList(materialTaskAssignList);
  376. }
  377. CompletableFuture.runAsync(() -> {
  378. this.sendMessageUtil(materialTask);
  379. });
  380. }
  381. @Override
  382. public List<MaterialTaskAssignListVo> assignList(MaterialTaskAssignListDto dto) {
  383. MPJLambdaWrapper<MaterialTaskAssign> queryWrapper = new MPJLambdaWrapper<>();
  384. queryWrapper
  385. .disableSubLogicDel()
  386. .distinct()
  387. .select(MaterialTaskAssign::getId)
  388. .selectAs(MaterialTaskAppendix::getFileId, MaterialTaskAssignListVo::getFolderId)
  389. .selectAs(MaterialTaskAppendix::getFileId, MaterialTaskAssignListVo::getFormReleaseId)
  390. .selectAs(MaterialTask::getMaterialCategory, MaterialTaskAssignListVo::getMaterialCategory)
  391. .select(XjrUser.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAssignListVo.class).contains(x.getProperty()))
  392. .select(MaterialTaskAssign.class, x -> VoToColumnUtil.fieldsToColumns(MaterialTaskAssignListVo.class).contains(x.getProperty()))
  393. .innerJoin(XjrUser.class, XjrUser::getId, MaterialTaskAssign::getUserId, ext -> ext.selectAs(XjrUser::getUserName, MaterialTaskAssignListVo::getUserName))
  394. .leftJoin(UserDeptRelation.class, UserDeptRelation::getUserId, MaterialTypeAssign::getUserId)
  395. .leftJoin(Department.class, Department::getId, UserDeptRelation::getDeptId, ext -> ext.selectAs(Department::getName, MaterialTaskAssignListVo::getDeptName))
  396. .leftJoin(MaterialTask.class, MaterialTask::getId, MaterialTaskAssign::getMaterialTaskId)
  397. .leftJoin(MaterialTaskAppendix.class, MaterialTaskAppendix::getMaterialTaskId, MaterialTaskAssign::getId)
  398. .like(dto.getName() != null && !"".equals(dto.getName()), XjrUser::getName, dto.getName())
  399. .eq(MaterialTaskAssign::getMaterialTaskId, dto.getMaterialTaskId())
  400. .eq(dto.getState() != null, MaterialTaskAssign::getStatus, dto.getState())
  401. .eq(XjrUser::getDeleteMark, DeleteMark.NODELETE.getCode())
  402. .eq(Department::getDeleteMark, DeleteMark.NODELETE.getCode())
  403. .eq(MaterialTask::getDeleteMark, DeleteMark.NODELETE.getCode())
  404. .eq(MaterialTaskAssign::getDeleteMark, DeleteMark.NODELETE.getCode())
  405. // .select("(\n" +
  406. // "SELECT id FROM xjr_file WHERE id IN (\n" +
  407. // "SELECT file_id FROM material_task_appendix WHERE material_task_id = t.id\n" +
  408. // ") ORDER BY create_date DESC LIMIT 1\n" +
  409. // ") AS folderId ")
  410. ;
  411. List<MaterialTaskAssignListVo> pageOutput = materialTaskMaterialTaskAssignMapper.selectJoinList(MaterialTaskAssignListVo.class, queryWrapper);
  412. for (MaterialTaskAssignListVo materialTaskAssignListVo : pageOutput){
  413. materialTypeService.handleFileAndTemplate(materialTaskAssignListVo, materialTaskAssignListVo.getMaterialCategory());
  414. }
  415. return pageOutput;
  416. }
  417. private boolean sendMessageUtil(MaterialTask materialTask ) {
  418. IUserService userService = SpringUtil.getBean(IUserService.class);
  419. RedisUtil redisUtil = SpringUtil.getBean(RedisUtil.class);
  420. List<User> userList = redisUtil.get(GlobalConstant.USER_CACHE_KEY, new TypeReference<List<User>>() {
  421. });
  422. //如果缓存中不存在用户信息,就直接去数据库查询,并保存到缓存中去
  423. if (userList.size() == 0) {
  424. userList = userService.list();
  425. redisUtil.set(GlobalConstant.USER_CACHE_KEY, userList);
  426. }
  427. if(materialTask.getCreateUserId() == null){
  428. return false;
  429. }
  430. User createUser = userList.stream().filter(u -> materialTask.getCreateUserId().equals(u.getId())).findFirst().orElse(new User());
  431. for (MaterialTaskAssign materialTaskAssign : materialTask.getMaterialTaskAssignList()) {
  432. User materialTaskAssignUser = userList.stream().filter(u -> materialTaskAssign.getUserId().equals(u.getId())).findFirst().orElse(new User());
  433. WeChatSendMessageDto weChatSendMessageDto = new WeChatSendMessageDto();
  434. weChatSendMessageDto.setUserId(materialTaskAssignUser.getOpenId());
  435. weChatSendMessageDto.setTemplateId("qmpXORPM1Cocqn503Qa4OkNNQ0uxlj2-ed9m6uWO-v4");
  436. //weChatSendMessageDto.setUrl(StrUtil.format("{}/pages/message/notice/detail?id={}", commonPropertiesConfig.getDomainApp(), id));
  437. weChatSendMessageDto.setMsgId(materialTask.getId().toString());
  438. JSONObject data = new JSONObject();
  439. JSONObject data1 = new JSONObject();
  440. data1.put("value", materialTask.getName());
  441. data.put("thing23", data1);
  442. JSONObject data2 = new JSONObject();
  443. data2.put("value", createUser.getName());
  444. data.put("thing18", data2);
  445. JSONObject data3 = new JSONObject();
  446. data3.put("value", materialTask.getRequiredCompleteTime());
  447. data.put("time17", data3);
  448. weChatSendMessageDto.setContent(data);
  449. weChatService.sendTemplateMessage(weChatSendMessageDto);
  450. };
  451. return true;
  452. }
  453. }