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

- 在 DmsBaseMaintStationVo 中添加标准编号字段
- 新增点巡检工单生成逻辑,包括工单编号生成和负责人员设置
- 在 Seq 类中添加检查工单序列相关常量
master
zch 4 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"; public static final String planRepairSeqType = "PLANREPAIR";
@ -180,6 +189,8 @@ public class Seq {
atomicInt = dmsPlanLubeSeq; atomicInt = dmsPlanLubeSeq;
}else if (dmsLubeInstanceSeqType.equals(type)) { }else if (dmsLubeInstanceSeqType.equals(type)) {
atomicInt = dmsLubeInstanceSeq; atomicInt = dmsLubeInstanceSeq;
}else if (dmsInspectInstanceSeqType.equals(type)) {
atomicInt = dmsInspectInstanceSeq;
}else if (planMaintSeqType.equals(type)) { }else if (planMaintSeqType.equals(type)) {
atomicInt = planMaintSeq; atomicInt = planMaintSeq;
}else if(maintInstanceSeqType.equals(type)) { }else if(maintInstanceSeqType.equals(type)) {

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

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

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

Loading…
Cancel
Save