diff --git a/ruoyi-api/hwmom-api-dms/pom.xml b/ruoyi-api/hwmom-api-dms/pom.xml
new file mode 100644
index 0000000..1ddcfbc
--- /dev/null
+++ b/ruoyi-api/hwmom-api-dms/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ org.dromara
+ ruoyi-api
+ ${revision}
+
+ 4.0.0
+
+ hwmom-api-dms
+
+
+ hwmom-api-dms dms接口模块
+
+
+
+
+
+
+ org.dromara
+ ruoyi-common-core
+
+
+
+ org.dromara
+ ruoyi-common-excel
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+ com.aizuda
+ snail-job-client-job-core
+
+
+
+
+
diff --git a/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteInspectInstanceService.java b/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteInspectInstanceService.java
new file mode 100644
index 0000000..a737557
--- /dev/null
+++ b/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteInspectInstanceService.java
@@ -0,0 +1,9 @@
+package org.dromara.dms.api;
+
+import org.dromara.common.core.domain.R;
+
+public interface RemoteInspectInstanceService {
+
+ public R insertInspectInstance(String planInspectCode);
+
+}
diff --git a/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteLubeInstanceService.java b/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteLubeInstanceService.java
new file mode 100644
index 0000000..52ad696
--- /dev/null
+++ b/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteLubeInstanceService.java
@@ -0,0 +1,13 @@
+package org.dromara.dms.api;
+
+
+import org.dromara.common.core.domain.R;
+
+public interface RemoteLubeInstanceService {
+
+
+ public R insertLubeInstance(String lubeInstanceCode);
+
+
+
+}
diff --git a/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteMaintInstanceService.java b/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteMaintInstanceService.java
new file mode 100644
index 0000000..3fd1c70
--- /dev/null
+++ b/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteMaintInstanceService.java
@@ -0,0 +1,8 @@
+package org.dromara.dms.api;
+
+import org.dromara.common.core.domain.R;
+
+public interface RemoteMaintInstanceService {
+
+ public R insertDmsBillsMaintInstance(String planMaintCode);
+}
diff --git a/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteRepairStanceService.java b/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteRepairStanceService.java
new file mode 100644
index 0000000..5b8837f
--- /dev/null
+++ b/ruoyi-api/hwmom-api-dms/src/main/java/org/dromara/dms/api/RemoteRepairStanceService.java
@@ -0,0 +1,9 @@
+package org.dromara.dms.api;
+
+import org.dromara.common.core.domain.R;
+
+public interface RemoteRepairStanceService {
+
+ public R insertDmsRepairInstance(String planRepairCode);
+
+}
diff --git a/ruoyi-api/ruoyi-api-job/pom.xml b/ruoyi-api/ruoyi-api-job/pom.xml
new file mode 100644
index 0000000..63dc136
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-job/pom.xml
@@ -0,0 +1,42 @@
+
+
+
+ org.dromara
+ ruoyi-api
+ ${revision}
+
+ 4.0.0
+
+ ruoyi-api-job
+
+
+ ruoyi-api-job job接口模块
+
+
+
+
+
+
+ org.dromara
+ ruoyi-common-core
+
+
+
+ org.dromara
+ ruoyi-common-excel
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+ com.aizuda
+ snail-job-client-job-core
+
+
+
+
+
diff --git a/ruoyi-api/ruoyi-api-job/src/main/java/org/dromara/job/api/RemoteJobService.java b/ruoyi-api/ruoyi-api-job/src/main/java/org/dromara/job/api/RemoteJobService.java
new file mode 100644
index 0000000..6b8aae1
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-job/src/main/java/org/dromara/job/api/RemoteJobService.java
@@ -0,0 +1,50 @@
+package org.dromara.job.api;
+
+import com.aizuda.snailjob.client.job.core.dto.JobResponseVO;
+import org.dromara.common.core.domain.R;
+import org.dromara.job.api.model.DmsJobEntity;
+
+/**
+ * 物料接口
+ *
+ * @author Yinq
+ */
+public interface RemoteJobService {
+
+
+ /**
+ * 新增集群模式的任务
+ *
+ * @param dmsJobEntity 实体类
+ * @return 任务id
+ */
+ public R addClusterJob(DmsJobEntity dmsJobEntity);
+
+ /**
+ * 修改集群模式的任务
+ */
+ public R updateClusterJob(DmsJobEntity dmsJobEntity);
+
+ /**
+ * 查看任务详情
+ *
+ * @param jobId
+ * @return 任务详情
+ */
+ public R queryJob(Long jobId);
+
+ /**
+ * 更新定时任务状态
+ *
+ * @param jobId 定时任务ID
+ * @param status
+ * status NO:0 ; YES:1
+ */
+ public R updateJobStatus(Long jobId, Long status);
+
+ /**
+ * 自己写的 删除任务;官网文档的SnailJobOpenApi里没有
+ */
+// public Boolean deleteJob(Long jobId);
+
+}
diff --git a/ruoyi-api/ruoyi-api-job/src/main/java/org/dromara/job/api/model/DmsJobEntity.java b/ruoyi-api/ruoyi-api-job/src/main/java/org/dromara/job/api/model/DmsJobEntity.java
new file mode 100644
index 0000000..cf5c1cd
--- /dev/null
+++ b/ruoyi-api/ruoyi-api-job/src/main/java/org/dromara/job/api/model/DmsJobEntity.java
@@ -0,0 +1,58 @@
+package org.dromara.job.api.model;
+
+import com.aizuda.snailjob.client.job.core.enums.AllocationAlgorithmEnum;
+import com.aizuda.snailjob.client.job.core.enums.TriggerTypeEnum;
+import com.aizuda.snailjob.common.core.enums.JobBlockStrategyEnum;
+import lombok.Data;
+import lombok.experimental.Accessors;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * SnailJob任务实体类
+ *
+ * @author zch
+ * @date 2025-03-25
+ */
+@Data
+@Accessors(chain = true)
+public class DmsJobEntity implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /** 直接复制com.aizuda.snailjob.client.job.core.dto.JobResponseVO */
+ private Long id;
+ private String groupName;
+ private String jobName;
+
+ private String argsStr;
+ private String extAttrs;
+
+ private LocalDateTime nextTriggerAt;
+ private Integer jobStatus;
+
+
+ private AllocationAlgorithmEnum routeKey;//private Integer routeKey;(1:一致性哈希;2:随机;3:LRU;4:轮询;5:第一个;6:最后一个;)
+
+ private Integer executorType;
+ private String executorInfo;
+
+ private TriggerTypeEnum triggerType;//private Integer triggerType;//触发类型:2. 固定时间 3.CRON 表达式 99.工作流
+
+ private String triggerInterval;
+
+ private JobBlockStrategyEnum blockStrategy;//private Integer blockStrategy;//阻塞策略:1、丢弃 2、覆盖 3、并行
+ private Integer executorTimeout;
+
+ private Integer maxRetryTimes;
+ private Integer retryInterval;
+ private Integer taskType;
+ private Integer parallelNum;
+ private String description;
+ private LocalDateTime createDt;
+ private LocalDateTime updateDt;
+
+
+}
diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteInspectInstanceServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteInspectInstanceServiceImpl.java
new file mode 100644
index 0000000..ad01b4b
--- /dev/null
+++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteInspectInstanceServiceImpl.java
@@ -0,0 +1,148 @@
+package org.dromara.dms.dubbo;
+
+
+import com.github.yulichang.toolkit.JoinWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.core.constant.DmsConstants;
+import org.dromara.common.core.domain.R;
+import org.dromara.dms.api.RemoteInspectInstanceService;
+import org.dromara.dms.domain.*;
+import org.dromara.dms.mapper.*;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.List;
+
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemoteInspectInstanceServiceImpl implements RemoteInspectInstanceService {
+
+
+ private final DmsPlanInspectMapper dmsPlanInspectMapper;
+
+ private final DmsInspectRouteDetailMapper dmsInspectRouteDetailMapper;
+
+ private final DmsBillsInspectInstanceMapper dmsBillsInspectInstanceMapper;
+
+ private final DmsInspectInstanceDetailMapper dmsInspectInstanceDetailMapper;
+
+ private final DmsInspectInstanceDetailProjectMapper dmsInspectInstanceDetailProjectMapper;
+
+ private final DmsInspectProjectDeviceMapper dmsInspectProjectDeviceMapper;
+
+
+ @Override
+ @Transactional( rollbackFor = Exception.class )
+ public R insertInspectInstance(String planInspectCode){
+
+
+ // 使用 replaceAll 方法将双引号替换为空字符串
+ String result = planInspectCode.replaceAll("\"", "");
+
+ DmsPlanInspect dmsPlanInspect = dmsPlanInspectMapper.selectPlanInspectJoinJobByInspectCode(result);
+ Long timeLimit = dmsPlanInspect.getTimeLimit();
+ if (timeLimit != null) {
+ Long days = timeLimit / (24 * 60 * 60l);
+ Long hours = timeLimit % (24 * 60 * 60l);
+// System.out.println(days);
+// System.out.println(hours);
+ dmsPlanInspect.setTimeLimitDays(days);
+ dmsPlanInspect.setTimeLimitHours(hours / (60 * 60l));
+ }
+
+
+ DmsBillsInspectInstance dmsBillsInspectInstance = new DmsBillsInspectInstance();
+
+
+ // DmsRepairInstance dmsRepairInstance = dmsRepairInstanceService.selectDmsRepairInstanceByRepairInstanceId(2l);
+
+ dmsBillsInspectInstance.setPlanInspectId(dmsPlanInspect.getPlanInspectId());
+// dmsBillsInspectInstance.setWfProcessId(105l);
+ 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.setDeviceAmount(dmsPlanInspect.getDeviceAmount());//设备数量
+// dmsBillsInspectInstance.setPerformer(dmsPlanInspect.getPerformer());//执行人
+
+
+
+
+ //写死105,也可根据传入对象的wfprocessid作为传参。
+/*
+ Long aLong = dmsRepairInstanceMapper.selectWfProcessActivityId(105l);
+ if (dmsBillsInspectInstance.getInspectType().equals("1")) {
+ dmsBillsInspectInstance.setWfProcessId(105l);
+ } else if (dmsBillsInspectInstance.getInspectType().equals("2")) {
+ dmsBillsInspectInstance.setWfProcessId(104l);
+ }
+*/
+
+// dmsBillsInspectInstance.setIsFlag("1");
+ dmsBillsInspectInstance.setInspectStatus(DmsConstants.DMS_BILLS_INSPECT_INSTANCE_INSPECT_STATUS_TO_INSPECT);//待巡检
+ int i = dmsBillsInspectInstanceMapper.insert(dmsBillsInspectInstance);
+
+// List dmsBillsInspectInstances = dmsBillsInspectInstanceMapper.selectDmsBillsInspectInstanceList(dmsBillsInspectInstance);
+ //新建第一步工单实例节点
+/*
+ DmsBillsInspectInstanceActivity dmsBillsInspectInstanceActivity = new DmsBillsInspectInstanceActivity();
+ dmsBillsInspectInstanceActivity.setInspectInstanceId(dmsBillsInspectInstance.getInspectInstanceId());
+ dmsBillsInspectInstanceActivity.setInspectRouteId(dmsBillsInspectInstance.getInspectRouteId());
+ dmsBillsInspectInstanceActivity.setDeviceAmount(dmsBillsInspectInstance.getDeviceAmount());
+ dmsBillsInspectInstanceActivity.setPerformer(dmsBillsInspectInstance.getPerformer());
+ dmsBillsInspectInstanceActivity.setProcessStepOrder(1l);
+ dmsBillsInspectInstanceActivity.setProcessActivityId(aLong);
+ dmsBillsInspectInstanceActivityMapper.insertDmsBillsInspectInstanceActivity(dmsBillsInspectInstanceActivity);
+*/
+
+ //新建点巡检工单明细
+/* DmsInspectRouteDetail queryInspectRouteDetail = new DmsInspectRouteDetail();
+ queryInspectRouteDetail.setInspectRouteId(dmsBillsInspectInstance.getInspectRouteId());*/
+ MPJLambdaWrapper lqw = JoinWrappers.lambda(DmsInspectRouteDetail.class)
+ .eq(DmsInspectRouteDetail::getInspectRouteId, dmsBillsInspectInstance.getInspectRouteId());
+ List dmsInspectRouteDetails = dmsInspectRouteDetailMapper.selectList(lqw);
+
+ for(DmsInspectRouteDetail dmsInspectRouteDetail:dmsInspectRouteDetails){
+ DmsInspectInstanceDetail dmsInspectInstanceDetail = new DmsInspectInstanceDetail();
+ Long deviceId = dmsInspectRouteDetail.getMachineId();
+ dmsInspectInstanceDetail.setInspectInstanceId(dmsBillsInspectInstance.getInspectInstanceId());
+ dmsInspectInstanceDetail.setLineStep(dmsInspectRouteDetail.getLineStep());
+ dmsInspectInstanceDetail.setMachineId(deviceId);
+ dmsInspectInstanceDetail.setInstanceDetailStatus("1");//(1待巡检 2巡检中 3已完成)
+ dmsInspectInstanceDetail.setInspectStandard(dmsInspectRouteDetail.getInspectStandard());
+ dmsInspectInstanceDetail.setInspectStatus("0");//TODO:为什么设置为异常?
+
+// dmsInspectInstanceDetailMapper.insertDmsInspectInstanceDetail(dmsInspectInstanceDetail);
+ dmsInspectInstanceDetailMapper.insert(dmsInspectInstanceDetail);
+
+ Long projectId = dmsInspectInstanceDetailMapper.selectProjectId(dmsInspectRouteDetail.getInspectStandard());
+/*
+ DmsInspectProjectDevice queryInspectProjectDevice = new DmsInspectProjectDevice();
+ queryInspectProjectDevice.setTargetType("2");
+ queryInspectProjectDevice.setTargetId(deviceId);
+ List dmsInspectProjectDevices = dmsInspectProjectDeviceMapper.selectDmsInspectProjectDeviceList(queryInspectProjectDevice);
+*/
+ MPJLambdaWrapper DmsInspectProjectDeviceLQW = JoinWrappers.lambda(DmsInspectProjectDevice.class)
+ .eq(DmsInspectProjectDevice::getTargetType, "2")//关联类型(1设备类型)
+ .eq(DmsInspectProjectDevice::getTargetId, deviceId);
+ List dmsInspectProjectDevices = dmsInspectProjectDeviceMapper.selectList(DmsInspectProjectDeviceLQW);
+
+
+ // for(DmsInspectProjectDevice dmsInspectProjectDevice:dmsInspectProjectDevices){
+ DmsInspectInstanceDetailProject dmsInspectInstanceDetailProject = new DmsInspectInstanceDetailProject();
+ dmsInspectInstanceDetailProject.setInstanceDetailId(dmsInspectInstanceDetail.getInstanceDetailId());
+ dmsInspectInstanceDetailProject.setInspectProjectId(projectId);
+// dmsInspectInstanceDetailProjectMapper.insertDmsInspectInstanceDetailProject(dmsInspectInstanceDetailProject);
+ dmsInspectInstanceDetailProjectMapper.insert(dmsInspectInstanceDetailProject);
+// }
+
+ }
+
+ return R.ok(i);
+
+ }
+}
diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteLubeInstanceServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteLubeInstanceServiceImpl.java
new file mode 100644
index 0000000..453a22e
--- /dev/null
+++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteLubeInstanceServiceImpl.java
@@ -0,0 +1,133 @@
+package org.dromara.dms.dubbo;
+
+
+import com.github.yulichang.toolkit.JoinWrappers;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.core.constant.DmsConstants;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.utils.MapstructUtils;
+import org.dromara.common.core.utils.uuid.Seq;
+import org.dromara.dms.domain.*;
+import org.dromara.dms.domain.bo.DmsBillsLubeInstanceBo;
+import org.dromara.dms.domain.bo.DmsPlanLubeBo;
+import org.dromara.dms.domain.vo.DmsPlanLubeDetailVo;
+import org.dromara.dms.mapper.*;
+import org.dromara.dms.service.IDmsBillsLubeInstanceService;
+import org.dromara.dms.service.IDmsPlanInspectService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.dromara.dms.api.RemoteLubeInstanceService;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemoteLubeInstanceServiceImpl implements RemoteLubeInstanceService {
+ private final DmsBillsLubeInstanceMapper dmsBillsLubeInstanceMapper;
+
+ private final DmsBillsLubeDetailMapper dmsBillsLubeDetailMapper;
+
+ private final DmsPlanLubeMapper dmsPlanLubeMapper;
+
+ private final DmsBillsLubeInstanceActivityMapper dmsBillsLubeInstanceActivityMapper;
+
+ private final DmsPlanLubeDetailMapper dmsPlanLubeDetailMapper;
+
+ private final IDmsBillsLubeInstanceService dmsBillsLubeInstanceService;
+
+ private final IDmsPlanInspectService dmsPlanInspectService;
+
+ private final DmsPlanInspectMapper dmsPlanInspectMapper;
+
+ private final DmsInspectRouteDetailMapper dmsInspectRouteDetailMapper;
+
+
+
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public R insertLubeInstance(String planLubeCode) {
+ // 去除润滑计划编号中的双引号
+// String lubeInstanceCodeS = planLubeCode.replaceAll("\"", "");
+
+ // 根据润滑计划编号查询润滑计划信息
+ DmsPlanLube dmsPlanLube = dmsPlanLubeMapper.selectDmsPlanLubeJoinByPlanLubeCode(planLubeCode);
+
+ DmsPlanLubeDetail dmsPlanLubeDetail = new DmsPlanLubeDetail();
+ dmsPlanLubeDetail.setPlanLubeId(dmsPlanLube.getPlanLubeId());
+ MPJLambdaWrapper dmsPlanLubeDetailWrapper = JoinWrappers
+ .lambda(DmsPlanLubeDetail.class)
+ .eq(DmsPlanLubeDetail::getPlanLubeId, dmsPlanLube.getPlanLubeId());
+ List dmsPlanLubeDetailList = dmsPlanLubeDetailMapper.selectVoList(dmsPlanLubeDetailWrapper);
+ dmsPlanLube.setDmsPlanLubeDetailList(dmsPlanLubeDetailList);
+
+
+ // 获取润滑计划详情列表
+ List planLubeDetails = dmsPlanLube.getDmsPlanLubeDetailList();
+ if (planLubeDetails == null || planLubeDetails.isEmpty()) {
+ // 如果润滑计划详情为空,返回false
+ return R.fail();
+ }
+
+ // 创建新的润滑工单实例对象
+ DmsBillsLubeInstanceBo dmsBillsLubeInstanceBo = new DmsBillsLubeInstanceBo();
+ // 设置润滑工单的计划ID
+ dmsBillsLubeInstanceBo.setPlanLubeId(dmsPlanLube.getPlanLubeId());
+ // 设置计划开始时间为润滑时间
+ dmsBillsLubeInstanceBo.setPlanBeginTime(dmsPlanLube.getLubeTime());
+ // 生成并设置润滑工单编码
+ dmsBillsLubeInstanceBo.setBillsLubeCode(Seq.getId(Seq.dmsLubeInstanceSeqType, Seq.dmsLubeInstanceCode));
+ // 设置润滑状态为待润滑
+ dmsBillsLubeInstanceBo.setLubeStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_TO_LUBE);
+ // 设置润滑组
+ dmsBillsLubeInstanceBo.setLubeGroup(dmsPlanLube.getLubeGroup());
+ // 设置润滑监督人
+ dmsBillsLubeInstanceBo.setLubeSupervisor(dmsPlanLube.getLubeSupervisor());
+ // 设置润滑级别
+ dmsBillsLubeInstanceBo.setLubeLevel(dmsPlanLube.getLubeLevel());
+ // 获取时间限制
+ Long timeLimit = dmsPlanLube.getTimeLimit();
+ // 计算并设置计划结束时间
+ Date planEndTime = new Date(dmsPlanLube.getLubeTime().getTime() + timeLimit * 1000L);
+ dmsBillsLubeInstanceBo.setPlanEndTime(planEndTime);
+
+ // 插入润滑工单实例到数据库
+ boolean success = dmsBillsLubeInstanceService.insertByBo(dmsBillsLubeInstanceBo);
+
+ DmsPlanLubeBo dmsPlanLubeBo = MapstructUtils.convert(dmsPlanLube, DmsPlanLubeBo.class);
+
+
+ // 批量插入润滑工单详情
+ List lubeDetails = dmsPlanLubeBo.getDmsPlanLubeDetailList();
+ List billsLubeDetails = new ArrayList<>();
+ for (DmsPlanLubeDetailVo planLubeDetail : lubeDetails) {
+ DmsBillsLubeDetail dmsBillsLubeDetail = new DmsBillsLubeDetail();
+ dmsBillsLubeDetail.setLubeInstanceId(dmsBillsLubeInstanceBo.getLubeInstanceId());
+ dmsBillsLubeDetail.setMachineId(planLubeDetail.getDeviceId());
+ dmsBillsLubeDetail.setLubeStationId(planLubeDetail.getLubeStationId());
+ dmsBillsLubeDetail.setLubeStandardId(planLubeDetail.getLubeStandardId());
+ //dmsBillsLubeDetail.setActiveFlag("Y"); // 假设是否标记字段对应activeFlag
+ billsLubeDetails.add(dmsBillsLubeDetail);
+ }
+
+
+/* // 使用mybatis-plus批量保存
+ return dmsBillsLubeDetailMapper.insertBatch(billsLubeDetails);*/
+ // 修改批量插入方式,避免SQL Server批量插入时获取自动生成主键的问题
+ boolean result = true;
+ for (DmsBillsLubeDetail detail : billsLubeDetails) {
+ result = result && dmsBillsLubeDetailMapper.insert(detail) > 0;
+ if (!result) {
+ break;
+ }
+ }
+ return R.ok();
+ }
+
+
+}
diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteMaintInstanceServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteMaintInstanceServiceImpl.java
new file mode 100644
index 0000000..5a556eb
--- /dev/null
+++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteMaintInstanceServiceImpl.java
@@ -0,0 +1,118 @@
+package org.dromara.dms.dubbo;
+
+
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.core.constant.DmsConstants;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.utils.uuid.Seq;
+import org.dromara.dms.api.RemoteMaintInstanceService;
+import org.dromara.dms.domain.*;
+import org.dromara.dms.mapper.DmsBillsMaintDetailMapper;
+import org.dromara.dms.mapper.DmsBillsMaintDetailProjectMapper;
+import org.dromara.dms.mapper.DmsBillsMaintInstanceMapper;
+import org.dromara.dms.mapper.DmsPlanMaintMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemoteMaintInstanceServiceImpl implements RemoteMaintInstanceService {
+
+ private final DmsPlanMaintMapper dmsPlanMaintMapper;
+
+ private final DmsBillsMaintInstanceMapper dmsBillsMaintInstanceMapper;
+
+ private final DmsBillsMaintDetailMapper dmsBillsMaintDetailMapper;
+
+ private final DmsBillsMaintDetailProjectMapper dmsBillsMaintDetailProjectMapper;
+
+
+ /**
+ * 新增保养工单
+ *
+ * @param planMaintCode 保养计划编号
+ * @return 结果
+ */
+ @Override
+ @Transactional( rollbackFor = Exception.class )
+ public R insertDmsBillsMaintInstance(String planMaintCode) {
+ String planMaintCodeS = planMaintCode.replaceAll("\"", "");
+ DmsPlanMaint dmsPlanMaint = dmsPlanMaintMapper.selectDmsPlanMaintJoinByPlanMaintCode(planMaintCodeS);
+ List planMaintDetails = dmsPlanMaint.getDmsPlanMaintDetailList();
+ if (planMaintDetails == null || planMaintDetails.isEmpty()) {
+ return R.fail();
+ }
+
+ DmsBillsMaintInstance dmsBillsMaintInstance = new DmsBillsMaintInstance();
+
+
+ dmsBillsMaintInstance.setPlanBeginTime(dmsPlanMaint.getMaintTime());
+ dmsBillsMaintInstance.setPlanMaintId(dmsPlanMaint.getPlanMaintId());
+ dmsBillsMaintInstance.setBillsMaintCode(Seq.getId(Seq.maintInstanceSeqType, Seq.maintInstanceCode));
+ dmsBillsMaintInstance.setMaintStatus(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_TO_MAINT);//待保养
+ dmsBillsMaintInstance.setMaintGroup(dmsPlanMaint.getMaintGroup());
+ dmsBillsMaintInstance.setMaintSupervisor(dmsPlanMaint.getMaintSupervisor());
+ dmsBillsMaintInstance.setMaintLevel(dmsPlanMaint.getMaintLevel());
+
+
+ Date lubeTime = dmsPlanMaint.getMaintTime();
+ Long timeLimit = dmsPlanMaint.getTimeLimit();
+// dmsBillsMaintInstance.setIsFlag(1l);
+// dmsBillsMaintInstance.setWfProcessId(103l);
+ dmsBillsMaintInstance.setPlanEndTime(new Date(lubeTime.getTime() + timeLimit * 1000l));
+ int i = dmsBillsMaintInstanceMapper.insert(dmsBillsMaintInstance);
+
+// DmsMaintInstanceActivity dmsMaintInstanceActivity = new DmsMaintInstanceActivity();
+// dmsMaintInstanceActivity.setMaintInstanceId(dmsBillsMaintInstance.getMaintInstanceId());
+// dmsMaintInstanceActivity.setProcessStepOrder(1L);
+// int i1 = dmsMaintInstanceActivityMapper.insertDmsMaintInstanceActivity(dmsMaintInstanceActivity);
+
+ batchInsertDmsBillsMaintDetail(dmsPlanMaint, dmsBillsMaintInstance.getMaintInstanceId());
+
+ return R.ok(i);
+ }
+
+
+ public void batchInsertDmsBillsMaintDetail(DmsPlanMaint dmsPlanMaint, Long maintInstanceId) {
+ List planMaintDetails = dmsPlanMaint.getDmsPlanMaintDetailList();
+ List billsMaintDetails = new ArrayList<>();
+ planMaintDetails.forEach(planMaintDetail -> {
+ DmsBillsMaintDetail dmsBillsMaintDetail = new DmsBillsMaintDetail();
+ dmsBillsMaintDetail.setMaintInstanceId(maintInstanceId);
+ dmsBillsMaintDetail.setMachineId(planMaintDetail.getMachineId());
+ dmsBillsMaintDetail.setMaintStationId(planMaintDetail.getMaintStationId());
+ dmsBillsMaintDetail.setMaintStandardId(planMaintDetail.getMaintStandardId());
+// dmsBillsMaintDetail.setIsFlag(1L);
+ dmsBillsMaintDetail.setMaintStatus(1L);
+ billsMaintDetails.add(dmsBillsMaintDetail);
+ });
+
+// dmsBillsMaintInstanceMapper.batchDmsBillsMaintDetail(billsMaintDetails);
+ dmsBillsMaintDetailMapper.insertBatch(billsMaintDetails);
+ ArrayList billsMaintDetailProjectList = new ArrayList<>();
+ List list = dmsBillsMaintDetailMapper.selectDetailList(maintInstanceId);
+ for (DmsBillsMaintDetail detail : list) {
+ List projects = dmsBillsMaintDetailMapper.selectPrjectIds(detail.getMaintStationId());
+ for (DmsBaseMaintProject project : projects) {
+ DmsBillsMaintDetailProject billsMaintDetailProject = new DmsBillsMaintDetailProject();
+ billsMaintDetailProject.setBillsMaintDetailId(detail.getBillsMaintDetailId());
+// DmsBaseMaintStation station = dmsBillsMaintDetailMapper.selectMainStation(detail.getStationId());
+ billsMaintDetailProject.setMaintProjectId(project.getMaintProjectId());
+ billsMaintDetailProject.setMaintProjectName(project.getMaintProjectName());
+ billsMaintDetailProject.setMaintProjectDesc(project.getMaintProjectDesc());
+ billsMaintDetailProject.setMaintProjectStatus("2");
+ billsMaintDetailProjectList.add(billsMaintDetailProject);
+ }
+
+ }
+// dmsBillsMaintInstanceMapper.batchDmsProject(list1);
+ dmsBillsMaintDetailProjectMapper.insertOrUpdateBatch(billsMaintDetailProjectList);
+
+ }
+}
diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteRepairStanceServicempl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteRepairStanceServicempl.java
new file mode 100644
index 0000000..8a1dc8b
--- /dev/null
+++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteRepairStanceServicempl.java
@@ -0,0 +1,134 @@
+package org.dromara.dms.dubbo;
+
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.core.domain.R;
+import org.dromara.common.core.utils.DateUtils;
+import org.dromara.common.satoken.utils.LoginHelper;
+import org.dromara.dms.api.RemoteRepairStanceService;
+import org.dromara.dms.domain.DmsPlanRepair;
+import org.dromara.dms.domain.DmsRepairInstance;
+import org.dromara.dms.domain.DmsRepairInstanceActivity;
+import org.dromara.dms.mapper.DmsPlanRepairMapper;
+import org.dromara.dms.mapper.DmsRepairInstanceActivityMapper;
+import org.dromara.dms.mapper.DmsRepairInstanceMapper;
+import org.dromara.dms.service.IDmsPlanRepairService;
+import org.dromara.system.api.model.LoginUser;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemoteRepairStanceServicempl implements RemoteRepairStanceService {
+
+ private final DmsPlanRepairMapper dmsPlanRepairMapper;
+
+ private final DmsRepairInstanceMapper dmsRepairInstanceMapper;
+
+ private final DmsRepairInstanceActivityMapper dmsRepairInstanceActivityMapper;
+
+ private final IDmsPlanRepairService dmsPlanRepairService;
+
+
+
+ public static String lastDate="2000-01-01";
+ //流水号
+ public static int serialNumber = 0;
+
+
+ /**
+ * 新增检修工单;一是根据检修计划自动创建的检修工单,二是手工创建故障报修工单
+ *
+ */
+ @Override
+ @Transactional( rollbackFor = Exception.class )
+ public R insertDmsRepairInstance(String planRepairCode) {
+
+ String repairCode = planRepairCode.replaceAll("\"", "");
+ DmsPlanRepair dmsPlanRepair = dmsPlanRepairMapper.selectDmsPlanRepairByPlanRepairCode(repairCode);
+
+ Long timeLimit = dmsPlanRepair.getTimeLimit();
+ if (timeLimit !=null){
+ Long days = timeLimit / (24 * 60 * 60l);
+ Long hours = timeLimit % (24 * 60 * 60l);
+ dmsPlanRepair.setTimeLimitDays(days);
+ dmsPlanRepair.setTimeLimitHours(hours/(60*60l));
+ }
+
+ dmsPlanRepair.setCreateMethod("2");//1:手工创建工单,2:根据计划自动创建工单
+ DmsRepairInstance dmsRepairInstance = new DmsRepairInstance();
+// dmsRepairInstance.setWfProcessId(101l);
+ dmsRepairInstance.setPlanRepairId(dmsPlanRepair.getPlanRepairId());
+ dmsRepairInstance.setPlanBeginTime(dmsPlanRepair.getRepairTime());
+ dmsRepairInstance.setInstanceType("2");
+// dmsRepairInstance.setRepairType(dmsPlanRepair.getRepairType());
+// dmsRepairInstance.setRepairGroup(dmsPlanRepair.getRepairGroup());
+// dmsRepairInstance.setRepairSupervisor(dmsPlanRepair.getRepairSupervisor());
+
+
+// WfProcessActivity wfProcessActivity = new WfProcessActivity();
+// wfProcessActivity.setWfProcessId(dmsRepairInstance.getWfProcessId());
+// Long aLong = dmsRepairInstanceMapper.selectWfProcessActivityId(dmsRepairInstance.getWfProcessId());
+
+ // 创建一个SimpleDateFormat对象,用于格式化日期为"yyyyMMdd"格式
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
+ // 获取当前日期
+ Date date = new Date();
+ // 将当前日期格式化为字符串
+ String format = sdf.format(date);
+ // 如果格式化后的日期字符串与上次记录的日期不同
+ if (!format.equals(lastDate)){
+ // 更新上次记录的日期为当前日期
+ lastDate = format;
+ // 重置序列号为0
+ serialNumber = 0;
+ }
+ // 增加序列号
+ serialNumber++;
+ // 将序列号格式化为6位数,不足部分用0填充
+ String serialNumberStr = String.format("%06d", serialNumber);
+ // 拼接日期和序列号生成每日代码
+ String dailyCode = format + serialNumberStr;
+ // 设置维修单的代码
+ dmsRepairInstance.setBillsRepairCode(dailyCode);
+
+// LoginUser user = SecurityUtils.getLoginUser();
+ LoginUser user = LoginHelper.getLoginUser();
+ if (dmsRepairInstance.getPlanBeginTime()!=null){
+ DmsPlanRepair planRepair = dmsPlanRepairMapper.selectDmsPlanRepairByPlanRepairId(dmsRepairInstance.getPlanRepairId());
+ Long limit = planRepair.getTimeLimit();
+ Date planBeginTime = dmsRepairInstance.getPlanBeginTime();
+ dmsRepairInstance.setPlanEndTime(new Date(planBeginTime.getTime() + limit*1000l));
+ }
+// dmsRepairInstance.setIsFlag("1");
+ dmsRepairInstance.setBillsStatus("1");
+ if (dmsRepairInstance.getInstanceType()==null) {
+ dmsRepairInstance.setInstanceType("1");
+ }
+// dmsRepairInstance.setApplyBy(user.getUsername());
+// dmsRepairInstance.setApplyTime(DateUtils.getNowDate());
+// dmsRepairInstance.setWfProcessId(101l);
+ int flag = dmsRepairInstanceMapper.insert(dmsRepairInstance);
+ //创建工单时新建工单实例节点
+
+ DmsRepairInstanceActivity dmsRepairInstanceActivity = new DmsRepairInstanceActivity();
+ dmsRepairInstanceActivity.setRepairInstanceId(dmsRepairInstance.getRepairInstanceId());
+ dmsRepairInstanceActivity.setProcessHandleStatus("1");
+ //先写死第一步所对应的步骤,后续通过wfProcessId来查询步骤对应的id
+// dmsRepairInstanceActivity.setProcessActivityId(aLong);
+ dmsRepairInstanceActivity.setProcessStepOrder(1l);
+ dmsRepairInstanceActivity.setCreateBy(user.getUserId());
+ dmsRepairInstanceActivity.setCreateTime(DateUtils.getNowDate());
+ dmsRepairInstanceActivity.setStartTime(DateUtils.getNowDate());
+// dmsRepairInstanceActivity.setRepairType(dmsRepairInstance.getRepairType());
+// dmsRepairInstanceActivity.setRepairGroup(dmsRepairInstance.getRepairGroup());
+// dmsRepairInstanceActivity.setRepairSupervisor(dmsRepairInstance.getRepairSupervisor());
+ dmsRepairInstanceActivityMapper.insert(dmsRepairInstanceActivity);
+ return R.ok(flag);
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/service/RemoteJobServiceImpl.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/service/RemoteJobServiceImpl.java
new file mode 100644
index 0000000..bc120a7
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/service/RemoteJobServiceImpl.java
@@ -0,0 +1,147 @@
+package org.dromara.job.service;
+
+import com.aizuda.snailjob.client.job.core.dto.JobResponseVO;
+import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi;
+import com.aizuda.snailjob.common.core.enums.StatusEnum;
+//import com.aizuda.snailjob.template.datasource.persistence.mapper.JobMapper;
+import lombok.RequiredArgsConstructor;
+import org.apache.dubbo.config.annotation.DubboService;
+import org.dromara.common.core.domain.R;
+import org.dromara.job.api.RemoteJobService;
+import org.dromara.job.api.model.DmsJobEntity;
+import org.springframework.stereotype.Service;
+
+/**
+ * 定时任务调度信息 服务层
+ *
+ * @author ruoyi
+ */
+@RequiredArgsConstructor
+@Service
+@DubboService
+public class RemoteJobServiceImpl implements RemoteJobService {
+
+// private final JobMapper jobMapper;
+
+ /**
+ * 新增集群模式的任务
+ *
+ * @param dmsJobEntity 实体类
+ * @return 包含任务id的R对象
+ */
+ @Override
+ public R addClusterJob(DmsJobEntity dmsJobEntity) {
+ try {
+ Long jobId = SnailJobOpenApi.addClusterJob()
+ .setRouteKey(dmsJobEntity.getRouteKey())//执行器路由策略:(1:一致性哈希;2:随机;3:LRU;4:轮询;5:第一个;6:最后一个;)
+ .setJobName(dmsJobEntity.getJobName())//任务名称
+ .setExecutorInfo(dmsJobEntity.getExecutorInfo())//执行器名称
+ .setExecutorTimeout(dmsJobEntity.getExecutorTimeout())//任务执行超时时间(秒)
+ .setDescription(dmsJobEntity.getDescription())//任务描述
+ .setBlockStrategy(dmsJobEntity.getBlockStrategy())//阻塞策略:1、丢弃 2、覆盖 3、并行
+ .setMaxRetryTimes(dmsJobEntity.getMaxRetryTimes())//最大重试次数
+ .setTriggerType(dmsJobEntity.getTriggerType())//触发类型:2. 固定时间 3.CRON 表达式 99.工作流
+ .setTriggerInterval(dmsJobEntity.getTriggerInterval())//触发间隔
+ .addArgsStr(dmsJobEntity.getArgsStr(), dmsJobEntity.getExtAttrs())//执行任务参数
+ .setRetryInterval(dmsJobEntity.getRetryInterval())//重试间隔时长(秒)
+ .execute();
+ if (jobId != null) {
+ return R.ok(jobId);
+ } else {
+ return R.fail("新增集群任务失败");
+ }
+ } catch (Exception e) {
+ // 根据SnailJob实际的异常类型和错误处理机制,可能需要更具体的异常捕获
+ return R.fail("新增集群任务异常: " + e.getMessage());
+ }
+ }
+
+ /**
+ * 修改集群模式的任务
+ * @param dmsJobEntity 实体类
+ * @return 表示操作结果的R对象
+ */
+ @Override
+ public R updateClusterJob(DmsJobEntity dmsJobEntity) {
+ try {
+ boolean success = SnailJobOpenApi.updateClusterJob(dmsJobEntity.getId())
+ .setRouteKey(dmsJobEntity.getRouteKey())//执行器路由策略:(1:一致性哈希;2:随机;3:LRU;4:轮询;5:第一个;6:最后一个;)
+ .setJobName(dmsJobEntity.getJobName())//任务名称
+ .setExecutorInfo(dmsJobEntity.getExecutorInfo())//执行器名称
+ .setExecutorTimeout(dmsJobEntity.getExecutorTimeout())//任务执行超时时间(秒)
+ .setDescription(dmsJobEntity.getDescription())//任务描述
+ .setBlockStrategy(dmsJobEntity.getBlockStrategy())//阻塞策略:1、丢弃 2、覆盖 3、并行
+ .setMaxRetryTimes(dmsJobEntity.getMaxRetryTimes())//最大重试次数
+ .setTriggerType(dmsJobEntity.getTriggerType())//触发类型:2. 固定时间 3.CRON 表达式 99.工作流
+ .setTriggerInterval(dmsJobEntity.getTriggerInterval())//触发间隔
+ .addArgsStr(dmsJobEntity.getArgsStr(), dmsJobEntity.getExtAttrs())//执行任务参数
+ .setRetryInterval(dmsJobEntity.getRetryInterval())//重试间隔时长(秒)
+ .execute();
+ return success ? R.ok() : R.fail("修改集群任务失败");
+ } catch (Exception e) {
+ return R.fail("修改集群任务异常: " + e.getMessage());
+ }
+ }
+
+ /**
+ * 查看任务详情
+ *
+ * @param jobId 任务ID
+ * @return 包含任务详情的R对象
+ */
+ @Override
+ public R queryJob(Long jobId) {
+ try {
+ JobResponseVO jobDetail = SnailJobOpenApi.getJobDetail(jobId).execute();
+ if (jobDetail != null) {
+ return R.ok(jobDetail);
+ } else {
+ return R.fail("查询任务详情失败或任务不存在");
+ }
+ } catch (Exception e) {
+ return R.fail("查询任务详情异常: " + e.getMessage());
+ }
+ }
+
+ /**
+ * 更新定时任务状态
+ *
+ * @param jobId 定时任务ID
+ * @param status 状态 (NO:0 ; YES:1)
+ * @return 表示操作结果的R对象
+ */
+ @Override
+ public R updateJobStatus(Long jobId, Long status) {
+ try {
+ boolean success = SnailJobOpenApi
+ .updateJobStatus(jobId)
+ .setStatus(StatusEnum.YES.getStatus().equals(status.intValue()) ? StatusEnum.YES : StatusEnum.NO)
+ .execute();
+ return success ? R.ok() : R.fail("更新任务状态失败");
+ } catch (Exception e) {
+ return R.fail("更新任务状态异常: " + e.getMessage());
+ }
+ }
+
+ /**
+ * 自己写的 删除任务;官网文档的SnailJobOpenApi里没有
+ */
+/* @Override
+ public Boolean deleteJob(Long jobId) { // 如果需要统一返回R类型,此方法也应修改
+ int i = jobMapper.deleteById(jobId);
+ return i > 0;
+ }*/
+ // 若 deleteJob 方法也需要改造:
+ /*
+ @Override
+ public R deleteJob(Long jobId) {
+ try {
+ // 假设 jobMapper.deleteById 成功返回大于0的数,失败则返回0或抛异常
+ int i = jobMapper.deleteById(jobId);
+ return i > 0 ? R.ok() : R.fail("删除任务失败");
+ } catch (Exception e) {
+ return R.fail("删除任务异常: " + e.getMessage());
+ }
+ }
+ */
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsInspectStanceExecutor.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsInspectStanceExecutor.java
new file mode 100644
index 0000000..feb0e06
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsInspectStanceExecutor.java
@@ -0,0 +1,44 @@
+package org.dromara.job.snailjob;
+
+import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
+import com.aizuda.snailjob.client.job.core.dto.JobArgs;
+import com.aizuda.snailjob.client.model.ExecuteResult;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.domain.R;
+import org.dromara.dms.api.RemoteInspectInstanceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+@JobExecutor(name = "stanceInspect")
+public class DmsInspectStanceExecutor {
+
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+
+ @DubboReference
+ private final RemoteInspectInstanceService remoteInspectInstanceService;
+
+ // 推荐使用构造函数注入(Spring 4.3+支持隐式@Autowired)
+ public DmsInspectStanceExecutor(RemoteInspectInstanceService remoteInspectInstanceService) {
+ this.remoteInspectInstanceService = remoteInspectInstanceService;
+ }
+
+
+ public ExecuteResult jobExecute(JobArgs jobArgs) {
+ try {
+ String jsonStr = String.valueOf(jobArgs.getJobParams());
+ // 将 JSON 字符串转为 Map
+ Map paramMap = objectMapper.readValue(jsonStr, Map.class);
+ String planCode = (String) paramMap.get("planInspectCode");
+
+ R instance = remoteInspectInstanceService.insertInspectInstance(planCode);
+ return ExecuteResult.success(instance);
+ } catch (Exception e) {
+ return ExecuteResult.failure(e.getMessage());
+ }
+ }
+
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsLubeStanceExecutor.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsLubeStanceExecutor.java
new file mode 100644
index 0000000..54a8975
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsLubeStanceExecutor.java
@@ -0,0 +1,45 @@
+package org.dromara.job.snailjob;
+
+import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
+import com.aizuda.snailjob.client.job.core.dto.JobArgs;
+import com.aizuda.snailjob.client.model.ExecuteResult;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.domain.R;
+import org.dromara.dms.api.RemoteLubeInstanceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+@JobExecutor(name = "stanceLube")
+public class DmsLubeStanceExecutor {
+
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+
+
+ @DubboReference
+ private final RemoteLubeInstanceService dmsBillsLubeInstanceService;
+
+ public DmsLubeStanceExecutor(RemoteLubeInstanceService dmsBillsLubeInstanceService) {
+ this.dmsBillsLubeInstanceService = dmsBillsLubeInstanceService;
+ }
+
+
+ public ExecuteResult jobExecute(JobArgs jobArgs) {
+ try {
+ String jsonStr = String.valueOf(jobArgs.getJobParams());
+ // 将 JSON 字符串转为 Map
+ Map paramMap = objectMapper.readValue(jsonStr, Map.class);
+ String planCode = (String) paramMap.get("planLubeCode");
+
+ R instance = dmsBillsLubeInstanceService.insertLubeInstance(planCode);
+ return ExecuteResult.success(instance);
+ } catch (Exception e) {
+ return ExecuteResult.failure(e.getMessage());
+ }
+ }
+
+
+}
diff --git a/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsMaintStanceExecutor.java b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsMaintStanceExecutor.java
new file mode 100644
index 0000000..95f53ee
--- /dev/null
+++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsMaintStanceExecutor.java
@@ -0,0 +1,43 @@
+package org.dromara.job.snailjob;
+
+
+import com.aizuda.snailjob.client.job.core.annotation.JobExecutor;
+import com.aizuda.snailjob.client.job.core.dto.JobArgs;
+import com.aizuda.snailjob.client.model.ExecuteResult;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.dromara.common.core.domain.R;
+import org.dromara.dms.api.RemoteMaintInstanceService;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+@Component
+@JobExecutor(name = "stanceMaint")
+public class DmsMaintStanceExecutor {
+
+ private static final ObjectMapper objectMapper = new ObjectMapper();
+
+ @DubboReference
+ private final RemoteMaintInstanceService dmsBillsMaintInstanceService;
+
+ public DmsMaintStanceExecutor(RemoteMaintInstanceService dmsBillsMaintInstanceService) {
+ this.dmsBillsMaintInstanceService = dmsBillsMaintInstanceService;
+ }
+
+
+ public ExecuteResult jobExecute(JobArgs jobArgs) {
+ try {
+ String jsonStr = String.valueOf(jobArgs.getJobParams());
+ // 将 JSON 字符串转为 Map
+ Map paramMap = objectMapper.readValue(jsonStr, Map.class);
+ String planCode = (String) paramMap.get("planMaintCode");
+
+ R instance = dmsBillsMaintInstanceService.insertDmsBillsMaintInstance(planCode);
+ return ExecuteResult.success(instance);
+ } catch (Exception e) {
+ return ExecuteResult.failure(e.getMessage());
+ }
+ }
+
+}