From fc030d197a869d5fecab582d36ff17be7e67cc3f Mon Sep 17 00:00:00 2001
From: guoshilong <123456>
Date: Mon, 24 Apr 2023 15:41:22 +0800
Subject: [PATCH] 巡查工作流接入

---
 skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java |  141 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 140 insertions(+), 1 deletions(-)

diff --git a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java
index 031c5d5..ae73771 100644
--- a/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java
+++ b/skjcmanager/skjcmanager-service/skjcmanager-sm/src/main/java/cn/gistack/sm/patrol/service/impl/PatrolTaskServiceImpl.java
@@ -1,26 +1,51 @@
 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;
 
 	/**
 	 * 自定义分页查询
@@ -85,4 +110,118 @@
 	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);
+		});
+	}
+
+
 }

--
Gitblit v1.9.3