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;
|
|
/**
|
* 自定义分页查询
|
* @param page
|
* @param patrolTask
|
* @return
|
*/
|
@Override
|
public IPage<PatrolTaskVO> selectPatrolTask(IPage<PatrolTaskVO> page, PatrolTaskVO patrolTask) {
|
List<PatrolTaskVO> patrolTaskList = baseMapper.selectPatrolTask(page, patrolTask);
|
return page.setRecords(patrolTaskList);
|
}
|
|
/**
|
* 查询巡查人员统计数据信息
|
* @param patrolTask
|
* @return
|
*/
|
@Override
|
public Object getPatrolTaskStatistic(PatrolTaskVO patrolTask) {
|
return baseMapper.getPatrolTaskStatistic(patrolTask);
|
}
|
|
/**
|
* 自定义编辑(空间坐标编辑)
|
* @param patrolTask
|
* @return
|
*/
|
@Override
|
public Boolean updatePatrolTask(PatrolTask patrolTask) {
|
// 设置基础信息
|
EnhancementServicesTool enhancementServicesTool = new EnhancementServicesTool();
|
enhancementServicesTool.resolveEntity(patrolTask);
|
Integer update = baseMapper.updatePatrolTask(patrolTask);
|
//返回
|
return update>0?true:false;
|
}
|
|
/**
|
* 自定义添加
|
* @param patrolTask
|
* @return
|
*/
|
@Override
|
public Boolean savePatrolTask(PatrolTask patrolTask) {
|
// 设置基础信息
|
EnhancementServicesTool enhancementServicesTool = new EnhancementServicesTool();
|
enhancementServicesTool.resolveEntity(patrolTask);
|
patrolTask.setId(IdWorker.getId());
|
// 新增
|
Integer save = baseMapper.savePatrolTask(patrolTask);
|
//返回
|
return save>0?true:false;
|
}
|
|
/**
|
* 自定义通过id查询
|
* @param id
|
* @return
|
*/
|
@Override
|
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);
|
});
|
}
|
|
|
}
|