PolicyStriveServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  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.metadata.IPage;
  5. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  6. import com.qdport.entity.PolicyFile;
  7. import com.qdport.entity.PolicyTodo;
  8. import com.qdport.enums.QDPortEnum;
  9. import com.qdport.mapper.PolicyTodoMapper;
  10. import com.qdport.modules.system.entity.SysUser;
  11. import com.qdport.modules.system.service.TSysUserService;
  12. import com.qdport.query.QueryWrapperBuilder;
  13. import com.qdport.service.PolicyFileService;
  14. import com.qdport.service.PolicyFlowNoService;
  15. import com.qdport.util.StringUtil;
  16. import com.qdport.vo.PolicyFileVO;
  17. import com.qdport.vo.PolicyShareVO;
  18. import com.qdport.workflow.process.model.WfProcess;
  19. import com.qdport.workflow.process.service.IWfProcessService;
  20. import lombok.AllArgsConstructor;
  21. import com.qdport.entity.PolicyStrive;
  22. import com.qdport.query.PolicyStriveQuery;
  23. import com.qdport.vo.PolicyStriveVO;
  24. import com.qdport.mapper.PolicyStriveMapper;
  25. import com.qdport.service.PolicyStriveService;
  26. import com.qdport.wrapper.PolicyStriveWrapper;
  27. import com.qdport.core.tool.utils.Func;
  28. import com.qdport.core.tool.utils.BeanUtil;
  29. import org.springframework.beans.factory.annotation.Value;
  30. import org.springframework.stereotype.Service;
  31. import org.springframework.transaction.annotation.Transactional;
  32. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  33. import javax.annotation.Resource;
  34. import java.math.BigDecimal;
  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-14
  43. */
  44. @Service
  45. public class PolicyStriveServiceImpl extends ServiceImpl<PolicyStriveMapper, PolicyStrive> implements PolicyStriveService {
  46. @Resource
  47. private PolicyFlowNoService policyFlowNoService;
  48. @Resource
  49. private PolicyFileService policyFileService;
  50. @Resource
  51. private IWfProcessService processService;
  52. @Resource
  53. private PolicyTodoMapper policyTodoMapper;
  54. @Resource
  55. private TSysUserService sysUserService;
  56. @Value("${processDefKey.policyStrive}")
  57. private String processDefKey;
  58. private final static BigDecimal decimal_50w = new BigDecimal(500000);
  59. private final static BigDecimal decimal_200w = new BigDecimal(2000000);
  60. private final static BigDecimal decimal_500w = new BigDecimal(5000000);
  61. private final static BigDecimal decimal_1000w = new BigDecimal(10000000);
  62. private final static BigDecimal decimal_500 = new BigDecimal(500);
  63. private final static BigDecimal decimal_1000 = new BigDecimal(1000);
  64. private final static BigDecimal decimal_1500 = new BigDecimal(1500);
  65. private final static BigDecimal decimal_2000 = new BigDecimal(2000);
  66. private final static BigDecimal decimal_3000 = new BigDecimal(3000);
  67. private final static BigDecimal decimal_4000 = new BigDecimal(4000);
  68. private final static BigDecimal decimal_5000 = new BigDecimal(5000);
  69. private final static BigDecimal decimal_6000 = new BigDecimal(6000);
  70. private final static BigDecimal decimal_8000 = new BigDecimal(8000);
  71. private final static BigDecimal decimal_10000 = new BigDecimal(10000);
  72. private final static BigDecimal decimal_12000 = new BigDecimal(12000);
  73. private final static BigDecimal decimal_15000 = new BigDecimal(15000);
  74. @Override
  75. public IPage<PolicyStriveVO> page(PolicyStriveQuery query) {
  76. IPage<PolicyStrive> page = new Page<>(query.getPage(), query.getSize());
  77. page = baseMapper.selectPage(page, getWrapper(query));
  78. return PolicyStriveWrapper.build().pageVO(page);
  79. }
  80. private QueryWrapper<PolicyStrive> getWrapper(PolicyStriveQuery query) {
  81. QueryWrapper<PolicyStrive> wrapper = QueryWrapperBuilder.buildQueryWrapper(query, PolicyStrive.class);
  82. wrapper.orderByDesc("CREATE_TIME");
  83. if (StringUtil.isNotEmpty(query.getDeptId())) {
  84. QueryWrapper<SysUser> userWrapper = new QueryWrapper<>();
  85. userWrapper.eq("dept_id", query.getDeptId());
  86. List<SysUser> userList = sysUserService.list(userWrapper);
  87. List<String> userIdList = userList.stream().map(SysUser::getId).collect(Collectors.toList());
  88. wrapper.in("create_id", userIdList);
  89. }
  90. return wrapper;
  91. }
  92. @Override
  93. @Transactional(rollbackFor = Exception.class)
  94. public void save(PolicyStriveVO vo) {
  95. String flowNo = policyFlowNoService.getFlowNo(QDPortEnum.FLOWNO_TYPE_STRIVE.getValue());
  96. vo.setCreateTime(new Date());
  97. vo.setUpdateTime(new Date());
  98. vo.setBusinessNo(flowNo);
  99. PolicyStrive entity = BeanUtil.copy(vo, PolicyStrive.class);
  100. baseMapper.insert(entity);
  101. vo.setId(entity.getId());
  102. QueryWrapper<PolicyFile> fileWrapper = new QueryWrapper<>();
  103. fileWrapper.eq("REF_ID", entity.getId());
  104. fileWrapper.eq("REF_TYPE", QDPortEnum.POLICY_FILE_REFTYPE_POLICY_STRIVE.getValue());
  105. policyFileService.remove(fileWrapper);
  106. List<PolicyFileVO> fileList = vo.getFileList();
  107. for (PolicyFileVO model : fileList) {
  108. model.setCreateTime(new Date());
  109. model.setRefId(entity.getId());
  110. model.setRefType(QDPortEnum.POLICY_FILE_REFTYPE_POLICY_STRIVE.getValue());
  111. policyFileService.save(model);
  112. }
  113. }
  114. @Override
  115. @Transactional(rollbackFor = Exception.class)
  116. public void update(PolicyStriveVO vo) {
  117. vo.setUpdateTime(new Date());
  118. PolicyStrive entity = BeanUtil.copy(vo, PolicyStrive.class);
  119. updateById(entity);
  120. QueryWrapper<PolicyFile> fileWrapper = new QueryWrapper<>();
  121. fileWrapper.eq("REF_ID", entity.getId());
  122. fileWrapper.eq("REF_TYPE", QDPortEnum.POLICY_FILE_REFTYPE_POLICY_STRIVE.getValue());
  123. policyFileService.remove(fileWrapper);
  124. List<PolicyFileVO> fileList = vo.getFileList();
  125. for (PolicyFileVO model : fileList) {
  126. model.setCreateTime(new Date());
  127. model.setRefId(entity.getId());
  128. model.setRefType(QDPortEnum.POLICY_FILE_REFTYPE_POLICY_STRIVE.getValue());
  129. policyFileService.save(model);
  130. }
  131. }
  132. @Override
  133. @Transactional(rollbackFor = Exception.class)
  134. public void updateById(PolicyStriveVO vo) {
  135. vo.setUpdateTime(new Date());
  136. updateRewardData(vo);
  137. PolicyStrive entity = BeanUtil.copy(vo, PolicyStrive.class);
  138. updateById(entity);
  139. }
  140. @Override
  141. @Transactional(rollbackFor = Exception.class)
  142. public void delete(List<String> idList) {
  143. removeByIds(idList);
  144. }
  145. @Override
  146. @Transactional(rollbackFor = Exception.class)
  147. public void saveApprove(PolicyStriveVO vo) {
  148. JSONObject body = new JSONObject();
  149. String processInstanceId = processService.startProcessInstanceByKey(processDefKey, vo.getId(), body);
  150. String processTaskId = processService.getTaskIdByProcessInstanceId(processInstanceId);
  151. vo.setProcessInstanceId(processInstanceId);
  152. vo.setProcessTaskId(processTaskId);
  153. if (StringUtil.isEmpty(vo.getId())) {
  154. vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_APPROVE.getValue());
  155. save(vo);
  156. } else {
  157. vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_APPROVE.getValue());
  158. update(vo);
  159. }
  160. }
  161. @Override
  162. @Transactional(rollbackFor = Exception.class)
  163. public void approve(PolicyStriveVO vo) {
  164. PolicyStrive strive = baseMapper.selectById(vo.getId());
  165. vo.setProcessInstanceId(strive.getProcessInstanceId());
  166. vo.setProcessTaskId(strive.getProcessTaskId());
  167. WfProcess process = new WfProcess();
  168. process.setTaskId(vo.getProcessTaskId());
  169. process.setProcessDefinitionId(vo.getProcessDefinitionId());
  170. process.setProcessInstanceId(vo.getProcessInstanceId());
  171. process.setPass(true);
  172. process.setComment("同意");
  173. processService.completeTask(process);
  174. String processTaskId = processService.getTaskIdByProcessInstanceId(vo.getProcessInstanceId());
  175. vo.setProcessTaskId(processTaskId);
  176. vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_DONE.getValue());
  177. vo.setUpdateTime(new Date());
  178. updateById(vo);
  179. }
  180. @Override
  181. @Transactional(rollbackFor = Exception.class)
  182. public void refuse(PolicyStriveVO vo) {
  183. PolicyStrive strive = baseMapper.selectById(vo.getId());
  184. vo.setProcessDefinitionId(strive.getProcessDefinitionId());
  185. vo.setProcessTaskId(strive.getProcessTaskId());
  186. WfProcess process = new WfProcess();
  187. process.setTaskId(vo.getProcessTaskId());
  188. process.setProcessDefinitionId(vo.getProcessDefinitionId());
  189. process.setProcessInstanceId(vo.getProcessInstanceId());
  190. process.setPass(false);
  191. process.setComment(vo.getComment());
  192. processService.completeTask(process);
  193. String processTaskId = processService.getTaskIdByProcessInstanceId(vo.getProcessInstanceId());
  194. vo.setProcessTaskId(processTaskId);
  195. vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_INACTIVE.getValue());
  196. vo.setUpdateTime(new Date());
  197. updateById(vo);
  198. QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
  199. todoQueryWrapper.eq("REF_ID", vo.getId());
  200. todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_STRIVE.getValue());
  201. todoQueryWrapper.eq("TODO_TYPE", QDPortEnum.POLICY_TODO_TYPE_APPROVE.getValue());
  202. todoQueryWrapper.eq("STATUS", QDPortEnum.POLICY_TODO_STATUS_ACTIVE.getValue());
  203. PolicyTodo todo = new PolicyTodo();
  204. todo.setStatus(QDPortEnum.POLICY_TODO_STATUS_DONE.getValue());
  205. policyTodoMapper.update(todo, todoQueryWrapper);
  206. }
  207. @Override
  208. @Transactional(rollbackFor = Exception.class)
  209. public void withdraw(PolicyStriveVO vo) {
  210. PolicyStrive strive = baseMapper.selectById(vo.getId());
  211. vo.setProcessTaskId(strive.getProcessTaskId());
  212. WfProcess process = new WfProcess();
  213. process.setTaskId(vo.getProcessTaskId());
  214. process.setWithdrawType("wf_withdraw_end");
  215. processService.terminateProcess(process);
  216. vo.setStatus(QDPortEnum.POLICY_STRIVE_STATUS_ACTIVE.getValue());
  217. vo.setUpdateTime(new Date());
  218. updateById(vo);
  219. QueryWrapper<PolicyTodo> todoQueryWrapper = new QueryWrapper<>();
  220. todoQueryWrapper.eq("REF_ID", vo.getId());
  221. todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_STRIVE.getValue());
  222. todoQueryWrapper.eq("TODO_TYPE", QDPortEnum.POLICY_TODO_TYPE_APPROVE.getValue());
  223. todoQueryWrapper.eq("STATUS", QDPortEnum.POLICY_TODO_STATUS_ACTIVE.getValue());
  224. PolicyTodo todo = new PolicyTodo();
  225. todo.setStatus(QDPortEnum.POLICY_TODO_STATUS_CANCEL.getValue());
  226. policyTodoMapper.update(todo, todoQueryWrapper);
  227. }
  228. private void updateRewardData(PolicyStriveVO vo) {
  229. Integer rewardType = vo.getRewardType();
  230. Integer isLand = vo.getIsLand();
  231. BigDecimal landAmount = vo.getLandAmount();
  232. if (StringUtil.isEmpty(rewardType) || isLand == 0
  233. || StringUtil.isEmpty(landAmount)) {
  234. return;
  235. }
  236. if (rewardType == 1) {
  237. if (landAmount.compareTo(decimal_50w) <= 0) {
  238. vo.setRewardRadix(decimal_500);
  239. } else if (landAmount.compareTo(decimal_200w) <= 0) {
  240. vo.setRewardRadix(decimal_1000);
  241. } else if (landAmount.compareTo(decimal_500w) <= 0) {
  242. vo.setRewardRadix(decimal_2000);
  243. } else if (landAmount.compareTo(decimal_1000w) <= 0) {
  244. vo.setRewardRadix(decimal_4000);
  245. } else {
  246. vo.setRewardRadix(decimal_5000);
  247. }
  248. } else if (rewardType == 2) {
  249. if (landAmount.compareTo(decimal_50w) <= 0) {
  250. vo.setRewardRadix(decimal_1000);
  251. } else if (landAmount.compareTo(decimal_200w) <= 0) {
  252. vo.setRewardRadix(decimal_2000);
  253. } else if (landAmount.compareTo(decimal_500w) <= 0) {
  254. vo.setRewardRadix(decimal_4000);
  255. } else if (landAmount.compareTo(decimal_1000w) <= 0) {
  256. vo.setRewardRadix(decimal_8000);
  257. } else {
  258. vo.setRewardRadix(decimal_10000);
  259. }
  260. } else if (rewardType == 3 || rewardType == 4) {
  261. if (landAmount.compareTo(decimal_50w) <= 0) {
  262. vo.setRewardRadix(decimal_1500);
  263. } else if (landAmount.compareTo(decimal_200w) <= 0) {
  264. vo.setRewardRadix(decimal_3000);
  265. } else if (landAmount.compareTo(decimal_500w) <= 0) {
  266. vo.setRewardRadix(decimal_6000);
  267. } else if (landAmount.compareTo(decimal_1000w) <= 0) {
  268. vo.setRewardRadix(decimal_12000);
  269. } else {
  270. vo.setRewardRadix(decimal_15000);
  271. }
  272. }
  273. }
  274. }