BusinessTaskService.java 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358
  1. package cn.cslg.permission.service.qiaobi;
  2. import cn.cslg.permission.common.core.business.SmsService;
  3. import cn.cslg.permission.common.model.Records;
  4. import cn.cslg.permission.common.model.qiaobi.QiaoBiPersonSignUpDTO;
  5. import cn.cslg.permission.common.model.qiaobi.businessTask.AuditTaskDTO;
  6. import cn.cslg.permission.common.model.qiaobi.businessTask.QueryAuditTaskDTO;
  7. import cn.cslg.permission.common.model.qiaobi.businessTask.QueryAuditTaskVO;
  8. import cn.cslg.permission.common.model.qiaobi.version.BusinessTaskVersionVO;
  9. import cn.cslg.permission.common.model.qiaobi.version.VersionStatusDTO;
  10. import cn.cslg.permission.common.model.vo.PersonnelVO;
  11. import cn.cslg.permission.common.model.vo.associate.AssoDepartPosVO;
  12. import cn.cslg.permission.common.utils.CacheUtils;
  13. import cn.cslg.permission.common.utils.LoginUtils;
  14. import cn.cslg.permission.domain.Department;
  15. import cn.cslg.permission.domain.Personnel;
  16. import cn.cslg.permission.domain.Position;
  17. import cn.cslg.permission.domain.Version;
  18. import cn.cslg.permission.domain.qiaobi.BusinessTask;
  19. import cn.cslg.permission.domain.qiaobi.RegistInformation;
  20. import cn.cslg.permission.exception.ExceptionEnum;
  21. import cn.cslg.permission.exception.XiaoShiException;
  22. import cn.cslg.permission.mapper.qiaobi.BusinessTaskMapper;
  23. import cn.cslg.permission.service.*;
  24. import cn.cslg.permission.service.associate.PerDpService;
  25. import cn.cslg.permission.service.email.MailSendService;
  26. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  27. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  28. import io.swagger.v3.oas.models.security.SecurityScheme;
  29. import jdk.internal.org.jline.utils.ShutdownHooks;
  30. import lombok.RequiredArgsConstructor;
  31. import org.springframework.beans.factory.annotation.Value;
  32. import org.springframework.stereotype.Service;
  33. import org.springframework.transaction.annotation.Transactional;
  34. import java.util.ArrayList;
  35. import java.util.Date;
  36. import java.util.List;
  37. import java.util.stream.Collectors;
  38. /**
  39. * @author admin
  40. * @description 针对表【BUSINESS_TASK(业务任务表)】的数据库操作Service实现
  41. * @createDate 2024-12-15 11:54:13
  42. */
  43. @Service
  44. @RequiredArgsConstructor
  45. public class BusinessTaskService extends ServiceImpl<BusinessTaskMapper, BusinessTask> {
  46. private final PersonnelService personnelService;
  47. private final DepartmentService departmentService;
  48. private final PositionService positionService;
  49. private final RoleService roleService;
  50. private final RegistInformationService registInformationService;
  51. private final AssoPersonVipTypeService assoPersonVipTypeService;
  52. private final LoginUtils loginUtils;
  53. private final CacheUtils cacheUtils;
  54. private final AssoBusinessTaskVersionService assoBusinessTaskVersionService;
  55. private final VersionService versionService;
  56. private final PerDpService perDpService;
  57. private final SmsService smsService;
  58. private final MailSendService mailSendService;
  59. private final AssoTenantVipTypeService assoTenantVipTypeService;
  60. @Value("${ApplicationCode}")
  61. private String ApplicationCode;
  62. public Records queryAuditTask(QueryAuditTaskDTO queryAuditTaskDTO) {
  63. Long current = queryAuditTaskDTO.getCurrent();
  64. Long size = queryAuditTaskDTO.getSize();
  65. Records records = new Records();
  66. records.setCurrent(current);
  67. if (current != null && size != null) {
  68. queryAuditTaskDTO.setCurrent(((current - 1) * size));
  69. }
  70. Integer personId = loginUtils.getId();
  71. PersonnelVO personnelVO = cacheUtils.getLoginUser(personId);
  72. Integer tenantId = personnelVO.getTenantId();
  73. Boolean biSysRole = roleService.checkIfQiaoBiSysRole();
  74. queryAuditTaskDTO.setTenantId(tenantId);
  75. queryAuditTaskDTO.setIfSys(biSysRole);
  76. List<QueryAuditTaskVO> queryAuditTaskVOS = this.getBaseMapper().queryAuditTask(queryAuditTaskDTO);
  77. this.loadQueryAuditTaskDTO(queryAuditTaskVOS);
  78. Long total = this.getBaseMapper().queryAuditTaskTotal(queryAuditTaskDTO);
  79. records.setRecords(queryAuditTaskVOS);
  80. records.setTotal(total);
  81. records.setSize(size);
  82. return records;
  83. }
  84. private List<QueryAuditTaskVO> loadQueryAuditTaskDTO(List<QueryAuditTaskVO> queryAuditTaskVOS) {
  85. if (queryAuditTaskVOS == null || queryAuditTaskVOS.size() == 0) {
  86. return queryAuditTaskVOS;
  87. }
  88. List<Integer> versionTaskIds = new ArrayList<>();
  89. List<Integer> personIds = new ArrayList<>();
  90. List<Personnel> personnelList = new ArrayList<>();
  91. List<Integer> departMentIds = new ArrayList<>();
  92. List<Department> departmentList = new ArrayList<>();
  93. List<Integer> positionIds = new ArrayList<>();
  94. List<Position> positionList = new ArrayList<>();
  95. queryAuditTaskVOS.forEach(item -> {
  96. if (item.getCreateId() != null) {
  97. personIds.add(item.getCreateId());
  98. }
  99. if (item.getDepartmentId() != null) {
  100. departMentIds.add(item.getDepartmentId());
  101. }
  102. if (item.getHandleId() != null) {
  103. personIds.add(item.getHandleId());
  104. }
  105. if (item.getPositionId() != null) {
  106. positionIds.add(item.getPositionId());
  107. }
  108. if (item.getType() != null && item.getType().equals(2)) {
  109. versionTaskIds.add(item.getId());
  110. }
  111. });
  112. if (personIds != null && personIds.size() > 0) {
  113. personnelList = personnelService.getPersonByIds(personIds);
  114. }
  115. if (departMentIds != null || departMentIds.size() > 0) {
  116. departmentList = departmentService.getDepartmentsByIds(departMentIds);
  117. }
  118. if (positionIds != null || positionIds.size() > 0) {
  119. positionList = positionService.getPositionByIds(positionIds);
  120. }
  121. List<BusinessTaskVersionVO> businessTaskVersionVOS = new ArrayList<>();
  122. if (versionTaskIds != null && versionTaskIds.size() > 0) {
  123. businessTaskVersionVOS = assoBusinessTaskVersionService.getBaseMapper().queryVersionByTaskIds(versionTaskIds);
  124. }
  125. for (QueryAuditTaskVO queryAuditTaskVO : queryAuditTaskVOS) {
  126. Personnel createUser = personnelList.stream().filter(item -> item.getId().equals(queryAuditTaskVO.getCreateId())).findFirst().orElse(null);
  127. if (createUser != null) {
  128. queryAuditTaskVO.setCreateName(createUser.getPersonnelName());
  129. }
  130. Personnel handlerUser = personnelList.stream().filter(item -> item.getId().equals(queryAuditTaskVO.getHandleId())).findFirst().orElse(null);
  131. if (handlerUser != null) {
  132. queryAuditTaskVO.setHandleName(handlerUser.getPersonnelName());
  133. }
  134. Department department = departmentList.stream().filter(item -> item.getId().equals(queryAuditTaskVO.getDepartmentId())).findFirst().orElse(null);
  135. if (department != null) {
  136. queryAuditTaskVO.setDepartmentName(department.getDepartmentName());
  137. }
  138. Position position = positionList.stream().filter(item -> item.getId().equals(queryAuditTaskVO.getPositionId())).findFirst().orElse(null);
  139. if (position != null) {
  140. queryAuditTaskVO.setPositionName(position.getPositionName());
  141. }
  142. if (queryAuditTaskVO.getType() != null && queryAuditTaskVO.getType().equals(2)) {
  143. BusinessTaskVersionVO businessTaskVersionVO = businessTaskVersionVOS.stream().filter(item -> item.getBusinessTaskId().equals(queryAuditTaskVO.getId())).findFirst().orElse(null);
  144. if (businessTaskVersionVO != null) {
  145. queryAuditTaskVO.setVersionNum(businessTaskVersionVO.getVersionNum());
  146. queryAuditTaskVO.setVersionName(businessTaskVersionVO.getVersionName());
  147. queryAuditTaskVO.setVersionId(businessTaskVersionVO.getVersionId());
  148. }
  149. }
  150. }
  151. return queryAuditTaskVOS;
  152. }
  153. public List<BusinessTask> queryBusinessTaskByIds(List<Integer> taskIds) {
  154. LambdaQueryWrapper<BusinessTask> queryWrapper = new LambdaQueryWrapper<>();
  155. queryWrapper.in(BusinessTask::getId, taskIds);
  156. List<BusinessTask> businessTasks = this.list(queryWrapper);
  157. return businessTasks;
  158. }
  159. @Transactional(rollbackFor = Exception.class)
  160. public void auditTasks(AuditTaskDTO auditTaskDTO) {
  161. List<Integer> taskIds = auditTaskDTO.getIds();
  162. if (taskIds == null || taskIds.size() == 0) {
  163. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "请选择至少一个任务");
  164. }
  165. Integer result = auditTaskDTO.getResult();
  166. //根据taskId 查询任务
  167. Integer tenantId = roleService.checkLoginPersonRole();
  168. List<BusinessTask> businessTasks = this.queryBusinessTaskByIds(taskIds);
  169. businessTasks = businessTasks.stream().filter(item -> item.getTenantId().equals(tenantId)).collect(Collectors.toList());
  170. businessTasks.forEach(item -> {
  171. this.auditTask(item, result);
  172. });
  173. }
  174. public void auditTask(BusinessTask businessTask, Integer result) {
  175. Integer type = businessTask.getTaskType();
  176. if (!businessTask.getStatus().equals(0)) {
  177. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "任务已完成,不允许操作");
  178. }
  179. switch (type) {
  180. case 1:
  181. this.auditSignUpTask(businessTask, result);
  182. break;
  183. case 2:
  184. this.auditVersionTask(businessTask, result);
  185. break;
  186. default:
  187. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "任务类型不存在");
  188. }
  189. }
  190. public void auditSignUpTask(BusinessTask businessTask, Integer result) {
  191. if (result == 1) {
  192. this.auditSignUpTaskPass(businessTask);
  193. } else {
  194. this.auditSignUpTaskNotPass(businessTask);
  195. }
  196. }
  197. public void updateAuditTaskResult(BusinessTask businessTask, Integer result) {
  198. businessTask.setStatus(1);
  199. businessTask.setResult(result);
  200. businessTask.setHandleId(loginUtils.getId());
  201. businessTask.setHandleTime(new Date());
  202. businessTask.updateById();
  203. }
  204. @Transactional(rollbackFor = Exception.class)
  205. public void auditSignUpTaskPass(BusinessTask businessTask) {
  206. //查询人员注册信息
  207. Integer taskId = businessTask.getId();
  208. RegistInformation registInformation = registInformationService.getRegistInformationByTaskId(taskId);
  209. if (registInformation == null) {
  210. throw new XiaoShiException(ExceptionEnum.BUSINESS_ERROR, "任务无注册信息");
  211. }
  212. Integer tenantId = registInformation.getTenantId();
  213. Integer vipTypeId = registInformation.getVipTypeId();
  214. assoTenantVipTypeService.removeOneVip(tenantId, vipTypeId);
  215. QiaoBiPersonSignUpDTO qiaoBiPersonSignUpDTO = this.transFormToQiaoBiPersonSignUpDTO(registInformation);
  216. qiaoBiPersonSignUpDTO = personnelService.addPhoneSignUpPerson(qiaoBiPersonSignUpDTO);
  217. if (registInformation.getDepartMentId() != null || registInformation.getPositionId() != null) {
  218. List<AssoDepartPosVO> assoDepartPoseVos = new ArrayList<>();
  219. AssoDepartPosVO assoDepartPosVO = new AssoDepartPosVO();
  220. assoDepartPosVO.setDepartment(registInformation.getDepartMentId());
  221. if (registInformation.getDepartMentId() != null) {
  222. Department department = departmentService.getById(registInformation.getDepartMentId());
  223. if (department != null) {
  224. assoDepartPosVO.setDepartmentName(department.getDepartmentName());
  225. }
  226. }
  227. assoDepartPosVO.setPosition(registInformation.getPositionId());
  228. if (registInformation.getPositionId() != null) {
  229. Position position = positionService.getById(registInformation.getDepartMentId());
  230. if (position != null) {
  231. assoDepartPosVO.setPositionName(position.getPositionName());
  232. }
  233. }
  234. assoDepartPoseVos.add(assoDepartPosVO);
  235. perDpService.addAssociatePerDp(assoDepartPoseVos, qiaoBiPersonSignUpDTO.getId());
  236. }
  237. //绑定版本
  238. assoPersonVipTypeService.addVip(qiaoBiPersonSignUpDTO.getId(), vipTypeId, null);
  239. this.updateAuditTaskResult(businessTask, 1);
  240. smsService.sendQiaoBiAccountPass(qiaoBiPersonSignUpDTO.getPhoneNum(), qiaoBiPersonSignUpDTO.getPassword());
  241. }
  242. public void auditSignUpTaskNotPass(BusinessTask businessTask) {
  243. Integer taskId = businessTask.getId();
  244. RegistInformation registInformation = registInformationService.getRegistInformationByTaskId(taskId);
  245. this.updateAuditTaskResult(businessTask, 0);
  246. smsService.sendQiaoBiAccountNotPass(registInformation.getPersonnelPhone());
  247. }
  248. public void auditVersionTask(BusinessTask businessTask, Integer result) {
  249. if (result == 1) {
  250. this.auditVersionTaskPass(businessTask);
  251. } else {
  252. this.auditVersionTaskNotPass(businessTask);
  253. }
  254. }
  255. public void auditVersionTaskPass(BusinessTask businessTask) {
  256. roleService.checkApplicationRootRole("4e95e3d926a2a4befa5d913acc0bb8t6");
  257. this.updateAuditTaskResult(businessTask, 1);
  258. VersionStatusDTO versionStatusDTO = new VersionStatusDTO();
  259. versionStatusDTO.setStatus(3);
  260. Integer versionId = assoBusinessTaskVersionService.getVersionId(businessTask.getId());
  261. versionStatusDTO.setId(versionId);
  262. versionService.updateVersionStatusSys(versionStatusDTO);
  263. if (businessTask.getCreateId() != null) {
  264. this.sendVersionTaskDone(businessTask.getCreateId());
  265. }
  266. }
  267. public void auditVersionTaskNotPass(BusinessTask businessTask) {
  268. this.updateAuditTaskResult(businessTask, 0);
  269. VersionStatusDTO versionStatusDTO = new VersionStatusDTO();
  270. versionStatusDTO.setStatus(4);
  271. Integer versionId = assoBusinessTaskVersionService.getVersionId(businessTask.getId());
  272. versionStatusDTO.setId(versionId);
  273. versionService.updateVersionStatus(versionStatusDTO);
  274. if (businessTask.getCreateId() != null) {
  275. this.sendVersionTaskDone(businessTask.getCreateId());
  276. }
  277. }
  278. public QiaoBiPersonSignUpDTO transFormToQiaoBiPersonSignUpDTO(RegistInformation registInformation) {
  279. QiaoBiPersonSignUpDTO qiaoBiPersonSignUpDTO = new QiaoBiPersonSignUpDTO();
  280. qiaoBiPersonSignUpDTO.setEmail(registInformation.getPersonnelEmail());
  281. qiaoBiPersonSignUpDTO.setUsername(registInformation.getPersonnelUsername());
  282. qiaoBiPersonSignUpDTO.setPhoneNum(registInformation.getPersonnelPhone());
  283. qiaoBiPersonSignUpDTO.setPassword(registInformation.getPersonnelPassword());
  284. qiaoBiPersonSignUpDTO.setName(registInformation.getPersonnelName());
  285. qiaoBiPersonSignUpDTO.setTenantId(registInformation.getTenantId());
  286. return qiaoBiPersonSignUpDTO;
  287. }
  288. public void AddVersionBusinessTask(Integer versionId) {
  289. PersonnelVO personnelVO = cacheUtils.getLoginUser(loginUtils.getId());
  290. BusinessTask businessTask = new BusinessTask();
  291. businessTask.setTaskType(2);
  292. businessTask.setStatus(0);
  293. businessTask.setTenantId(personnelVO.getTenantId());
  294. businessTask.setCreateId(loginUtils.getId());
  295. businessTask.insert();
  296. assoBusinessTaskVersionService.addAssoBusinessTaskVersion(businessTask.getId(), versionId);
  297. // 通知企业管理员
  298. this.sendVersionTask();
  299. }
  300. public void sendVersionTaskDone(Integer createId) {
  301. Personnel personnel = personnelService.getById(createId);
  302. if (personnel.getPersonnelEmail() != null) {
  303. mailSendService.sendAuditVersionDone(personnel.getPersonnelEmail());
  304. }
  305. }
  306. public void sendVersionTask() {
  307. List<Integer> personIds = roleService.getApplicationRootPersonId();
  308. if (personIds != null && personIds.size() > 0) {
  309. List<Personnel> personnelList = personnelService.getPersonByIds(personIds);
  310. if (personnelList != null && personnelList.size() > 0) {
  311. personnelList.forEach(item -> {
  312. if (item.getPersonnelEmail() != null) {
  313. mailSendService.sendAuditVersion(item.getPersonnelEmail());
  314. }
  315. });
  316. }
  317. }
  318. }
  319. }