| | |
| | | package cn.gistack.sm.patrol.service.impl; |
| | | |
| | | import cn.gistack.flow.core.constant.ProcessConstant; |
| | | import cn.gistack.flow.core.entity.BladeFlow; |
| | | import cn.gistack.flow.core.feign.IFlowClient; |
| | | import cn.gistack.flow.core.utils.FlowUtil; |
| | | import cn.gistack.flow.core.utils.TaskUtil; |
| | | import cn.gistack.sm.patrol.entity.PatrolRecord; |
| | | import cn.gistack.sm.patrol.entity.PatrolReport; |
| | | import cn.gistack.sm.patrol.entity.PatrolTask; |
| | | import cn.gistack.sm.patrol.mapper.PatrolTaskMapper; |
| | | import cn.gistack.sm.patrol.service.IPatrolRecordService; |
| | | import cn.gistack.sm.patrol.service.IPatrolReportService; |
| | | import cn.gistack.sm.patrol.service.IPatrolTaskService; |
| | | import cn.gistack.sm.patrol.util.EnhancementServicesTool; |
| | | import cn.gistack.sm.patrol.util.IdWorker; |
| | | import cn.gistack.sm.patrol.vo.BladeFlowTask; |
| | | import cn.gistack.sm.patrol.vo.PatrolTaskVO; |
| | | import com.baomidou.mybatisplus.core.metadata.IPage; |
| | | import lombok.AllArgsConstructor; |
| | | import org.springblade.core.log.exception.ServiceException; |
| | | import org.springblade.core.mp.base.BaseServiceImpl; |
| | | import org.springblade.core.mp.support.Condition; |
| | | import org.springblade.core.secure.utils.AuthUtil; |
| | | import org.springblade.core.tool.api.R; |
| | | import org.springblade.core.tool.support.Kv; |
| | | import org.springblade.core.tool.utils.DateUtil; |
| | | import org.springblade.core.tool.utils.Func; |
| | | import org.springblade.core.tool.utils.StringUtil; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | |
| | | import java.net.http.HttpRequest; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static org.springblade.core.launch.constant.FlowConstant.TASK_USR_PREFIX; |
| | | |
| | | @Service |
| | | @AllArgsConstructor |
| | | public class PatrolTaskServiceImpl extends BaseServiceImpl<PatrolTaskMapper, PatrolTask> implements IPatrolTaskService { |
| | | |
| | | private final IFlowClient flowClient; |
| | | private final IPatrolRecordService patrolRecordService; |
| | | private final IPatrolReportService patrolReportService; |
| | | |
| | | /** |
| | | * 自定义分页查询 |
| | |
| | | public PatrolTask getPatrolTaskById(String id) { |
| | | return baseMapper.getPatrolTaskById(id); |
| | | } |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public boolean startProcess(PatrolTask patrolTask) { |
| | | String businessTable = FlowUtil.getBusinessTable(ProcessConstant.PATROL_KEY); |
| | | if (Func.isEmpty(patrolTask.getId())) { |
| | | save(patrolTask); |
| | | // 启动流程 |
| | | Kv variables = Kv.create() |
| | | .set(ProcessConstant.TASK_VARIABLE_CREATE_USER, AuthUtil.getUserId()) |
| | | .set("taskUser", TaskUtil.getTaskUser(patrolTask.getToUserId())); |
| | | R<BladeFlow> result = flowClient.startProcessInstanceById(patrolTask.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(patrolTask.getId())), variables); |
| | | if (result.isSuccess()) { |
| | | log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId()); |
| | | // 返回流程id写入leave |
| | | patrolTask.setProcessInstanceId(result.getData().getProcessInstanceId()); |
| | | updateById(patrolTask); |
| | | } else { |
| | | throw new ServiceException("开启流程失败"); |
| | | } |
| | | } else { |
| | | updateById(patrolTask); |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | @Override |
| | | @Transactional |
| | | public boolean patrolCompleteTask(PatrolTask patrolTask,String currentUserId) { |
| | | R<BladeFlow> res = flowClient.getBladeFlow(patrolTask.getId().toString(),currentUserId); |
| | | if (res.isSuccess()){ |
| | | BladeFlow flow = res.getData(); |
| | | String taskId = flow.getTaskId(); |
| | | String processInstanceId = patrolTask.getProcessInstanceId(); |
| | | // String comment = Func.toStr(flow.getComment(), ProcessConstant.PASS_COMMENT); |
| | | String comment = "完成"; |
| | | // 创建变量 |
| | | Map<String, Object> variables = flow.getVariables(); |
| | | if (variables == null) { |
| | | variables = Kv.create(); |
| | | } |
| | | variables.put(ProcessConstant.REPORT_KEY,patrolTask.getReport()); |
| | | variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, "1650048152667467777")); |
| | | // 完成任务 |
| | | flowClient.completeTask(taskId,processInstanceId,comment,variables); |
| | | saveReport(patrolTask); |
| | | return baseMapper.updateById(patrolTask) >0; |
| | | }else { |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public boolean chargeCompletePerson(BladeFlowTask bladeFlowTask) { |
| | | //判断是否上报 |
| | | boolean isReport = false; |
| | | List<PatrolReport> collect = bladeFlowTask.getPatrolReportList().stream().filter(report -> Func.equals(report.getStatus(), 2)).collect(Collectors.toList()); |
| | | if (collect.size()>0){ |
| | | isReport = true; |
| | | } |
| | | //更新report表 |
| | | boolean update = patrolReportService.updateBatchById(bladeFlowTask.getPatrolReportList()); |
| | | |
| | | String taskId = bladeFlowTask.getTaskId(); |
| | | String processInstanceId = bladeFlowTask.getProcessInstanceId(); |
| | | String comment = "完成"; |
| | | // 创建变量 |
| | | Map<String, Object> variables = new HashMap<>(); |
| | | if (variables == null) { |
| | | variables = Kv.create(); |
| | | } |
| | | //指定下一个人 |
| | | variables.put("taskUser",StringUtil.format("{}{}", TASK_USR_PREFIX, bladeFlowTask.getTaskUser())); |
| | | //指定是否上报 |
| | | variables.put(ProcessConstant.REPORT_KEY,isReport); |
| | | //指定是否上报给部门 |
| | | variables.put(ProcessConstant.TODEPT_KEY,bladeFlowTask.getToDept()); |
| | | //指定是否转交 |
| | | variables.put(ProcessConstant.TOTECH_KEY,bladeFlowTask.getToTech()); |
| | | //完成任务 |
| | | flowClient.completeTask(taskId, processInstanceId, comment, variables); |
| | | return update; |
| | | } |
| | | |
| | | @Override |
| | | public PatrolTask customizeGetById(String businessId) { |
| | | return baseMapper.customizeGetById(businessId); |
| | | } |
| | | |
| | | public void saveReport(PatrolTask patrolTask){ |
| | | //拿到当前任务下的异常巡查记录 |
| | | PatrolRecord patrolRecord = new PatrolRecord(); |
| | | patrolRecord.setTaskId(patrolTask.getId().toString()); |
| | | patrolRecord.setStatus(2); |
| | | patrolRecord.setSolution("2"); |
| | | List<PatrolRecord> list = patrolRecordService.list(Condition.getQueryWrapper(patrolRecord)); |
| | | |
| | | //向上报表中添加数据 |
| | | list.forEach(record->{ |
| | | PatrolReport patrolReport = new PatrolReport(); |
| | | patrolReport.setContent(record.getContent()); |
| | | patrolReport.setImages(record.getImages()); |
| | | patrolReport.setVideos(record.getVideos()); |
| | | patrolReport.setItemId(record.getItemId()); |
| | | patrolReport.setSolution(record.getSolution()); |
| | | patrolReport.setTaskId(record.getTaskId()); |
| | | patrolReport.setRecordId(record.getId().toString()); |
| | | patrolReport.setStatus(record.getStatus()); |
| | | |
| | | patrolReportService.save(patrolReport); |
| | | }); |
| | | } |
| | | |
| | | |
| | | } |