|
|
|
@ -17,6 +17,7 @@ import org.dromara.common.core.utils.StringUtils;
|
|
|
|
|
import org.dromara.common.core.utils.uuid.Seq;
|
|
|
|
|
import org.dromara.common.mybatis.core.page.PageQuery;
|
|
|
|
|
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
|
|
|
|
import org.dromara.common.satoken.utils.LoginHelper;
|
|
|
|
|
import org.dromara.dms.domain.*;
|
|
|
|
|
import org.dromara.dms.domain.bo.DmsBillsMaintDetailBo;
|
|
|
|
|
import org.dromara.dms.domain.bo.DmsBillsMaintDetailProjectBo;
|
|
|
|
@ -322,11 +323,11 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
|
|
|
|
|
dmsBillsMaintInstance.setMaintStatus(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_MAINTING);
|
|
|
|
|
// 设置实际开始保养时间为当前时间
|
|
|
|
|
dmsBillsMaintInstance.setRealBeginTime(currentDate);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 【关键修复】检查工作流是否已经启动 - 先重新查询最新数据
|
|
|
|
|
// 重新查询保养实例,确保获取到最新的工作流ID(避免使用缓存中的旧数据)
|
|
|
|
|
DmsBillsMaintInstance latestInstance = baseMapper.selectById(dmsBillsMaintInstance.getMaintInstanceId());
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (latestInstance != null && latestInstance.getWfDefinitionId() == null) {
|
|
|
|
|
// 【工作流启动】创建远程启动流程对象
|
|
|
|
|
RemoteStartProcess startProcess = new RemoteStartProcess();
|
|
|
|
@ -336,22 +337,22 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
|
|
|
|
|
String businessId = dmsBillsMaintInstance.getMaintInstanceId().toString();
|
|
|
|
|
// 设置业务ID
|
|
|
|
|
startProcess.setBusinessId(businessId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
try {
|
|
|
|
|
// 启动工作流程
|
|
|
|
|
RemoteStartProcessReturn remoteStartProcessReturn = remoteWorkflowService.startWorkFlow(startProcess);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 【关键修复】获取流程实例ID和任务ID
|
|
|
|
|
Long processInstanceId = remoteStartProcessReturn.getProcessInstanceId();
|
|
|
|
|
Long taskId = remoteStartProcessReturn.getTaskId();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 如果流程实例ID为空,抛出流程启动失败异常
|
|
|
|
|
if (processInstanceId == null) {
|
|
|
|
|
throw new ServiceException("保养工作流启动失败");
|
|
|
|
|
} else {
|
|
|
|
|
// 【关键修复】存储流程实例ID到wfDefinitionId
|
|
|
|
|
dmsBillsMaintInstance.setWfDefinitionId(processInstanceId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// ** 异步线程上下文传递【核心问题】 **
|
|
|
|
|
// 1. 【捕获Token】: 在主线程里,我们先用 StpUtil.getTokenValue() 把Token拿出来,存好。
|
|
|
|
|
final String tokenValue = StpUtil.getTokenValue();
|
|
|
|
@ -385,21 +386,22 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
} else if (latestInstance != null) {
|
|
|
|
|
|
|
|
|
|
// 【关键修复】工作流已启动,根据流程实例ID查询当前活跃任务
|
|
|
|
|
// 使用最新查询到的工作流ID
|
|
|
|
|
Long processInstanceId = latestInstance.getWfDefinitionId();
|
|
|
|
|
dmsBillsMaintInstance.setWfDefinitionId(processInstanceId); // 同步更新到当前对象
|
|
|
|
|
|
|
|
|
|
log.info("保养工单 {} 工作流已启动,流程实例ID: {},查询当前活跃任务",
|
|
|
|
|
|
|
|
|
|
log.info("保养工单 {} 工作流已启动,流程实例ID: {},查询当前活跃任务",
|
|
|
|
|
dmsBillsMaintInstance.getMaintInstanceId(), processInstanceId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 根据流程实例ID获取当前活跃任务ID
|
|
|
|
|
Long currentActiveTaskId = remoteWorkflowService.getCurrentTaskIdByInstanceId(processInstanceId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (currentActiveTaskId != null) {
|
|
|
|
|
log.info("保养工单 {} 找到当前活跃任务ID: {}",
|
|
|
|
|
log.info("保养工单 {} 找到当前活跃任务ID: {}",
|
|
|
|
|
dmsBillsMaintInstance.getMaintInstanceId(), currentActiveTaskId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 直接推进工作流
|
|
|
|
|
RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask();
|
|
|
|
|
remoteCompleteTask.setTaskId(currentActiveTaskId);
|
|
|
|
@ -408,7 +410,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
|
|
|
|
|
List<String> messageTypes = new ArrayList<>();
|
|
|
|
|
messageTypes.add("user"); // 用户操作
|
|
|
|
|
remoteCompleteTask.setMessageType(messageTypes);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
boolean taskCompleted = remoteWorkflowService.completeTask(remoteCompleteTask);
|
|
|
|
|
if (!taskCompleted) {
|
|
|
|
|
log.error("保养工作流推进失败,任务ID: {}", currentActiveTaskId);
|
|
|
|
@ -429,13 +431,15 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
|
|
|
|
|
// 更新保养明细信息
|
|
|
|
|
dmsBillsMaintDetailMapper.updateById(dmsBillsMaintDetail);
|
|
|
|
|
|
|
|
|
|
// 更新保养工单信息
|
|
|
|
|
baseMapper.updateById(dmsBillsMaintInstance);
|
|
|
|
|
}
|
|
|
|
|
// else {//保养中
|
|
|
|
|
// // 更新人不为空,则设置更新人为当前用户,更新时间为当前时间
|
|
|
|
|
// dmsBillsMaintDetail.setUpdateBy(userName);
|
|
|
|
|
// dmsBillsMaintDetail.setUpdateTime(currentDate);
|
|
|
|
|
// dmsBillsMaintDetailMapper.updateDmsBillsMaintDetail(dmsBillsMaintDetail);
|
|
|
|
|
// }
|
|
|
|
|
else {//保养中
|
|
|
|
|
// 更新人不为空,则设置更新人为当前用户,更新时间为当前时间
|
|
|
|
|
dmsBillsMaintDetail.setUpdateBy(LoginHelper.getUserId());
|
|
|
|
|
dmsBillsMaintDetail.setUpdateTime(currentDate);
|
|
|
|
|
dmsBillsMaintDetailMapper.updateById(dmsBillsMaintDetail);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 创建查询保养明细项目的对象
|
|
|
|
|
DmsBillsMaintDetailProjectBo queryBillsMaintDetailProject = new DmsBillsMaintDetailProjectBo();
|
|
|
|
@ -445,13 +449,13 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
|
|
|
|
|
List<DmsBillsMaintDetailProjectVo> dmsBillsMaintDetailProjects = dmsBillsMaintInstanceProjectService.queryList(queryBillsMaintDetailProject);
|
|
|
|
|
// 设置保养明细的项目列表
|
|
|
|
|
dmsBillsMaintDetail.setDmsBillsMaintDetailProjectList(dmsBillsMaintDetailProjects);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 【关键修复】重新查询完整的保养明细信息,包含关联字段
|
|
|
|
|
// 使用关联查询方法获取完整的保养明细信息,包括设备名称、保养部位名称等
|
|
|
|
|
DmsBillsMaintDetail queryDetail = new DmsBillsMaintDetail();
|
|
|
|
|
queryDetail.setBillsMaintDetailId(dmsBillsMaintDetail.getBillsMaintDetailId());
|
|
|
|
|
List<DmsBillsMaintDetailVo> detailVoList = dmsBillsMaintDetailMapper.selectDmsBillsMaintDetailJoinList(queryDetail);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (!detailVoList.isEmpty()) {
|
|
|
|
|
DmsBillsMaintDetailVo detailVo = detailVoList.get(0);
|
|
|
|
|
// 将关联查询到的字段赋值给返回对象
|
|
|
|
@ -462,7 +466,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
|
|
|
|
|
dmsBillsMaintDetail.setMaintProtocol(detailVo.getMaintProtocol());
|
|
|
|
|
dmsBillsMaintDetail.setMaintOperationDescription(detailVo.getMaintOperationDescription());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 返回更新后的保养明细对象
|
|
|
|
|
return dmsBillsMaintDetail;
|
|
|
|
|
}
|
|
|
|
@ -483,7 +487,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
|
|
|
|
|
log.error("保养工单工作流信息更新失败,maintInstanceId: {}", dmsBillsMaintInstance.getMaintInstanceId());
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// 【自动推进工作流】完成第一步任务,推进到下一步
|
|
|
|
|
RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask();
|
|
|
|
|
// 设置任务ID
|
|
|
|
@ -500,7 +504,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
|
|
|
|
|
if (!b){
|
|
|
|
|
return false;
|
|
|
|
|
}else{
|
|
|
|
|
// 更新保养实例信息
|
|
|
|
|
// 更新保养工单信息
|
|
|
|
|
int i = baseMapper.updateById(dmsBillsMaintInstance);
|
|
|
|
|
return i > 0;
|
|
|
|
|
}
|
|
|
|
@ -564,7 +568,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
|
|
|
|
|
// 而是根据业务ID动态获取当前活跃的任务ID
|
|
|
|
|
String businessId = maintInstanceId.toString();
|
|
|
|
|
Long currentActiveTaskId = remoteWorkflowService.getCurrentActiveTaskId(businessId);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (currentActiveTaskId != null) {
|
|
|
|
|
RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask();
|
|
|
|
|
remoteCompleteTask.setTaskId(currentActiveTaskId); // 使用当前活跃任务ID
|
|
|
|
|