feat(dms): 优化待巡检工单

- 在 DmsBaseMaintStationVo 中添加标准编号字段
- 新增点巡检工单生成逻辑,包括工单编号生成和负责人员设置
- 在 Seq 类中添加检查工单序列相关常量
master
zch 5 days ago
parent e05196aaa2
commit 3e5d70a916

@ -66,6 +66,15 @@ public class Seq {
// 检查工单序列类型
public static final String dmsInspectInstanceSeqType = "INSPECTINSTANCE";
// 检查工单接口序列数
private static AtomicInteger dmsInspectInstanceSeq = new AtomicInteger(1);
// 检查工单标识
public static final String dmsInspectInstanceCode = "IIC";
//检修计划序列类型
public static final String planRepairSeqType = "PLANREPAIR";
@ -180,6 +189,8 @@ public class Seq {
atomicInt = dmsPlanLubeSeq;
}else if (dmsLubeInstanceSeqType.equals(type)) {
atomicInt = dmsLubeInstanceSeq;
}else if (dmsInspectInstanceSeqType.equals(type)) {
atomicInt = dmsInspectInstanceSeq;
}else if (planMaintSeqType.equals(type)) {
atomicInt = planMaintSeq;
}else if(maintInstanceSeqType.equals(type)) {

@ -75,6 +75,11 @@ public class DmsBaseMaintStationVo implements Serializable {
*/
private String deviceTypeName;//JOIN
/**
*
*/
private String maintStandardCode;//JOIN
@ExcelProperty(value = "保养项目")
private List<DmsBaseMaintProjectVo> dmsBaseMaintProjectList;

@ -13,6 +13,7 @@ import org.apache.dubbo.rpc.RpcContext;
import org.dromara.common.core.constant.DmsConstants;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.utils.ObjectUtils;
import org.dromara.common.core.utils.uuid.Seq;
import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.dms.api.RemoteInspectInstanceService;
import org.dromara.dms.domain.*;
@ -80,7 +81,7 @@ public class RemoteInspectInstanceServiceImpl implements RemoteInspectInstanceSe
// 【关键修复】存储流程实例ID而不是任务ID
Long processInstanceId = result.getProcessInstanceId();
Long taskId = result.getTaskId();
// 【简化方案】异步处理工作流推进,避免死锁
CompletableFuture.runAsync(TtlRunnable.get(() -> {
try {
@ -155,12 +156,14 @@ public class RemoteInspectInstanceServiceImpl implements RemoteInspectInstanceSe
// 创建新的检查实例对象
DmsBillsInspectInstance dmsBillsInspectInstance = new DmsBillsInspectInstance();
// 设置检查实例的相关属性
// 设置工单编号
dmsBillsInspectInstance.setBillsInspectCode(Seq.getId(Seq.dmsInspectInstanceSeqType, Seq.dmsInspectInstanceCode));
dmsBillsInspectInstance.setPlanInspectId(dmsPlanInspect.getPlanInspectId());
dmsBillsInspectInstance.setInspectType(dmsPlanInspect.getInspectType());//检查类型(1巡检 2点检)
dmsBillsInspectInstance.setPlanBeginTime(dmsPlanInspect.getPlanTime());
dmsBillsInspectInstance.setPlanEndTime(new Date(dmsPlanInspect.getPlanTime().getTime()+dmsPlanInspect.getTimeLimit()*1000l));
dmsBillsInspectInstance.setInspectRouteId(dmsPlanInspect.getInspectRouteId());
dmsBillsInspectInstance.setPerformer(dmsPlanInspect.getPerformer());//执行人
dmsBillsInspectInstance.setPerformer(dmsPlanInspect.getPerformer());//负责人员
dmsBillsInspectInstance.setInspectStatus(DmsConstants.DMS_BILLS_INSPECT_INSTANCE_INSPECT_STATUS_TO_INSPECT);//待巡检
dmsBillsInspectInstance.setCreateBy(userId);
dmsBillsInspectInstance.setTenantId(tenantId);

@ -83,10 +83,10 @@ public class RemoteLubeInstanceServiceImpl implements RemoteLubeInstanceService
RemoteStartProcess remoteStartProcess = new RemoteStartProcess();
remoteStartProcess.setBusinessId(businessId);
remoteStartProcess.setFlowCode(DmsConstants.DMS_BILLS_LUBE_INSTANCE_WF_CODE);
// 【重要】通过Dubbo隐式参数传递租户ID
RpcContext.getContext().setAttachment("tenantId", tenantId);
RemoteStartProcessReturn result = remoteWorkflowService.startWorkFlow(remoteStartProcess);
//TODO:赋值给工单的wfid
if(ObjectUtils.isEmpty(result)){
@ -95,7 +95,7 @@ public class RemoteLubeInstanceServiceImpl implements RemoteLubeInstanceService
// 【关键修复】存储流程实例ID而不是任务ID
Long processInstanceId = result.getProcessInstanceId();
Long taskId = result.getTaskId();
// 【简化方案】直接在异步线程中重新登录相同用户避免Token传递复杂性
CompletableFuture.runAsync(TtlRunnable.get(() -> {
try {

@ -775,7 +775,7 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS
try {
// 根据repairInstanceId查询故障实例及其关联的设备和第一条活动记录
DmsBillsFaultInstanceVo dmsBillsFaultInstance = baseMapper.selectFaultInstanceJoinFirstAndDeviceById(repairInstanceId);
if (dmsBillsFaultInstance == null) {
throw new ServiceException("工单不存在repairInstanceId: " + repairInstanceId);
}
@ -829,14 +829,14 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS
// 返回故障实例对象
return dmsBillsFaultInstance;
} catch (Exception e) {
log.error("查询工单详情异常repairInstanceId: {}", repairInstanceId, e);
// 如果是查询返回多条记录的异常,尝试备用查询方案
if (e.getMessage() != null && e.getMessage().contains("Expected one result")) {
log.warn("检测到查询返回多条记录异常尝试备用查询方案repairInstanceId: {}", repairInstanceId);
// 备用方案:查询工单基本信息和最新的活动记录
DmsBillsFaultInstanceVo workOrder = baseMapper.selectVoById(repairInstanceId);
if (workOrder != null) {
@ -847,7 +847,7 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS
.orderByDesc(DmsFaultInstanceActivity::getInstanceActivityId)
.last("LIMIT 1");
DmsFaultInstanceActivity latestActivity = dmsFaultInstanceActivityMapper.selectOne(wrapper);
if (latestActivity != null) {
// 设置活动相关信息
workOrder.setInstanceActivityId(latestActivity.getInstanceActivityId());
@ -858,13 +858,13 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS
workOrder.setOutsourcingId(latestActivity.getOutsourcingId());
workOrder.setProcessHandleResolution(latestActivity.getProcessHandleResolution());
}
log.info("备用查询方案成功repairInstanceId: {}, instanceActivityId: {}",
log.info("备用查询方案成功repairInstanceId: {}, instanceActivityId: {}",
repairInstanceId, workOrder.getInstanceActivityId());
return workOrder;
}
}
throw new ServiceException("查询工单详情失败:" + e.getMessage());
}
}

Loading…
Cancel
Save