package com.qdport.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.qdport.entity.PolicyFile; import com.qdport.entity.PolicyTodo; 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.PolicyFileService; import com.qdport.service.PolicyFlowNoService; import com.qdport.service.PolicyShareService; import com.qdport.enums.QDPortEnum; import com.qdport.util.StringUtil; import com.qdport.vo.PolicyFileVO; import com.qdport.workflow.process.model.WfProcess; import com.qdport.workflow.process.service.IWfProcessService; import com.qdport.entity.PolicyShare; import com.qdport.query.PolicyShareQuery; import com.qdport.vo.PolicyShareVO; import com.qdport.mapper.PolicyShareMapper; import com.qdport.wrapper.PolicyShareWrapper; import com.qdport.core.tool.utils.BeanUtil; import org.flowable.engine.HistoryService; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Date; import java.util.List; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.stream.Collectors; /** * 政策共享 * * @author yuheng * @since 1.0.0 2024-09-30 */ @Service public class PolicyShareServiceImpl extends ServiceImpl implements PolicyShareService { @Resource private PolicyFlowNoService policyFlowNoService; @Resource private PolicyFileService policyFileService; @Resource private IWfProcessService processService; @Resource private PolicyTodoMapper policyTodoMapper; @Resource private TSysUserService sysUserService; @Value("${processDefKey.policyShare}") private String processDefKey; @Override public IPage page(PolicyShareQuery query) { IPage page = new Page<>(query.getPage(), query.getSize()); page = baseMapper.selectPage(page, getWrapper(query)); return PolicyShareWrapper.build().pageVO(page); } private QueryWrapper getWrapper(PolicyShareQuery query) { QueryWrapper wrapper = QueryWrapperBuilder.buildQueryWrapper(query, PolicyShare.class); wrapper.orderByDesc("CREATE_TIME"); if(StringUtil.isNotEmpty(query.getCreateId())&& StringUtil.isNotEmpty(query.getUserDeptId())){ wrapper.apply("(CREATE_ID = " + query.getCreateId() + " or DEPT_ID = " + query.getUserDeptId() + ")"); } return wrapper; } @Override @Transactional(rollbackFor = Exception.class) public void save(PolicyShareVO vo) { String flowNo = policyFlowNoService.getFlowNo(QDPortEnum.FLOWNO_TYPE_SHARE.getValue()); vo.setCreateTime(new Date()); vo.setUpdateTime(new Date()); vo.setBusinessNo(flowNo); PolicyShare entity = BeanUtil.copy(vo, PolicyShare.class); baseMapper.insert(entity); vo.setId(entity.getId()); QueryWrapper fileWrapper = new QueryWrapper<>(); fileWrapper.eq("REF_ID", entity.getId()); fileWrapper.eq("REF_TYPE", QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue()); policyFileService.remove(fileWrapper); List fileList = vo.getFileList(); for (PolicyFileVO model : fileList) { model.setCreateTime(new Date()); model.setRefId(entity.getId()); model.setRefType(QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue()); policyFileService.save(model); } } @Override @Transactional(rollbackFor = Exception.class) public void update(PolicyShareVO vo) { vo.setUpdateTime(new Date()); PolicyShare entity = BeanUtil.copy(vo, PolicyShare.class); updateById(entity); QueryWrapper fileWrapper = new QueryWrapper<>(); fileWrapper.eq("REF_ID", entity.getId()); fileWrapper.eq("REF_TYPE", QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue()); policyFileService.remove(fileWrapper); List fileList = vo.getFileList(); for (PolicyFileVO model : fileList) { model.setCreateTime(new Date()); model.setRefId(entity.getId()); model.setRefType(QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue()); policyFileService.save(model); } } @Override public void updateById(PolicyShareVO vo) { vo.setUpdateTime(new Date()); PolicyShare entity = BeanUtil.copy(vo, PolicyShare.class); updateById(entity); } @Override @Transactional(rollbackFor = Exception.class) public void delete(List idList) { removeByIds(idList); QueryWrapper fileWrapper = new QueryWrapper<>(); fileWrapper.in("REF_ID", idList); fileWrapper.eq("REF_TYPE", QDPortEnum.POLICY_FILE_REFTYPE_POLICY_SHARE.getValue()); policyFileService.remove(fileWrapper); } @Override @Transactional(rollbackFor = Exception.class) public void saveApprove(PolicyShareVO 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_SHARE_STATUS_APPROVE.getValue()); save(vo); } else { vo.setStatus(QDPortEnum.POLICY_SHARE_STATUS_APPROVE.getValue()); update(vo); } } @Override @Transactional(rollbackFor = Exception.class) public void approve(PolicyShareVO vo) { PolicyShare share = baseMapper.selectById(vo.getId()); vo.setProcessInstanceId(share.getProcessInstanceId()); vo.setProcessTaskId(share.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); updateById(vo); } @Override @Transactional(rollbackFor = Exception.class) public void refuse(PolicyShareVO vo) { PolicyShare share = baseMapper.selectById(vo.getId()); vo.setProcessDefinitionId(share.getProcessDefinitionId()); vo.setProcessTaskId(share.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_SHARE_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_SHARE.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(PolicyShareVO vo) { PolicyShare share = baseMapper.selectById(vo.getId()); vo.setProcessTaskId(share.getProcessTaskId()); WfProcess process = new WfProcess(); process.setTaskId(vo.getProcessTaskId()); process.setWithdrawType("wf_withdraw_end"); processService.terminateProcess(process); vo.setStatus(QDPortEnum.POLICY_SHARE_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_SHARE.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); } }