package com.qdport.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.qdport.entity.PolicyStrive; import com.qdport.entity.PolicyTodo; import com.qdport.enums.QDPortEnum; import com.qdport.mapper.PolicyTodoMapper; import com.qdport.modules.system.entity.SysUser; import com.qdport.modules.system.service.TSysUserService; import com.qdport.query.QueryWrapperBuilder; import com.qdport.service.PolicyFlowNoService; import com.qdport.service.PolicyStriveService; import com.qdport.util.StringUtil; import com.qdport.vo.PolicyStriveVO; import com.qdport.workflow.process.model.WfProcess; import com.qdport.workflow.process.service.IWfProcessService; import lombok.AllArgsConstructor; import com.qdport.entity.PolicyCase; import com.qdport.query.PolicyCaseQuery; import com.qdport.vo.PolicyCaseVO; import com.qdport.mapper.PolicyCaseMapper; import com.qdport.service.PolicyCaseService; import com.qdport.wrapper.PolicyCaseWrapper; import com.qdport.core.tool.utils.BeanUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * 案例分享 * * @author yuheng * @since 1.0.0 2024-10-17 */ @Service public class PolicyCaseServiceImpl extends ServiceImpl implements PolicyCaseService { @Resource private PolicyFlowNoService policyFlowNoService; @Resource private PolicyStriveService policyStriveService; @Resource private IWfProcessService processService; @Resource private PolicyTodoMapper policyTodoMapper; @Resource private TSysUserService sysUserService; @Value("${processDefKey.policyCase}") private String processDefKey; @Override public IPage page(PolicyCaseQuery query) { IPage page = new Page<>(query.getPage(), query.getSize()); page = baseMapper.selectPage(page, getWrapper(query)); return PolicyCaseWrapper.build().pageVO(page); } private QueryWrapper getWrapper(PolicyCaseQuery query) { QueryWrapper wrapper = QueryWrapperBuilder.buildQueryWrapper(query, PolicyCase.class); wrapper.orderByDesc("CREATE_TIME"); QueryWrapper striveWrapper = new QueryWrapper<>(); if (StringUtil.isNotEmpty(query.getZcName())) { striveWrapper.like("NAME", query.getZcName()); } if (StringUtil.isNotEmpty(query.getZcLevel())) { striveWrapper.eq("ZC_LEVEL", query.getZcLevel()); } if (StringUtil.isNotEmpty(query.getZcType())) { striveWrapper.eq("ZC_TYPE", query.getZcType()); } if (StringUtil.isNotEmpty(query.getDocNo())) { striveWrapper.like("DOC_NO", query.getDocNo()); } if (StringUtil.isNotEmpty(query.getBeginCreateTime())) { striveWrapper.gt("CREATE_TIME", query.getBeginCreateTime()); } if (StringUtil.isNotEmpty(query.getEndCreateTime())) { striveWrapper.lt("CREATE_TIME", query.getEndCreateTime()); } if (!striveWrapper.isEmptyOfEntity()) { List striveList = policyStriveService.list(striveWrapper); if (!striveList.isEmpty()) { List idList = striveList.stream().map(PolicyStrive::getId).collect(Collectors.toList()); wrapper.in("STRIVE_ID", idList); } } if (StringUtil.isNotEmpty(query.getDeptId())) { QueryWrapper userWrapper = new QueryWrapper<>(); userWrapper.eq("dept_id", query.getDeptId()); List userList = sysUserService.list(userWrapper); List userIdList = userList.stream().map(SysUser::getId).collect(Collectors.toList()); wrapper.in("create_id", userIdList); } return wrapper; } @Override @Transactional(rollbackFor = Exception.class) public void save(PolicyCaseVO vo) { String flowNo = policyFlowNoService.getFlowNo(QDPortEnum.FLOWNO_TYPE_CASE.getValue()); vo.setCreateTime(new Date()); vo.setUpdateTime(new Date()); vo.setBusinessNo(flowNo); PolicyCase entity = BeanUtil.copy(vo, PolicyCase.class); baseMapper.insert(entity); PolicyStrive strive = new PolicyStrive(); strive.setId(vo.getStriveId()); strive.setIsCase(1); policyStriveService.updateById(strive); } @Override @Transactional(rollbackFor = Exception.class) public void update(PolicyCaseVO vo) { vo.setUpdateTime(new Date()); PolicyCase entity = BeanUtil.copy(vo, PolicyCase.class); updateById(entity); } @Override @Transactional(rollbackFor = Exception.class) public void delete(List idList) { removeByIds(idList); for (String id : idList) { PolicyStrive strive = new PolicyStrive(); strive.setId(id); strive.setIsCase(0); policyStriveService.updateById(strive); } } @Override @Transactional(rollbackFor = Exception.class) public void saveApprove(PolicyCaseVO vo) { JSONObject body = new JSONObject(); String processInstanceId = processService.startProcessInstanceByKey(processDefKey, vo.getId(), body); String processTaskId = processService.getTaskIdByProcessInstanceId(processInstanceId); vo.setProcessInstanceId(processInstanceId); vo.setProcessTaskId(processTaskId); if (StringUtil.isEmpty(vo.getId())) { vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_APPROVE.getValue()); save(vo); } else { vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_APPROVE.getValue()); update(vo); } PolicyStrive strive = policyStriveService.getById(vo.getStriveId()); PolicyStriveVO striveVO = new PolicyStriveVO(); BeanUtils.copyProperties(strive, striveVO); vo.setPolicyStrive(striveVO); } @Override @Transactional(rollbackFor = Exception.class) public void approve(PolicyCaseVO vo) { PolicyCase policyCase = baseMapper.selectById(vo.getId()); vo.setProcessInstanceId(policyCase.getProcessInstanceId()); vo.setProcessTaskId(policyCase.getProcessTaskId()); WfProcess process = new WfProcess(); process.setTaskId(vo.getProcessTaskId()); process.setProcessDefinitionId(vo.getProcessDefinitionId()); process.setProcessInstanceId(vo.getProcessInstanceId()); process.setPass(true); process.setComment("同意"); processService.completeTask(process); String processTaskId = processService.getTaskIdByProcessInstanceId(vo.getProcessInstanceId()); vo.setProcessTaskId(processTaskId); vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_DONE.getValue()); vo.setUpdateTime(new Date()); updateById(vo); } @Override @Transactional(rollbackFor = Exception.class) public void refuse(PolicyCaseVO vo) { PolicyCase policyCase = baseMapper.selectById(vo.getId()); vo.setProcessDefinitionId(policyCase.getProcessDefinitionId()); vo.setProcessTaskId(policyCase.getProcessTaskId()); WfProcess process = new WfProcess(); process.setTaskId(vo.getProcessTaskId()); process.setProcessDefinitionId(vo.getProcessDefinitionId()); process.setProcessInstanceId(vo.getProcessInstanceId()); process.setPass(false); process.setComment(vo.getComment()); processService.completeTask(process); String processTaskId = processService.getTaskIdByProcessInstanceId(vo.getProcessInstanceId()); vo.setProcessTaskId(processTaskId); vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_INACTIVE.getValue()); vo.setUpdateTime(new Date()); updateById(vo); QueryWrapper todoQueryWrapper = new QueryWrapper<>(); todoQueryWrapper.eq("REF_ID", vo.getId()); todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_CASE.getValue()); todoQueryWrapper.eq("TODO_TYPE", QDPortEnum.POLICY_TODO_TYPE_APPROVE.getValue()); todoQueryWrapper.eq("STATUS", QDPortEnum.POLICY_TODO_STATUS_ACTIVE.getValue()); PolicyTodo todo = new PolicyTodo(); todo.setStatus(QDPortEnum.POLICY_TODO_STATUS_DONE.getValue()); policyTodoMapper.update(todo, todoQueryWrapper); } @Override @Transactional(rollbackFor = Exception.class) public void withdraw(PolicyCaseVO vo) { PolicyCase policyCase = baseMapper.selectById(vo.getId()); vo.setProcessTaskId(policyCase.getProcessTaskId()); WfProcess process = new WfProcess(); process.setTaskId(vo.getProcessTaskId()); process.setWithdrawType("wf_withdraw_end"); processService.terminateProcess(process); vo.setStatus(QDPortEnum.POLICY_CASE_STATUS_ACTIVE.getValue()); vo.setUpdateTime(new Date()); updateById(vo); QueryWrapper todoQueryWrapper = new QueryWrapper<>(); todoQueryWrapper.eq("REF_ID", vo.getId()); todoQueryWrapper.eq("REF_TYPE", QDPortEnum.POLICY_TODO_REFTYPE_POLICY_CASE.getValue()); todoQueryWrapper.eq("TODO_TYPE", QDPortEnum.POLICY_TODO_TYPE_APPROVE.getValue()); todoQueryWrapper.eq("STATUS", QDPortEnum.POLICY_TODO_STATUS_ACTIVE.getValue()); PolicyTodo todo = new PolicyTodo(); todo.setStatus(QDPortEnum.POLICY_TODO_STATUS_CANCEL.getValue()); policyTodoMapper.update(todo, todoQueryWrapper); } }