package cn.gistack.sm.reportFlood.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.PatrolTask;
|
import cn.gistack.sm.reportFlood.entity.ReportFloodRecord;
|
import cn.gistack.sm.reportFlood.mapper.ReportFloodRecordMapper;
|
import cn.gistack.sm.reportFlood.service.IReportFloodRecordService;
|
import cn.gistack.sm.reportFlood.vo.ReportFloodRecordVO;
|
import cn.gistack.sm.sjztmd.constant.PersonType;
|
import cn.gistack.sm.sjztmd.entity.AttResManagePerson;
|
import cn.gistack.sm.sjztmd.service.IAttResManagePersonService;
|
import cn.gistack.system.user.entity.User;
|
import cn.gistack.system.user.feign.IUserClient;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import lombok.AllArgsConstructor;
|
import org.apache.ibatis.annotations.Param;
|
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.Func;
|
import org.springblade.core.tool.utils.ObjectUtil;
|
import org.springblade.core.tool.utils.StringUtil;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
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 ReportFloodRecordServiceImpl extends BaseServiceImpl<ReportFloodRecordMapper, ReportFloodRecord> implements IReportFloodRecordService {
|
private final IFlowClient flowClient;
|
private final IAttResManagePersonService attResManagePersonService;
|
private final IUserClient userClient;
|
|
@Override
|
public IPage<ReportFloodRecord> selectReportFloodRecordPages(IPage<ReportFloodRecord> page, ReportFloodRecord reportFloodRecord) {
|
return page.setRecords(baseMapper.selectReportFloodRecordPages(page,reportFloodRecord));
|
}
|
|
@Override
|
@Transactional(rollbackFor = Exception.class)
|
public boolean startProcess(ReportFloodRecordVO reportFloodRecord) {
|
String businessTable = FlowUtil.getBusinessTable(ProcessConstant.REPORT_FLOOD_KEY);
|
if (Func.isEmpty(reportFloodRecord.getId())) {
|
save(reportFloodRecord);
|
// 启动流程
|
Kv variables = Kv.create()
|
.set(ProcessConstant.TASK_VARIABLE_CREATE_USER, reportFloodRecord.getCreateUser())
|
.set("taskUser", StringUtil.format("{}{}", TASK_USR_PREFIX, reportFloodRecord.getTaskUser()));
|
R<BladeFlow> result = flowClient.startProcessInstanceById(reportFloodRecord.getProcessDefinitionId(), FlowUtil.getBusinessKey(businessTable, String.valueOf(reportFloodRecord.getId())), variables);
|
if (result.isSuccess()) {
|
log.debug("流程已启动,流程ID:" + result.getData().getProcessInstanceId());
|
// 返回流程id写入
|
reportFloodRecord.setProcessInstanceId(result.getData().getProcessInstanceId());
|
updateById(reportFloodRecord);
|
|
// //状态正常直接结束任务
|
ReportFloodRecordVO reportFloodRecordVO = new ReportFloodRecordVO();
|
reportFloodRecordVO.setProcessInstanceId(reportFloodRecord.getProcessInstanceId());
|
//业务id
|
String businessId = reportFloodRecord.getId().toString();
|
//当前用户id
|
String currentUserId = reportFloodRecord.getCreateUser().toString();
|
//指定下一人
|
String taskUser = reportFloodRecord.getTaskUser();
|
R<BladeFlow> res = flowClient.getBladeFlow(businessId,currentUserId);
|
//参数设置
|
if (res.isSuccess()){
|
reportFloodRecordVO.setFlow(res.getData());
|
if (Func.equals(reportFloodRecord.getStatus(),1)){
|
//状态正常结束任务
|
reportFloodRecordVO.setReport(false);
|
}else{
|
//异常
|
if (Func.equals(reportFloodRecord.getSolution(),"1")){
|
//自行处理
|
return true;
|
}else {
|
//上报给技术责任人
|
reportFloodRecordVO.setReport(true);
|
}
|
}
|
}
|
completeTask(reportFloodRecordVO,taskUser,currentUserId);
|
} else {
|
throw new ServiceException("开启流程失败");
|
}
|
} else {
|
updateById(reportFloodRecord);
|
}
|
return true;
|
}
|
|
@Override
|
public boolean completeTask(ReportFloodRecordVO reportFloodRecord, String taskUser, String currentUser) {
|
BladeFlow flow = reportFloodRecord.getFlow();
|
String taskId = flow.getTaskId();
|
String processInstanceId = reportFloodRecord.getProcessInstanceId();
|
String comment = "完成";
|
// 创建变量
|
Map<String, Object> variables = flow.getVariables();
|
if (variables == null) {
|
variables = Kv.create();
|
}
|
//指定是否上报
|
variables.put(ProcessConstant.REPORT_KEY,reportFloodRecord.isReport());
|
//指定转交人
|
variables.put("taskUser", StringUtil.format("{}{}", TASK_USR_PREFIX, taskUser));
|
// 完成任务
|
flowClient.completeTask(taskId,processInstanceId,comment,variables);
|
return true;
|
}
|
|
@Override
|
public ReportFloodRecordVO customizeGetDetail(String businessId) {
|
return baseMapper.customizeGetDetail(businessId);
|
}
|
|
/**
|
* 根据水库id和责任人类型获取用户
|
* @param type 责任人类型
|
* @param resGuid 水库id
|
* @return
|
*/
|
public User getUser(String type,String resGuid){
|
AttResManagePerson attResManagePerson = new AttResManagePerson();
|
attResManagePerson.setResGuid(resGuid);
|
List<AttResManagePerson> list = attResManagePersonService.list(Condition.getQueryWrapper(attResManagePerson));
|
|
//person_type人员类型: 1行政责任人,2主管责任人,3技术责任人,4管理责任人,5巡查责任人(确认)
|
list.stream().filter(e->Func.equals(type,e.getType())).collect(Collectors.toList());
|
attResManagePerson = list.get(0);
|
R<List<User>> res = userClient.userInfoByPhone("000000", attResManagePerson.getUserPhone());
|
if (res.isSuccess()){
|
return res.getData().get(0);
|
}else {
|
return null;
|
}
|
}
|
}
|