PolicyCaseServiceImpl.java 10.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. package com.qdport.service.impl;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  4. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  5. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  6. import com.baomidou.mybatisplus.core.metadata.IPage;
  7. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  8. import com.qdport.entity.PolicyStrive;
  9. import com.qdport.entity.PolicyTodo;
  10. import com.qdport.enums.QDPortEnum;
  11. import com.qdport.mapper.PolicyTodoMapper;
  12. import com.qdport.modules.system.entity.SysUser;
  13. import com.qdport.modules.system.service.TSysUserService;
  14. import com.qdport.query.QueryWrapperBuilder;
  15. import com.qdport.service.PolicyFlowNoService;
  16. import com.qdport.service.PolicyStriveService;
  17. import com.qdport.util.StringUtil;
  18. import com.qdport.vo.PolicyStriveVO;
  19. import com.qdport.workflow.process.model.WfProcess;
  20. import com.qdport.workflow.process.service.IWfProcessService;
  21. import lombok.AllArgsConstructor;
  22. import com.qdport.entity.PolicyCase;
  23. import com.qdport.query.PolicyCaseQuery;
  24. import com.qdport.vo.PolicyCaseVO;
  25. import com.qdport.mapper.PolicyCaseMapper;
  26. import com.qdport.service.PolicyCaseService;
  27. import com.qdport.wrapper.PolicyCaseWrapper;
  28. import com.qdport.core.tool.utils.BeanUtil;
  29. import org.springframework.beans.BeanUtils;
  30. import org.springframework.beans.factory.annotation.Value;
  31. import org.springframework.stereotype.Service;
  32. import org.springframework.transaction.annotation.Transactional;
  33. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  34. import javax.annotation.Resource;
  35. import java.util.Date;
  36. import java.util.List;
  37. import java.util.stream.Collectors;
  38. /**
  39. * 案例分享
  40. *
  41. * @author yuheng
  42. * @since 1.0.0 2024-10-17
  43. */
  44. @Service
  45. public class PolicyCaseServiceImpl extends ServiceImpl<PolicyCaseMapper, PolicyCase> implements PolicyCaseService {
  46. @Resource
  47. private PolicyFlowNoService policyFlowNoService;
  48. @Resource
  49. private PolicyStriveService policyStriveService;
  50. @Resource
  51. private IWfProcessService processService;
  52. @Resource
  53. private PolicyTodoMapper policyTodoMapper;
  54. @Resource
  55. private TSysUserService sysUserService;
  56. @Value("${processDefKey.policyCase}")
  57. private String processDefKey;
  58. @Override
  59. public IPage<PolicyCaseVO> page(PolicyCaseQuery query) {
  60. IPage<PolicyCase> page = new Page<>(query.getPage(), query.getSize());
  61. page = baseMapper.selectPage(page, getWrapper(query));
  62. return PolicyCaseWrapper.build().pageVO(page);
  63. }
  64. private QueryWrapper<PolicyCase> getWrapper(PolicyCaseQuery query) {
  65. QueryWrapper<PolicyCase> wrapper = QueryWrapperBuilder.buildQueryWrapper(query, PolicyCase.class);
  66. wrapper.orderByDesc("CREATE_TIME");
  67. QueryWrapper<PolicyStrive> striveWrapper = new QueryWrapper<>();
  68. if (StringUtil.isNotEmpty(query.getZcName())) {
  69. striveWrapper.like("NAME", query.getZcName());
  70. }
  71. if (StringUtil.isNotEmpty(query.getZcLevel())) {
  72. striveWrapper.eq("ZC_LEVEL", query.getZcLevel());
  73. }
  74. if (StringUtil.isNotEmpty(query.getZcType())) {
  75. striveWrapper.eq("ZC_TYPE", query.getZcType());
  76. }
  77. if (StringUtil.isNotEmpty(query.getDocNo())) {
  78. striveWrapper.like("DOC_NO", query.getDocNo());
  79. }
  80. if (StringUtil.isNotEmpty(query.getBeginCreateTime())) {
  81. striveWrapper.gt("CREATE_TIME", query.getBeginCreateTime());
  82. }
  83. if (StringUtil.isNotEmpty(query.getEndCreateTime())) {
  84. striveWrapper.lt("CREATE_TIME", query.getEndCreateTime());
  85. }
  86. if (!striveWrapper.isEmptyOfEntity()) {
  87. List<PolicyStrive> striveList = policyStriveService.list(striveWrapper);
  88. if (!striveList.isEmpty()) {
  89. List<String> idList = striveList.stream().map(PolicyStrive::getId).collect(Collectors.toList());
  90. wrapper.in("STRIVE_ID", idList);
  91. }
  92. }
  93. if (StringUtil.isNotEmpty(query.getDeptId())) {
  94. QueryWrapper<SysUser> userWrapper = new QueryWrapper<>();
  95. userWrapper.eq("dept_id", query.getDeptId());
  96. List<SysUser> userList = sysUserService.list(userWrapper);
  97. List<String> userIdList = userList.stream().map(SysUser::getId).collect(Collectors.toList());
  98. wrapper.in("create_id", userIdList);
  99. }
  100. return wrapper;
  101. }
  102. @Override
  103. @Transactional(rollbackFor = Exception.class)
  104. public void save(PolicyCaseVO vo) {
  105. String flowNo = policyFlowNoService.getFlowNo(QDPortEnum.FLOWNO_TYPE_CASE.getValue());
  106. vo.setCreateTime(new Date());
  107. vo.setUpdateTime(new Date());
  108. vo.setBusinessNo(flowNo);
  109. PolicyCase entity = BeanUtil.copy(vo, PolicyCase.class);
  110. baseMapper.insert(entity);
  111. PolicyStrive strive = new PolicyStrive();
  112. strive.setId(vo.getStriveId());
  113. strive.setIsCase(1);
  114. policyStriveService.updateById(strive);
  115. }
  116. @Override
  117. @Transactional(rollbackFor = Exception.class)
  118. public void update(PolicyCaseVO vo) {
  119. vo.setUpdateTime(new Date());
  120. PolicyCase entity = BeanUtil.copy(vo, PolicyCase.class);
  121. updateById(entity);
  122. }
  123. @Override
  124. @Transactional(rollbackFor = Exception.class)
  125. public void delete(List<String> idList) {
  126. removeByIds(idList);
  127. for (String id : idList) {
  128. PolicyStrive strive = new PolicyStrive();
  129. strive.setId(id);
  130. strive.setIsCase(0);
  131. policyStriveService.updateById(strive);
  132. }
  133. }
  134. @Override
  135. @Transactional(rollbackFor = Exception.class)
  136. public void saveApprove(PolicyCaseVO vo) {
  137. JSONObject body = new JSONObject();
  138. String processInstanceId = processService.startProcessInstanceByKey(processDefKey, vo.getId(), body);
  139. String processTaskId = processService.getTaskIdByProcessInstanceId(processInstanceId);
  140. vo.setProcessInstanceId(processInstanceId);
  141. vo.setProcessTaskId(processTaskId);
  142. if (StringUtil.isEmpty(vo.getId())) {
  143. vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_APPROVE.getValue());
  144. save(vo);
  145. } else {
  146. vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_APPROVE.getValue());
  147. update(vo);
  148. }
  149. PolicyStrive strive = policyStriveService.getById(vo.getStriveId());
  150. PolicyStriveVO striveVO = new PolicyStriveVO();
  151. BeanUtils.copyProperties(strive, striveVO);
  152. vo.setPolicyStrive(striveVO);
  153. }
  154. @Override
  155. @Transactional(rollbackFor = Exception.class)
  156. public void approve(PolicyCaseVO vo) {
  157. PolicyCase policyCase = baseMapper.selectById(vo.getId());
  158. vo.setProcessInstanceId(policyCase.getProcessInstanceId());
  159. vo.setProcessTaskId(policyCase.getProcessTaskId());
  160. WfProcess process = new WfProcess();
  161. process.setTaskId(vo.getProcessTaskId());
  162. process.setProcessDefinitionId(vo.getProcessDefinitionId());
  163. process.setProcessInstanceId(vo.getProcessInstanceId());
  164. process.setPass(true);
  165. process.setComment("同意");
  166. processService.completeTask(process);
  167. String processTaskId = processService.getTaskIdByProcessInstanceId(vo.getProcessInstanceId());
  168. vo.setProcessTaskId(processTaskId);
  169. vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_DONE.getValue());
  170. vo.setUpdateTime(new Date());
  171. updateById(vo);
  172. }
  173. @Override
  174. @Transactional(rollbackFor = Exception.class)
  175. public void refuse(PolicyCaseVO vo) {
  176. PolicyCase policyCase = baseMapper.selectById(vo.getId());
  177. vo.setProcessDefinitionId(policyCase.getProcessDefinitionId());
  178. vo.setProcessTaskId(policyCase.getProcessTaskId());
  179. WfProcess process = new WfProcess();
  180. process.setTaskId(vo.getProcessTaskId());
  181. process.setProcessDefinitionId(vo.getProcessDefinitionId());
  182. process.setProcessInstanceId(vo.getProcessInstanceId());
  183. process.setPass(false);
  184. process.setComment(vo.getComment());
  185. processService.completeTask(process);
  186. String processTaskId = processService.getTaskIdByProcessInstanceId(vo.getProcessInstanceId());
  187. vo.setProcessTaskId(processTaskId);
  188. vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_INACTIVE.getValue());
  189. vo.setUpdateTime(new Date());
  190. updateById(vo);
  191. QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
  192. todoQueryWrapper.eq("REF_ID", vo.getId());
  193. todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_CASE.getValue());
  194. todoQueryWrapper.eq("TODO_TYPE", QDPortEnum.POLICY_TODO_TYPE_APPROVE.getValue());
  195. todoQueryWrapper.eq("STATUS", QDPortEnum.POLICY_TODO_STATUS_ACTIVE.getValue());
  196. PolicyTodo todo = new PolicyTodo();
  197. todo.setStatus(QDPortEnum.POLICY_TODO_STATUS_DONE.getValue());
  198. policyTodoMapper.update(todo, todoQueryWrapper);
  199. }
  200. @Override
  201. @Transactional(rollbackFor = Exception.class)
  202. public void withdraw(PolicyCaseVO vo) {
  203. PolicyCase policyCase = baseMapper.selectById(vo.getId());
  204. vo.setProcessTaskId(policyCase.getProcessTaskId());
  205. WfProcess process = new WfProcess();
  206. process.setTaskId(vo.getProcessTaskId());
  207. process.setWithdrawType("wf_withdraw_end");
  208. processService.terminateProcess(process);
  209. vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_ACTIVE.getValue());
  210. vo.setUpdateTime(new Date());
  211. updateById(vo);
  212. QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
  213. todoQueryWrapper.eq("REF_ID", vo.getId());
  214. todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_CASE.getValue());
  215. todoQueryWrapper.eq("TODO_TYPE", QDPortEnum.POLICY_TODO_TYPE_APPROVE.getValue());
  216. todoQueryWrapper.eq("STATUS", QDPortEnum.POLICY_TODO_STATUS_ACTIVE.getValue());
  217. PolicyTodo todo = new PolicyTodo();
  218. todo.setStatus(QDPortEnum.POLICY_TODO_STATUS_CANCEL.getValue());
  219. policyTodoMapper.update(todo, todoQueryWrapper);
  220. }
  221. }