diff --git a/pom.xml b/pom.xml index 0497cad..b415946 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ 5.8.31 3.37.0 2.2.7 - 1.1.2 + 1.4.0 1.39.0 1.18.34 7.4 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..f83031b --- /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, String tenantId, Long userId); + +} 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..f287b3b --- /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, String tenantId, Long userId); + + + +} 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..66bcf1e --- /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, String tenantId, Long userId); +} 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/pom.xml b/ruoyi-api/pom.xml index dd4b4b3..10a5bd0 100644 --- a/ruoyi-api/pom.xml +++ b/ruoyi-api/pom.xml @@ -16,6 +16,9 @@ hwmom-api-mes hwmom-api-pda hwmom-api-workflow + + hwmom-api-dms + ruoyi-api-job ruoyi-api 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..8affc25 --- /dev/null +++ b/ruoyi-api/ruoyi-api-job/src/main/java/org/dromara/job/api/model/DmsJobEntity.java @@ -0,0 +1,61 @@ +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; + + //DUBBO穿不了token,手动传参 + private String tenantId; + private String userId; + +} diff --git a/ruoyi-common/hwmom-common-mom/pom.xml b/ruoyi-common/hwmom-common-mom/pom.xml index 61fa401..64ff076 100644 --- a/ruoyi-common/hwmom-common-mom/pom.xml +++ b/ruoyi-common/hwmom-common-mom/pom.xml @@ -42,6 +42,10 @@ 3.5.8 compile + + org.springframework.cloud + spring-cloud-context + diff --git a/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/HwMomMesConstants.java b/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/HwMomMesConstants.java index c44bccf..4d62621 100644 --- a/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/HwMomMesConstants.java +++ b/ruoyi-common/hwmom-common-mom/src/main/java/org/dromara/common/constant/HwMomMesConstants.java @@ -21,4 +21,7 @@ public interface HwMomMesConstants { */ public static final String REDIS_KEY_DEVICE_INFO = "hw_device_info"; + public static final String MES_MATERIAL_BOM_ACTIVE_FLAG_ACTIVE = "1";//启用 + public static final String MES_MATERIAL_BOM_ACTIVE_FLAG_HISTORY = "2";//历史 + public static final String MES_MATERIAL_BOM_ACTIVE_FLAG_DESIGN = "3";//设计中 } diff --git a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/enums/BusinessType.java b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/enums/BusinessType.java index 2cf48cf..40ec0fb 100644 --- a/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/enums/BusinessType.java +++ b/ruoyi-common/ruoyi-common-log/src/main/java/org/dromara/common/log/enums/BusinessType.java @@ -67,4 +67,8 @@ public enum BusinessType { */ COMPLETE, + /** + * 发布 + */ + PUBLISH, } diff --git a/ruoyi-modules/hwmom-dms/pom.xml b/ruoyi-modules/hwmom-dms/pom.xml index 2f2bccd..336a6a4 100644 --- a/ruoyi-modules/hwmom-dms/pom.xml +++ b/ruoyi-modules/hwmom-dms/pom.xml @@ -144,6 +144,42 @@ + + + + + + org.dromara + ruoyi-api-job + ${revision} + compile + + + + org.dromara + hwmom-api-dms + ${revision} + compile + + diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsFaultInstanceController.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsFaultInstanceController.java index 9781099..f4f84ce 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsFaultInstanceController.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsFaultInstanceController.java @@ -15,8 +15,6 @@ import org.dromara.common.log.enums.BusinessType; import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; -import org.dromara.dms.domain.DmsBillsFaultInstance; -import org.dromara.dms.domain.DmsFaultInstanceActivity; import org.dromara.dms.domain.bo.DmsBillsFaultInstanceBo; import org.dromara.dms.domain.vo.DmsBillsFaultInstanceVo; import org.dromara.dms.service.IDmsBillsFaultInstanceService; @@ -24,13 +22,10 @@ import org.dromara.dms.utils.TemplateExcelUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import java.text.SimpleDateFormat; -import java.util.HashMap; import java.util.List; -import java.util.Map; /** - * 故障报修工单;手工创建故障报修工单 + * 故障报修工单 * 前端访问路由地址为:/dms/dmsBillsFaultInstance * * @author zch @@ -45,7 +40,7 @@ public class DmsBillsFaultInstanceController extends BaseController { private final IDmsBillsFaultInstanceService dmsBillsFaultInstanceService; /** - * 查询故障报修工单;手工创建故障报修工单列表 + * 查询故障报修工单列表 */ @SaCheckPermission("dms:dmsBillsFaultInstance:list") @GetMapping("/list") @@ -54,18 +49,18 @@ public class DmsBillsFaultInstanceController extends BaseController { } /** - * 导出故障报修工单;手工创建故障报修工单列表 + * 导出故障报修工单列表 */ @SaCheckPermission("dms:dmsBillsFaultInstance:export") - @Log(title = "故障报修工单;手工创建故障报修工单", businessType = BusinessType.EXPORT) + @Log(title = "故障报修工单", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(DmsBillsFaultInstanceBo bo, HttpServletResponse response) { List list = dmsBillsFaultInstanceService.queryList(bo); - ExcelUtil.exportExcel(list, "故障报修工单;手工创建故障报修工单", DmsBillsFaultInstanceVo.class, response); + ExcelUtil.exportExcel(list, "故障报修工单", DmsBillsFaultInstanceVo.class, response); } /** - * 获取故障报修工单;手工创建故障报修工单详细信息 + * 获取故障报修工单详细信息 * * @param repairInstanceId 主键 */ @@ -77,10 +72,10 @@ public class DmsBillsFaultInstanceController extends BaseController { } /** - * 新增故障报修工单;手工创建故障报修工单 + * 新增故障报修工单 */ @SaCheckPermission("dms:dmsBillsFaultInstance:add") - @Log(title = "故障报修工单;手工创建故障报修工单", businessType = BusinessType.INSERT) + @Log(title = "故障报修工单", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() public R add(@Validated(AddGroup.class) @RequestBody DmsBillsFaultInstanceBo bo) { @@ -88,10 +83,10 @@ public class DmsBillsFaultInstanceController extends BaseController { } /** - * 修改故障报修工单;手工创建故障报修工单 + * 修改故障报修工单 */ @SaCheckPermission("dms:dmsBillsFaultInstance:edit") - @Log(title = "故障报修工单;手工创建故障报修工单", businessType = BusinessType.UPDATE) + @Log(title = "故障报修工单", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() public R edit(@Validated(EditGroup.class) @RequestBody DmsBillsFaultInstanceBo bo) { @@ -99,12 +94,12 @@ public class DmsBillsFaultInstanceController extends BaseController { } /** - * 删除故障报修工单;手工创建故障报修工单 + * 删除故障报修工单 * * @param repairInstanceIds 主键串 */ @SaCheckPermission("dms:dmsBillsFaultInstance:remove") - @Log(title = "故障报修工单;手工创建故障报修工单", businessType = BusinessType.DELETE) + @Log(title = "故障报修工单", businessType = BusinessType.DELETE) @DeleteMapping("/{repairInstanceIds}") public R remove(@NotEmpty(message = "主键不能为空") @PathVariable Long[] repairInstanceIds) { @@ -113,7 +108,7 @@ public class DmsBillsFaultInstanceController extends BaseController { /** - * 下拉框查询故障报修工单;手工创建故障报修工单列表 + * 下拉框查询故障报修工单列表 */ @GetMapping("/getDmsBillsFaultInstanceList") @@ -122,41 +117,42 @@ public class DmsBillsFaultInstanceController extends BaseController { return R.ok(list); } - @PostMapping("faultRecordExport") - public void faultRecordExport(DmsBillsFaultInstance dmsBillsFaultInstance, HttpServletResponse response) throws Exception { - Map beanParams = new HashMap<>(); - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); - DmsFaultInstanceActivity faulsts = dmsBillsFaultInstanceService.selectFaults(dmsBillsFaultInstance.getRepairInstanceId()); - beanParams.put("applyUser",faulsts.getApplyUser()); - beanParams.put("applyTime",format.format(faulsts.getApplyTime())); - beanParams.put("deviceName",faulsts.getDeviceName()); - beanParams.put("deviceLocation",faulsts.getDeviceLocation()); - beanParams.put("deviceCode",faulsts.getDeviceCode()); +// @PostMapping("faultRecordExport") +// public void faultRecordExport(DmsBillsFaultInstance dmsBillsFaultInstance, HttpServletResponse response) throws Exception { +// Map beanParams = new HashMap<>(); +// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); +// DmsFaultInstanceActivity faults = dmsBillsFaultInstanceService.selectFaults(dmsBillsFaultInstance.getRepairInstanceId()); +// beanParams.put("applyUser",faults.getApplyUser()); +// beanParams.put("applyTime",format.format(faults.getApplyTime())); +// beanParams.put("deviceName",faults.getDeviceName()); +// beanParams.put("deviceLocation",faults.getDeviceLocation()); +// beanParams.put("deviceCode",faults.getDeviceCode()); +// +// if (faults.getRealBeginTime()!=null){ +// beanParams.put("realEndTime",format.format(faults.getRealEndTime())); +// } +// if (faults.getRealEndTime()!=null){ +// beanParams.put("realBeginTime",format.format(faults.getRealBeginTime())); +// } +// if (faults.getUpdateTime()!=null){ +// beanParams.put("confirmTime",format.format(faults.getUpdateTime())); +// } +//// beanParams.put("realEndTime",format.format(faults.getRealEndTime())); +// beanParams.put("faultDescription",faults.getFaultDescription()); +// beanParams.put("checkedFault",faults.getCheckedFault()); +// beanParams.put("repairContent",faults.getRepairContent()); +// beanParams.put("protectedMethod",faults.getProtectedMethod()); +// beanParams.put("repairer",faults.getRepairer()); +// String repairConfirm; +// if (faults.getConfirmer()!=null){ +// repairConfirm = faults.getConfirmer(); +// }else { +// repairConfirm = "未完成"; +// } +// beanParams.put("repairConfirm",repairConfirm); +// beanParams.put("list",faults.getParts()); +// +// TemplateExcelUtils.downLoadExcel("维修记录","",beanParams, response); +// } - if (faulsts.getRealBeginTime()!=null){ - beanParams.put("realEndTime",format.format(faulsts.getRealEndTime())); - } - if (faulsts.getRealEndTime()!=null){ - beanParams.put("realBeginTime",format.format(faulsts.getRealBeginTime())); - } - if (faulsts.getUpdateTime()!=null){ - beanParams.put("confirmTime",format.format(faulsts.getUpdateTime())); - } -// beanParams.put("realEndTime",format.format(faulsts.getRealEndTime())); - beanParams.put("faultDescription",faulsts.getFaultDescription()); - beanParams.put("checkedFault",faulsts.getCheckedFault()); - beanParams.put("repairContent",faulsts.getRepairContent()); - beanParams.put("protectedMethod",faulsts.getProtectedMethod()); - beanParams.put("repairer",faulsts.getRepairer()); - String repairConfirm; - if (faulsts.getConfirmer()!=null){ - repairConfirm = faulsts.getConfirmer(); - }else { - repairConfirm = "未完成"; - } - beanParams.put("repairConfirm",repairConfirm); - beanParams.put("list",faulsts.getParts()); - - TemplateExcelUtils.downLoadExcel("维修记录","",beanParams, response); - } } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsInspectInstanceController.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsInspectInstanceController.java index f543876..8b7dff8 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsInspectInstanceController.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsInspectInstanceController.java @@ -76,8 +76,8 @@ public class DmsBillsInspectInstanceController extends BaseController { @Log(title = "点巡检工单", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody DmsBillsInspectInstanceBo bo) { - return toAjax(dmsBillsInspectInstanceService.insertByBo(bo)); + public R add(@Validated(AddGroup.class) @RequestBody DmsBillsInspectInstanceBo bo) { + return R.ok(dmsBillsInspectInstanceService.insertByBo(bo)); } /** @@ -87,8 +87,8 @@ public class DmsBillsInspectInstanceController extends BaseController { @Log(title = "点巡检工单", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody DmsBillsInspectInstanceBo bo) { - return toAjax(dmsBillsInspectInstanceService.updateByBo(bo)); + public R edit(@Validated(EditGroup.class) @RequestBody DmsBillsInspectInstanceBo bo) { + return R.ok(dmsBillsInspectInstanceService.updateByBo(bo)); } /** diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsLubeInstanceController.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsLubeInstanceController.java index 48f64e1..acbc418 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsLubeInstanceController.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsLubeInstanceController.java @@ -77,8 +77,8 @@ public class DmsBillsLubeInstanceController extends BaseController { @Log(title = "润滑工单", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody DmsBillsLubeInstanceBo bo) { - return toAjax(dmsBillsLubeInstanceService.insertByBo(bo)); + public R add(@Validated(AddGroup.class) @RequestBody DmsBillsLubeInstanceBo bo) { + return R.ok(dmsBillsLubeInstanceService.insertByBo(bo)); } /** @@ -88,8 +88,8 @@ public class DmsBillsLubeInstanceController extends BaseController { @Log(title = "润滑工单", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody DmsBillsLubeInstanceBo bo) { - return toAjax(dmsBillsLubeInstanceService.updateByBo(bo)); + public R edit(@Validated(EditGroup.class) @RequestBody DmsBillsLubeInstanceBo bo) { + return R.ok(dmsBillsLubeInstanceService.updateByBo(bo)); } /** diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsMaintInstanceController.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsMaintInstanceController.java index f631248..3dbdb8d 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsMaintInstanceController.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsBillsMaintInstanceController.java @@ -77,8 +77,8 @@ public class DmsBillsMaintInstanceController extends BaseController { @Log(title = "保养工单", businessType = BusinessType.INSERT) @RepeatSubmit() @PostMapping() - public R add(@Validated(AddGroup.class) @RequestBody DmsBillsMaintInstanceBo bo) { - return toAjax(dmsBillsMaintInstanceService.insertByBo(bo)); + public R add(@Validated(AddGroup.class) @RequestBody DmsBillsMaintInstanceBo bo) { + return R.ok(dmsBillsMaintInstanceService.insertByBo(bo)); } /** @@ -88,8 +88,8 @@ public class DmsBillsMaintInstanceController extends BaseController { @Log(title = "保养工单", businessType = BusinessType.UPDATE) @RepeatSubmit() @PutMapping() - public R edit(@Validated(EditGroup.class) @RequestBody DmsBillsMaintInstanceBo bo) { - return toAjax(dmsBillsMaintInstanceService.updateByBo(bo)); + public R edit(@Validated(EditGroup.class) @RequestBody DmsBillsMaintInstanceBo bo) { + return R.ok(dmsBillsMaintInstanceService.updateByBo(bo)); } /** diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsFaultInstance.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsFaultInstance.java index bd70816..d3bcde6 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsFaultInstance.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsFaultInstance.java @@ -11,7 +11,7 @@ import java.util.Date; import java.util.List; /** - * 故障报修工单;手工创建故障报修工单对象 dms_bills_fault_instance + * 故障报修工单对象 dms_bills_fault_instance * * @author zch * @date 2025-04-07 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsInspectInstance.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsInspectInstance.java index 95ddb37..d3502ef 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsInspectInstance.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsInspectInstance.java @@ -86,4 +86,10 @@ public class DmsBillsInspectInstance extends TenantEntity { private String remark; + /** + * 流程状态 + */ + private String status; + + } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsLubeInstance.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsLubeInstance.java index 9e1a290..560931b 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsLubeInstance.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsLubeInstance.java @@ -7,6 +7,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.tenant.core.TenantEntity; import org.dromara.dms.domain.vo.DmsBillsLubeDetailVo; import java.io.Serial; @@ -22,7 +23,7 @@ import java.util.List; @Data @EqualsAndHashCode(callSuper = true) @TableName("dms_bills_lube_instance") -public class DmsBillsLubeInstance extends BaseEntity { +public class DmsBillsLubeInstance extends TenantEntity { @Serial private static final long serialVersionUID = 1L; @@ -30,7 +31,7 @@ public class DmsBillsLubeInstance extends BaseEntity { /** * 主键标识 */ - @TableId(value = "lube_instance_id", type = IdType.AUTO) + @TableId(value = "lube_instance_id") private Long lubeInstanceId; /** @@ -93,6 +94,12 @@ public class DmsBillsLubeInstance extends BaseEntity { */ private String remark; + /** + * 流程状态 + */ + private String status; + + /** * 计划编号 */ diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsMaintInstance.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsMaintInstance.java index 9e9acef..8967ca6 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsMaintInstance.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsBillsMaintInstance.java @@ -30,7 +30,8 @@ public class DmsBillsMaintInstance extends TenantEntity { /** * 主键标识 */ - @TableId(value = "maint_instance_id", type = IdType.AUTO) +// @TableId(value = "maint_instance_id", type = IdType.AUTO) + @TableId(value = "maint_instance_id") private Long maintInstanceId; /** @@ -99,6 +100,11 @@ public class DmsBillsMaintInstance extends TenantEntity { */ private String remark; + /** + * 流程状态 + */ + private String status; + @TableField(exist = false) private String maintStatusStr; diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectProjectDevice.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectProjectDevice.java index e99eac5..a590274 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectProjectDevice.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectProjectDevice.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serial; +import java.io.Serializable; /** * 点巡检项目关联设备信息对象 dms_inspect_project_device @@ -14,9 +15,9 @@ import java.io.Serial; * @date 2025-03-24 */ @Data -@EqualsAndHashCode(callSuper = true) +@EqualsAndHashCode() @TableName("dms_inspect_project_device") -public class DmsInspectProjectDevice extends TenantEntity { +public class DmsInspectProjectDevice implements Serializable { @Serial private static final long serialVersionUID = 1L; @@ -37,4 +38,9 @@ public class DmsInspectProjectDevice extends TenantEntity { private Long targetId; + /** + * 租户编号 + */ + private String tenantId; + } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectRouteDetail.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectRouteDetail.java index c0d6b72..8c8d058 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectRouteDetail.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectRouteDetail.java @@ -64,4 +64,11 @@ public class DmsInspectRouteDetail extends TenantEntity { @TableField(exist = false) private String machineName;//JOIN + /** + * 标准名称 + */ + @TableField(exist = false) + private String standardName; + + } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanInspect.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanInspect.java index 87a0377..6b56d41 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanInspect.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanInspect.java @@ -1,6 +1,8 @@ package org.dromara.dms.domain; +import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; import lombok.EqualsAndHashCode; @@ -26,6 +28,7 @@ public class DmsPlanInspect extends TenantEntity { /** * 主键标识 */ + @TableId(value = "plan_inspect_id", type = IdType.AUTO) private Long planInspectId; /** diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanLube.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanLube.java index f700831..6b3be28 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanLube.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanLube.java @@ -99,8 +99,6 @@ public class DmsPlanLube extends TenantEntity { private String cronExpression; - - /** * 润滑计划明细列表 */ diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanLubeDetail.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanLubeDetail.java index b1b526a..c9181b0 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanLubeDetail.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsPlanLubeDetail.java @@ -35,7 +35,7 @@ public class DmsPlanLubeDetail extends TenantEntity { /** * 设备ID,关联prod_base_machine_info的device_id */ - private Long machineId; + private Long deviceId; /** * 润滑部位,关联润滑部位主键 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsFaultInstanceBo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsFaultInstanceBo.java index 96aeb8c..4850a02 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsFaultInstanceBo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsFaultInstanceBo.java @@ -12,7 +12,7 @@ import java.util.Date; import com.fasterxml.jackson.annotation.JsonFormat; /** - * 故障报修工单;手工创建故障报修工单业务对象 dms_bills_fault_instance + * 故障报修工单业务对象 dms_bills_fault_instance * * @author zch * @date 2025-04-07 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsInspectInstanceBo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsInspectInstanceBo.java index b27a2d7..c002a62 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsInspectInstanceBo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsInspectInstanceBo.java @@ -82,5 +82,10 @@ public class DmsBillsInspectInstanceBo extends BaseEntity { */ private String remark; + /** + * 流程状态 + */ + private String status; + } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsLubeInstanceBo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsLubeInstanceBo.java index 7c61545..c652fac 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsLubeInstanceBo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsLubeInstanceBo.java @@ -88,6 +88,11 @@ public class DmsBillsLubeInstanceBo extends BaseEntity { */ private String remark; + /** + * 流程状态 + */ + private String status; + private String lubeStatusStr;//常量拼接的状态值 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsMaintInstanceBo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsMaintInstanceBo.java index 3a037fe..51dd78b 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsMaintInstanceBo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsBillsMaintInstanceBo.java @@ -94,4 +94,9 @@ public class DmsBillsMaintInstanceBo extends BaseEntity { private String maintStatusStr; + /** + * 流程状态 + */ + private String status; + } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsPlanLubeBo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsPlanLubeBo.java index 942f8f3..b85233e 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsPlanLubeBo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsPlanLubeBo.java @@ -22,7 +22,7 @@ import java.util.List; */ @Data @EqualsAndHashCode(callSuper = true) -@AutoMapper(target = DmsPlanLube.class, reverseConvertGenerate = false) +@AutoMapper(target = DmsPlanLube.class) public class DmsPlanLubeBo extends BaseEntity { /** diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsFaultInstanceVo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsFaultInstanceVo.java index f5bf751..05ee563 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsFaultInstanceVo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsFaultInstanceVo.java @@ -17,7 +17,7 @@ import java.util.List; /** - * 故障报修工单;手工创建故障报修工单视图对象 dms_bills_fault_instance + * 故障报修工单视图对象 dms_bills_fault_instance * * @author zch * @date 2025-04-07 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsInspectInstanceVo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsInspectInstanceVo.java index fa1a8c5..a7b6e39 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsInspectInstanceVo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsInspectInstanceVo.java @@ -104,5 +104,10 @@ public class DmsBillsInspectInstanceVo implements Serializable { @ExcelProperty(value = "备注") private String remark; + /** + * 流程状态 + */ + private String status; + } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsLubeInstanceVo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsLubeInstanceVo.java index 7926d1d..dd1490c 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsLubeInstanceVo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsLubeInstanceVo.java @@ -1,7 +1,10 @@ package org.dromara.dms.domain.vo; +import com.alibaba.excel.annotation.ExcelIgnore; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; @@ -109,6 +112,11 @@ public class DmsBillsLubeInstanceVo implements Serializable { @ExcelProperty(value = "备注") private String remark; + /** + * 流程状态 + */ + private String status; + /** * 计划编号 */ @@ -119,4 +127,17 @@ public class DmsBillsLubeInstanceVo implements Serializable { */ private List dmsBillsLubeDetailList; + + /** + * 创建者 + */ + @ExcelIgnore + private Long createBy; + + /** + * 创建时间 + */ + @ExcelIgnore + private Date createTime; + } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsMaintInstanceVo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsMaintInstanceVo.java index f00ea46..a05d046 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsMaintInstanceVo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsBillsMaintInstanceVo.java @@ -118,5 +118,8 @@ public class DmsBillsMaintInstanceVo implements Serializable { @ExcelProperty(value = "备注") private String remark; - + /** + * 流程状态 + */ + private String status; } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsInspectRouteDetailVo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsInspectRouteDetailVo.java index 34a3290..a13797a 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsInspectRouteDetailVo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsInspectRouteDetailVo.java @@ -75,4 +75,9 @@ public class DmsInspectRouteDetailVo implements Serializable { */ private String machineName;//JOIN + /** + * 标准名称 + */ + private String standardName;//JOIN + } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsPlanMaintVo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsPlanMaintVo.java index 5a417d4..f70b392 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsPlanMaintVo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsPlanMaintVo.java @@ -2,16 +2,18 @@ package org.dromara.dms.domain.vo; import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotation.TableField; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.dms.domain.DmsPlanMaint; +import org.dromara.dms.domain.DmsPlanMaintDetail; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import java.util.List; /** @@ -122,4 +124,6 @@ public class DmsPlanMaintVo implements Serializable { private Long timeLimitDays; private Long timeLimitHours; + /** 保养计划明细信息 */ + private List dmsPlanMaintDetailList; } 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..5b0607a --- /dev/null +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteInspectInstanceServiceImpl.java @@ -0,0 +1,147 @@ +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.dromara.dms.service.impl.DmsInspectProjectDeviceServiceImpl; +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, String tenantId, Long userId){ + // 使用 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);//待巡检 + dmsBillsInspectInstance.setCreateBy(userId); +// dmsBillsInspectInstance.setCreateTime(new Date()); + dmsBillsInspectInstance.setTenantId(tenantId); + 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");//FIXME:为什么设置为异常?设备状态(1正常 0异常) + +// dmsInspectInstanceDetailMapper.insertDmsInspectInstanceDetail(dmsInspectInstanceDetail); + + dmsInspectInstanceDetail.setTenantId(tenantId); + dmsInspectInstanceDetail.setCreateBy(userId); +// dmsInspectInstanceDetail.setCreateTime(new Date()); + dmsInspectInstanceDetailMapper.insert(dmsInspectInstanceDetail); + Long projectId = dmsInspectInstanceDetailMapper.selectProjectId(dmsInspectRouteDetail.getInspectStandard()); + +// DmsInspectProjectDevice queryInspectProjectDevice = new DmsInspectProjectDevice(); +// queryInspectProjectDevice.setTargetType("2");//FIXME:关联类型(1设备类型) +// queryInspectProjectDevice.setTargetId(deviceId); + MPJLambdaWrapper DmsInspectProjectDeviceLQW = JoinWrappers.lambda(DmsInspectProjectDevice.class) + .eq(DmsInspectProjectDevice::getTargetType, "2")//FIXME:关联类型(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); + + dmsInspectInstanceDetailProject.setTenantId(tenantId); + dmsInspectInstanceDetailProject.setCreateBy(userId); +// dmsInspectInstanceDetailProject.setCreateTime(new Date()); + 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..e1d65d7 --- /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.DmsBillsLubeInstanceVo; +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 tenantId, Long userId) { + // 去除润滑计划编号中的双引号 +// 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(); + } + + // 创建新的润滑工单实例对象 + DmsBillsLubeInstance dmsBillsLubeInstance = new DmsBillsLubeInstance(); + // 设置创建人 + dmsBillsLubeInstance.setCreateBy(dmsPlanLube.getCreateBy()); + // 设置润滑工单的计划ID + dmsBillsLubeInstance.setPlanLubeId(dmsPlanLube.getPlanLubeId()); + // 设置计划开始时间为润滑时间 + dmsBillsLubeInstance.setPlanBeginTime(dmsPlanLube.getLubeTime()); + // 生成并设置润滑工单编码 + dmsBillsLubeInstance.setBillsLubeCode(Seq.getId(Seq.dmsLubeInstanceSeqType, Seq.dmsLubeInstanceCode)); + // 设置润滑状态为待润滑 + dmsBillsLubeInstance.setLubeStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_TO_LUBE); + // 设置润滑组 + dmsBillsLubeInstance.setLubeGroup(dmsPlanLube.getLubeGroup()); + // 设置润滑监督人 + dmsBillsLubeInstance.setLubeSupervisor(dmsPlanLube.getLubeSupervisor()); + // 设置润滑级别 + dmsBillsLubeInstance.setLubeLevel(dmsPlanLube.getLubeLevel()); + // 获取时间限制 + Long timeLimit = dmsPlanLube.getTimeLimit(); + // 计算并设置计划结束时间 + Date planEndTime = new Date(dmsPlanLube.getLubeTime().getTime() + timeLimit * 1000L); + dmsBillsLubeInstance.setPlanEndTime(planEndTime); + + dmsBillsLubeInstance.setCreateBy(userId); +// dmsBillsLubeInstance.setCreateTime(new Date()); + dmsBillsLubeInstance.setTenantId(tenantId); + + // 插入润滑工单实例到数据库 + int i = dmsBillsLubeInstanceMapper.insert(dmsBillsLubeInstance); + 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(dmsBillsLubeInstance.getLubeInstanceId()); + dmsBillsLubeDetail.setMachineId(planLubeDetail.getDeviceId()); + dmsBillsLubeDetail.setLubeStationId(planLubeDetail.getLubeStationId()); + dmsBillsLubeDetail.setLubeStandardId(planLubeDetail.getLubeStandardId()); + //dmsBillsLubeDetail.setActiveFlag("Y"); // 假设是否标记字段对应activeFlag + + dmsBillsLubeDetail.setTenantId(tenantId); + dmsBillsLubeDetail.setCreateBy(userId); +// dmsBillsLubeDetail.setCreateTime(new Date()); + + dmsBillsLubeDetailMapper.insert(dmsBillsLubeDetail); + } + + 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..3f78042 --- /dev/null +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteMaintInstanceServiceImpl.java @@ -0,0 +1,130 @@ +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.common.satoken.utils.LoginHelper; +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.dromara.system.api.model.LoginUser; +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 tenantId, Long userId) { + 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)); + + //字段没有自动填充,只能代码手动填充 + dmsBillsMaintInstance.setCreateBy(userId); + dmsBillsMaintInstance.setTenantId(tenantId); + + 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(), tenantId, userId); + return R.ok(i); + } + + + @Transactional( rollbackFor = Exception.class ) + public void batchInsertDmsBillsMaintDetail(DmsPlanMaint dmsPlanMaint, Long maintInstanceId, String tenantId, Long userId) { + 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);//保养状态(1待保养 2保养中 3已完成) + + //字段没有自动填充,只能代码手动填充 + dmsBillsMaintDetail.setCreateBy(userId); + dmsBillsMaintDetail.setTenantId(tenantId); + + dmsBillsMaintDetailMapper.insert(dmsBillsMaintDetail); + }); + + 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");//保养项目状态(0待保养 1保养完成)FIXME:为什么是2?? + + //字段没有自动填充,只能代码手动填充 + billsMaintDetailProject.setCreateBy(userId); + billsMaintDetailProject.setTenantId(tenantId); + + dmsBillsMaintDetailProjectMapper.insert(billsMaintDetailProject); + } + + } + + } +} 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..334c5a0 --- /dev/null +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/dubbo/RemoteRepairStanceServicempl.java @@ -0,0 +1,132 @@ +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");//工单类型(1手工创建 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");//工单状态(0待检修 1检修中 2检修完成) + if (dmsRepairInstance.getInstanceType()==null) { + dmsRepairInstance.setInstanceType("1");//工单类型(1手工创建 2自动创建) + } +// 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");//状态(0已结束 1执行中 2待接取 3已转发) + //先写死第一步所对应的步骤,后续通过wfProcessId来查询步骤对应的id +// dmsRepairInstanceActivity.setProcessActivityId(aLong); + dmsRepairInstanceActivity.setProcessStepOrder(1l);//工单流程步骤顺序 +// dmsRepairInstanceActivity.setCreateBy(); + 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/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsFaultInstanceMapper.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsFaultInstanceMapper.java index a12bf1e..19ee43c 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsFaultInstanceMapper.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsFaultInstanceMapper.java @@ -10,7 +10,7 @@ import org.dromara.dms.domain.vo.DmsFaultInstanceActivityVo; import java.util.List; /** - * 故障报修工单;手工创建故障报修工单Mapper接口 + * 故障报修工单Mapper接口 * * @author zch * @date 2025-04-07 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsMaintDetailMapper.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsMaintDetailMapper.java index 9b575c2..b50cc64 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsMaintDetailMapper.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsMaintDetailMapper.java @@ -1,6 +1,7 @@ package org.dromara.dms.mapper; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; +import org.dromara.dms.domain.DmsBaseMaintProject; import org.dromara.dms.domain.DmsBillsMaintDetail; import org.dromara.dms.domain.DmsBillsMaintInstance; import org.dromara.dms.domain.vo.DmsBaseMaintProjectVo; @@ -25,11 +26,11 @@ public interface DmsBillsMaintDetailMapper extends BaseMapperPlus selectDmsBillsMaintDetailJoinList(DmsBillsMaintDetail dmsBillsMaintDetail); - List selectDetailList(Long maintInstanceId); + List selectDetailList(Long maintInstanceId); DmsBaseMaintStationVo selectMainStation(Long stationId); - List selectPrjectIds(Long stationId); + List selectPrjectIds(Long stationId); /** * 查询最新一条保养工单,Join 第一步节点 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsInspectProjectDeviceMapper.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsInspectProjectDeviceMapper.java index 6635e57..a8a62eb 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsInspectProjectDeviceMapper.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsInspectProjectDeviceMapper.java @@ -12,4 +12,5 @@ import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; */ public interface DmsInspectProjectDeviceMapper extends BaseMapperPlus { + } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsPlanInspectMapper.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsPlanInspectMapper.java index 301f2ff..40e102f 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsPlanInspectMapper.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsPlanInspectMapper.java @@ -16,6 +16,6 @@ public interface DmsPlanInspectMapper extends BaseMapperPlus { + DmsPlanRepair selectDmsPlanRepairByPlanRepairCode(String planRepairCode); + + DmsPlanRepair selectDmsPlanRepairByPlanRepairId(Long planRepairId); } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsFaultInstanceService.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsFaultInstanceService.java index d2e3d31..9495849 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsFaultInstanceService.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsFaultInstanceService.java @@ -10,7 +10,7 @@ import java.util.Collection; import java.util.List; /** - * 故障报修工单;手工创建故障报修工单Service接口 + * 故障报修工单Service接口 * * @author zch * @date 2025-04-07 @@ -18,48 +18,48 @@ import java.util.List; public interface IDmsBillsFaultInstanceService { /** - * 查询故障报修工单;手工创建故障报修工单 + * 查询故障报修工单 * * @param repairInstanceId 主键 - * @return 故障报修工单;手工创建故障报修工单 + * @return 故障报修工单 */ DmsBillsFaultInstanceVo queryById(Long repairInstanceId); /** - * 分页查询故障报修工单;手工创建故障报修工单列表 + * 分页查询故障报修工单列表 * * @param bo 查询条件 * @param pageQuery 分页参数 - * @return 故障报修工单;手工创建故障报修工单分页列表 + * @return 故障报修工单分页列表 */ TableDataInfo queryPageList(DmsBillsFaultInstanceBo bo, PageQuery pageQuery); /** - * 查询符合条件的故障报修工单;手工创建故障报修工单列表 + * 查询符合条件的故障报修工单列表 * * @param bo 查询条件 - * @return 故障报修工单;手工创建故障报修工单列表 + * @return 故障报修工单列表 */ List queryList(DmsBillsFaultInstanceBo bo); /** - * 新增故障报修工单;手工创建故障报修工单 + * 新增故障报修工单 * - * @param bo 故障报修工单;手工创建故障报修工单 + * @param bo 故障报修工单 * @return 是否新增成功 */ Boolean insertByBo(DmsBillsFaultInstanceBo bo); /** - * 修改故障报修工单;手工创建故障报修工单 + * 修改故障报修工单 * - * @param bo 故障报修工单;手工创建故障报修工单 + * @param bo 故障报修工单 * @return 是否修改成功 */ Boolean updateByBo(DmsBillsFaultInstanceBo bo); /** - * 校验并批量删除故障报修工单;手工创建故障报修工单信息 + * 校验并批量删除故障报修工单信息 * * @param ids 待删除的主键集合 * @param isValid 是否进行有效性校验 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsInspectInstanceService.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsInspectInstanceService.java index 3b35fc7..3b10759 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsInspectInstanceService.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsInspectInstanceService.java @@ -48,7 +48,7 @@ public interface IDmsBillsInspectInstanceService { * @param bo 点巡检工单 * @return 是否新增成功 */ - Boolean insertByBo(DmsBillsInspectInstanceBo bo); + DmsBillsInspectInstanceVo insertByBo(DmsBillsInspectInstanceBo bo); /** * 修改点巡检工单 @@ -56,7 +56,7 @@ public interface IDmsBillsInspectInstanceService { * @param bo 点巡检工单 * @return 是否修改成功 */ - Boolean updateByBo(DmsBillsInspectInstanceBo bo); + DmsBillsInspectInstanceVo updateByBo(DmsBillsInspectInstanceBo bo); /** * 校验并批量删除点巡检工单信息 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsLubeInstanceService.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsLubeInstanceService.java index ed2f0f4..8cbb3e0 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsLubeInstanceService.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsLubeInstanceService.java @@ -48,7 +48,7 @@ public interface IDmsBillsLubeInstanceService { * @param bo 润滑工单 * @return 是否新增成功 */ - Boolean insertByBo(DmsBillsLubeInstanceBo bo); + DmsBillsLubeInstanceVo insertByBo(DmsBillsLubeInstanceBo bo); /** * 修改润滑工单 @@ -56,7 +56,7 @@ public interface IDmsBillsLubeInstanceService { * @param bo 润滑工单 * @return 是否修改成功 */ - Boolean updateByBo(DmsBillsLubeInstanceBo bo); + DmsBillsLubeInstanceVo updateByBo(DmsBillsLubeInstanceBo bo); /** * 校验并批量删除润滑工单信息 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsMaintInstanceService.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsMaintInstanceService.java index 1ad73d9..1befd22 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsMaintInstanceService.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/IDmsBillsMaintInstanceService.java @@ -49,7 +49,7 @@ public interface IDmsBillsMaintInstanceService { * @param bo 保养工单 * @return 是否新增成功 */ - Boolean insertByBo(DmsBillsMaintInstanceBo bo); + DmsBillsMaintInstanceVo insertByBo(DmsBillsMaintInstanceBo bo); /** * 修改保养工单 @@ -57,7 +57,7 @@ public interface IDmsBillsMaintInstanceService { * @param bo 保养工单 * @return 是否修改成功 */ - Boolean updateByBo(DmsBillsMaintInstanceBo bo); + DmsBillsMaintInstanceVo updateByBo(DmsBillsMaintInstanceBo bo); /** * 校验并批量删除保养工单信息 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsFaultInstanceServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsFaultInstanceServiceImpl.java index 4c85d29..44a3bf7 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsFaultInstanceServiceImpl.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsFaultInstanceServiceImpl.java @@ -24,7 +24,7 @@ import java.util.List; import java.util.Map; /** - * 故障报修工单;手工创建故障报修工单Service业务层处理 + * 故障报修工单Service业务层处理 * * @author zch * @date 2025-04-07 @@ -38,10 +38,10 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS private final DmsBillsFaultInstanceMapper dmsBillsFaultInstanceMapper; /** - * 查询故障报修工单;手工创建故障报修工单 + * 查询故障报修工单 * * @param repairInstanceId 主键 - * @return 故障报修工单;手工创建故障报修工单 + * @return 故障报修工单 */ @Override public DmsBillsFaultInstanceVo queryById(Long repairInstanceId){ @@ -49,11 +49,11 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS } /** - * 分页查询故障报修工单;手工创建故障报修工单列表 + * 分页查询故障报修工单列表 * * @param bo 查询条件 * @param pageQuery 分页参数 - * @return 故障报修工单;手工创建故障报修工单分页列表 + * @return 故障报修工单分页列表 */ @Override public TableDataInfo queryPageList(DmsBillsFaultInstanceBo bo, PageQuery pageQuery) { @@ -63,10 +63,10 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS } /** - * 查询符合条件的故障报修工单;手工创建故障报修工单列表 + * 查询符合条件的故障报修工单列表 * * @param bo 查询条件 - * @return 故障报修工单;手工创建故障报修工单列表 + * @return 故障报修工单列表 */ @Override public List queryList(DmsBillsFaultInstanceBo bo) { @@ -100,9 +100,9 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS } /** - * 新增故障报修工单;手工创建故障报修工单 + * 新增故障报修工单 * - * @param bo 故障报修工单;手工创建故障报修工单 + * @param bo 故障报修工单 * @return 是否新增成功 */ @Override @@ -117,9 +117,9 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS } /** - * 修改故障报修工单;手工创建故障报修工单 + * 修改故障报修工单 * - * @param bo 故障报修工单;手工创建故障报修工单 + * @param bo 故障报修工单 * @return 是否修改成功 */ @Override @@ -137,7 +137,7 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS } /** - * 校验并批量删除故障报修工单;手工创建故障报修工单信息 + * 校验并批量删除故障报修工单信息 * * @param ids 待删除的主键集合 * @param isValid 是否进行有效性校验 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsInspectInstanceServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsInspectInstanceServiceImpl.java index a9e6147..2f4db69 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsInspectInstanceServiceImpl.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsInspectInstanceServiceImpl.java @@ -108,14 +108,14 @@ public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInsta * @return 是否新增成功 */ @Override - public Boolean insertByBo(DmsBillsInspectInstanceBo bo) { + public DmsBillsInspectInstanceVo insertByBo(DmsBillsInspectInstanceBo bo) { DmsBillsInspectInstance add = MapstructUtils.convert(bo, DmsBillsInspectInstance.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setInspectInstanceId(add.getInspectInstanceId()); } - return flag; + return MapstructUtils.convert(add, DmsBillsInspectInstanceVo.class); } /** @@ -125,10 +125,10 @@ public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInsta * @return 是否修改成功 */ @Override - public Boolean updateByBo(DmsBillsInspectInstanceBo bo) { + public DmsBillsInspectInstanceVo updateByBo(DmsBillsInspectInstanceBo bo) { DmsBillsInspectInstance update = MapstructUtils.convert(bo, DmsBillsInspectInstance.class); validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; + return MapstructUtils.convert(update, DmsBillsInspectInstanceVo.class); } /** diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsLubeInstanceServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsLubeInstanceServiceImpl.java index 186a539..d4b00d2 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsLubeInstanceServiceImpl.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsLubeInstanceServiceImpl.java @@ -29,6 +29,7 @@ import org.dromara.dms.mapper.*; import org.dromara.dms.service.IDmsBillsLubeInstanceService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.ObjectUtils; import java.util.*; import java.util.stream.Collectors; @@ -124,14 +125,14 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer * @return 是否新增成功 */ @Override - public Boolean insertByBo(DmsBillsLubeInstanceBo bo) { + public DmsBillsLubeInstanceVo insertByBo(DmsBillsLubeInstanceBo bo) { DmsBillsLubeInstance add = MapstructUtils.convert(bo, DmsBillsLubeInstance.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setLubeInstanceId(add.getLubeInstanceId()); } - return flag; + return MapstructUtils.convert(add, DmsBillsLubeInstanceVo.class); } /** @@ -141,10 +142,10 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer * @return 是否修改成功 */ @Override - public Boolean updateByBo(DmsBillsLubeInstanceBo bo) { + public DmsBillsLubeInstanceVo updateByBo(DmsBillsLubeInstanceBo bo) { DmsBillsLubeInstance update = MapstructUtils.convert(bo, DmsBillsLubeInstance.class); validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; + return MapstructUtils.convert(update, DmsBillsLubeInstanceVo.class); } /** @@ -225,13 +226,13 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer dmsBillsLubeInstanceBo.setPlanEndTime(planEndTime); // 插入润滑工单实例到数据库 - boolean success = this.insertByBo(dmsBillsLubeInstanceBo); + DmsBillsLubeInstanceVo billsLubeInstance = this.insertByBo(dmsBillsLubeInstanceBo); DmsPlanLubeBo dmsPlanLubeBo = MapstructUtils.convert(dmsPlanLube, DmsPlanLubeBo.class); // 批量插入润滑工单详情 batchInsertDmsBillsLubeDetail(dmsPlanLubeBo, dmsBillsLubeInstanceBo.getLubeInstanceId()); - return success; + return !ObjectUtils.isEmpty(billsLubeInstance);//不为空返回true } /** diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsMaintInstanceServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsMaintInstanceServiceImpl.java index 6cfe550..c88b909 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsMaintInstanceServiceImpl.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsBillsMaintInstanceServiceImpl.java @@ -63,7 +63,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS * @return 保养工单 */ @Override - public DmsBillsMaintInstanceVo queryById(Long maintInstanceId){ + public DmsBillsMaintInstanceVo queryById(Long maintInstanceId) { return baseMapper.selectVoById(maintInstanceId); } @@ -96,26 +96,24 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS private MPJLambdaWrapper buildQueryWrapper(DmsBillsMaintInstanceBo bo) { Map params = bo.getParams(); MPJLambdaWrapper lqw = JoinWrappers.lambda(DmsBillsMaintInstance.class) - .selectAll(DmsBillsMaintInstance.class) - + .selectAll(DmsBillsMaintInstance.class) .select(DmsPlanMaint::getMaintSupervisor) - .selectAs(DmsPlanMaint::getRemark,DmsBillsMaintInstance::getPlanRemark) - .leftJoin(DmsPlanMaint.class,DmsPlanMaint::getPlanMaintId,DmsBillsMaintInstance::getPlanMaintId) - - .eq(bo.getMaintInstanceId() != null, DmsBillsMaintInstance::getMaintInstanceId, bo.getMaintInstanceId()) - .eq(bo.getPlanMaintId() != null, DmsBillsMaintInstance::getPlanMaintId, bo.getPlanMaintId()) - .eq(bo.getWfDefinitionId() != null, DmsBillsMaintInstance::getWfDefinitionId, bo.getWfDefinitionId()) - .eq(StringUtils.isNotBlank(bo.getBillsMaintCode()), DmsBillsMaintInstance::getBillsMaintCode, bo.getBillsMaintCode()) - .eq(StringUtils.isNotBlank(bo.getMaintGroup()), DmsBillsMaintInstance::getMaintGroup, bo.getMaintGroup()) - .eq(StringUtils.isNotBlank(bo.getMaintSupervisor()), DmsBillsMaintInstance::getMaintSupervisor, bo.getMaintSupervisor()) - .eq(bo.getMaintLevel() != null , DmsBillsMaintInstance::getMaintLevel, bo.getMaintLevel()) - .eq(bo.getPlanBeginTime() != null, DmsBillsMaintInstance::getPlanBeginTime, bo.getPlanBeginTime()) - .eq(bo.getRealBeginTime() != null, DmsBillsMaintInstance::getRealBeginTime, bo.getRealBeginTime()) - .eq(bo.getPlanEndTime() != null, DmsBillsMaintInstance::getPlanEndTime, bo.getPlanEndTime()) - .eq(bo.getRealEndTime() != null, DmsBillsMaintInstance::getRealEndTime, bo.getRealEndTime()) - .eq(bo.getMaintStatus() != null, DmsBillsMaintInstance::getMaintStatus, bo.getMaintStatus()) - .eq(bo.getMaintCompRate() != null, DmsBillsMaintInstance::getMaintCompRate, bo.getMaintCompRate()) - .orderByDesc(DmsBillsMaintInstance::getCreateTime); + .selectAs(DmsPlanMaint::getRemark, DmsBillsMaintInstance::getPlanRemark) + .leftJoin(DmsPlanMaint.class, DmsPlanMaint::getPlanMaintId, DmsBillsMaintInstance::getPlanMaintId) + .eq(bo.getMaintInstanceId() != null, DmsBillsMaintInstance::getMaintInstanceId, bo.getMaintInstanceId()) + .eq(bo.getPlanMaintId() != null, DmsBillsMaintInstance::getPlanMaintId, bo.getPlanMaintId()) + .eq(bo.getWfDefinitionId() != null, DmsBillsMaintInstance::getWfDefinitionId, bo.getWfDefinitionId()) + .eq(StringUtils.isNotBlank(bo.getBillsMaintCode()), DmsBillsMaintInstance::getBillsMaintCode, bo.getBillsMaintCode()) + .eq(StringUtils.isNotBlank(bo.getMaintGroup()), DmsBillsMaintInstance::getMaintGroup, bo.getMaintGroup()) + .eq(StringUtils.isNotBlank(bo.getMaintSupervisor()), DmsBillsMaintInstance::getMaintSupervisor, bo.getMaintSupervisor()) + .eq(bo.getMaintLevel() != null, DmsBillsMaintInstance::getMaintLevel, bo.getMaintLevel()) + .eq(bo.getPlanBeginTime() != null, DmsBillsMaintInstance::getPlanBeginTime, bo.getPlanBeginTime()) + .eq(bo.getRealBeginTime() != null, DmsBillsMaintInstance::getRealBeginTime, bo.getRealBeginTime()) + .eq(bo.getPlanEndTime() != null, DmsBillsMaintInstance::getPlanEndTime, bo.getPlanEndTime()) + .eq(bo.getRealEndTime() != null, DmsBillsMaintInstance::getRealEndTime, bo.getRealEndTime()) + .eq(bo.getMaintStatus() != null, DmsBillsMaintInstance::getMaintStatus, bo.getMaintStatus()) + .eq(bo.getMaintCompRate() != null, DmsBillsMaintInstance::getMaintCompRate, bo.getMaintCompRate()) + .orderByDesc(DmsBillsMaintInstance::getCreateTime); return lqw; } @@ -126,14 +124,14 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS * @return 是否新增成功 */ @Override - public Boolean insertByBo(DmsBillsMaintInstanceBo bo) { + public DmsBillsMaintInstanceVo insertByBo(DmsBillsMaintInstanceBo bo) { DmsBillsMaintInstance add = MapstructUtils.convert(bo, DmsBillsMaintInstance.class); validEntityBeforeSave(add); boolean flag = baseMapper.insert(add) > 0; if (flag) { bo.setMaintInstanceId(add.getMaintInstanceId()); } - return flag; + return MapstructUtils.convert(add, DmsBillsMaintInstanceVo.class); } /** @@ -143,16 +141,16 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS * @return 是否修改成功 */ @Override - public Boolean updateByBo(DmsBillsMaintInstanceBo bo) { + public DmsBillsMaintInstanceVo updateByBo(DmsBillsMaintInstanceBo bo) { DmsBillsMaintInstance update = MapstructUtils.convert(bo, DmsBillsMaintInstance.class); validEntityBeforeSave(update); - return baseMapper.updateById(update) > 0; + return MapstructUtils.convert(update, DmsBillsMaintInstanceVo.class); } /** * 保存前的数据校验 */ - private void validEntityBeforeSave(DmsBillsMaintInstance entity){ + private void validEntityBeforeSave(DmsBillsMaintInstance entity) { //TODO 做一些数据校验,如唯一约束 } @@ -165,7 +163,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS */ @Override public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { - if(isValid){ + if (isValid) { //TODO 做一些业务上的校验,判断是否需要校验 } return baseMapper.deleteByIds(ids) > 0; @@ -178,7 +176,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS * @return 结果 */ @Override - @Transactional( rollbackFor= Exception.class) + @Transactional(rollbackFor = Exception.class) public int insertDmsBillsMaintInstance(String planMaintCode) { String planMaintCodeS = planMaintCode.replaceAll("\"", ""); DmsPlanMaint dmsPlanMaint = dmsPlanMaintMapper.selectDmsPlanMaintJoinByPlanMaintCode(planMaintCodeS); @@ -205,7 +203,7 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS dmsBillsMaintInstance.setPlanEndTime(new Date(lubeTime.getTime() + timeLimit * 1000l)); int insert = baseMapper.insert(dmsBillsMaintInstance); -/* DmsBillMaintInstanceActivity表弃用 */ + /* DmsBillMaintInstanceActivity表弃用 */ /* DmsBillMaintInstanceActivity dmsMaintInstanceActivity = new DmsMaintInstanceActivity(); dmsMaintInstanceActivity.setMaintInstanceId(dmsBillsMaintInstance.getMaintInstanceId()); dmsMaintInstanceActivity.setProcessStepOrder(1L); @@ -231,10 +229,10 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS dmsBillsMaintDetailMapper.insertBatch(billsMaintDetails); ArrayList detailprojectList = new ArrayList<>(); - List list = dmsBillsMaintDetailMapper.selectDetailList(maintInstanceId); - for (DmsBillsMaintDetailVo detail : list) { - List projects = dmsBillsMaintDetailMapper.selectPrjectIds(detail.getMaintStationId()); - for (DmsBaseMaintProjectVo project : projects) { + List list = dmsBillsMaintDetailMapper.selectDetailList(maintInstanceId); + for (DmsBillsMaintDetail detail : list) { + List projects = dmsBillsMaintDetailMapper.selectPrjectIds(detail.getMaintStationId()); + for (DmsBaseMaintProject project : projects) { DmsBillsMaintDetailProject detailproject = new DmsBillsMaintDetailProject(); detailproject.setBillsMaintDetailId(detail.getBillsMaintDetailId()); // DmsBaseMaintStation station = dmsBillsMaintDetailMapper.selectMainStation(detail.getStationId()); diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsInspectProjectDeviceServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsInspectProjectDeviceServiceImpl.java index 85dbb2a..e90ba52 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsInspectProjectDeviceServiceImpl.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsInspectProjectDeviceServiceImpl.java @@ -75,8 +75,7 @@ public class DmsInspectProjectDeviceServiceImpl implements IDmsInspectProjectDev .selectAll(DmsInspectProjectDevice.class) .eq(bo.getInspectProjectId() != null, DmsInspectProjectDevice::getInspectProjectId, bo.getInspectProjectId()) .eq(StringUtils.isNotBlank(bo.getTargetType()), DmsInspectProjectDevice::getTargetType, bo.getTargetType()) - .eq(bo.getTargetId() != null, DmsInspectProjectDevice::getTargetId, bo.getTargetId()) - .orderByDesc(DmsInspectProjectDevice::getCreateTime); + .eq(bo.getTargetId() != null, DmsInspectProjectDevice::getTargetId, bo.getTargetId()); return lqw; } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsInspectRouteDetailServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsInspectRouteDetailServiceImpl.java index 4a0ab4d..f286503 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsInspectRouteDetailServiceImpl.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsInspectRouteDetailServiceImpl.java @@ -11,6 +11,7 @@ import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; import org.dromara.dms.domain.DmsBaseInspectRoute; +import org.dromara.dms.domain.DmsBaseInspectStandard; import org.dromara.dms.domain.DmsBaseMachineInfo; import org.springframework.stereotype.Service; import org.dromara.dms.domain.bo.DmsInspectRouteDetailBo; @@ -83,10 +84,16 @@ public class DmsInspectRouteDetailServiceImpl implements IDmsInspectRouteDetailS .select(DmsBaseMachineInfo::getMachineName) .leftJoin(DmsBaseMachineInfo.class, DmsBaseMachineInfo::getMachineId,DmsInspectRouteDetail::getMachineId) + .select(DmsBaseInspectStandard::getStandardName) + .leftJoin(DmsBaseInspectStandard.class, DmsBaseInspectStandard::getInspectStandardId,DmsInspectRouteDetail::getInspectStandard) + .eq(bo.getRouteDetailId() != null, DmsInspectRouteDetail::getRouteDetailId, bo.getRouteDetailId()) .eq(bo.getInspectRouteId() != null, DmsInspectRouteDetail::getInspectRouteId, bo.getInspectRouteId()) .eq(bo.getLineStep() != null, DmsInspectRouteDetail::getLineStep, bo.getLineStep()) .eq(bo.getMachineId() != null, DmsInspectRouteDetail::getMachineId, bo.getMachineId()) + + .eq(bo.getInspectStandard() != null, DmsInspectRouteDetail::getInspectStandard, bo.getInspectStandard()) + .eq(StringUtils.isNotBlank(bo.getInspectStandard()), DmsInspectRouteDetail::getInspectStandard, bo.getInspectStandard()) .orderByDesc(DmsInspectRouteDetail::getCreateTime); return lqw; diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanInspectServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanInspectServiceImpl.java index abe67ac..c04d485 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanInspectServiceImpl.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanInspectServiceImpl.java @@ -1,22 +1,32 @@ package org.dromara.dms.service.impl; +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 com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; +import io.seata.spring.annotation.GlobalTransactional; import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.domain.R; import org.dromara.common.core.utils.MapstructUtils; 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.DmsBaseInspectRoute; import org.dromara.dms.domain.DmsPlanInspect; import org.dromara.dms.domain.bo.DmsPlanInspectBo; import org.dromara.dms.domain.vo.DmsPlanInspectVo; +import org.dromara.dms.domain.vo.DmsPlanMaintVo; import org.dromara.dms.mapper.DmsBaseInspectRouteMapper; import org.dromara.dms.mapper.DmsPlanInspectMapper; import org.dromara.dms.service.IDmsPlanInspectService; import org.dromara.dms.utils.CronUtils; +import org.dromara.job.api.RemoteJobService; +import org.dromara.job.api.model.DmsJobEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -39,6 +49,9 @@ public class DmsPlanInspectServiceImpl implements IDmsPlanInspectService { private final DmsBaseInspectRouteMapper dmsBaseInspectRouteMapper; + @DubboReference + private final RemoteJobService remoteJobService; + private static final Long SECONDS_PER_DAY = 24 * 60 * 60L; private static final Long SECONDS_PER_HOUR = 60 * 60L; @@ -149,7 +162,7 @@ public class DmsPlanInspectServiceImpl implements IDmsPlanInspectService { * @return 是否新增成功 */ @Override - @Transactional( rollbackFor = Exception.class) + @GlobalTransactional(rollbackFor = Exception.class) public Boolean insertByBo(DmsPlanInspectBo bo) { DmsPlanInspect add = MapstructUtils.convert(bo, DmsPlanInspect.class); String day = "*"; @@ -179,23 +192,35 @@ public class DmsPlanInspectServiceImpl implements IDmsPlanInspectService { if (add.getInspectLevel().equals(3l)){ cron = "0 0 "+add.getHour()+" "+day+" "+ month+" ? "+year; } - String planInspectCode = Seq.getId(Seq.planInspectSeqType, Seq.planInspectCode); -/* SysJob job = new SysJob(); - job.setJobName("点巡检计划编号" + planInspectCode + "工单任务"); - job.setJobGroup("DEFAULT"); - job.setInvokeTarget("ryTask.getDmsBillsInstance(\"" + planInspectCode + "\")"); - job.setCronExpression(cron); - job.setMisfirePolicy("1"); - job.setConcurrent("1"); - job.setStatus("1"); - R jobIdR = remoteJobService.add(SecurityConstants.INNER, job);*/ + bo.setCronExpression(cron);//cron表达式 - String time = cron; - //通过cron表达式获取下一次执行时间 - Date nextExecution = CronUtils.getNextExecution(time); - add.setPlanTime(nextExecution); - add.setPlanInspectCode(planInspectCode); -// add.setJobId(jobIdR.getData().longValue()); + String planInspectCode = Seq.getId(Seq.planInspectSeqType, Seq.planInspectCode); + + if(bo.getActiveFlag().equals("1")) {//激活标识(1是 0否) + DmsJobEntity dmsJobEntity = new DmsJobEntity(); + dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询 + .setJobName("点巡检计划编号" + planInspectCode + "工单任务") + .setExecutorInfo("stanceInspect")//执行器名称 + .setExecutorTimeout(30)//执行超时时间 + .setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发 + .setMaxRetryTimes(2)//最大重试次数 + .setTriggerType(TriggerTypeEnum.CRON)//触发器类型:cron + .setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式 + .setRetryInterval(3)//重试间隔时长 + .setArgsStr("planInspectCode") + .setExtAttrs(planInspectCode) + .setUserId(LoginHelper.getUserId().toString()) + .setTenantId(LoginHelper.getTenantId()); + System.out.println(LoginHelper.getTenantId()); + R longR = remoteJobService.addClusterJob(dmsJobEntity); + Long newJobId = longR.getData(); + //通过cron表达式获取下一次执行时间 + String time = cron; + Date nextExecution = CronUtils.getNextExecution(time); + add.setPlanTime(nextExecution); + add.setPlanInspectCode(planInspectCode); + add.setJobId(newJobId); + } Long timeLimitDays = add.getTimeLimitDays()==null ? 0L:add.getTimeLimitDays(); Long timeLimitHours = add.getTimeLimitHours() == null ? 0L:add.getTimeLimitHours(); @@ -221,9 +246,84 @@ public class DmsPlanInspectServiceImpl implements IDmsPlanInspectService { * @return 是否修改成功 */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public Boolean updateByBo(DmsPlanInspectBo bo) { DmsPlanInspect update = MapstructUtils.convert(bo, DmsPlanInspect.class); + String day = "*"; + String month = "*"; + String week = "*"; + String year = "*"; + String cron = ""; + if (update.getDay()!=null){ + day = update.getDay().toString(); + } + if (update.getMonth()!=null){ + month = update.getMonth().toString(); + } + if (update.getWeek()!=null){ + Long weekDay = update.getWeek() + 1; + week = weekDay.toString(); + } + if (update.getYear()!=null){ + year = update.getYear().toString(); + } + if (update.getInspectLevel().equals(1l)){ + cron = "0 0 "+update.getHour()+" "+day+" "+month+" ?"; + } + if (update.getInspectLevel().equals(2l)){ + cron = "0 0 "+update.getHour()+" ?"+" "+month+" "+week; + } + if (update.getInspectLevel().equals(3l)){ + cron = "0 0 "+update.getHour()+" "+day+" "+ month+" ? "+year; + } + bo.setCronExpression(cron);//cron表达式 + String time = cron; + //通过cron表达式获取下一次执行时间 + Date nextExecution = CronUtils.getNextExecution(time); + update.setPlanTime(nextExecution); + //获取设备总数 + Long aLong = dmsBaseInspectRouteMapper.selectAmountByInspectRouteId(update.getInspectRouteId()); + update.setDeviceAmount(aLong); validEntityBeforeSave(update); + + Long jobId = bo.getJobId(); + String planInspectCode = bo.getPlanInspectCode(); +// String cronExpression = bo.getCronExpression(); + if (bo.getActiveFlag().equals("1")) {//激活标识(1是 0否) + if (StringUtils.isNull(jobId)){//之前没激活创建定时任务,创建定时任务 + DmsJobEntity dmsJobEntity = new DmsJobEntity(); + dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询 + .setJobName("点巡检计划编号" + planInspectCode + "工单任务") + .setExecutorInfo("stanceInspect")//执行器名称 + .setExecutorTimeout(30)//执行超时时间 + .setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发 + .setMaxRetryTimes(2)//最大重试次数 + .setTriggerType(TriggerTypeEnum.CRON)//触发器类型:cron + .setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式 + .setRetryInterval(3)//重试间隔时长 + .setArgsStr("planInspectCode") + .setExtAttrs(planInspectCode) + .setUserId(LoginHelper.getUserId().toString()) + .setTenantId(LoginHelper.getTenantId()); + R longR = remoteJobService.addClusterJob(dmsJobEntity); + Long newJobId = longR.getData(); + update.setJobId(newJobId); + }else{//之前激活了,修改定时任务 + DmsJobEntity dmsJobEntity = new DmsJobEntity(); + dmsJobEntity + .setId(jobId) + .setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式 + .setUserId(LoginHelper.getUserId().toString()) + .setTenantId(LoginHelper.getTenantId()); + R updateClusterJob = remoteJobService.updateClusterJob(dmsJobEntity); + } + }else{//如果激活状态为0(1是 0否) + if (StringUtils.isNotNull(jobId)) {//之前激活过,创建并关联了任务 + //则任务状态为关闭 + R voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态(0:关闭;1:开启) + } + } + return baseMapper.updateById(update) > 0; } @@ -242,10 +342,19 @@ public class DmsPlanInspectServiceImpl implements IDmsPlanInspectService { * @return 是否删除成功 */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } + for (Long id : ids){ + DmsPlanInspectVo dmsPlanInspectVo = baseMapper.selectVoById(id); + Long jobId = dmsPlanInspectVo.getJobId(); + if (StringUtils.isNotNull(jobId)){ + //则任务状态为关闭 + R voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态(0:关闭;1:开启) + } + } return baseMapper.deleteByIds(ids) > 0; } } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanLubeDetailServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanLubeDetailServiceImpl.java index e3fe697..3d7a430 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanLubeDetailServiceImpl.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanLubeDetailServiceImpl.java @@ -81,14 +81,14 @@ public class DmsPlanLubeDetailServiceImpl implements IDmsPlanLubeDetailService { .leftJoin(DmsBaseLubeStation.class,DmsBaseLubeStation::getLubeStationId,DmsPlanLubeDetail::getLubeStationId) //关联查询设备 .select(DmsBaseMachineInfo::getMachineName) - .leftJoin(DmsBaseMachineInfo.class,DmsBaseMachineInfo::getMachineId,DmsPlanLubeDetail::getMachineId) + .leftJoin(DmsBaseMachineInfo.class,DmsBaseMachineInfo::getMachineId,DmsPlanLubeDetail::getDeviceId) //关联查询润滑标准 .select(DmsBaseLubeStandard::getLubeStandardCode) .leftJoin(DmsBaseLubeStandard.class,DmsBaseLubeStandard::getLubeStandardId,DmsPlanLubeDetail::getLubeStandardId) .eq(bo.getPlanLubeDetailId() != null, DmsPlanLubeDetail::getPlanLubeDetailId, bo.getPlanLubeDetailId()) .eq(bo.getPlanLubeId() != null, DmsPlanLubeDetail::getPlanLubeId, bo.getPlanLubeId()) - .eq(bo.getDeviceId() != null, DmsPlanLubeDetail::getMachineId, bo.getDeviceId()) + .eq(bo.getDeviceId() != null, DmsPlanLubeDetail::getDeviceId, bo.getDeviceId()) .eq(bo.getLubeStationId() != null, DmsPlanLubeDetail::getLubeStationId, bo.getLubeStationId()) .eq(bo.getLubeStandardId() != null, DmsPlanLubeDetail::getLubeStandardId, bo.getLubeStandardId()) .eq(StringUtils.isNotBlank(bo.getOperationDescription()), DmsPlanLubeDetail::getOperationDescription, bo.getOperationDescription()) @@ -160,14 +160,14 @@ public class DmsPlanLubeDetailServiceImpl implements IDmsPlanLubeDetailService { MPJLambdaWrapper wrapper = JoinWrappers.lambda(DmsPlanLubeDetail.class) .selectAs(DmsPlanLubeDetail::getPlanLubeDetailId, DmsPlanLubeDetail::getPlanLubeDetailId) .selectAs(DmsPlanLubeDetail::getPlanLubeId, DmsPlanLubeDetail::getPlanLubeId) - .selectAs(DmsPlanLubeDetail::getMachineId, DmsPlanLubeDetail::getMachineId) + .selectAs(DmsPlanLubeDetail::getDeviceId, DmsPlanLubeDetail::getDeviceId) .selectAs(DmsPlanLubeDetail::getLubeStationId, DmsPlanLubeDetail::getLubeStationId) .selectAs(DmsPlanLubeDetail::getLubeStandardId, DmsPlanLubeDetail::getLubeStandardId) .selectAs(DmsPlanLubeDetail::getOperationDescription, DmsPlanLubeDetail::getOperationDescription) .selectAs(DmsBaseMachineInfo::getMachineName, DmsPlanLubeDetail::getMachineName) .selectAs(DmsBaseLubeStation::getLubeStationName, DmsPlanLubeDetail::getLubeStationName) .selectAs(DmsBaseLubeStandard::getLubeStandardCode, DmsPlanLubeDetail::getLubeStandardCode) - .leftJoin(DmsBaseMachineInfo.class, DmsBaseMachineInfo::getMachineId, DmsPlanLubeDetail::getMachineId) + .leftJoin(DmsBaseMachineInfo.class, DmsBaseMachineInfo::getMachineId, DmsPlanLubeDetail::getDeviceId) .leftJoin(DmsBaseLubeStation.class, DmsBaseLubeStation::getDeviceTypeId, DmsBaseMachineInfo::getMachineId) .leftJoin(DmsBaseLubeStandard.class, DmsBaseLubeStandard::getLubeStandardId, DmsPlanLubeDetail::getLubeStandardId) .eq(DmsPlanLubeDetail::getPlanLubeId, planLubeId); diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanLubeServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanLubeServiceImpl.java index 23095e8..86d3cc8 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanLubeServiceImpl.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanLubeServiceImpl.java @@ -3,13 +3,17 @@ package org.dromara.dms.service.impl; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; +import io.seata.spring.annotation.GlobalTransactional; import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.domain.R; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.core.utils.uuid.Seq; import org.dromara.common.mybatis.Utils.UniqueCodeUtils; 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.DmsBillsLubeInstance; import org.dromara.dms.domain.DmsPlanLube; import org.dromara.dms.domain.bo.DmsPlanLubeBo; @@ -21,12 +25,20 @@ import org.dromara.dms.utils.CronUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; - import java.util.Collection; import java.util.Date; import java.util.List; import java.util.Map; +import com.aizuda.snailjob.client.job.core.enums.AllocationAlgorithmEnum; +import com.aizuda.snailjob.client.job.core.enums.TriggerTypeEnum; +import com.aizuda.snailjob.client.job.core.openapi.SnailJobOpenApi; +import com.aizuda.snailjob.common.core.enums.JobBlockStrategyEnum; +import com.aizuda.snailjob.client.job.core.dto.JobResponseVO; +import com.aizuda.snailjob.common.core.enums.StatusEnum; +import org.dromara.job.api.model.DmsJobEntity; +import org.dromara.job.api.RemoteJobService; + /** * 润滑计划Service业务层处理 * @@ -41,6 +53,9 @@ public class DmsPlanLubeServiceImpl implements IDmsPlanLubeService { private final DmsBillsLubeInstanceMapper dmsBillsLubeInstanceMapper; + @DubboReference + private final RemoteJobService remoteJobService; + private static final Long SECONDS_PER_DAY = 24 * 60 * 60L; private static final Long SECONDS_PER_HOUR = 60 * 60L; @@ -160,35 +175,40 @@ public class DmsPlanLubeServiceImpl implements IDmsPlanLubeService { * @return 是否新增成功 */ @Override - @Transactional(rollbackFor = Exception.class) + @GlobalTransactional(rollbackFor = Exception.class) public Boolean insertByBo(DmsPlanLubeBo bo) { // 生成新的润滑计划编号 String planLubeCode = Seq.getId(Seq.dmsPlanLubeSeqType, Seq.dmsPlanLubeCode); bo.setPlanLubeCode(planLubeCode); -/* - // 创建系统任务对象 - SysJob job = new SysJob(); - job.setJobName("润滑计划编号" + planLubeCode + "工单任务"); - job.setJobGroup("DEFAULT"); - job.setInvokeTarget("ryTask.getDmsBillsLube(\"" + planLubeCode + "\")"); - job.setCronExpression(bo.getCronExpression()); - job.setMisfirePolicy("1"); - job.setConcurrent("1"); - job.setStatus("1"); - // 添加任务到远程服务并获取任务ID - R jobIdR = remoteJobService.add(SecurityConstants.INNER, job);*/ + if(bo.getActiveFlag().equals("1")){//激活标识(1是 0否) + DmsJobEntity dmsJobEntity = new DmsJobEntity(); + dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询 + .setJobName("润滑计划编号" + planLubeCode + "工单任务") + .setExecutorInfo("stanceLube")//执行器名称 + .setExecutorTimeout(30)//执行超时时间 + .setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发 + .setMaxRetryTimes(2)//最大重试次数 + .setTriggerType(TriggerTypeEnum.CRON)//触发器类型:cron + .setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式 + .setRetryInterval(3)//重试间隔时长 + .setArgsStr("planLubeCode") + .setExtAttrs(planLubeCode) + .setUserId(LoginHelper.getUserId().toString()) + .setTenantId(LoginHelper.getTenantId()); + R longR = remoteJobService.addClusterJob(dmsJobEntity); + Long jobId = longR.getData(); - // 通过cron表达式获取下一次执行时间 - String cronExpression = bo.getCronExpression(); - if (StringUtils.isNotEmpty(cronExpression)) { - Date nextExecution = CronUtils.getNextExecution(cronExpression); - bo.setLubeTime(nextExecution); + // 通过cron表达式获取下一次执行时间 + String cronExpression = bo.getCronExpression(); + if (StringUtils.isNotEmpty(cronExpression)) { + Date nextExecution = CronUtils.getNextExecution(cronExpression); + bo.setLubeTime(nextExecution); + } + // 设置润滑计划的任务ID + bo.setJobId(jobId); } - // 设置润滑计划的任务ID -/* bo.setJobId(jobIdR.getData().longValue());*/ - // 计算润滑计划的时间限制(天和小时) Long timeLimitDays = bo.getTimeLimitDays() == null ? 0L : bo.getTimeLimitDays(); Long timeLimitHours = bo.getTimeLimitHours() == null ? 0L : bo.getTimeLimitHours(); @@ -212,38 +232,65 @@ public class DmsPlanLubeServiceImpl implements IDmsPlanLubeService { * @return 是否修改成功 */ @Override - @Transactional(rollbackFor = Exception.class) + @GlobalTransactional(rollbackFor = Exception.class) public Boolean updateByBo(DmsPlanLubeBo bo) { -/* Long jobId = bo.getJobId();*/ + Long jobId = bo.getJobId(); String cronExpression = bo.getCronExpression(); - if (StringUtils.isNotEmpty(cronExpression)) { - // 通过cron表达式获取下一次执行时间 - Date nextExecution = CronUtils.getNextExecution(cronExpression); - bo.setLubeTime(nextExecution); + if (bo.getActiveFlag().equals("1")){//激活标识(1是 0否) + + // 通过cron表达式获取下一次执行时间 + Date nextExecution = CronUtils.getNextExecution(cronExpression); + bo.setLubeTime(nextExecution); + + if (StringUtils.isNull(jobId)) {// 如果没有关联任务,创建新任务 + String planLubeCode = bo.getPlanLubeCode(); + DmsJobEntity dmsJobEntity = new DmsJobEntity(); + dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询 + .setJobName("润滑计划编号" + planLubeCode + "工单任务") + .setExecutorInfo("stanceLube")//执行器名称 + .setExecutorTimeout(30)//执行超时时间 + .setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发 + .setMaxRetryTimes(2)//最大重试次数 + .setTriggerType(TriggerTypeEnum.CRON)//触发器类型:cron + .setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式 + .setRetryInterval(3)//重试间隔时长 + .setArgsStr("planLubeCode") + .setExtAttrs(planLubeCode) + .setUserId(LoginHelper.getUserId().toString()) + .setTenantId(LoginHelper.getTenantId()); + + R longR = remoteJobService.addClusterJob(dmsJobEntity); + Long newJobId = longR.getData(); + bo.setJobId(newJobId); + + } else {// 如果有关联任务,更新状态 + // 更新现有任务 + String planLubeCode = bo.getPlanLubeCode(); + DmsJobEntity dmsJobEntity = new DmsJobEntity(); + dmsJobEntity.setId(jobId);//任务ID + dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询 + .setJobName("润滑计划编号" + planLubeCode + "工单任务") + .setExecutorInfo("stanceLube")//执行器名称 + .setExecutorTimeout(30)//执行超时时间 + .setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发 + .setMaxRetryTimes(2)//最大重试次数 + .setTriggerType(TriggerTypeEnum.CRON)//触发器类型:cron + .setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式 + .setRetryInterval(3)//重试间隔时长 + .setArgsStr("planLubeCode") + .setExtAttrs(planLubeCode) + .setUserId(LoginHelper.getUserId().toString()) + .setTenantId(LoginHelper.getTenantId()); + R longR = remoteJobService.updateClusterJob(dmsJobEntity); -/* if (jobId == null) { - // 如果没有关联任务,创建新任务 - String planLubeCode = bo.getPlanLubeCode(); - SysJob job = new SysJob(); - job.setJobName("润滑计划编号" + planLubeCode + "工单任务"); - job.setJobGroup("DEFAULT"); - job.setInvokeTarget("ryTask.getDmsBillsLube(\"" + planLubeCode + "\")"); - job.setCronExpression(bo.getCronExpression()); - job.setMisfirePolicy("1"); - job.setConcurrent("1"); - job.setStatus("1"); - R jobIdR = remoteJobService.add(SecurityConstants.INNER, job); - bo.setJobId(jobIdR.getData().longValue()); - } else { - // 更新现有任务 - SysJob sysJob = remoteJobService.getJobInfo(jobId, SecurityConstants.INNER); - if (sysJob != null) { - sysJob.setCronExpression(bo.getCronExpression()); - remoteJobService.update(SecurityConstants.INNER, sysJob); } - }*/ - } + }else{//如果激活状态为0(1是 0否) + if (StringUtils.isNotNull(jobId)) {//如果关联了任务,则任务状态为关闭 + R voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态(0:关闭;1:开启) + } + } + // 计算润滑计划的时间限制(天和小时) Long timeLimitDays = bo.getTimeLimitDays() == null ? 0L : bo.getTimeLimitDays(); @@ -280,18 +327,21 @@ public class DmsPlanLubeServiceImpl implements IDmsPlanLubeService { * @return 是否删除成功 */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ - // 删除前检查是否可以删除 -/* for (Long id : ids) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + // 删除前检查是否可以删除 + for (Long id : ids) { // 查询关联的任务ID DmsPlanLubeVo dmsPlanLube = baseMapper.selectVoById(id); - if (dmsPlanLube != null && dmsPlanLube.getJobId() != null) { - // 删除关联的定时任务 - remoteJobService.remove(dmsPlanLube.getJobId(), SecurityConstants.INNER); + Long jobId = dmsPlanLube.getJobId(); + if (StringUtils.isNotNull(jobId)) { + //则任务状态为关闭 + R voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态(0:关闭;1:开启) } - }*/ - } + } return baseMapper.deleteByIds(ids) > 0; } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanMaintServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanMaintServiceImpl.java index 753ebed..eda8e49 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanMaintServiceImpl.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanMaintServiceImpl.java @@ -1,20 +1,29 @@ package org.dromara.dms.service.impl; +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 com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; +import io.seata.spring.annotation.GlobalTransactional; import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; +import org.dromara.common.core.domain.R; import org.dromara.common.core.utils.MapstructUtils; 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.DmsPlanMaint; import org.dromara.dms.domain.bo.DmsPlanMaintBo; import org.dromara.dms.domain.vo.DmsPlanMaintVo; import org.dromara.dms.mapper.DmsPlanMaintMapper; import org.dromara.dms.service.IDmsPlanMaintService; import org.dromara.dms.utils.CronUtils; +import org.dromara.job.api.RemoteJobService; +import org.dromara.job.api.model.DmsJobEntity; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -35,6 +44,9 @@ public class DmsPlanMaintServiceImpl implements IDmsPlanMaintService { private final DmsPlanMaintMapper baseMapper; + @DubboReference + private final RemoteJobService remoteJobService; + private static final Long SECONDS_PER_DAY = 24 * 60 * 60L; private static final Long SECONDS_PER_HOUR = 60 * 60L; @@ -151,7 +163,7 @@ public class DmsPlanMaintServiceImpl implements IDmsPlanMaintService { * @return 是否新增成功 */ @Override - @Transactional( rollbackFor = Exception.class) + @GlobalTransactional(rollbackFor = Exception.class) public Boolean insertByBo(DmsPlanMaintBo bo) { DmsPlanMaint add = MapstructUtils.convert(bo, DmsPlanMaint.class); validEntityBeforeSave(add); @@ -194,12 +206,31 @@ public class DmsPlanMaintServiceImpl implements IDmsPlanMaintService { job.setConcurrent("1"); job.setStatus("1"); R jobIdR = remoteJobService.add(SecurityConstants.INNER, job);*/ + if(bo.getActiveFlag().equals("1")) {//激活标识(1是 0否) + DmsJobEntity dmsJobEntity = new DmsJobEntity(); + dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询 + .setJobName("保养计划编号" + planMaintCode + "工单任务") + .setExecutorInfo("stanceMaint")//执行器名称 + .setExecutorTimeout(30)//执行超时时间 + .setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发 + .setMaxRetryTimes(2)//最大重试次数 + .setTriggerType(TriggerTypeEnum.CRON)//触发器类型:cron + .setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式 + .setRetryInterval(3)//重试间隔时长 + .setArgsStr("planMaintCode") + .setExtAttrs(planMaintCode) + .setUserId(LoginHelper.getUserId().toString()) + .setTenantId(LoginHelper.getTenantId()); + R longR = remoteJobService.addClusterJob(dmsJobEntity); + Long jobId = longR.getData(); + String time = cron; + //通过cron表达式获取下一次执行时间 + Date nextExecution = CronUtils.getNextExecution(time); + add.setMaintTime(nextExecution); + add.setJobId(jobId); + } + - String time = cron; - //通过cron表达式获取下一次执行时间 - Date nextExecution = CronUtils.getNextExecution(time); - add.setMaintTime(nextExecution); -// add.setJobId(jobIdR.getData().longValue()); add.setPlanMaintCode(planMaintCode); Long timeLimitDays = add.getTimeLimitDays()==null?0L:add.getTimeLimitDays(); Long timeLimitHours = add.getTimeLimitHours() == null?0L:add.getTimeLimitHours(); @@ -220,9 +251,93 @@ public class DmsPlanMaintServiceImpl implements IDmsPlanMaintService { * @return 是否修改成功 */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public Boolean updateByBo(DmsPlanMaintBo bo) { DmsPlanMaint update = MapstructUtils.convert(bo, DmsPlanMaint.class); + String day = "*"; + String month = "*"; + String week = "*"; + String year = "*"; + String cron = ""; + if (update.getDay()!=null){ + day = update.getDay().toString(); + } + if (update.getMonth()!=null){ + month = update.getMonth().toString(); + } + if (update.getWeek()!=null){ + Long weekDay = update.getWeek() + 1; + week = weekDay.toString(); + } + if (update.getYear()!=null){ + year = update.getYear().toString(); + } + if (update.getMaintLevel().equals(1l)){ + cron = "0 0 "+update.getHour()+" "+day+" "+month+" ?"; + } + if (update.getMaintLevel().equals(2l)){ + cron = "0 0 "+update.getHour()+" ?"+" "+month+" "+week; + } + if (update.getMaintLevel().equals(3l)){ + cron = "0 0 "+update.getHour()+" "+day+" "+ month+" ? "+year; + } + + Long timeLimitDays = update.getTimeLimitDays()==null?0L:update.getTimeLimitDays(); + Long timeLimitHours = update.getTimeLimitHours() == null?0L:update.getTimeLimitHours(); + update.setTimeLimit((timeLimitDays * SECONDS_PER_DAY) + + (timeLimitHours * SECONDS_PER_HOUR)); + String time = cron; + //通过cron表达式获取下一次执行时间 + Date nextExecution = CronUtils.getNextExecution(time); + update.setMaintTime(nextExecution); validEntityBeforeSave(update); + + Long jobId = bo.getJobId(); + String planMaintCode = bo.getPlanMaintCode(); + if (bo.getActiveFlag().equals("1")){ + if (StringUtils.isNull(jobId)){//之前没激活创建定时任务,创建定时任务 + DmsJobEntity dmsJobEntity = new DmsJobEntity(); + dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询 + .setJobName("保养计划编号" + planMaintCode + "工单任务") + .setExecutorInfo("stanceMaint")//执行器名称 + .setExecutorTimeout(30)//执行超时时间 + .setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发 + .setMaxRetryTimes(2)//最大重试次数 + .setTriggerType(TriggerTypeEnum.CRON)//触发器类型:cron + .setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式 + .setRetryInterval(3)//重试间隔时长 + .setArgsStr("planMaintCode") + .setExtAttrs(planMaintCode) + .setUserId(LoginHelper.getUserId().toString()) + .setTenantId(LoginHelper.getTenantId()); + R longR = remoteJobService.addClusterJob(dmsJobEntity); + Long newJobId = longR.getData(); + update.setMaintTime(nextExecution); + update.setJobId(newJobId); + }else{//之前激活了,修改定时任务 + DmsJobEntity dmsJobEntity = new DmsJobEntity(); + dmsJobEntity.setId(jobId); + dmsJobEntity.setRouteKey(AllocationAlgorithmEnum.ROUND)//路由策略:轮询 + .setJobName("保养计划编号" + planMaintCode + "工单任务") + .setExecutorInfo("stanceMaint")//执行器名称 + .setExecutorTimeout(30)//执行超时时间 + .setBlockStrategy(JobBlockStrategyEnum.CONCURRENCY)//阻塞策略:并发 + .setMaxRetryTimes(2)//最大重试次数 + .setTriggerType(TriggerTypeEnum.CRON)//触发器类型:cron + .setTriggerInterval(bo.getCronExpression())//间隔时长: cron表达式 + .setRetryInterval(3)//重试间隔时长 + .setArgsStr("planMaintCode") + .setExtAttrs(planMaintCode) + .setUserId(LoginHelper.getUserId().toString()) + .setTenantId(LoginHelper.getTenantId()); + R updateClusterJob = remoteJobService.updateClusterJob(dmsJobEntity); + } + }else{//如果激活状态为0(1是 0否) + if (StringUtils.isNotNull(jobId)){//之前激活过,创建并关联了任务 + //则任务状态为关闭 + R voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态(0:关闭;1:开启) + } + } return baseMapper.updateById(update) > 0; } @@ -241,10 +356,19 @@ public class DmsPlanMaintServiceImpl implements IDmsPlanMaintService { * @return 是否删除成功 */ @Override + @GlobalTransactional(rollbackFor = Exception.class) public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } + for (Long id : ids){ + DmsPlanMaintVo dmsPlanMaintVo = baseMapper.selectVoById(id); + Long jobId = dmsPlanMaintVo.getJobId(); + if (StringUtils.isNotNull(jobId)){ + //则任务状态为关闭 + R voidR = remoteJobService.updateJobStatus(jobId, 0L);//任务状态(0:关闭;1:开启) + } + } return baseMapper.deleteByIds(ids) > 0; } } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanRepairServiceImpl.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanRepairServiceImpl.java index ca58101..5884671 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanRepairServiceImpl.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/service/impl/DmsPlanRepairServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.PageQuery; @@ -15,6 +16,7 @@ import org.dromara.dms.domain.vo.DmsPlanRepairVo; import org.dromara.dms.mapper.DmsPlanRepairDetailMapper; import org.dromara.dms.mapper.DmsPlanRepairMapper; import org.dromara.dms.service.IDmsPlanRepairService; +import org.dromara.job.api.RemoteJobService; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -173,6 +175,10 @@ public class DmsPlanRepairServiceImpl implements IDmsPlanRepairService { @Override @Transactional( rollbackFor = Exception.class ) public Boolean insertByBo(DmsPlanRepairBo bo) { + /* + *京源DMS注释掉了定时任务,参考京源暂时不加 + * */ + DmsPlanRepair add = MapstructUtils.convert(bo, DmsPlanRepair.class); validEntityBeforeSave(add); add.setTimeLimit((add.getTimeLimitDays()*SECONDS_PER_DAY) diff --git a/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsBillsMaintDetailMapper.xml b/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsBillsMaintDetailMapper.xml index 5565270..aa4fa43 100644 --- a/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsBillsMaintDetailMapper.xml +++ b/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsBillsMaintDetailMapper.xml @@ -93,7 +93,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - @@ -103,7 +103,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" select * from dms_base_maint_station where maint_station_id = #{stationId} - SELECT x.maint_project_id,a.maint_project_name,a.maint_project_desc FROM dms_base_station_project x left join dms_base_maint_project a on x.maint_project_id = a.maint_project_id diff --git a/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanInspectMapper.xml b/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanInspectMapper.xml index 69d855b..efb7fe9 100644 --- a/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanInspectMapper.xml +++ b/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanInspectMapper.xml @@ -36,15 +36,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" where a.plan_inspect_id = #{planInspectId} - diff --git a/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanLubeMapper.xml b/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanLubeMapper.xml index f53d52f..4039037 100644 --- a/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanLubeMapper.xml +++ b/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanLubeMapper.xml @@ -33,7 +33,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + @@ -47,9 +47,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanMaintMapper.xml b/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanMaintMapper.xml index 6a1e832..6cd65cc 100644 --- a/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanMaintMapper.xml +++ b/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsPlanMaintMapper.xml @@ -30,6 +30,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + + + + + + + + + + + + select a.plan_repair_id, a.plan_repair_code, a.repair_type, a.repair_group, a.repair_supervisor, a.repair_time, a.cycle_period, a.create_method, + /*a.is_flag, */ + a.remark, a.create_by, a.create_time, a.update_by, a.update_time,a.time_limit, + b.plan_repair_detail_id as sub_plan_repair_detail_id, b.plan_repair_id as sub_plan_repair_id, b.repair_detail_target_type as sub_repair_detail_target_type,b.repair_detail_target_id as repair_detail_target_id, b.fault_type as sub_fault_type, b.repair_desc as sub_repair_desc, b.repair_protocol as sub_repair_protocol, b.operation_description as sub_operation_description, b.create_by as sub_create_by, b.create_time as sub_create_time, b.update_by as sub_update_by, b.update_time as sub_update_time + from dms_plan_repair a + left join dms_plan_repair_detail b on b.plan_repair_id = a.plan_repair_id + where a.plan_repair_code = #{planRepairCode} + + + + diff --git a/ruoyi-modules/hwmom-mes/pom.xml b/ruoyi-modules/hwmom-mes/pom.xml index e049731..099fc32 100644 --- a/ruoyi-modules/hwmom-mes/pom.xml +++ b/ruoyi-modules/hwmom-mes/pom.xml @@ -111,10 +111,6 @@ com.microsoft.sqlserver mssql-jdbc - - com.microsoft.sqlserver - mssql-jdbc - org.dromara hwmom-common-mom @@ -135,6 +131,36 @@ compile + + + org.springframework.statemachine + spring-statemachine-core + 3.2.0 + + + + org.springframework.statemachine + spring-statemachine-starter + 3.2.0 + + + + org.springframework.statemachine + spring-statemachine-autoconfigure + 3.2.0 + + + javax.persistence + javax.persistence-api + 2.2 + + + + org.springframework.statemachine + spring-statemachine-data-jpa + 3.2.0 + + diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/config/PlanStatusMachineConfig.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/config/PlanStatusMachineConfig.java new file mode 100644 index 0000000..da9de6b --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/config/PlanStatusMachineConfig.java @@ -0,0 +1,92 @@ +package org.dromara.mes.config; + +import org.dromara.mes.enums.PlanEventEnum; +import org.dromara.mes.enums.PlanStatusEnum; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.statemachine.config.EnableStateMachineFactory; +import org.springframework.statemachine.config.StateMachineConfigurerAdapter; +import org.springframework.statemachine.config.builders.StateMachineStateConfigurer; +import org.springframework.statemachine.config.builders.StateMachineTransitionConfigurer; + +import org.springframework.statemachine.guard.Guard; +import org.springframework.statemachine.action.Action; + +import java.util.EnumSet; + +@Configuration +@EnableStateMachineFactory +public class PlanStatusMachineConfig extends StateMachineConfigurerAdapter { + + @Override + public void configure(StateMachineStateConfigurer states) throws Exception { + states + .withStates() + .initial(PlanStatusEnum.CREATED) + .states(EnumSet.allOf(PlanStatusEnum.class)); + } + + @Override + public void configure(StateMachineTransitionConfigurer transitions) throws Exception { + transitions + .withExternal() + .source(PlanStatusEnum.CREATED) + .target(PlanStatusEnum.PLANNED) + .event(PlanEventEnum.PLAN) + .and() + .withExternal() + .source(PlanStatusEnum.PLANNED) + .target(PlanStatusEnum.IN_PROGRESS) + .event(PlanEventEnum.START) + .action(startAction()) + .and() + .withExternal() + .source(PlanStatusEnum.IN_PROGRESS) + .target(PlanStatusEnum.PAUSED) + .event(PlanEventEnum.PAUSE) + .and() + .withExternal() + .source(PlanStatusEnum.PAUSED) + .target(PlanStatusEnum.IN_PROGRESS) + .event(PlanEventEnum.RESUME) + .and() + .withExternal() + .source(PlanStatusEnum.IN_PROGRESS) + .target(PlanStatusEnum.COMPLETED) + .event(PlanEventEnum.COMPLETE) + .guard(completionGuard()) + .and() + .withExternal() + .source(PlanStatusEnum.CREATED) + .target(PlanStatusEnum.CANCELLED) + .event(PlanEventEnum.CANCEL) + .and() + .withExternal() + .source(PlanStatusEnum.PLANNED) + .target(PlanStatusEnum.CANCELLED) + .event(PlanEventEnum.CANCEL) + .and() + .withExternal() + .source(PlanStatusEnum.IN_PROGRESS) + .target(PlanStatusEnum.CANCELLED) + .event(PlanEventEnum.CANCEL); + } + + @Bean + public Action startAction() { + return context -> { + System.out.println("工单启动,准备资源..."); + // 可注入其他Service + }; + } + + @Bean + public Guard completionGuard() { + return context -> { + // 检查是否允许完成 + System.out.println("检查是否允许完成"); + return true; // 示例:始终允许 + }; + } + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomController.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomController.java index fd87905..ab81121 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomController.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdMaterialBomController.java @@ -135,6 +135,19 @@ public class ProdMaterialBomController extends BaseController { return R.ok(list); } + + /** + * 查询物料BOM信息列表 + */ + @SaCheckPermission("mes:materialBom:add") + @GetMapping("/selectNextMaterialBomVersion/{parentId}") + public R selectNextMaterialBomVersion(@NotNull(message = "不能为空") + @PathVariable Long parentId) { + String nextMaterialBomVersion = prodMaterialBomService.selectNextMaterialBomVersion(parentId); + return R.ok("success",nextMaterialBomVersion); + } + + /** * 根据结构BOM批量插入物料清单BOM。 */ @@ -203,4 +216,15 @@ public class ProdMaterialBomController extends BaseController { return R.ok(list); } + + /** + * 发布 + */ + @SaCheckPermission("mes:materialBom:publish") + @Log(title = "物料BOM信息", businessType = BusinessType.PUBLISH) + @RepeatSubmit() + @PostMapping("/publish") + public R publish(@RequestBody ProdMaterialBomBo bo) { + return toAjax(prodMaterialBomService.publishByBo(bo)); + } } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdPlanInfoController.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdPlanInfoController.java index a6fa6f5..178bd97 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdPlanInfoController.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/controller/ProdPlanInfoController.java @@ -17,9 +17,9 @@ import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.web.core.BaseController; import org.dromara.mes.domain.ProdBaseRouteProcess; import org.dromara.mes.domain.bo.ProdMaterialBomBo; -import org.dromara.mes.domain.bo.ProdMaterialBomVersionBo; import org.dromara.mes.domain.bo.ProdPlanInfoBo; import org.dromara.mes.domain.vo.*; +import org.dromara.mes.enums.PlanEventEnum; import org.dromara.mes.service.IProdBaseRouteProcessService; import org.dromara.mes.service.IProdMaterialBomService; import org.dromara.mes.service.IProdMaterialBomVersionService; @@ -206,8 +206,19 @@ public class ProdPlanInfoController extends BaseController { */ @SaCheckPermission("mes:planInfo:list") @GetMapping("/materialBomVersionSelect") - public R> materialBomVersionSelect(ProdMaterialBomVersionBo prodMaterialBomBo) { - return R.ok(prodMaterialBomVersionService.queryList(prodMaterialBomBo)); + public R> materialBomVersionSelect(ProdMaterialBomBo prodMaterialBomBo) { + return R.ok(prodMaterialBomService.queryList4Select(prodMaterialBomBo)); } + + /** + * 修改planstatus状态测试状态机 + * @param planId + * @param event + * @return + */ + @PostMapping("/{planId}/events") + public boolean triggerEvent(@PathVariable Long planId, @RequestParam PlanEventEnum event) { + return prodPlanInfoService.sendEvent(planId, event); + } } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseMachineInfo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseMachineInfo.java index f991310..49f9a1b 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseMachineInfo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseMachineInfo.java @@ -128,6 +128,11 @@ public class ProdBaseMachineInfo extends TenantEntity { @TableLogic private String delFlag; + /** + * 入库类型(1直接入库 2扫描入库) + */ + private String instockType; + /** * 车间名称 */ diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseStationMaterialtype.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseStationMaterialtype.java new file mode 100644 index 0000000..e3c178b --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/ProdBaseStationMaterialtype.java @@ -0,0 +1,46 @@ +package org.dromara.mes.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; +import java.util.Date; + +/** + * 工位关联物料类型对象 prod_base_station_materialtype + * + * @author Yinq + * @date 2025-05-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("prod_base_station_materialtype") +public class ProdBaseStationMaterialtype extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 工位ID + */ + private Long stationId; + + /** + * 物料类型ID + */ + private Long materialTypeId; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + @TableField(exist = false) + private Long updateBy; + + @TableField(exist = false) + private Date updateTime; + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseMachineInfoBo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseMachineInfoBo.java index c6e36b9..bc7c754 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseMachineInfoBo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseMachineInfoBo.java @@ -140,5 +140,10 @@ public class ProdBaseMachineInfoBo extends BaseEntity { @ExcelProperty(value = "请求间隔") private Long requestInterval; + /** + * 入库类型(1直接入库 2扫描入库) + */ + private String instockType; + private List baseMachineProcessList; } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseStationInfoBo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseStationInfoBo.java index c3c2d40..039ec30 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseStationInfoBo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseStationInfoBo.java @@ -8,6 +8,9 @@ import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import org.dromara.mes.domain.ProdBaseStationMaterialtype; + +import java.util.List; /** * 工位信息业务对象 prod_base_station_info @@ -75,4 +78,6 @@ public class ProdBaseStationInfoBo extends BaseEntity { private String remark; private Long machineId; + + private List prodBaseStationMaterialtypeList; } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseStationMaterialtypeBo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseStationMaterialtypeBo.java new file mode 100644 index 0000000..c0f3eb2 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdBaseStationMaterialtypeBo.java @@ -0,0 +1,42 @@ +package org.dromara.mes.domain.bo; + +import org.dromara.mes.domain.ProdBaseStationMaterialtype; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 工位关联物料类型业务对象 prod_base_station_materialtype + * + * @author Yinq + * @date 2025-05-13 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = ProdBaseStationMaterialtype.class, reverseConvertGenerate = false) +public class ProdBaseStationMaterialtypeBo extends BaseEntity { + + /** + * 工位ID + */ + @NotNull(message = "工位ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long stationId; + + /** + * 物料类型ID + */ + @NotNull(message = "物料类型ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long materialTypeId; + + /** + * 激活标识(1是 0否) + */ + @NotBlank(message = "激活标识(1是 0否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String activeFlag; + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdPlanInfoBo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdPlanInfoBo.java index 646c940..07b5323 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdPlanInfoBo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/bo/ProdPlanInfoBo.java @@ -126,13 +126,15 @@ public class ProdPlanInfoBo extends BaseEntity { private Long completeAmount; /** - * 计划时间 + * 计划开始时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date planBeginTime; /** * 计划结束时间 */ + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date planEndTime; /** diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseMachineInfoVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseMachineInfoVo.java index a53df78..bdbaae8 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseMachineInfoVo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseMachineInfoVo.java @@ -197,6 +197,13 @@ public class ProdBaseMachineInfoVo implements Serializable { @ExcelProperty(value = "设备模型名称") private String deviceModeName; + /** + * 入库类型(1直接入库 2扫描入库) + */ + @ExcelProperty(value = "入库类型", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "mes_instock_type") + private String instockType; + private List baseMachineProcessList; } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseStationInfoVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseStationInfoVo.java index 93ed805..b2d2a0d 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseStationInfoVo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseStationInfoVo.java @@ -7,10 +7,12 @@ import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.mes.domain.ProdBaseStationMaterialtype; import java.io.Serial; import java.io.Serializable; import java.util.Date; +import java.util.List; /** @@ -138,4 +140,6 @@ public class ProdBaseStationInfoVo implements Serializable { */ @ExcelProperty(value = "机台名称") private String machineName; + + private List prodBaseStationMaterialtypeList; } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseStationMaterialtypeVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseStationMaterialtypeVo.java new file mode 100644 index 0000000..bf0e34f --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdBaseStationMaterialtypeVo.java @@ -0,0 +1,51 @@ +package org.dromara.mes.domain.vo; + +import org.dromara.mes.domain.ProdBaseStationMaterialtype; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 工位关联物料类型视图对象 prod_base_station_materialtype + * + * @author Yinq + * @date 2025-05-13 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = ProdBaseStationMaterialtype.class) +public class ProdBaseStationMaterialtypeVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 工位ID + */ + @ExcelProperty(value = "工位ID") + private Long stationId; + + /** + * 物料类型ID + */ + @ExcelProperty(value = "物料类型ID") + private Long materialTypeId; + + /** + * 激活标识(1是 0否) + */ + @ExcelProperty(value = "激活标识(1是 0否)", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "active_flag") + private String activeFlag; + + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVo.java index ff9cdf2..3b08627 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdMaterialBomVo.java @@ -213,4 +213,8 @@ public class ProdMaterialBomVo implements Serializable { && Objects.equals(parentMaterialTypeId, o.getParentMaterialTypeId()) && Objects.equals(materialBomVersion, o.getMaterialBomVersion()) && standardAmount.compareTo(o.getStandardAmount())==0; } + + public String getKey(){ + return this.parentId+"-"+this.materialBomVersion; + } } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdPlanInfoVo.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdPlanInfoVo.java index 597a1bb..0e9471c 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdPlanInfoVo.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/ProdPlanInfoVo.java @@ -11,11 +11,13 @@ import org.dromara.common.excel.annotation.ExcelDictFormat; import org.dromara.common.excel.convert.ExcelDictConvert; import io.github.linpeilie.annotations.AutoMapper; import lombok.Data; +import org.dromara.mes.enums.PlanStatusEnum; import java.io.Serial; import java.io.Serializable; import java.util.Date; - +import javax.persistence.EnumType; +import javax.persistence.Enumerated; /** @@ -182,6 +184,7 @@ public class ProdPlanInfoVo implements Serializable { */ @ExcelProperty(value = "工单计划状态", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "mes_plan_status") +// @Enumerated(EnumType.ORDINAL) private String planStatus; /** diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/TreeSelect.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/TreeSelect.java index 21001a1..675de65 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/TreeSelect.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/domain/vo/TreeSelect.java @@ -52,6 +52,10 @@ public class TreeSelect implements Serializable { private String treeKey;//作为树的唯一键使用 + private String activeFlag;//状态 + + private boolean isRoot; + public TreeSelect() { } @@ -79,6 +83,27 @@ public class TreeSelect implements Serializable { this.materialTypeId = prodMaterialBomVo.getMaterialTypeId(); this.materialTypeName = prodMaterialBomVo.getMaterialTypeName(); this.materialBomVersion = prodMaterialBomVo.getMaterialBomVersion(); + this.activeFlag = prodMaterialBomVo.getActiveFlag(); + } + + public TreeSelect(ProdMaterialBomVo prodMaterialBomVo,boolean isRoot) { + this.id = prodMaterialBomVo.getMaterialBomId();//树的唯一键,有可能为空,所以不能作为树的ID + this.treeKey = prodMaterialBomVo.getMaterialId() + "-" + prodMaterialBomVo.getMaterialBomVersion(); + if (prodMaterialBomVo.getParentId() == null) { + this.label = prodMaterialBomVo.getMaterialName(); + } else { + this.label = "[" + prodMaterialBomVo.getMaterialBomVersion() + "][" + prodMaterialBomVo.getMaterialTypeName() + "]" + + prodMaterialBomVo.getMaterialName(); + } + this.parentId = prodMaterialBomVo.getParentId(); + this.materialId = prodMaterialBomVo.getMaterialId(); + this.children = prodMaterialBomVo.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + this.materialName = prodMaterialBomVo.getMaterialName(); + this.materialTypeId = prodMaterialBomVo.getMaterialTypeId(); + this.materialTypeName = prodMaterialBomVo.getMaterialTypeName(); + this.materialBomVersion = prodMaterialBomVo.getMaterialBomVersion(); + this.activeFlag = prodMaterialBomVo.getActiveFlag(); + this.isRoot = isRoot; } public Long getId() { @@ -160,4 +185,25 @@ public class TreeSelect implements Serializable { public void setTreeKey(String treeKey) { this.treeKey = treeKey; } + + public String getActiveFlag() { + return activeFlag; + } + + public void setActiveFlag(String activeFlag) { + this.activeFlag = activeFlag; + } + + public boolean isRoot() { + return isRoot; + } + + public void setRoot(boolean root) { + isRoot = root; + } + + // 唯一标识 + public String getUniqueKey() { + return parentId + "|" + materialId + "|" + materialBomVersion; + } } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanEventEnum.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanEventEnum.java new file mode 100644 index 0000000..89ffda3 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanEventEnum.java @@ -0,0 +1,16 @@ +package org.dromara.mes.enums; + +/** + * @description 生产工单(pro_plan_info)事件枚举 + * 工单计划状态(0未下发 1已下发 2已开始 3已完成 4已撤回) + * @author xins + * @date 2025/4/15 9:28 + */ +public enum PlanEventEnum { + PLAN, // 计划 + START, // 开始 + PAUSE, // 暂停 + RESUME, // 恢复 + COMPLETE, // 完成 + CANCEL // 取消 +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanStatusEnum.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanStatusEnum.java new file mode 100644 index 0000000..ec36cb6 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/enums/PlanStatusEnum.java @@ -0,0 +1,41 @@ +package org.dromara.mes.enums; + +/** + * @description 生产工单(pro_plan_info)状态枚举 + * 工单计划状态(0未下发 1已下发 2已开始 3已完成 4已撤回) + * @author xins + * @date 2025/4/15 9:28 + */ +public enum PlanStatusEnum { + CREATED("0", "已创建"), + PLANNED("1", "已计划"), + IN_PROGRESS("2", "进行中"), + PAUSED("3", "已暂停"), + COMPLETED("4", "已完成"), + CANCELLED("5", "已取消"); + + private final String code; + private final String description; + + PlanStatusEnum(String code, String description) { + this.code = code; + this.description = description; + } + + public String getCode() { + return code; + } + + public String getDescription() { + return description; + } + + public static PlanStatusEnum fromCode(String code) { + for (PlanStatusEnum status : PlanStatusEnum.values()) { + if (status.getCode().equals(code)) { + return status; + } + } + throw new IllegalArgumentException("Invalid status code: " + code); + } +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/listeners/StatusMachineListeners.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/listeners/StatusMachineListeners.java new file mode 100644 index 0000000..243636d --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/listeners/StatusMachineListeners.java @@ -0,0 +1,39 @@ +package org.dromara.mes.listeners; + +import lombok.extern.slf4j.Slf4j; +import org.dromara.mes.enums.PlanEventEnum; +import org.dromara.mes.enums.PlanStatusEnum; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.statemachine.listener.StateMachineListener; +import org.springframework.statemachine.listener.StateMachineListenerAdapter; +import org.springframework.statemachine.state.State; +import org.springframework.stereotype.Component; + +/** + * @Author xins + * @Date 2025/4/15 14:07 + * @Description: + */ +@Slf4j +@Component +public class StatusMachineListeners extends StateMachineListenerAdapter{ + + @Override + public void stateChanged(State from, State to) { + System.out.println("State changed from " + (from != null ? from.getId() : "null") + + " to " + to.getId()); + } + + @Override + public void stateEntered(State state) { + System.out.println("Entered state: " + state.getId()); + } + + @Override + public void stateExited(State state) { + System.out.println("Exited state: " + state.getId()); + } +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdBaseStationMaterialtypeMapper.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdBaseStationMaterialtypeMapper.java new file mode 100644 index 0000000..dba9cfc --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdBaseStationMaterialtypeMapper.java @@ -0,0 +1,15 @@ +package org.dromara.mes.mapper; + +import org.dromara.mes.domain.ProdBaseStationMaterialtype; +import org.dromara.mes.domain.vo.ProdBaseStationMaterialtypeVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 工位关联物料类型Mapper接口 + * + * @author Yinq + * @date 2025-05-13 + */ +public interface ProdBaseStationMaterialtypeMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomMapper.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomMapper.java index 0b67d90..0799e7d 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomMapper.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/mapper/ProdMaterialBomMapper.java @@ -1,5 +1,6 @@ package org.dromara.mes.mapper; +import org.apache.ibatis.annotations.Select; import org.dromara.mes.domain.ProdMaterialBom; import org.dromara.mes.domain.bo.ProdMaterialBomBo; import org.dromara.mes.domain.vo.ProdMaterialBomVo; @@ -57,4 +58,14 @@ public interface ProdMaterialBomMapper extends BaseMapperPlus queryPageList(ProdBaseStationMaterialtypeBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的工位关联物料类型列表 + * + * @param bo 查询条件 + * @return 工位关联物料类型列表 + */ + List queryList(ProdBaseStationMaterialtypeBo bo); + + /** + * 新增工位关联物料类型 + * + * @param bo 工位关联物料类型 + * @return 是否新增成功 + */ + Boolean insertByBo(ProdBaseStationMaterialtypeBo bo); + + /** + * 修改工位关联物料类型 + * + * @param bo 工位关联物料类型 + * @return 是否修改成功 + */ + Boolean updateByBo(ProdBaseStationMaterialtypeBo bo); + + /** + * 校验并批量删除工位关联物料类型信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomService.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomService.java index 80e686a..f1c35f2 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomService.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdMaterialBomService.java @@ -4,9 +4,11 @@ import org.dromara.mes.domain.ProdMaterialBom; import org.dromara.mes.domain.vo.ProdMaterialBomVo; import org.dromara.mes.domain.bo.ProdMaterialBomBo; import org.dromara.mes.domain.vo.TreeSelect; +import org.springframework.transaction.annotation.Transactional; import java.util.Collection; import java.util.List; +import java.util.Map; /** * 物料BOM信息Service接口 @@ -49,6 +51,15 @@ public interface IProdMaterialBomService { */ Boolean updateByBo(ProdMaterialBomBo bo); + /** + * 发布物料BOM信息 + * + * @param bo 物料BOM信息 + * @return 是否修改成功 + */ + public Boolean publishByBo(ProdMaterialBomBo bo); + + /** * 校验并批量删除物料BOM信息信息 * @@ -65,6 +76,13 @@ public interface IProdMaterialBomService { */ public Boolean deleteMaterialBoms(List materialBomBos); + /** + * 根据父级物料ID获取下一个版本号 + * @param parentId + * @return + */ + public String selectNextMaterialBomVersion(Long parentId); + /** * 根据结构BOM批量插入物料清单BOM。 * @param boList 需要插入的物料清单BOM列表。 @@ -95,4 +113,12 @@ public interface IProdMaterialBomService { * @return 生产bom信息集合 */ public List selectMaterialBomTreeList(ProdMaterialBomBo bo); + + /** + * 查询符合条件的物料BOM版本,供下拉选择 + * + * @param bo 查询条件 + * @return 物料BOM信息列表 + */ + public List queryList4Select(ProdMaterialBomBo bo); } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdPlanInfoService.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdPlanInfoService.java index c5b3cc0..2dcaa96 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdPlanInfoService.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/IProdPlanInfoService.java @@ -6,6 +6,7 @@ import org.dromara.mes.domain.vo.ProdPlanInfoVo; import org.dromara.mes.domain.bo.ProdPlanInfoBo; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.mes.enums.PlanEventEnum; import java.util.Collection; import java.util.List; @@ -107,4 +108,8 @@ public interface IProdPlanInfoService { * @return 生产计划监控列表 */ List queryMoritorList(ProdPlanInfoBo bo); + + + public boolean sendEvent(Long planId, PlanEventEnum event); + } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseStationInfoServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseStationInfoServiceImpl.java index 6ff215c..6b12305 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseStationInfoServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseStationInfoServiceImpl.java @@ -1,5 +1,6 @@ package org.dromara.mes.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.dromara.common.core.utils.MapstructUtils; import org.dromara.common.core.utils.StringUtils; import org.dromara.common.mybatis.core.page.TableDataInfo; @@ -9,12 +10,11 @@ import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.RequiredArgsConstructor; -import org.dromara.mes.domain.ProdBaseMachineInfo; -import org.dromara.mes.domain.ProdBaseProcessInfo; +import org.dromara.mes.domain.*; +import org.dromara.mes.mapper.ProdBaseStationMaterialtypeMapper; import org.springframework.stereotype.Service; import org.dromara.mes.domain.bo.ProdBaseStationInfoBo; import org.dromara.mes.domain.vo.ProdBaseStationInfoVo; -import org.dromara.mes.domain.ProdBaseStationInfo; import org.dromara.mes.mapper.ProdBaseStationInfoMapper; import org.dromara.mes.service.IProdBaseStationInfoService; @@ -34,6 +34,9 @@ public class ProdBaseStationInfoServiceImpl implements IProdBaseStationInfoServi private final ProdBaseStationInfoMapper baseMapper; + private final ProdBaseStationMaterialtypeMapper stationMaterialtypeMapper; + + /** * 查询工位信息 * @@ -42,7 +45,18 @@ public class ProdBaseStationInfoServiceImpl implements IProdBaseStationInfoServi */ @Override public ProdBaseStationInfoVo queryById(Long stationId) { - return baseMapper.selectVoById(stationId); + ProdBaseStationInfoBo bo = new ProdBaseStationInfoBo(); + bo.setStationId(stationId); + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + ProdBaseStationInfoVo prodBaseStationInfoVo = baseMapper.selectVoOne(lqw); + //机台关联工序 + MPJLambdaWrapper lqwRelation = JoinWrappers.lambda(ProdBaseStationMaterialtype.class) + .selectAll(ProdBaseStationMaterialtype.class) + .eq(bo.getStationId() != null, ProdBaseStationMaterialtype::getStationId, bo.getStationId()) + .orderByAsc(ProdBaseStationMaterialtype::getCreateTime); + List prodBaseStationMaterialtypeList = stationMaterialtypeMapper.selectList(lqwRelation); + prodBaseStationInfoVo.setProdBaseStationMaterialtypeList(prodBaseStationMaterialtypeList); + return prodBaseStationInfoVo; } /** @@ -119,6 +133,15 @@ public class ProdBaseStationInfoServiceImpl implements IProdBaseStationInfoServi public Boolean updateByBo(ProdBaseStationInfoBo bo) { ProdBaseStationInfo update = MapstructUtils.convert(bo, ProdBaseStationInfo.class); validEntityBeforeSave(update); + List prodBaseStationMaterialtypeList = bo.getProdBaseStationMaterialtypeList(); + if (!prodBaseStationMaterialtypeList.isEmpty()) { + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotNull(bo.getStationId()), ProdBaseStationMaterialtype::getStationId, bo.getStationId()); + stationMaterialtypeMapper.delete(lqw); + for (ProdBaseStationMaterialtype stationMaterialType : prodBaseStationMaterialtypeList) { + stationMaterialtypeMapper.insert(stationMaterialType); + } + } return baseMapper.updateById(update) > 0; } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseStationMaterialtypeServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseStationMaterialtypeServiceImpl.java new file mode 100644 index 0000000..15c5fe1 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdBaseStationMaterialtypeServiceImpl.java @@ -0,0 +1,134 @@ +package org.dromara.mes.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.mes.domain.bo.ProdBaseStationMaterialtypeBo; +import org.dromara.mes.domain.vo.ProdBaseStationMaterialtypeVo; +import org.dromara.mes.domain.ProdBaseStationMaterialtype; +import org.dromara.mes.mapper.ProdBaseStationMaterialtypeMapper; +import org.dromara.mes.service.IProdBaseStationMaterialtypeService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 工位关联物料类型Service业务层处理 + * + * @author Yinq + * @date 2025-05-13 + */ +@RequiredArgsConstructor +@Service +public class ProdBaseStationMaterialtypeServiceImpl implements IProdBaseStationMaterialtypeService { + + private final ProdBaseStationMaterialtypeMapper baseMapper; + + /** + * 查询工位关联物料类型 + * + * @param stationId 主键 + * @return 工位关联物料类型 + */ + @Override + public ProdBaseStationMaterialtypeVo queryById(Long stationId){ + return baseMapper.selectVoById(stationId); + } + + /** + * 分页查询工位关联物料类型列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 工位关联物料类型分页列表 + */ + @Override + public TableDataInfo queryPageList(ProdBaseStationMaterialtypeBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的工位关联物料类型列表 + * + * @param bo 查询条件 + * @return 工位关联物料类型列表 + */ + @Override + public List queryList(ProdBaseStationMaterialtypeBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(ProdBaseStationMaterialtypeBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(ProdBaseStationMaterialtype.class) + .selectAll(ProdBaseStationMaterialtype.class) + .eq(bo.getStationId() != null, ProdBaseStationMaterialtype::getStationId, bo.getStationId()) + .eq(bo.getMaterialTypeId() != null, ProdBaseStationMaterialtype::getMaterialTypeId, bo.getMaterialTypeId()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), ProdBaseStationMaterialtype::getActiveFlag, bo.getActiveFlag()) + .orderByDesc(ProdBaseStationMaterialtype::getCreateTime); + return lqw; + } + + /** + * 新增工位关联物料类型 + * + * @param bo 工位关联物料类型 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(ProdBaseStationMaterialtypeBo bo) { + ProdBaseStationMaterialtype add = MapstructUtils.convert(bo, ProdBaseStationMaterialtype.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setStationId(add.getStationId()); + } + return flag; + } + + /** + * 修改工位关联物料类型 + * + * @param bo 工位关联物料类型 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(ProdBaseStationMaterialtypeBo bo) { + ProdBaseStationMaterialtype update = MapstructUtils.convert(bo, ProdBaseStationMaterialtype.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(ProdBaseStationMaterialtype entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除工位关联物料类型信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomServiceImpl.java index 99257c5..5277c84 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdMaterialBomServiceImpl.java @@ -134,6 +134,60 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { } + /** + * 发布物料BOM信息 + * + * @param bo 物料BOM信息 + * @return 是否修改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean publishByBo(ProdMaterialBomBo bo) { + String materialBomVersion = bo.getMaterialBomVersion(); + bo.setDeleteFlag(HwMomMesConstants.DELETE_FLAG_NO); + bo.setMaterialBomVersion(null); + + //先获取parentid所有的物料bom信息 + List allVosByParentId = this.queryList(bo); + if (allVosByParentId == null || allVosByParentId.isEmpty()) { + throw new ServiceException("数据已删除"); + } + + //再过滤出当前要发布的版本信息 + List toPublishVos = allVosByParentId.stream(). + filter(e -> e.getMaterialBomVersion().equals(materialBomVersion) && + !e.getActiveFlag().equals(HwMomMesConstants.MES_MATERIAL_BOM_ACTIVE_FLAG_ACTIVE)) + .collect(Collectors.toList()); + if (toPublishVos == null && toPublishVos.isEmpty()) { + throw new ServiceException("无可发布数据,或已发布"); + } + + //再过滤出其他激活版本,需要改为历史版本的数据 + List toHistoryVos = allVosByParentId.stream(). + filter(e -> !e.getMaterialBomVersion().equals(materialBomVersion) && + e.getActiveFlag().equals(HwMomMesConstants.MES_MATERIAL_BOM_ACTIVE_FLAG_ACTIVE)) + .collect(Collectors.toList()); + + //发布 + for (ProdMaterialBomVo toPublishVo : toPublishVos) { + ProdMaterialBom toPublishMaterialBom = MapstructUtils.convert(toPublishVo, ProdMaterialBom.class); + toPublishMaterialBom.setActiveFlag(HwMomMesConstants.MES_MATERIAL_BOM_ACTIVE_FLAG_ACTIVE); + + baseMapper.updateById(toPublishMaterialBom); + } + + //改为历史版本 + if (toHistoryVos != null && !toHistoryVos.isEmpty()) { + for (ProdMaterialBomVo toHistoryVo : toHistoryVos) { + ProdMaterialBom toHistoryMaterialBom = MapstructUtils.convert(toHistoryVo, ProdMaterialBom.class); + toHistoryMaterialBom.setActiveFlag(HwMomMesConstants.MES_MATERIAL_BOM_ACTIVE_FLAG_HISTORY); + baseMapper.updateById(toHistoryMaterialBom); + } + } + + return true; + } + /** * 校验并批量删除物料BOM信息信息 * @@ -163,7 +217,7 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { * @description 校验并批量删除物料BOM信息信息 */ @Override - @Transactional (rollbackFor = Exception.class) + @Transactional(rollbackFor = Exception.class) public Boolean deleteMaterialBoms(List materialBomBos) { Collection ids = new ArrayList<>(); materialBomBos.forEach(materialBomBo -> { @@ -181,51 +235,65 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { * 更新前的数据校验 */ private void validEntityUsed(@NotNull ProdMaterialBomBo entity) { - Long semiFinishedId = mesProperties.getSemiFinishedId(); - Long modelingId = mesProperties.getModelingId(); - Long vulcanizingId = mesProperties.getVulcanizingId(); - String semiFinishedTableName = DatabaseConstants.TABLE_NAME_PROD_PLAN_INFO_PREFIX + "_" + semiFinishedId; - String modelingTableName = DatabaseConstants.TABLE_NAME_PROD_PLAN_INFO_PREFIX + "_" + modelingId; - String vulcanizingTableName = DatabaseConstants.TABLE_NAME_PROD_PLAN_INFO_PREFIX + "_" + vulcanizingId; - - ProdPlanInfoBo queryBo = new ProdPlanInfoBo(); - queryBo.setMaterialId(entity.getParentId()); - queryBo.setMaterialBomVersion(entity.getMaterialBomVersion()); - MPJLambdaWrapper lqw = buildPlanQueryWrapper(queryBo); - - /** - * 查询半制品计划、成型计划、硫化计划中有没有使用此bom - */ - List semiFinishedPlanInfoVos = prodPlanInfoMapper.selectProdPlanInfoList(semiFinishedTableName, lqw); - if (semiFinishedPlanInfoVos != null && !semiFinishedPlanInfoVos.isEmpty()) { - List planCodes = semiFinishedPlanInfoVos.stream() - .map(ProdPlanInfoVo::getPlanCode) - .toList(); - - throw new ServiceException("半制品计划中计划编号[" + planCodes.toString() + "]已经使用此bom,不能修改"); + if (entity.getActiveFlag().equals(HwMomMesConstants.MES_MATERIAL_BOM_ACTIVE_FLAG_ACTIVE)) { + throw new ServiceException("此物料bom已经发布,不能修改"); } - List modelingPlanInfoVos = prodPlanInfoMapper.selectProdPlanInfoList(modelingTableName, lqw); - if (modelingPlanInfoVos != null && !modelingPlanInfoVos.isEmpty()) { - List planCodes = modelingPlanInfoVos.stream() - .map(ProdPlanInfoVo::getPlanCode) - .toList(); - - throw new ServiceException("成型计划中计划编号[" + planCodes.toString() + "]已经使用此bom,不能修改"); - } - - List vulcanizingPlanInfoVos = prodPlanInfoMapper.selectProdPlanInfoList(vulcanizingTableName, lqw); - if (vulcanizingPlanInfoVos != null && !vulcanizingPlanInfoVos.isEmpty()) { - List planCodes = vulcanizingPlanInfoVos.stream() - .map(ProdPlanInfoVo::getPlanCode) - .toList(); - - throw new ServiceException("硫化计划中计划编号已经使用[" + planCodes.toString() + "已经使用此bom,不能修改"); + if (entity.getActiveFlag().equals(HwMomMesConstants.MES_MATERIAL_BOM_ACTIVE_FLAG_HISTORY)) { + throw new ServiceException("此物料bom为历史版本,不能修改"); } } +// /** +// * 更新前的数据校验 +// */ +// private void validEntityUsed(@NotNull ProdMaterialBomBo entity) { +// Long semiFinishedId = mesProperties.getSemiFinishedId(); +// Long modelingId = mesProperties.getModelingId(); +// Long vulcanizingId = mesProperties.getVulcanizingId(); +// +// String semiFinishedTableName = DatabaseConstants.TABLE_NAME_PROD_PLAN_INFO_PREFIX + "_" + semiFinishedId; +// String modelingTableName = DatabaseConstants.TABLE_NAME_PROD_PLAN_INFO_PREFIX + "_" + modelingId; +// String vulcanizingTableName = DatabaseConstants.TABLE_NAME_PROD_PLAN_INFO_PREFIX + "_" + vulcanizingId; +// +// ProdPlanInfoBo queryBo = new ProdPlanInfoBo(); +// queryBo.setMaterialId(entity.getParentId()); +// queryBo.setMaterialBomVersion(entity.getMaterialBomVersion()); +// MPJLambdaWrapper lqw = buildPlanQueryWrapper(queryBo); +// +// /** +// * 查询半制品计划、成型计划、硫化计划中有没有使用此bom +// */ +// List semiFinishedPlanInfoVos = prodPlanInfoMapper.selectProdPlanInfoList(semiFinishedTableName, lqw); +// if (semiFinishedPlanInfoVos != null && !semiFinishedPlanInfoVos.isEmpty()) { +// List planCodes = semiFinishedPlanInfoVos.stream() +// .map(ProdPlanInfoVo::getPlanCode) +// .toList(); +// +// throw new ServiceException("半制品计划中计划编号[" + planCodes.toString() + "]已经使用此bom,不能修改"); +// } +// +// List modelingPlanInfoVos = prodPlanInfoMapper.selectProdPlanInfoList(modelingTableName, lqw); +// if (modelingPlanInfoVos != null && !modelingPlanInfoVos.isEmpty()) { +// List planCodes = modelingPlanInfoVos.stream() +// .map(ProdPlanInfoVo::getPlanCode) +// .toList(); +// +// throw new ServiceException("成型计划中计划编号[" + planCodes.toString() + "]已经使用此bom,不能修改"); +// } +// +// List vulcanizingPlanInfoVos = prodPlanInfoMapper.selectProdPlanInfoList(vulcanizingTableName, lqw); +// if (vulcanizingPlanInfoVos != null && !vulcanizingPlanInfoVos.isEmpty()) { +// List planCodes = vulcanizingPlanInfoVos.stream() +// .map(ProdPlanInfoVo::getPlanCode) +// .toList(); +// +// throw new ServiceException("硫化计划中计划编号已经使用[" + planCodes.toString() + "已经使用此bom,不能修改"); +// } +// +// } /** @@ -244,6 +312,20 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { } + /** + * 根据父级物料ID获取下一个版本号 + * + * @param parentId + * @return + */ + @Override + public String selectNextMaterialBomVersion(Long parentId) { + String nextMaterialBomVersion = baseMapper.selectNextMaterialBomVersion(parentId); + System.out.println("nnn:" + nextMaterialBomVersion); + return nextMaterialBomVersion; + } + + /** * 根据结构BOM批量插入物料清单BOM。 * @@ -257,6 +339,9 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { return false; } +// long materialBomId = baseMapper.getNextMaterialBomIdSequence(); +// System.out.println("matbomid:"+materialBomId); + //判断在新建子级时,是否存在在此颗树的父级节点存在此子级节点,根据bom版本找(可以先不加此判断,主要原因是物料类型已经限制了) //获取materialbomid不为空的更新,获取materialbomid为空materialid不为空的保存 for (ProdMaterialBomBo prodMaterialBomBo : boList) { @@ -311,17 +396,305 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { @Override public List selectMaterialBomTreeList(ProdMaterialBomBo bo) { List prodMaterialBomVos = baseMapper.selectMaterialBomJoinList(bo); - return buildMaterialBomTreeSelect(prodMaterialBomVos); + return buildMaterialBomTree(prodMaterialBomVos); } - /** * 构建前端所需要树结构 * + * @param bomList 生产bom结构树列表 + * @return 下拉树结构列表 + */ + private List buildMaterialBomTree(List bomList) { + // 1. 建立索引 + Map> parentVersionGroup = new HashMap<>();//根据parentid_materialbomversion分组 + Map> materialVersions = new HashMap<>();//根据materialid分组存储materialbomversion + Map materialNameMap = new HashMap<>();//根据materialid存储materialname + Map materialTypeIdMap = new HashMap<>();//根据materialid存储materialtypeid + Map materialTypeNameMap = new HashMap<>();//根据materialid存储materialtypename + Map versionActiveFlagMap = new HashMap<>(); // 根据materialid和version存储版本状态 + + for (ProdMaterialBomVo item : bomList) { + // 按parentId+version分组 + String parentKey = item.getParentId() + "_" + item.getMaterialBomVersion(); + //如果不存在则计算添加 + parentVersionGroup.computeIfAbsent(parentKey, k -> new ArrayList<>()).add(item); + + // 记录每个material的所有版本 + materialVersions.computeIfAbsent(item.getMaterialId(), k -> new HashSet<>()) + .add(item.getMaterialBomVersion()); + + // 记录物料名称 + if (item.getMaterialName() != null) { + materialNameMap.putIfAbsent(item.getMaterialId(), item.getMaterialName()); + } + if (item.getParentMaterialName() != null) { + materialNameMap.putIfAbsent(item.getParentId(), item.getParentMaterialName()); + } + + // 记录物料类型ID和物料类型名称 + if (item.getMaterialTypeId() != null) { + materialTypeIdMap.putIfAbsent(item.getMaterialId(), item.getMaterialTypeId()); + materialTypeNameMap.putIfAbsent(item.getMaterialId(), item.getMaterialTypeName()); + } + if (item.getParentMaterialTypeId() != null) { + materialTypeIdMap.putIfAbsent(item.getParentId(), item.getParentMaterialTypeId()); + materialTypeNameMap.putIfAbsent(item.getParentId(), item.getParentMaterialTypeName()); + } + + // 记录版本状态(新增) + String versionKey = item.getParentId() + "_" + item.getMaterialBomVersion(); + versionActiveFlagMap.putIfAbsent(versionKey, item.getActiveFlag()); + + } + + // 2. 找出顶级节点 + Set topLevelParentIds = bomList.stream() + .map(ProdMaterialBomVo::getParentId) + .filter(parentId -> !materialVersions.containsKey(parentId)) + .collect(Collectors.toSet()); + + // 3. 构建树结构 + List tree = new ArrayList<>(); + + for (Long topParentId : topLevelParentIds) { + // 获取该顶级节点的所有版本 + Set parentVersions = bomList.stream() + .filter(item -> item.getParentId().equals(topParentId)) + .map(ProdMaterialBomVo::getMaterialBomVersion) + .collect(Collectors.toSet()); + + for (String version : parentVersions) { + String parentKey = topParentId + "_" + version; + String activeFlag = versionActiveFlagMap.get(parentKey); + TreeSelect versionNode = createParentNode(topParentId, version, activeFlag, materialNameMap, materialTypeIdMap, materialTypeNameMap, parentKey); + + if (parentVersionGroup.containsKey(parentKey)) { + // 获取该父节点下的所有materialId + Set childMaterialIds = parentVersionGroup.get(parentKey).stream() + .map(ProdMaterialBomVo::getMaterialId) + .collect(Collectors.toSet()); + buildTree(versionNode,childMaterialIds,materialVersions,parentVersionGroup,materialNameMap,materialTypeIdMap,materialTypeNameMap,versionActiveFlagMap); + + } + + // 只有当有子节点时才添加父节点 + if (!versionNode.getChildren().isEmpty()) { + tree.add(versionNode); + } + } + } + + return tree; +// return topLevelNodes; +// return rootNodes.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + + private static String buildLabel(Long materialId, String version, Map materialNameMap, Map materialTypeNameMap) { + String materialName = materialNameMap.getOrDefault(materialId, ""); + String materialTypeName = materialTypeNameMap.getOrDefault(materialId, ""); + return String.format("[%s][%s]%s", + version, + materialTypeName.isEmpty() ? "" : materialTypeName, + materialName.isEmpty() ? "" : materialName); + + } + + private static void buildTree(TreeSelect versionNode, + Set childMaterialIds,Map> materialVersions, + Map> parentVersionGroup, + Map materialNameMap, Map materialTypeIdMap, + Map materialTypeNameMap,Map versionActiveFlagMap){ + for (Long materialId : childMaterialIds) { + // 添加无版本号的基础节点 + versionNode.getChildren().add(createChildNode(materialId, materialNameMap, materialTypeIdMap, materialTypeNameMap)); + + // 动态添加该material的有子节点的版本 + if (materialVersions.containsKey(materialId)) { + for (String childVersion : materialVersions.get(materialId)) { + TreeSelect versionedNode = createVersionNodeIfHasChildren( + materialId, childVersion, materialVersions,parentVersionGroup, materialNameMap, materialTypeIdMap, materialTypeNameMap, versionActiveFlagMap); + if (versionedNode != null) { + versionNode.getChildren().add(versionedNode); + } + } + } + } + } + + private static TreeSelect createChildNode(Long materialId, + Map materialNameMap, Map materialTypeIdMap, Map materialTypeNameMap) { + +// this.parentId = prodMaterialBomVo.getParentId(); + TreeSelect node = new TreeSelect(); + node.setTreeKey(materialId.toString()); + String materialName = materialNameMap.getOrDefault(materialId, ""); + String materialTypeName = materialTypeNameMap.getOrDefault(materialId, ""); + String label = String.format("[%s]%s", + materialTypeName.isEmpty() ? "" : materialTypeName, + materialName.isEmpty() ? "" : materialName); + + node.setLabel(label); + node.setMaterialId(materialId); + node.setMaterialTypeId(materialTypeIdMap.getOrDefault(materialId, 0L)); + node.setMaterialTypeName(materialTypeNameMap.getOrDefault(materialId, "")); + node.setMaterialBomVersion(null); + node.setActiveFlag(null); + return node; + } + + private static TreeSelect createVersionNodeIfHasChildren(Long materialId, String version, + Map> materialVersions, + Map> parentVersionGroup, + Map materialNameMap, Map materialTypeIdMap, + Map materialTypeNameMap, Map versionActiveFlagMap) { + + String key = materialId+"_"+version; + String activeFlag = versionActiveFlagMap.getOrDefault(key, ""); + + // 只有当该版本有子节点时才创建 + if (parentVersionGroup.containsKey(key)) { + TreeSelect node = createParentNode(materialId, version, activeFlag, materialNameMap, materialTypeIdMap, materialTypeNameMap, key); + + // 添加子节点 + Set childIds = parentVersionGroup.get(key).stream() + .map(ProdMaterialBomVo::getMaterialId) + .collect(Collectors.toSet()); + + buildTree(node,childIds,materialVersions,parentVersionGroup,materialNameMap,materialTypeIdMap,materialTypeNameMap,versionActiveFlagMap); +// for (Long childId : childIds) { +// node.getChildren().add(createChildNode(childId, materialNameMap, materialTypeIdMap, materialTypeNameMap)); +// } + + return node; + } + return null; + } + + private static TreeSelect createParentNode(Long materialId, String version, String activeFlag, Map materialNameMap, Map materialTypeIdMap, Map materialTypeNameMap, String key) { + TreeSelect node = new TreeSelect(); + node.setTreeKey(key); + node.setLabel(buildLabel(materialId, version, materialNameMap, materialTypeNameMap)); + node.setMaterialBomVersion(version); + node.setMaterialId(materialId); + node.setMaterialTypeId(materialTypeIdMap.getOrDefault(materialId, 0L)); + node.setMaterialTypeName(materialTypeNameMap.getOrDefault(materialId, "")); + node.setActiveFlag(activeFlag); + + node.setChildren(new ArrayList<>()); + + return node; + } + + + private static List buildChildren(Long currentParentId, List items, + Map>> parentVersionMap) { + List children = new ArrayList<>(); + + for (ProdMaterialBomVo item : items) { + // 确保当前item的parentId匹配currentParentId + if (!item.getParentId().equals(currentParentId)) { + continue; + } + + TreeSelect childNode = new TreeSelect(); + childNode.setTreeKey(item.getMaterialId().toString()); + + // 检查是否有子节点 + if (parentVersionMap.containsKey(item.getMaterialId())) { + // 有子节点,需要处理每个版本 + Map> versionMap = parentVersionMap.get(item.getMaterialId()); + + if (versionMap.size() == 1) { + // 只有一个版本 + String version = versionMap.keySet().iterator().next(); + childNode.setLabel(item.getMaterialId() + " (v" + version + ")"); + childNode.setMaterialBomVersion(version); + childNode.setChildren(buildChildren(item.getMaterialId(), versionMap.get(version), parentVersionMap)); + } else { + // 多个版本,需要创建中间节点 + childNode.setLabel(item.getMaterialId().toString()); + childNode.setChildren(new ArrayList<>()); + + for (Map.Entry> versionEntry : versionMap.entrySet()) { + String version = versionEntry.getKey(); + + TreeSelect versionNode = new TreeSelect(); + versionNode.setTreeKey(item.getMaterialId() + "_" + version); + versionNode.setLabel(item.getMaterialId() + " (v" + version + ")"); + versionNode.setMaterialBomVersion(version); + versionNode.setChildren(buildChildren(item.getMaterialId(), versionEntry.getValue(), parentVersionMap)); + + childNode.getChildren().add(versionNode); + } + } + } else { + // 没有子节点,直接创建 + childNode.setLabel(item.getMaterialId().toString()); + } + + children.add(childNode); + } + + return children; + } + + +// private static void printTree(List nodes, int indent) { +// for (ProdMaterialBomVo node : nodes) { +// System.out.println(" ".repeat(indent) + node.getParentMaterialName()+"["+node.getMaterialBomVersion()+"]"+node.getMaterialName()); +// printTree(node.getChildren(), indent + 1); +// } +// } + + +// private List buildMaterialBomTree(List prodMaterialBomVos) { +// // 用于存储所有节点 +// Map nodeMap = new HashMap<>(); +// // 用于存储根节点 +// List rootNodes = new ArrayList<>(); +// // 用于识别哪些materialId是父节点 +// Map isParentMap = new HashMap<>(); +// +// // 第一次遍历:创建所有节点并识别父节点 +// for (ProdMaterialBomVo bom : prodMaterialBomVos) { +// // 创建节点 +// TreeSelect node = new TreeSelect(bom); +// String nodeKey = bom.getMaterialId() + "|" + bom.getMaterialBomVersion(); +// nodeMap.put(nodeKey, node); +// +// // 标记此materialId是某个节点的parentId +// isParentMap.put(bom.getParentId(), true); +// } +// +// // 第二次遍历:建立父子关系 +// for (ProdMaterialBomVo bom : prodMaterialBomVos) { +// String nodeKey = bom.getMaterialId() + "|" + bom.getMaterialBomVersion(); +// String parentKey = bom.getParentId() + "|" + bom.getMaterialBomVersion(); +// +// TreeSelect currentNode = nodeMap.get(nodeKey); +// TreeSelect parentNode = nodeMap.get(parentKey); +// +// if (parentNode != null) { +// // 添加到父节点的子列表 +// parentNode.addChild(currentNode); +// } else if (!isParentMap.containsKey(bom.getMaterialId())) { +// // 如果当前节点的materialId从未作为parentId出现过,则是根节点 +// rootNodes.add(currentNode); +// } +// } +// +// return rootNodes; +// } + + /** + * 构建前端所需要树结构(废弃) + * * @param prodMaterialBomVos 部门列表 * @return 树结构列表 */ - private List buildMaterialBomTree(List prodMaterialBomVos) { + private List buildMaterialBomTreeNodesDiscard(List prodMaterialBomVos) { List returnList = new ArrayList(); /** * 由于顶级节点的parent没有父级对象,需要虚拟新增一个 @@ -334,10 +707,10 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { .toList(); - //2、过滤出parentId相同的 + //2、过滤出parentId-materialBomVersion相同的 List distinctParentIdVoList = topMaterialBomVos.stream() .collect(Collectors.toMap( - ProdMaterialBomVo::getParentId, // 以parentId作为key + ProdMaterialBomVo::getKey, // 以parentId-materialBomVersion作为key Function.identity(), // 以对象本身作为value (existing, replacement) -> existing // 如果遇到重复的key,保留已有的对象 )) @@ -355,6 +728,7 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { topProdMaterialBomVo.setMaterialTypeName(prodMaterialBomVo.getParentMaterialTypeName());//设置parent的物料类型名称 topProdMaterialBomVo.setMaterialName(prodMaterialBomVo.getParentMaterialName());//设置parent的物料名称 topProdMaterialBomVo.setMaterialBomVersion(prodMaterialBomVo.getMaterialBomVersion()); + topProdMaterialBomVo.setActiveFlag(prodMaterialBomVo.getActiveFlag()); prodMaterialBomVos.add(topProdMaterialBomVo); recursionFn(prodMaterialBomVos, topProdMaterialBomVo); @@ -379,28 +753,7 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { returnList = prodMaterialBomVos; } return returnList; - } - - /** - * 构建前端所需要下拉树结构 - * - * @param prodMaterialBomVos 生产bom结构树列表 - * @return 下拉树结构列表 - */ - private List buildMaterialBomTreeSelect(List prodMaterialBomVos) { - // 根据物料bom版本号group,不能的版本是不同的树。使用 groupingBy 将 List 转换为 Map> - Map> prodMaterialBomVoMap = prodMaterialBomVos.stream() - .collect(Collectors.groupingBy(ProdMaterialBomVo::getMaterialBomVersion)); - - List allMaterialBomTrees = new ArrayList<>(); - // 根据物料版本号build树 - prodMaterialBomVoMap.forEach((materialBomVersion, vos) -> { - List materialBomTrees = buildMaterialBomTree(vos); - allMaterialBomTrees.addAll(materialBomTrees); - }); - - return allMaterialBomTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); } @@ -410,14 +763,21 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { private void recursionFn(List list, ProdMaterialBomVo parent) { // 获取子节点 List childList = getChildList(list, parent); + if (childList == null || childList.isEmpty()) { + System.out.println(parent.getMaterialBomId() + "----"); +// parent.setMaterialBomVersion(""); + } else { + System.out.println(parent.getMaterialBomId() + "****" + childList.get(0).getMaterialBomVersion()); +// parent.setMaterialBomVersion(childList.get(0).getMaterialBomVersion()); + } parent.setChildren(childList); // 递归处理子节点 for (ProdMaterialBomVo child : childList) { - // 确保子节点继承 BOM 版本信息 - if (StringUtils.isBlank(child.getMaterialBomVersion()) && StringUtils.isNotBlank(parent.getMaterialBomVersion())) { - child.setMaterialBomVersion(parent.getMaterialBomVersion()); - } + // 父节点显示bom版本信息(一个父子记录的信息的bom版本),确保子节点继承 BOM 版本信息 +// if (StringUtils.isNotBlank(child.getMaterialBomVersion())) { +// parent.setMaterialBomVersion(child.getMaterialBomVersion()); +// } recursionFn(list, child); } } @@ -481,4 +841,25 @@ public class ProdMaterialBomServiceImpl implements IProdMaterialBomService { return lqw; } + + /** + * 查询符合条件的物料BOM版本,供下拉选择 + * + * @param bo 查询条件 + * @return 物料BOM信息列表 + */ + @Override + public List queryList4Select(ProdMaterialBomBo bo) { + bo.setDeleteFlag(HwMomMesConstants.DELETE_FLAG_NO); + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + List prodMaterialBomVos = baseMapper.selectVoList(lqw); + + List filteredList = prodMaterialBomVos.stream() + .collect(Collectors.groupingBy(ProdMaterialBomVo::getMaterialBomVersion)) // 按BOM版本分组 + .values().stream() // 获取分组后的值集合 + .map(group -> group.get(0)) // 取每组第一个元素 + .collect(Collectors.toList()); // 收集为列表 + + return filteredList; + } } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdPlanInfoServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdPlanInfoServiceImpl.java index a613e11..a8011b4 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdPlanInfoServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdPlanInfoServiceImpl.java @@ -17,9 +17,14 @@ import org.dromara.mes.domain.bo.ProdPlanInfoBo; import org.dromara.mes.domain.vo.MesProductPlanEditVo; import org.dromara.mes.domain.vo.PlanMonitorVo; import org.dromara.mes.domain.vo.ProdPlanInfoVo; +import org.dromara.mes.enums.PlanEventEnum; +import org.dromara.mes.enums.PlanStatusEnum; import org.dromara.mes.mapper.ProdPlanInfoMapper; import org.dromara.mes.service.IProdPlanInfoService; -import org.springframework.stereotype.Service; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; @@ -27,6 +32,15 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import org.springframework.messaging.Message; +import org.springframework.messaging.support.MessageBuilder; +import org.springframework.statemachine.StateMachine; +import org.springframework.statemachine.config.StateMachineFactory; +import org.springframework.stereotype.Service; +import org.springframework.statemachine.support.DefaultStateMachineContext; +import org.springframework.statemachine.StateMachine; +import org.springframework.statemachine.service.StateMachineService; + /** * 生产工单信息Service业务层处理 * @@ -37,10 +51,20 @@ import java.util.Map; @Service public class ProdPlanInfoServiceImpl implements IProdPlanInfoService { + private final Logger log = LoggerFactory.getLogger(ProdPlanInfoServiceImpl.class); + + + private static final String PLAN_ID_HEADER = "planId"; + private final ProdPlanInfoMapper baseMapper; private final DynamicBaseSqlMapper dynamicBaseSqlMapper; + + @Autowired + private StateMachineFactory stateMachineFactory; + + /** * 查询生产工单信息 * @@ -104,8 +128,8 @@ public class ProdPlanInfoServiceImpl implements IProdPlanInfoService { .eq(bo.getPlanAmount() != null, ProdPlanInfo::getPlanAmount, bo.getPlanAmount()) .eq(bo.getDispatchAmount() != null, ProdPlanInfo::getDispatchAmount, bo.getDispatchAmount()) .eq(bo.getCompleteAmount() != null, ProdPlanInfo::getCompleteAmount, bo.getCompleteAmount()) - .eq(bo.getPlanBeginTime() != null, ProdPlanInfo::getPlanBeginTime, bo.getPlanBeginTime()) - .eq(bo.getPlanEndTime() != null, ProdPlanInfo::getPlanEndTime, bo.getPlanEndTime()) + .between(StringUtils.isNotNull(bo.getPlanBeginTime()) && StringUtils.isNotNull(bo.getPlanEndTime()), + ProdPlanInfo::getPlanBeginTime, bo.getPlanBeginTime(), bo.getPlanEndTime()) .eq(bo.getRealBeginTime() != null, ProdPlanInfo::getRealBeginTime, bo.getRealBeginTime()) .eq(bo.getRealEndTime() != null, ProdPlanInfo::getRealEndTime, bo.getRealEndTime()) .eq(StringUtils.isNotBlank(bo.getAttachId()), ProdPlanInfo::getAttachId, bo.getAttachId()) @@ -344,4 +368,61 @@ public class ProdPlanInfoServiceImpl implements IProdPlanInfoService { return lqw; } + + + + + private PlanEventEnum determineEvent(PlanStatusEnum currentStatus, PlanStatusEnum targetStatus) { + // 根据当前状态和目标状态确定需要触发的事件 + if (currentStatus == PlanStatusEnum.CREATED && targetStatus == PlanStatusEnum.PLANNED) { + return PlanEventEnum.PLAN; + } + if (currentStatus == PlanStatusEnum.PLANNED && targetStatus == PlanStatusEnum.IN_PROGRESS) { + return PlanEventEnum.START; + } + // ... 其他状态转换逻辑 + throw new IllegalStateException("No valid event for transition from " + + currentStatus + " to " + targetStatus); + } + + + public boolean sendEvent(Long planId, PlanEventEnum event) { + ProdPlanInfoVo plan = baseMapper.selectVoById(planId); + ProdPlanInfo add = MapstructUtils.convert(plan, ProdPlanInfo.class); + StateMachine sm = build(add); + + Message message = MessageBuilder.withPayload(event) + .setHeader("planId", planId) + .build(); + + boolean result = sm.sendEvent(message); + + if (result) { + + // 保存字符串状态码到数据库 + plan.setPlanStatus(sm.getState().getId().getCode()); + baseMapper.updateById(add); + log.info("Plan {} status changed to {} after event {}", + planId, sm.getState().getId(), event); + } + + return result; + } + + private StateMachine build(ProdPlanInfo plan) { + StateMachine sm = stateMachineFactory.getStateMachine(String.valueOf(plan.getPlanId())); + + sm.stop(); + + sm.getStateMachineAccessor() + .doWithAllRegions(sma -> { + sma.resetStateMachine(new DefaultStateMachineContext<>( + PlanStatusEnum.fromCode(plan.getPlanStatus()), null, null, null)); + }); + + sm.start(); + + return sm; + } + } diff --git a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdProductPlanDetailServiceImpl.java b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdProductPlanDetailServiceImpl.java index b46d005..9a48f36 100644 --- a/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdProductPlanDetailServiceImpl.java +++ b/ruoyi-modules/hwmom-mes/src/main/java/org/dromara/mes/service/impl/ProdProductPlanDetailServiceImpl.java @@ -84,20 +84,17 @@ public class ProdProductPlanDetailServiceImpl implements IProdProductPlanDetailS Map params = bo.getParams(); MPJLambdaWrapper lqw = JoinWrappers.lambda(ProdProductPlanDetail.class) .selectAll(ProdProductPlanDetail.class) - - //工装连表查询名称 - .select(BaseToolingInfo::getToolingName) - .leftJoin(BaseToolingInfo.class, BaseToolingInfo::getToolingId, ProdProductPlanDetail::getToolingId) - - //班次连表查询名称 - .select(BaseShiftInfo::getShiftName) - .leftJoin(BaseShiftInfo.class, BaseShiftInfo::getShiftId, ProdProductPlanDetail::getShiftId) - - //班组连表查询名称 - .select(BaseClassTeamInfo::getTeamName) - .leftJoin(BaseClassTeamInfo.class, BaseClassTeamInfo::getClassTeamId, ProdProductPlanDetail::getClassTeamId) - - +// //工装连表查询名称 +// .select(BaseToolingInfo::getToolingName) +// .leftJoin(BaseToolingInfo.class, BaseToolingInfo::getToolingId, ProdProductPlanDetail::getToolingId) +// +// //班次连表查询名称 +// .select(BaseShiftInfo::getShiftName) +// .leftJoin(BaseShiftInfo.class, BaseShiftInfo::getShiftId, ProdProductPlanDetail::getShiftId) +// +// //班组连表查询名称 +// .select(BaseClassTeamInfo::getTeamName) +// .leftJoin(BaseClassTeamInfo.class, BaseClassTeamInfo::getClassTeamId, ProdProductPlanDetail::getClassTeamId) //接班 /* .select(ProdShiftChange::) .leftJoin(ProdShiftChange.class, ProdShiftChange::getShiftChangeId, ProdProductPlanDetail::getShiftChangeId)*/ diff --git a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdBaseStationMaterialtypeMapper.xml b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdBaseStationMaterialtypeMapper.xml new file mode 100644 index 0000000..db56a02 --- /dev/null +++ b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdBaseStationMaterialtypeMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomMapper.xml b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomMapper.xml index 7f12ae4..ea467c7 100644 --- a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomMapper.xml +++ b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdMaterialBomMapper.xml @@ -4,43 +4,103 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdProductPlanDetailMapper.xml b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdProductPlanDetailMapper.xml index e5a47fc..83011fa 100644 --- a/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdProductPlanDetailMapper.xml +++ b/ruoyi-modules/hwmom-mes/src/main/resources/mapper/mes/ProdProductPlanDetailMapper.xml @@ -5,14 +5,17 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" diff --git a/ruoyi-modules/ruoyi-job/pom.xml b/ruoyi-modules/ruoyi-job/pom.xml index 5de4ab6..20ea971 100644 --- a/ruoyi-modules/ruoyi-job/pom.xml +++ b/ruoyi-modules/ruoyi-job/pom.xml @@ -75,6 +75,50 @@ ruoyi-api-system + + + + + com.aizuda + snail-job-client-retry-core + ${snailjob.version} + + + + + com.aizuda + snail-job-client-job-core + ${snailjob.version} + + + + org.dromara + hwmom-api-dms + 2.2.2 + + + + + org.dromara + ruoyi-api-job + 2.2.2 + compile + + + + + 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..26672ca --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/service/RemoteJobServiceImpl.java @@ -0,0 +1,155 @@ +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; + + //常量 + private static final String tenantId = "tenantId"; + private static final String userId = "userId"; + + /** + * 新增集群模式的任务 + * + * @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())//执行任务参数 + .addArgsStr(tenantId, dmsJobEntity.getTenantId())//租户ID,执行任务参数手动传参 + .addArgsStr(userId, dmsJobEntity.getUserId())//用户ID,执行任务参数手动传参 + .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())//执行任务参数 + .addArgsStr(tenantId, dmsJobEntity.getTenantId())//租户ID,执行任务参数手动传参 + .addArgsStr(userId, dmsJobEntity.getUserId())//用户ID,执行任务参数手动传参 + .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..4af18dc --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsInspectStanceExecutor.java @@ -0,0 +1,47 @@ +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"); + String tenantId = (String) paramMap.get("tenantId"); + String user = (String) paramMap.get("userId"); + Long userId = Long.parseLong(user); + + R instance = remoteInspectInstanceService.insertInspectInstance(planCode, tenantId, userId); + 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..a2dee6d --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsLubeStanceExecutor.java @@ -0,0 +1,48 @@ +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"); + String tenantId = (String) paramMap.get("tenantId"); + String user = (String) paramMap.get("userId"); + Long userId = Long.parseLong(user); + + R instance = dmsBillsLubeInstanceService.insertLubeInstance(planCode, tenantId, userId); + 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..d7c8c8b --- /dev/null +++ b/ruoyi-modules/ruoyi-job/src/main/java/org/dromara/job/snailjob/DmsMaintStanceExecutor.java @@ -0,0 +1,62 @@ +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.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import java.util.Map; + +@Component +@JobExecutor(name = "stanceMaint") +public class DmsMaintStanceExecutor { + + private static final ObjectMapper objectMapper = new ObjectMapper(); + private static final Logger log = LoggerFactory.getLogger(DmsMaintStanceExecutor.class); + + @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"); + String tenantId = (String) paramMap.get("tenantId"); + String user = (String) paramMap.get("userId"); + Long userId = Long.parseLong(user); + + log.info("开始执行设备保养实例生成任务,计划编码:{},租户ID:{},用户ID:{}", planCode, tenantId, userId); + + R instance = dmsBillsMaintInstanceService.insertDmsBillsMaintInstance(planCode, tenantId, userId); + + // 检查业务调用结果 + if (instance.getCode() == 200) { + log.info("设备保养实例生成成功,计划编码:{},结果:{}", planCode, instance.getData()); + return ExecuteResult.success("设备保养实例生成成功,影响行数:" + instance.getData()); + } else { + String errorMsg = "设备保养实例生成失败,计划编码:" + planCode + ",错误信息:" + instance.getMsg(); + log.error(errorMsg); + return ExecuteResult.failure(errorMsg); + } + } catch (Exception e) { + String errorMsg = "设备保养实例生成异常:" + e.getMessage(); + log.error(errorMsg, e); + return ExecuteResult.failure(errorMsg); + } + } + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysDesignDataSourceController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysDesignDataSourceController.java new file mode 100644 index 0000000..c6aca27 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysDesignDataSourceController.java @@ -0,0 +1,118 @@ +package org.dromara.system.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.system.domain.vo.SysDesignDataSourceVo; +import org.dromara.system.domain.bo.SysDesignDataSourceBo; +import org.dromara.system.service.ISysDesignDataSourceService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 大屏设计数据源 + * 前端访问路由地址为:/system/designDataSource + * + * @author Yinq + * @date 2025-05-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/designDataSource") +public class SysDesignDataSourceController extends BaseController { + + private final ISysDesignDataSourceService sysDesignDataSourceService; + + /** + * 查询大屏设计数据源列表 + */ + //@SaCheckPermission("system:designDataSource:list") + @GetMapping("/list") + public TableDataInfo list(SysDesignDataSourceBo bo, PageQuery pageQuery) { + return sysDesignDataSourceService.queryPageList(bo, pageQuery); + } + + /** + * 导出大屏设计数据源列表 + */ + //@SaCheckPermission("system:designDataSource:export") + @Log(title = "大屏设计数据源", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysDesignDataSourceBo bo, HttpServletResponse response) { + List list = sysDesignDataSourceService.queryList(bo); + ExcelUtil.exportExcel(list, "大屏设计数据源", SysDesignDataSourceVo.class, response); + } + + /** + * 获取大屏设计数据源详细信息 + * + * @param dataSourceId 主键 + */ + //@SaCheckPermission("system:designDataSource:query") + @GetMapping("/{dataSourceId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long dataSourceId) { + return R.ok(sysDesignDataSourceService.queryById(dataSourceId)); + } + + /** + * 新增大屏设计数据源 + */ + //@SaCheckPermission("system:designDataSource:add") + @Log(title = "大屏设计数据源", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysDesignDataSourceBo bo) { + return toAjax(sysDesignDataSourceService.insertByBo(bo)); + } + + /** + * 修改大屏设计数据源 + */ + //@SaCheckPermission("system:designDataSource:edit") + @Log(title = "大屏设计数据源", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysDesignDataSourceBo bo) { + return toAjax(sysDesignDataSourceService.updateByBo(bo)); + } + + /** + * 删除大屏设计数据源 + * + * @param dataSourceIds 主键串 + */ + //@SaCheckPermission("system:designDataSource:remove") + @Log(title = "大屏设计数据源", businessType = BusinessType.DELETE) + @DeleteMapping("/{dataSourceIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] dataSourceIds) { + return toAjax(sysDesignDataSourceService.deleteWithValidByIds(List.of(dataSourceIds), true)); + } + + + /** + * 下拉框查询大屏设计数据源列表 + */ + @GetMapping("/getSysDesignDataSourceList") + public R> getSysDesignDataSourceList(SysDesignDataSourceBo bo) { + List list = sysDesignDataSourceService.queryList(bo); + return R.ok(list); + } + + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysDesignPageConfigController.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysDesignPageConfigController.java new file mode 100644 index 0000000..a8b66c7 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/controller/SysDesignPageConfigController.java @@ -0,0 +1,117 @@ +package org.dromara.system.controller; + +import java.util.List; + +import lombok.RequiredArgsConstructor; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.dromara.common.idempotent.annotation.RepeatSubmit; +import org.dromara.common.log.annotation.Log; +import org.dromara.common.web.core.BaseController; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.core.domain.R; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import org.dromara.common.log.enums.BusinessType; +import org.dromara.common.excel.utils.ExcelUtil; +import org.dromara.system.domain.vo.SysDesignPageConfigVo; +import org.dromara.system.domain.bo.SysDesignPageConfigBo; +import org.dromara.system.service.ISysDesignPageConfigService; +import org.dromara.common.mybatis.core.page.TableDataInfo; + +/** + * 大屏设计页面配置 + * 前端访问路由地址为:/system/designPageConfig + * + * @author Yinq + * @date 2025-05-20 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/designPageConfig") +public class SysDesignPageConfigController extends BaseController { + + private final ISysDesignPageConfigService sysDesignPageConfigService; + + /** + * 查询大屏设计页面配置列表 + */ + @SaCheckPermission("system:designPageConfig:list") + @GetMapping("/list") + public TableDataInfo list(SysDesignPageConfigBo bo, PageQuery pageQuery) { + return sysDesignPageConfigService.queryPageList(bo, pageQuery); + } + + /** + * 导出大屏设计页面配置列表 + */ + @SaCheckPermission("system:designPageConfig:export") + @Log(title = "大屏设计页面配置", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(SysDesignPageConfigBo bo, HttpServletResponse response) { + List list = sysDesignPageConfigService.queryList(bo); + ExcelUtil.exportExcel(list, "大屏设计页面配置", SysDesignPageConfigVo.class, response); + } + + /** + * 获取大屏设计页面配置详细信息 + * + * @param pageConfigId 主键 + */ + @SaCheckPermission("system:designPageConfig:query") + @GetMapping("/{pageConfigId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long pageConfigId) { + return R.ok(sysDesignPageConfigService.queryById(pageConfigId)); + } + + /** + * 新增大屏设计页面配置 + */ + @SaCheckPermission("system:designPageConfig:add") + @Log(title = "大屏设计页面配置", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody SysDesignPageConfigBo bo) { + return toAjax(sysDesignPageConfigService.insertByBo(bo)); + } + + /** + * 修改大屏设计页面配置 + */ + @SaCheckPermission("system:designPageConfig:edit") + @Log(title = "大屏设计页面配置", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody SysDesignPageConfigBo bo) { + return toAjax(sysDesignPageConfigService.updateByBo(bo)); + } + + /** + * 删除大屏设计页面配置 + * + * @param pageConfigIds 主键串 + */ + @SaCheckPermission("system:designPageConfig:remove") + @Log(title = "大屏设计页面配置", businessType = BusinessType.DELETE) + @DeleteMapping("/{pageConfigIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] pageConfigIds) { + return toAjax(sysDesignPageConfigService.deleteWithValidByIds(List.of(pageConfigIds), true)); + } + + + /** + * 下拉框查询大屏设计页面配置列表 + */ + + @GetMapping("/getSysDesignPageConfigList") + public R> getSysDesignPageConfigList(SysDesignPageConfigBo bo) { + List list = sysDesignPageConfigService.queryList(bo); + return R.ok(list); + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDesignDataField.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDesignDataField.java new file mode 100644 index 0000000..a258362 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDesignDataField.java @@ -0,0 +1,102 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 大屏设计数据字段对象 sys_design_data_field + * + * @author Yinq + * @date 2025-05-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_design_data_field") +public class SysDesignDataField extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 数据字段ID + */ + @TableId(value = "data_field_id", type = IdType.AUTO) + private Long dataFieldId; + + /** + * 数据源ID + */ + private Long dataSourceId; + + /** + * 字段类型(1请求数据 2输出数据) + */ + private String fieldType; + + /** + * 备注说明 + */ + private String remarkName; + + /** + * 请求内容类型 + */ + private String requestContentType; + + /** + * 数据类型(bool short int long float byte ushort uint ulong double string) + */ + private String dataType; + + /** + * 显示排序 + */ + private Long sortOrder; + + /** + * 预留字段一 + */ + private String fieldOne; + + /** + * 预留字段二 + */ + private String fieldTwo; + + /** + * 预留字段三 + */ + private String fieldThree; + + /** + * 预留字段四 + */ + private String fieldFour; + + /** + * 预留字段五 + */ + private String fieldFive; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @TableLogic + private String delFlag; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDesignDataSource.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDesignDataSource.java new file mode 100644 index 0000000..317acbc --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDesignDataSource.java @@ -0,0 +1,112 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 大屏设计数据源对象 sys_design_data_source + * + * @author Yinq + * @date 2025-05-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_design_data_source") +public class SysDesignDataSource extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 数据源ID + */ + @TableId(value = "data_source_id", type = IdType.AUTO) + private Long dataSourceId; + + /** + * 数据源名称 + */ + private String dataSourceName; + + /** + * 请求方法 + */ + private String requestMethod; + + /** + * 请求地址 + */ + private String requestUrl; + + /** + * 数据源分组 + */ + private String dataSourceGroup; + + /** + * 请求内容类型 + */ + private String requestContentType; + + /** + * 响应格式(JSON XML) + */ + private String responseType; + + /** + * 版本号 + */ + private String versionCode; + + /** + * 显示排序 + */ + private Long sortOrder; + + /** + * 预留字段一 + */ + private String fieldOne; + + /** + * 预留字段二 + */ + private String fieldTwo; + + /** + * 预留字段三 + */ + private String fieldThree; + + /** + * 预留字段四 + */ + private String fieldFour; + + /** + * 预留字段五 + */ + private String fieldFive; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @TableLogic + private String delFlag; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDesignPageConfig.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDesignPageConfig.java new file mode 100644 index 0000000..c48adeb --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/SysDesignPageConfig.java @@ -0,0 +1,97 @@ +package org.dromara.system.domain; + +import org.dromara.common.tenant.core.TenantEntity; +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.io.Serial; + +/** + * 大屏设计页面配置对象 sys_design_page_config + * + * @author Yinq + * @date 2025-05-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_design_page_config") +public class SysDesignPageConfig extends TenantEntity { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 页面配置ID + */ + @TableId(value = "page_config_id", type = IdType.AUTO) + private Long pageConfigId; + + /** + * 页面名称 + */ + private String pageConfigName; + + /** + * 页面背景 + */ + private String pageBackground; + + /** + * 页面路由 + */ + private String pageRouting; + + /** + * 自定义内容 + */ + private String customContent; + + /** + * 显示排序 + */ + private Long sortOrder; + + /** + * 预留字段一 + */ + private String fieldOne; + + /** + * 预留字段二 + */ + private String fieldTwo; + + /** + * 预留字段三 + */ + private String fieldThree; + + /** + * 预留字段四 + */ + private String fieldFour; + + /** + * 预留字段五 + */ + private String fieldFive; + + /** + * 删除标志(0代表存在 2代表删除) + */ + @TableLogic + private String delFlag; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDesignDataSourceBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDesignDataSourceBo.java new file mode 100644 index 0000000..b99a7be --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDesignDataSourceBo.java @@ -0,0 +1,114 @@ +package org.dromara.system.domain.bo; + +import org.dromara.system.domain.SysDesignDataField; +import org.dromara.system.domain.SysDesignDataSource; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +import java.util.List; + +/** + * 大屏设计数据源业务对象 sys_design_data_source + * + * @author Yinq + * @date 2025-05-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SysDesignDataSource.class, reverseConvertGenerate = false) +public class SysDesignDataSourceBo extends BaseEntity { + + /** + * 数据源ID + */ + private Long dataSourceId; + + /** + * 数据源名称 + */ + @NotBlank(message = "数据源名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String dataSourceName; + + /** + * 请求方法 + */ + @NotBlank(message = "请求方法不能为空", groups = { AddGroup.class, EditGroup.class }) + private String requestMethod; + + /** + * 请求地址 + */ + @NotBlank(message = "请求地址不能为空", groups = { AddGroup.class, EditGroup.class }) + private String requestUrl; + + /** + * 数据源分组 + */ + private String dataSourceGroup; + + /** + * 请求内容类型 + */ + private String requestContentType; + + /** + * 响应格式(JSON XML) + */ + private String responseType; + + /** + * 版本号 + */ + private String versionCode; + + /** + * 显示排序 + */ + private Long sortOrder; + + /** + * 预留字段一 + */ + private String fieldOne; + + /** + * 预留字段二 + */ + private String fieldTwo; + + /** + * 预留字段三 + */ + private String fieldThree; + + /** + * 预留字段四 + */ + private String fieldFour; + + /** + * 预留字段五 + */ + private String fieldFive; + + /** + * 激活标识(1是 0否) + */ + private String activeFlag; + + /** + * 备注 + */ + private String remark; + + /** + * 数据字段List + */ + private List designDataFieldList; + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDesignPageConfigBo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDesignPageConfigBo.java new file mode 100644 index 0000000..4a9bb56 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/bo/SysDesignPageConfigBo.java @@ -0,0 +1,102 @@ +package org.dromara.system.domain.bo; + +import org.dromara.system.domain.SysDesignPageConfig; +import org.dromara.common.mybatis.core.domain.BaseEntity; +import org.dromara.common.core.validate.AddGroup; +import org.dromara.common.core.validate.EditGroup; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; +import lombok.EqualsAndHashCode; +import jakarta.validation.constraints.*; + +/** + * 大屏设计页面配置业务对象 sys_design_page_config + * + * @author Yinq + * @date 2025-05-20 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@AutoMapper(target = SysDesignPageConfig.class, reverseConvertGenerate = false) +public class SysDesignPageConfigBo extends BaseEntity { + + /** + * 页面配置ID + */ + @NotNull(message = "页面配置ID不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long pageConfigId; + + /** + * 页面名称 + */ + @NotBlank(message = "页面名称不能为空", groups = { AddGroup.class, EditGroup.class }) + private String pageConfigName; + + /** + * 页面背景 + */ + @NotBlank(message = "页面背景不能为空", groups = { AddGroup.class, EditGroup.class }) + private String pageBackground; + + /** + * 页面路由 + */ + @NotBlank(message = "页面路由不能为空", groups = { AddGroup.class, EditGroup.class }) + private String pageRouting; + + /** + * 自定义内容 + */ + @NotBlank(message = "自定义内容不能为空", groups = { AddGroup.class, EditGroup.class }) + private String customContent; + + /** + * 显示排序 + */ + @NotNull(message = "显示排序不能为空", groups = { AddGroup.class, EditGroup.class }) + private Long sortOrder; + + /** + * 预留字段一 + */ + @NotBlank(message = "预留字段一不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fieldOne; + + /** + * 预留字段二 + */ + @NotBlank(message = "预留字段二不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fieldTwo; + + /** + * 预留字段三 + */ + @NotBlank(message = "预留字段三不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fieldThree; + + /** + * 预留字段四 + */ + @NotBlank(message = "预留字段四不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fieldFour; + + /** + * 预留字段五 + */ + @NotBlank(message = "预留字段五不能为空", groups = { AddGroup.class, EditGroup.class }) + private String fieldFive; + + /** + * 激活标识(1是 0否) + */ + @NotBlank(message = "激活标识(1是 0否)不能为空", groups = { AddGroup.class, EditGroup.class }) + private String activeFlag; + + /** + * 备注 + */ + @NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class }) + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDesignDataSourceVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDesignDataSourceVo.java new file mode 100644 index 0000000..bae1c63 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDesignDataSourceVo.java @@ -0,0 +1,133 @@ +package org.dromara.system.domain.vo; + +import org.dromara.system.domain.SysDesignDataField; +import org.dromara.system.domain.SysDesignDataSource; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +/** + * 大屏设计数据源视图对象 sys_design_data_source + * + * @author Yinq + * @date 2025-05-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SysDesignDataSource.class) +public class SysDesignDataSourceVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 数据源ID + */ + @ExcelProperty(value = "数据源ID") + private Long dataSourceId; + + /** + * 数据源名称 + */ + @ExcelProperty(value = "数据源名称") + private String dataSourceName; + + /** + * 请求方法 + */ + @ExcelProperty(value = "请求方法") + private String requestMethod; + + /** + * 请求地址 + */ + @ExcelProperty(value = "请求地址") + private String requestUrl; + + /** + * 数据源分组 + */ + @ExcelProperty(value = "数据源分组") + private String dataSourceGroup; + + /** + * 请求内容类型 + */ + @ExcelProperty(value = "请求内容类型") + private String requestContentType; + + /** + * 响应格式(JSON XML) + */ + @ExcelProperty(value = "响应格式(JSON XML)") + private String responseType; + + /** + * 版本号 + */ + @ExcelProperty(value = "版本号") + private String versionCode; + + /** + * 显示排序 + */ + @ExcelProperty(value = "显示排序") + private Long sortOrder; + + /** + * 预留字段一 + */ + @ExcelProperty(value = "预留字段一") + private String fieldOne; + + /** + * 预留字段二 + */ + @ExcelProperty(value = "预留字段二") + private String fieldTwo; + + /** + * 预留字段三 + */ + @ExcelProperty(value = "预留字段三") + private String fieldThree; + + /** + * 预留字段四 + */ + @ExcelProperty(value = "预留字段四") + private String fieldFour; + + /** + * 预留字段五 + */ + @ExcelProperty(value = "预留字段五") + private String fieldFive; + + /** + * 激活标识(1是 0否) + */ + @ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "active_flag") + private String activeFlag; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + /** + * 数据字段List + */ + private List designDataFieldList; +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDesignPageConfigVo.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDesignPageConfigVo.java new file mode 100644 index 0000000..8a0e2e7 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/domain/vo/SysDesignPageConfigVo.java @@ -0,0 +1,111 @@ +package org.dromara.system.domain.vo; + +import org.dromara.system.domain.SysDesignPageConfig; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import org.dromara.common.excel.annotation.ExcelDictFormat; +import org.dromara.common.excel.convert.ExcelDictConvert; +import io.github.linpeilie.annotations.AutoMapper; +import lombok.Data; + +import java.io.Serial; +import java.io.Serializable; +import java.util.Date; + + + +/** + * 大屏设计页面配置视图对象 sys_design_page_config + * + * @author Yinq + * @date 2025-05-20 + */ +@Data +@ExcelIgnoreUnannotated +@AutoMapper(target = SysDesignPageConfig.class) +public class SysDesignPageConfigVo implements Serializable { + + @Serial + private static final long serialVersionUID = 1L; + + /** + * 页面配置ID + */ + @ExcelProperty(value = "页面配置ID") + private Long pageConfigId; + + /** + * 页面名称 + */ + @ExcelProperty(value = "页面名称") + private String pageConfigName; + + /** + * 页面背景 + */ + @ExcelProperty(value = "页面背景") + private String pageBackground; + + /** + * 页面路由 + */ + @ExcelProperty(value = "页面路由") + private String pageRouting; + + /** + * 自定义内容 + */ + @ExcelProperty(value = "自定义内容") + private String customContent; + + /** + * 显示排序 + */ + @ExcelProperty(value = "显示排序") + private Long sortOrder; + + /** + * 预留字段一 + */ + @ExcelProperty(value = "预留字段一") + private String fieldOne; + + /** + * 预留字段二 + */ + @ExcelProperty(value = "预留字段二") + private String fieldTwo; + + /** + * 预留字段三 + */ + @ExcelProperty(value = "预留字段三") + private String fieldThree; + + /** + * 预留字段四 + */ + @ExcelProperty(value = "预留字段四") + private String fieldFour; + + /** + * 预留字段五 + */ + @ExcelProperty(value = "预留字段五") + private String fieldFive; + + /** + * 激活标识(1是 0否) + */ + @ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class) + @ExcelDictFormat(dictType = "active_flag") + private String activeFlag; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDesignDataFieldMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDesignDataFieldMapper.java new file mode 100644 index 0000000..46b934f --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDesignDataFieldMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.SysDesignDataField; +import org.dromara.system.domain.vo.SysDesignDataFieldVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 大屏设计数据字段Mapper接口 + * + * @author Yinq + * @date 2025-05-20 + */ +public interface SysDesignDataFieldMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDesignDataSourceMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDesignDataSourceMapper.java new file mode 100644 index 0000000..cf5f64f --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDesignDataSourceMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.SysDesignDataSource; +import org.dromara.system.domain.vo.SysDesignDataSourceVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 大屏设计数据源Mapper接口 + * + * @author Yinq + * @date 2025-05-20 + */ +public interface SysDesignDataSourceMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDesignPageConfigMapper.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDesignPageConfigMapper.java new file mode 100644 index 0000000..680a4e5 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/mapper/SysDesignPageConfigMapper.java @@ -0,0 +1,15 @@ +package org.dromara.system.mapper; + +import org.dromara.system.domain.SysDesignPageConfig; +import org.dromara.system.domain.vo.SysDesignPageConfigVo; +import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; + +/** + * 大屏设计页面配置Mapper接口 + * + * @author Yinq + * @date 2025-05-20 + */ +public interface SysDesignPageConfigMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDesignDataSourceService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDesignDataSourceService.java new file mode 100644 index 0000000..c69ea80 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDesignDataSourceService.java @@ -0,0 +1,68 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.vo.SysDesignDataSourceVo; +import org.dromara.system.domain.bo.SysDesignDataSourceBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 大屏设计数据源Service接口 + * + * @author Yinq + * @date 2025-05-20 + */ +public interface ISysDesignDataSourceService { + + /** + * 查询大屏设计数据源 + * + * @param dataSourceId 主键 + * @return 大屏设计数据源 + */ + SysDesignDataSourceVo queryById(Long dataSourceId); + + /** + * 分页查询大屏设计数据源列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 大屏设计数据源分页列表 + */ + TableDataInfo queryPageList(SysDesignDataSourceBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的大屏设计数据源列表 + * + * @param bo 查询条件 + * @return 大屏设计数据源列表 + */ + List queryList(SysDesignDataSourceBo bo); + + /** + * 新增大屏设计数据源 + * + * @param bo 大屏设计数据源 + * @return 是否新增成功 + */ + Boolean insertByBo(SysDesignDataSourceBo bo); + + /** + * 修改大屏设计数据源 + * + * @param bo 大屏设计数据源 + * @return 是否修改成功 + */ + Boolean updateByBo(SysDesignDataSourceBo bo); + + /** + * 校验并批量删除大屏设计数据源信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDesignPageConfigService.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDesignPageConfigService.java new file mode 100644 index 0000000..fa90758 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/ISysDesignPageConfigService.java @@ -0,0 +1,69 @@ +package org.dromara.system.service; + +import org.dromara.system.domain.SysDesignPageConfig; +import org.dromara.system.domain.vo.SysDesignPageConfigVo; +import org.dromara.system.domain.bo.SysDesignPageConfigBo; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 大屏设计页面配置Service接口 + * + * @author Yinq + * @date 2025-05-20 + */ +public interface ISysDesignPageConfigService { + + /** + * 查询大屏设计页面配置 + * + * @param pageConfigId 主键 + * @return 大屏设计页面配置 + */ + SysDesignPageConfigVo queryById(Long pageConfigId); + + /** + * 分页查询大屏设计页面配置列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 大屏设计页面配置分页列表 + */ + TableDataInfo queryPageList(SysDesignPageConfigBo bo, PageQuery pageQuery); + + /** + * 查询符合条件的大屏设计页面配置列表 + * + * @param bo 查询条件 + * @return 大屏设计页面配置列表 + */ + List queryList(SysDesignPageConfigBo bo); + + /** + * 新增大屏设计页面配置 + * + * @param bo 大屏设计页面配置 + * @return 是否新增成功 + */ + Boolean insertByBo(SysDesignPageConfigBo bo); + + /** + * 修改大屏设计页面配置 + * + * @param bo 大屏设计页面配置 + * @return 是否修改成功 + */ + Boolean updateByBo(SysDesignPageConfigBo bo); + + /** + * 校验并批量删除大屏设计页面配置信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDesignDataSourceServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDesignDataSourceServiceImpl.java new file mode 100644 index 0000000..ed5bb63 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDesignDataSourceServiceImpl.java @@ -0,0 +1,177 @@ +package org.dromara.system.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import lombok.RequiredArgsConstructor; +import org.dromara.system.domain.SysDesignDataField; +import org.dromara.system.mapper.SysDesignDataFieldMapper; +import org.springframework.stereotype.Service; +import org.dromara.system.domain.bo.SysDesignDataSourceBo; +import org.dromara.system.domain.vo.SysDesignDataSourceVo; +import org.dromara.system.domain.SysDesignDataSource; +import org.dromara.system.mapper.SysDesignDataSourceMapper; +import org.dromara.system.service.ISysDesignDataSourceService; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 大屏设计数据源Service业务层处理 + * + * @author Yinq + * @date 2025-05-20 + */ +@RequiredArgsConstructor +@Service +public class SysDesignDataSourceServiceImpl implements ISysDesignDataSourceService { + + private final SysDesignDataSourceMapper baseMapper; + + private final SysDesignDataFieldMapper designDataFieldMapper; + + /** + * 查询大屏设计数据源 + * + * @param dataSourceId 主键 + * @return 大屏设计数据源 + */ + @Override + public SysDesignDataSourceVo queryById(Long dataSourceId) { + SysDesignDataSourceVo dataSourceVo = baseMapper.selectVoById(dataSourceId); + MPJLambdaWrapper lqw = JoinWrappers.lambda(SysDesignDataField.class); + lqw.eq(SysDesignDataField::getDataSourceId, dataSourceId); + List dataFieldList = designDataFieldMapper.selectList(lqw); + dataSourceVo.setDesignDataFieldList(dataFieldList); + return dataSourceVo; + } + + /** + * 分页查询大屏设计数据源列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 大屏设计数据源分页列表 + */ + @Override + public TableDataInfo queryPageList(SysDesignDataSourceBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的大屏设计数据源列表 + * + * @param bo 查询条件 + * @return 大屏设计数据源列表 + */ + @Override + public List queryList(SysDesignDataSourceBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(SysDesignDataSourceBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(SysDesignDataSource.class) + .selectAll(SysDesignDataSource.class) + .eq(bo.getDataSourceId() != null, SysDesignDataSource::getDataSourceId, bo.getDataSourceId()) + .like(StringUtils.isNotBlank(bo.getDataSourceName()), SysDesignDataSource::getDataSourceName, bo.getDataSourceName()) + .eq(StringUtils.isNotBlank(bo.getRequestMethod()), SysDesignDataSource::getRequestMethod, bo.getRequestMethod()) + .eq(StringUtils.isNotBlank(bo.getRequestUrl()), SysDesignDataSource::getRequestUrl, bo.getRequestUrl()) + .eq(StringUtils.isNotBlank(bo.getDataSourceGroup()), SysDesignDataSource::getDataSourceGroup, bo.getDataSourceGroup()) + .eq(StringUtils.isNotBlank(bo.getRequestContentType()), SysDesignDataSource::getRequestContentType, bo.getRequestContentType()) + .eq(StringUtils.isNotBlank(bo.getResponseType()), SysDesignDataSource::getResponseType, bo.getResponseType()) + .eq(StringUtils.isNotBlank(bo.getVersionCode()), SysDesignDataSource::getVersionCode, bo.getVersionCode()) + .eq(bo.getSortOrder() != null, SysDesignDataSource::getSortOrder, bo.getSortOrder()) + .eq(StringUtils.isNotBlank(bo.getFieldOne()), SysDesignDataSource::getFieldOne, bo.getFieldOne()) + .eq(StringUtils.isNotBlank(bo.getFieldTwo()), SysDesignDataSource::getFieldTwo, bo.getFieldTwo()) + .eq(StringUtils.isNotBlank(bo.getFieldThree()), SysDesignDataSource::getFieldThree, bo.getFieldThree()) + .eq(StringUtils.isNotBlank(bo.getFieldFour()), SysDesignDataSource::getFieldFour, bo.getFieldFour()) + .eq(StringUtils.isNotBlank(bo.getFieldFive()), SysDesignDataSource::getFieldFive, bo.getFieldFive()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), SysDesignDataSource::getActiveFlag, bo.getActiveFlag()) + .orderByAsc(SysDesignDataSource::getCreateTime); + return lqw; + } + + /** + * 新增大屏设计数据源 + * + * @param bo 大屏设计数据源 + * @return 是否新增成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean insertByBo(SysDesignDataSourceBo bo) { + SysDesignDataSource add = MapstructUtils.convert(bo, SysDesignDataSource.class); + List designDataFieldList = bo.getDesignDataFieldList(); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + assert add != null; + bo.setDataSourceId(add.getDataSourceId()); + if (!designDataFieldList.isEmpty()) { + for (SysDesignDataField designDataField : designDataFieldList) { + designDataField.setDataSourceId(add.getDataSourceId()); + designDataFieldMapper.insert(designDataField); + } + } + } + return flag; + } + + /** + * 修改大屏设计数据源 + * + * @param bo 大屏设计数据源 + * @return 是否修改成功 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public Boolean updateByBo(SysDesignDataSourceBo bo) { + SysDesignDataSource update = MapstructUtils.convert(bo, SysDesignDataSource.class); + List designDataFieldList = bo.getDesignDataFieldList(); + validEntityBeforeSave(update); + if (!designDataFieldList.isEmpty()) { +// MPJLambdaWrapper lqw = JoinWrappers.lambda(SysDesignDataField.class); +// lqw.eq(bo.getDataSourceId() != null, SysDesignDataField::getDataSourceId, bo.getDataSourceId()); +// List dataFieldList = designDataFieldMapper.selectList(lqw); +// for (SysDesignDataField field : dataFieldList) { +// designDataFieldMapper.deleteById(field.getDataFieldId()); +// } + for (SysDesignDataField dataField : designDataFieldList) { + designDataFieldMapper.insertOrUpdate(dataField); + } + } + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SysDesignDataSource entity) { + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除大屏设计数据源信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if (isValid) { + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDesignPageConfigServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDesignPageConfigServiceImpl.java new file mode 100644 index 0000000..aa53bf8 --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/java/org/dromara/system/service/impl/SysDesignPageConfigServiceImpl.java @@ -0,0 +1,142 @@ +package org.dromara.system.service.impl; + +import org.dromara.common.core.utils.MapstructUtils; +import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.common.mybatis.core.page.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.toolkit.JoinWrappers; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.dromara.system.domain.bo.SysDesignPageConfigBo; +import org.dromara.system.domain.vo.SysDesignPageConfigVo; +import org.dromara.system.domain.SysDesignPageConfig; +import org.dromara.system.mapper.SysDesignPageConfigMapper; +import org.dromara.system.service.ISysDesignPageConfigService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 大屏设计页面配置Service业务层处理 + * + * @author Yinq + * @date 2025-05-20 + */ +@RequiredArgsConstructor +@Service +public class SysDesignPageConfigServiceImpl implements ISysDesignPageConfigService { + + private final SysDesignPageConfigMapper baseMapper; + + /** + * 查询大屏设计页面配置 + * + * @param pageConfigId 主键 + * @return 大屏设计页面配置 + */ + @Override + public SysDesignPageConfigVo queryById(Long pageConfigId){ + return baseMapper.selectVoById(pageConfigId); + } + + /** + * 分页查询大屏设计页面配置列表 + * + * @param bo 查询条件 + * @param pageQuery 分页参数 + * @return 大屏设计页面配置分页列表 + */ + @Override + public TableDataInfo queryPageList(SysDesignPageConfigBo bo, PageQuery pageQuery) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询符合条件的大屏设计页面配置列表 + * + * @param bo 查询条件 + * @return 大屏设计页面配置列表 + */ + @Override + public List queryList(SysDesignPageConfigBo bo) { + MPJLambdaWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private MPJLambdaWrapper buildQueryWrapper(SysDesignPageConfigBo bo) { + Map params = bo.getParams(); + MPJLambdaWrapper lqw = JoinWrappers.lambda(SysDesignPageConfig.class) + .selectAll(SysDesignPageConfig.class) + .eq(bo.getPageConfigId() != null, SysDesignPageConfig::getPageConfigId, bo.getPageConfigId()) + .like(StringUtils.isNotBlank(bo.getPageConfigName()), SysDesignPageConfig::getPageConfigName, bo.getPageConfigName()) + .eq(StringUtils.isNotBlank(bo.getPageBackground()), SysDesignPageConfig::getPageBackground, bo.getPageBackground()) + .eq(StringUtils.isNotBlank(bo.getPageRouting()), SysDesignPageConfig::getPageRouting, bo.getPageRouting()) + .eq(StringUtils.isNotBlank(bo.getCustomContent()), SysDesignPageConfig::getCustomContent, bo.getCustomContent()) + .eq(bo.getSortOrder() != null, SysDesignPageConfig::getSortOrder, bo.getSortOrder()) + .eq(StringUtils.isNotBlank(bo.getFieldOne()), SysDesignPageConfig::getFieldOne, bo.getFieldOne()) + .eq(StringUtils.isNotBlank(bo.getFieldTwo()), SysDesignPageConfig::getFieldTwo, bo.getFieldTwo()) + .eq(StringUtils.isNotBlank(bo.getFieldThree()), SysDesignPageConfig::getFieldThree, bo.getFieldThree()) + .eq(StringUtils.isNotBlank(bo.getFieldFour()), SysDesignPageConfig::getFieldFour, bo.getFieldFour()) + .eq(StringUtils.isNotBlank(bo.getFieldFive()), SysDesignPageConfig::getFieldFive, bo.getFieldFive()) + .eq(StringUtils.isNotBlank(bo.getActiveFlag()), SysDesignPageConfig::getActiveFlag, bo.getActiveFlag()) + .orderByDesc(SysDesignPageConfig::getCreateTime); + return lqw; + } + + /** + * 新增大屏设计页面配置 + * + * @param bo 大屏设计页面配置 + * @return 是否新增成功 + */ + @Override + public Boolean insertByBo(SysDesignPageConfigBo bo) { + SysDesignPageConfig add = MapstructUtils.convert(bo, SysDesignPageConfig.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setPageConfigId(add.getPageConfigId()); + } + return flag; + } + + /** + * 修改大屏设计页面配置 + * + * @param bo 大屏设计页面配置 + * @return 是否修改成功 + */ + @Override + public Boolean updateByBo(SysDesignPageConfigBo bo) { + SysDesignPageConfig update = MapstructUtils.convert(bo, SysDesignPageConfig.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(SysDesignPageConfig entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 校验并批量删除大屏设计页面配置信息 + * + * @param ids 待删除的主键集合 + * @param isValid 是否进行有效性校验 + * @return 是否删除成功 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteByIds(ids) > 0; + } +} diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDesignDataFieldMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDesignDataFieldMapper.xml new file mode 100644 index 0000000..deb378b --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDesignDataFieldMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDesignDataSourceMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDesignDataSourceMapper.xml new file mode 100644 index 0000000..d0cfa2d --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDesignDataSourceMapper.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDesignPageConfigMapper.xml b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDesignPageConfigMapper.xml new file mode 100644 index 0000000..3b0c3ed --- /dev/null +++ b/ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDesignPageConfigMapper.xml @@ -0,0 +1,7 @@ + + + + +