diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DmsConstants.java b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DmsConstants.java index 25c40f9..79a6f48 100644 --- a/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DmsConstants.java +++ b/ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/constant/DmsConstants.java @@ -32,6 +32,7 @@ public class DmsConstants { /**点巡检项目属性*/ public static final String DMS_INSPECT_INSTANCE_PROJECT_PROPERTY_QUALITATIVE = "1";//定性 + public static final String DMS_INSPECT_INSTANCE_PROJECT_PROPERTY_QUANTITATIVE = "2";//定量 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsMobileController.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsMobileController.java index fcfbf12..75eae5b 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsMobileController.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/controller/DmsMobileController.java @@ -239,7 +239,6 @@ public class DmsMobileController extends BaseController { // @RepeatSubmit public AjaxResult getOutsrcInfos() { DmsBaseOutsourcingInfoBo queryBaseOutsrcInfo = new DmsBaseOutsourcingInfoBo(); - //沒有外协状态,用激活状态 // queryBaseOutsrcInfo.setOutsrcStatus(DmsConstants.DMS_BASE_OUTSRC_INFO_STATUS_NROMAL); queryBaseOutsrcInfo.setActiveFlag("1"); @@ -253,7 +252,6 @@ public class DmsMobileController extends BaseController { outsourcing.setOutsrcName(vo.getOutsourcingName()); outsourcingList.add(outsourcing); } - return AjaxResult.success(outsourcingList); } @@ -325,8 +323,8 @@ public class DmsMobileController extends BaseController { //TODO:文件存储待测试 dmsBillsFaultInstance.setFileUrls(fileUrls); - dmsBillsFaultInstanceService.insertByBo(dmsBillsFaultInstance); - return AjaxResult.success(); + Boolean b = dmsBillsFaultInstanceService.insertByBo(dmsBillsFaultInstance); + return AjaxResult.success(b); } @@ -338,11 +336,10 @@ public class DmsMobileController extends BaseController { // @RequiresPermissions("qms:checkrule:list") @GetMapping("/getBillsFaultInstances") @RepeatSubmit - public AjaxResult getBillsFaultInstances() { + public TableDataInfo getBillsFaultInstances() { DmsBillsFaultInstanceBo queryBillsFaultInstance = new DmsBillsFaultInstanceBo(); List billsFaultInstances = dmsBillsFaultInstanceService.queryList(queryBillsFaultInstance); - TableDataInfo dataTable = TableDataInfo.build(billsFaultInstances); - return AjaxResult.success().put("rows", dataTable.getRows()).put("total", dataTable.getTotal()); + return TableDataInfo.build(billsFaultInstances); } /** @@ -358,10 +355,8 @@ public class DmsMobileController extends BaseController { DmsBillsFaultInstanceVo billsFaultInstance = dmsBillsFaultInstanceService.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId); // 使用MapstructUtils进行高性能对象转换,避免时间字段序列化问题 DmsBillsFaultInstanceMobile mobileInstance = MapstructUtils.convert(billsFaultInstance, DmsBillsFaultInstanceMobile.class); - // 手动格式化时间字段,确保PDA客户端兼容性 formatTimeFields(mobileInstance, billsFaultInstance); - return AjaxResult.success(mobileInstance); } @@ -377,8 +372,8 @@ public class DmsMobileController extends BaseController { @RequestParam(value = "files" , required = false) List files) { List fileUrls = handleFileUploads(files); dmsFaultInstanceActivity.setFileUrls(fileUrls); - dmsBillsFaultInstanceService.updateDmsFaultInstanceActivity(dmsFaultInstanceActivity); - return AjaxResult.success(); + int i = dmsBillsFaultInstanceService.updateDmsFaultInstanceActivity(dmsFaultInstanceActivity); + return AjaxResult.success(i); } /** @@ -394,10 +389,8 @@ public class DmsMobileController extends BaseController { DmsBillsFaultInstanceVo billsFaultInstance = dmsBillsFaultInstanceService.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId); // 使用MapstructUtils进行高性能对象转换,避免时间字段序列化问题 DmsBillsFaultInstanceMobile mobileInstance = MapstructUtils.convert(billsFaultInstance, DmsBillsFaultInstanceMobile.class); - // 手动格式化时间字段,确保PDA客户端兼容性 formatTimeFields(mobileInstance, billsFaultInstance); - return AjaxResult.success(mobileInstance); } @@ -411,7 +404,6 @@ public class DmsMobileController extends BaseController { @GetMapping("/scanDevice4Repair") @RepeatSubmit public AjaxResult scanDevice4Repair(@Validated DmsBillsFaultInstanceScanBo dmsBillsFaultInstanceScan) { - //FIXME:返回从void改为long return AjaxResult.success(dmsBillsFaultInstanceService.scanDevice4Repair(dmsBillsFaultInstanceScan)); } @@ -424,8 +416,8 @@ public class DmsMobileController extends BaseController { @PostMapping("/startRepair") @RepeatSubmit public AjaxResult startRepair(@RequestBody DmsFaultInstanceActivityBo dmsFaultInstanceActivity) { - dmsBillsFaultInstanceService.startRepair(dmsFaultInstanceActivity); - return AjaxResult.success(); + int i = dmsBillsFaultInstanceService.startRepair(dmsFaultInstanceActivity); + return AjaxResult.success(i); } /** @@ -444,12 +436,11 @@ public class DmsMobileController extends BaseController { List parts2 = objectMapper.readValue(parts1, new TypeReference>() { }); dmsFaultInstanceActivity.setParts(parts2); - List fileUrls = handleFileUploads(files); dmsFaultInstanceActivity.setFileUrls(fileUrls); //FIXME:关于工作流相关的本页代码以及调用方法都需测试完善修改 - dmsBillsFaultInstanceService.completeRepair(dmsFaultInstanceActivity); - return AjaxResult.success(); + int i = dmsBillsFaultInstanceService.completeRepair(dmsFaultInstanceActivity); + return AjaxResult.success(i); } @@ -476,19 +467,19 @@ public class DmsMobileController extends BaseController { @GetMapping("/scanInspectInstanceDetail") @RepeatSubmit public AjaxResult scanInspectInstanceDetail(@Validated DmsBillsInspectInstanceScanBo dmsBillsInspectInstanceScan) { - dmsBillsInspectInstanceService.scanInspectInstanceDetail(dmsBillsInspectInstanceScan); - return AjaxResult.success(); + DmsInspectInstanceDetailVo dmsInspectInstanceDetailVo = dmsBillsInspectInstanceService.scanInspectInstanceDetail(dmsBillsInspectInstanceScan); + DmsInspectInstanceDetailMobile dmsInspectInstanceDetailMobile = MapstructUtils.convert(dmsInspectInstanceDetailVo, DmsInspectInstanceDetailMobile.class); + return AjaxResult.success(dmsInspectInstanceDetailMobile); } /** * 点巡检工单 */ -// @Log(title = "点巡检工单明细", businessType = BusinessType.INSERT) -// @PostMapping("/saveInspectInstanceDetail") -// public R saveInspectInstanceDetail(@RequestBody DmsInspectInstanceDetailBo dmsInspectInstanceDetail) { -// return R.ok(dmsBillsInspectInstanceService.updateDmsInspectInstanceDetail(dmsInspectInstanceDetail)); -// -// } + @Log(title = "点巡检工单明细", businessType = BusinessType.INSERT) + @PostMapping("/saveInspectInstanceDetail") + public AjaxResult saveInspectInstanceDetail(@RequestBody DmsInspectInstanceDetailBo dmsInspectInstanceDetail) { + return AjaxResult.success(dmsBillsInspectInstanceService.updateDmsInspectInstanceDetail(dmsInspectInstanceDetail)); + } /** @@ -503,10 +494,8 @@ public class DmsMobileController extends BaseController { DmsBillsMaintInstanceVo newestMaintInstance = dmsBillsMaintInstanceService.getNewestBillsMaintInstance(dmsBillsMaintInstance); // 使用MapstructUtils进行高性能对象转换,避免时间字段序列化问题 DmsBillsMaintInstanceMobile mobileInstance = MapstructUtils.convert(newestMaintInstance, DmsBillsMaintInstanceMobile.class); - // 手动格式化时间字段,确保PDA客户端兼容性 // formatMaintTimeFields(mobileInstance, newestMaintInstance); - return AjaxResult.success(mobileInstance); } @@ -531,8 +520,8 @@ public class DmsMobileController extends BaseController { @PostMapping("/completeMaint") @RepeatSubmit public AjaxResult completeMaint(@RequestBody DmsBillsMaintDetail dmsBillsMaintDetail) { - dmsBillsMaintInstanceService.completeMaint(dmsBillsMaintDetail); - return AjaxResult.success(); + int i = dmsBillsMaintInstanceService.completeMaint(dmsBillsMaintDetail); + return AjaxResult.success(i); } @@ -548,10 +537,8 @@ public class DmsMobileController extends BaseController { DmsBillsLubeInstanceVo newestLubeInstance = dmsBillsLubeInstanceService.getNewestBillsLubeInstance(dmsBillsLubeInstance); // 使用MapstructUtils进行高性能对象转换,避免时间字段序列化问题 DmsBillsLubeInstanceMobile mobileInstance = MapstructUtils.convert(newestLubeInstance, DmsBillsLubeInstanceMobile.class); - // 注意:润滑Mobile类中的时间字段已被注释,无需格式化 // 如果将来启用时间字段,请添加相应的格式化方法 - return AjaxResult.success(mobileInstance); } @@ -563,9 +550,8 @@ public class DmsMobileController extends BaseController { @PostMapping("/startLube") @RepeatSubmit public AjaxResult startLube(@RequestBody DmsBillsLubeDetailBo dmsBillsLubeDetail) { - - dmsBillsLubeInstanceService.startLube(dmsBillsLubeDetail); - return AjaxResult.success(); + Boolean b = dmsBillsLubeInstanceService.startLube(dmsBillsLubeDetail); + return AjaxResult.success(b); } /** @@ -576,8 +562,8 @@ public class DmsMobileController extends BaseController { @PostMapping("/completeLube") @RepeatSubmit public AjaxResult completeLube(@RequestBody DmsBillsLubeDetailBo dmsBillsLubeDetail) { - dmsBillsLubeInstanceService.completeLube(dmsBillsLubeDetail); - return AjaxResult.success(); + int i = dmsBillsLubeInstanceService.completeLube(dmsBillsLubeDetail); + return AjaxResult.success(i); } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectInstanceDetail.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectInstanceDetail.java index 14b3e31..2d186ea 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectInstanceDetail.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectInstanceDetail.java @@ -1,6 +1,7 @@ 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; @@ -9,6 +10,7 @@ import org.dromara.common.tenant.core.TenantEntity; import java.io.Serial; import java.util.Date; +import java.util.List; /** * 点巡检工单明细对象 dms_inspect_instance_detail @@ -85,5 +87,7 @@ public class DmsInspectInstanceDetail extends TenantEntity { */ private String remark; + @TableField(exist = false) + private List dmsInspectInstanceDetailProjectList; } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectInstanceDetailProject.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectInstanceDetailProject.java index 4acf56b..d980c5c 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectInstanceDetailProject.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/DmsInspectInstanceDetailProject.java @@ -6,6 +6,7 @@ import lombok.Data; import lombok.EqualsAndHashCode; import java.io.Serial; +import java.math.BigDecimal; /** * 点巡检工单明细项目信息对象 dms_inspect_instance_detail_project @@ -45,7 +46,7 @@ public class DmsInspectInstanceDetailProject extends TenantEntity { /** * 巡检结果,具体值 */ - private Long inspectProjectResult; + private BigDecimal inspectProjectResult; /** * 巡检顺序 @@ -55,7 +56,7 @@ public class DmsInspectInstanceDetailProject extends TenantEntity { /** * 标准值(冗余字段) */ - private Long defValue; + private BigDecimal defValue; /** * 巡检项目名称(冗余字段) @@ -70,12 +71,12 @@ public class DmsInspectInstanceDetailProject extends TenantEntity { /** * 上差值,检验时从检验项目复制过来的值 */ - private Long upLimit; + private BigDecimal upLimit; /** * 下差值,检验时从检验项目复制过来的值 */ - private Long lowLimit; + private BigDecimal lowLimit; /** * 巡检项目描述 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsInspectInstanceDetailBo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsInspectInstanceDetailBo.java index 38e16be..bf10241 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsInspectInstanceDetailBo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsInspectInstanceDetailBo.java @@ -5,8 +5,10 @@ import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.dms.domain.DmsInspectInstanceDetail; +import org.dromara.dms.domain.DmsInspectInstanceDetailProject; import java.util.Date; +import java.util.List; /** * 点巡检工单明细业务对象 dms_inspect_instance_detail @@ -96,4 +98,6 @@ public class DmsInspectInstanceDetailBo extends BaseEntity { */ private Long deviceId;////表结构中是machine_id + private List dmsInspectInstanceDetailProjectList; + } diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsInspectInstanceDetailProjectBo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsInspectInstanceDetailProjectBo.java index c4b992a..ab7e02f 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsInspectInstanceDetailProjectBo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/bo/DmsInspectInstanceDetailProjectBo.java @@ -9,6 +9,8 @@ import lombok.Data; import lombok.EqualsAndHashCode; import jakarta.validation.constraints.*; +import java.math.BigDecimal; + /** * 点巡检工单明细项目信息业务对象 dms_inspect_instance_detail_project * @@ -43,7 +45,7 @@ public class DmsInspectInstanceDetailProjectBo extends BaseEntity { /** * 巡检结果,具体值 */ - private Long inspectProjectResult; + private BigDecimal inspectProjectResult; /** * 巡检顺序 @@ -53,7 +55,7 @@ public class DmsInspectInstanceDetailProjectBo extends BaseEntity { /** * 标准值(冗余字段) */ - private Long defValue; + private BigDecimal defValue; /** * 巡检项目名称(冗余字段) @@ -68,12 +70,12 @@ public class DmsInspectInstanceDetailProjectBo extends BaseEntity { /** * 上差值,检验时从检验项目复制过来的值 */ - private Long upLimit; + private BigDecimal upLimit; /** * 下差值,检验时从检验项目复制过来的值 */ - private Long lowLimit; + private BigDecimal lowLimit; /** * 巡检项目描述 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 be9e5db..373d0cb 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 @@ -129,7 +129,7 @@ public class DmsBillsLubeInstanceVo implements Serializable { /** * 润滑工单详情 */ - private List dmsBillsLubeDetailList; + private List dmsBillsLubeDetailList; /** @@ -144,10 +144,7 @@ public class DmsBillsLubeInstanceVo implements Serializable { @ExcelIgnore private Date createTime; - /** - * - */ - private List dmsBillsLubeDetails; +// private List dmsBillsLubeDetails; private String lubeStatusStr; diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsInspectInstanceDetailProjectVo.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsInspectInstanceDetailProjectVo.java index 7441d41..521a7b4 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsInspectInstanceDetailProjectVo.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/domain/vo/DmsInspectInstanceDetailProjectVo.java @@ -10,6 +10,7 @@ import lombok.Data; import java.io.Serial; import java.io.Serializable; +import java.math.BigDecimal; import java.util.Date; @@ -57,7 +58,7 @@ public class DmsInspectInstanceDetailProjectVo implements Serializable { * 巡检结果,具体值 */ @ExcelProperty(value = "巡检结果,具体值") - private Long inspectProjectResult; + private BigDecimal inspectProjectResult; /** * 巡检顺序 @@ -69,7 +70,7 @@ public class DmsInspectInstanceDetailProjectVo implements Serializable { * 标准值(冗余字段) */ @ExcelProperty(value = "标准值(冗余字段)") - private Long defValue; + private BigDecimal defValue; /** * 巡检项目名称(冗余字段) @@ -88,13 +89,13 @@ public class DmsInspectInstanceDetailProjectVo implements Serializable { * 上差值,检验时从检验项目复制过来的值 */ @ExcelProperty(value = "上差值,检验时从检验项目复制过来的值") - private Long upLimit; + private BigDecimal upLimit; /** * 下差值,检验时从检验项目复制过来的值 */ @ExcelProperty(value = "下差值,检验时从检验项目复制过来的值") - private Long lowLimit; + private BigDecimal lowLimit; /** * 巡检项目描述 diff --git a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsInspectInstanceMapper.java b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsInspectInstanceMapper.java index 62a1b6f..2717c06 100644 --- a/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsInspectInstanceMapper.java +++ b/ruoyi-modules/hwmom-dms/src/main/java/org/dromara/dms/mapper/DmsBillsInspectInstanceMapper.java @@ -1,7 +1,9 @@ package org.dromara.dms.mapper; +import org.apache.ibatis.annotations.Param; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.dms.domain.DmsBillsInspectInstance; +import org.dromara.dms.domain.DmsRecordInspect; import org.dromara.dms.domain.bo.DmsBillsInspectInstanceBo; import org.dromara.dms.domain.vo.DmsBillsInspectInstanceVo; @@ -38,5 +40,9 @@ public interface DmsBillsInspectInstanceMapper extends BaseMapperPlus selectRecordByInstainceId(@Param("inspectInstanceId") Long inspectInstanceId); + + int selectUnCompletedInstance(@Param("inspectInstanceId") Long inspectInstanceId); } 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 27db0d3..f0621f6 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 @@ -1,13 +1,11 @@ package org.dromara.dms.service; -import org.dromara.dms.domain.DmsBillsInspectInstance; -import org.dromara.dms.domain.DmsInspectInstanceDetail; +import org.dromara.common.mybatis.core.page.PageQuery; +import org.dromara.common.mybatis.core.page.TableDataInfo; +import org.dromara.dms.domain.bo.DmsBillsInspectInstanceBo; import org.dromara.dms.domain.bo.DmsBillsInspectInstanceScanBo; import org.dromara.dms.domain.bo.DmsInspectInstanceDetailBo; import org.dromara.dms.domain.vo.DmsBillsInspectInstanceVo; -import org.dromara.dms.domain.bo.DmsBillsInspectInstanceBo; -import org.dromara.common.mybatis.core.page.TableDataInfo; -import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.dms.domain.vo.DmsInspectInstanceDetailVo; import java.util.Collection; @@ -85,7 +83,7 @@ public interface IDmsBillsInspectInstanceService { * @param dmsInspectInstanceDetail 点巡检工单明细 * @return 结果 */ -// int updateDmsInspectInstanceDetail(DmsInspectInstanceDetailBo dmsInspectInstanceDetail); + int updateDmsInspectInstanceDetail(DmsInspectInstanceDetailBo dmsInspectInstanceDetail); /** 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 da3d38a..c101c08 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 @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.dubbo.config.annotation.DubboReference; import org.dromara.common.core.constant.DmsConstants; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.MapstructUtils; @@ -16,19 +18,15 @@ import org.dromara.dms.domain.bo.DmsBillsInspectInstanceScanBo; import org.dromara.dms.domain.bo.DmsInspectInstanceDetailBo; import org.dromara.dms.domain.vo.DmsBillsInspectInstanceVo; import org.dromara.dms.domain.vo.DmsInspectInstanceDetailVo; -import org.dromara.dms.mapper.DmsBillsInspectInstanceMapper; -import org.dromara.dms.mapper.DmsInspectInstanceDetailMapper; -import org.dromara.dms.mapper.DmsInspectInstanceDetailProjectMapper; -import org.dromara.dms.mapper.DmsPlanInspectMapper; +import org.dromara.dms.mapper.*; import org.dromara.dms.service.IDmsBillsInspectInstanceService; +import org.dromara.workflow.api.RemoteWorkflowService; 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 java.math.BigDecimal; +import java.util.*; /** * 点巡检工单Service业务层处理 @@ -36,6 +34,7 @@ import java.util.Map; * @author zch * @date 2025-03-31 */ +@Slf4j @RequiredArgsConstructor @Service public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInstanceService { @@ -50,6 +49,10 @@ public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInsta private final DmsInspectInstanceDetailProjectMapper dmsInspectInstanceDetailPrjectMapper; + private final DmsRecordInspectMapper dmsRecordInspectMapper; + + @DubboReference(timeout = 15000, retries = 1) + private final RemoteWorkflowService remoteWorkflowService; /** * 查询点巡检工单 @@ -198,66 +201,74 @@ public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInsta * @return 结果 */ -// @Override -// @Transactional(rollbackFor = Exception.class) -// public int updateDmsInspectInstanceDetail(DmsInspectInstanceDetailBo dmsInspectInstanceDetail) { -// // 根据instanceDetailId查询记录检查信息 -// DmsRecordInspect dmsRecordInspect = dmsBillsInspectInstanceMapper.selectRecord(dmsInspectInstanceDetail.getInstanceDetailId()); -// -// // 根据inspectInstanceId批量查询记录检查信息 -// List recordInspect = dmsBillsInspectInstanceMapper.selectRecordByInstainceId(dmsRecordInspect.getInspectInstanceId()); -//// if (recordInspect!=null&&recordInspect.size()>0){ -//// // 如果有未完成的检查记录,设置状态为2 -//// dmsRecordInspect.setInspectStatus(2l); -//// }else { -//// // 如果所有检查记录都完成,设置状态为3 -//// dmsRecordInspect.setInspectStatus(3l); -//// } -// // 直接将状态设置为3,表示完成 -// dmsRecordInspect.setInspectStatus(3l); -// // 插入记录检查信息 -// int i1 = dmsBillsInspectInstanceMapper.insertRecord(dmsRecordInspect); -// // 查询未完成的检查实例数量 -// int count = dmsBillsInspectInstanceMapper.selectUnCompletedInstance(dmsRecordInspect.getInspectInstanceId()); -//// int count1 = dmsBillsInspectInstanceMapper.selectAllInstance(dmsRecordInspect.getInspectInstanceId()); -// // 创建新的检查实例对象 -// DmsBillsInspectInstanceBo dmsBillsInspectInstance = new DmsBillsInspectInstanceBo(); -// if (count==0||count==1){ -// // 如果没有未完成的检查实例,设置状态为3 -// dmsBillsInspectInstance.setInspectStatus("3"); -// }else{ -// // 如果有未完成的检查实例,设置状态为2 -// dmsBillsInspectInstance.setInspectStatus("2"); -// } -// // 设置检查实例ID -// dmsBillsInspectInstance.setInspectInstanceId(dmsInspectInstanceDetail.getInspectInstanceId()); -// // 设置实际结束时间 -// dmsBillsInspectInstance.setRealEndTime(new Date()); -// // 更新检查实例信息 -// dmsBillsInspectInstanceService.updateByBo(dmsBillsInspectInstance); -// // 获取当前登录用户的信息 -// String userName = LoginHelper.getLoginUser()==null ? LoginHelper.getUsername() :LoginHelper.getLoginUser().getNickname(); -// // 获取当前日期 -// Date currentDate = new Date(); -// // 设置更新时间和更新人 -// dmsInspectInstanceDetail.setUpdateTime(currentDate); -// dmsInspectInstanceDetail.setUpdateBy(Long.valueOf(userName)); -// -// // 处理检查实例详情的子项目 -// DmsInspectInstanceDetail returnInspectInstanceDetail = handleDmsInspectInstanceDetailProject(dmsInspectInstanceDetail); -// if (returnInspectInstanceDetail != null) { -// // 更新检查状态和实例详情状态 -// dmsInspectInstanceDetail.setInspectStatus(returnInspectInstanceDetail.getInspectStatus()); -// dmsInspectInstanceDetail.setInstanceDetailStatus(returnInspectInstanceDetail.getInstanceDetailStatus()); -// // 设置子项目列表 -// dmsInspectInstanceDetail.setDmsInspectInstanceDetailProjectList(returnInspectInstanceDetail.getDmsInspectInstanceDetailProjectList()); -// // 批量更新子项目信息 -// batchUpdateDmsInspectInstanceDetailProject(dmsInspectInstanceDetail); -// } -// -// // 返回更新结果 -// return dmsInspectInstanceDetailMapper.update(dmsInspectInstanceDetail); -// } + @Override + @Transactional(rollbackFor = Exception.class) + public int updateDmsInspectInstanceDetail(DmsInspectInstanceDetailBo dmsInspectInstanceDetail) { + // 根据instanceDetailId查询记录检查信息 + DmsRecordInspect dmsRecordInspect = dmsBillsInspectInstanceMapper.selectRecord(dmsInspectInstanceDetail.getInstanceDetailId()); + // 根据inspectInstanceId批量查询记录检查信息 + List recordInspect = dmsBillsInspectInstanceMapper.selectRecordByInstainceId(dmsRecordInspect.getInspectInstanceId()); + // 直接将状态设置为3,表示完成 + dmsRecordInspect.setInspectStatus(String.valueOf(3L)); + // 插入记录检查信息 + int i1 = dmsRecordInspectMapper.insert(dmsRecordInspect); + // 查询未完成的检查实例数量 + int count = dmsBillsInspectInstanceMapper.selectUnCompletedInstance(dmsRecordInspect.getInspectInstanceId()); + // 创建新的检查实例对象 + DmsBillsInspectInstanceBo dmsBillsInspectInstance = new DmsBillsInspectInstanceBo(); + if (count==0||count==1){ + // 如果没有未完成的检查实例,设置状态为3 + dmsBillsInspectInstance.setInspectStatus("3"); + }else{ + // 如果有未完成的检查实例,设置状态为2 + dmsBillsInspectInstance.setInspectStatus("2"); + } + // 设置检查实例ID + dmsBillsInspectInstance.setInspectInstanceId(dmsInspectInstanceDetail.getInspectInstanceId()); + // 设置实际结束时间 + dmsBillsInspectInstance.setRealEndTime(new Date()); + // 更新检查实例信息 + this.updateByBo(dmsBillsInspectInstance); + + // 处理检查实例详情的子项目 + DmsInspectInstanceDetailBo returnInspectInstanceDetail = handleDmsInspectInstanceDetailProject(dmsInspectInstanceDetail); + if (returnInspectInstanceDetail != null) { + // 更新检查状态和实例详情状态 + dmsInspectInstanceDetail.setInspectStatus(returnInspectInstanceDetail.getInspectStatus()); + dmsInspectInstanceDetail.setInstanceDetailStatus(returnInspectInstanceDetail.getInstanceDetailStatus()); + // 设置子项目列表 + dmsInspectInstanceDetail.setDmsInspectInstanceDetailProjectList(returnInspectInstanceDetail.getDmsInspectInstanceDetailProjectList()); + // 批量更新子项目信息 + batchUpdateDmsInspectInstanceDetailProject(dmsInspectInstanceDetail); + } + + // 转换为实体对象进行更新 + DmsInspectInstanceDetail updateEntity = MapstructUtils.convert(dmsInspectInstanceDetail, DmsInspectInstanceDetail.class); + // 返回更新结果 + return dmsInspectInstanceDetailMapper.updateById(updateEntity); + } + + /** + * 批量更新点巡检工单明细项目信息 + * + * @param dmsInspectInstanceDetail 包含项目列表的点巡检工单明细 + */ + private void batchUpdateDmsInspectInstanceDetailProject(DmsInspectInstanceDetailBo dmsInspectInstanceDetail) { + // 【获取项目列表】获取需要更新的项目列表 + List projectList = dmsInspectInstanceDetail.getDmsInspectInstanceDetailProjectList(); + + // 【项目列表校验】如果项目列表不为空且不为空列表,进行批量更新 + if (StringUtils.isNotNull(projectList) && !projectList.isEmpty()) { + // 【遍历更新项目】逐个更新每个巡检项目的状态 + for (DmsInspectInstanceDetailProject project : projectList) { + // 【项目状态更新】只更新有ID的项目(已存在的项目) + if (project.getInstanceDetailProjectId() != null) { + // 使用Mapper直接更新项目状态信息 + dmsInspectInstanceDetailPrjectMapper.updateById(project); + } + } + } + } /** @@ -300,7 +311,7 @@ public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInsta */ @Override public DmsInspectInstanceDetailVo scanInspectInstanceDetail(DmsBillsInspectInstanceScanBo dmsBillsInspectInstanceScan) { - // 根据检查实例ID和设备编码查询检查实例详细信息 + // 根据检查实例ID和设备编码查询检查工单详细信息 DmsInspectInstanceDetailVo dmsInspectInstanceDetail = dmsInspectInstanceDetailMapper.selectDmsInspectInstanceDetailByUI(dmsBillsInspectInstanceScan.getInspectInstanceId(), dmsBillsInspectInstanceScan.getDeviceCode()); // 如果查询结果为空,抛出异常提示无此设备的检查工单 @@ -317,14 +328,14 @@ public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInsta Long projectId = dmsInspectInstanceDetailPrjectMapper.selectProjectByStandardId(dmsInspectInstanceDetail.getInspectStandard()); // 设置检查项目ID queryInspectInstanceDetailProject.setInspectProjectId(projectId); - // 设置检查实例详情ID + // 设置检查工单明细ID queryInspectInstanceDetailProject.setInstanceDetailId(dmsInspectInstanceDetail.getInstanceDetailId()); - // 查询检查实例详细项目列表 + // 查询检查工单详细项目列表 List dmsInspectInstanceDetailProjects = dmsInspectInstanceDetailPrjectMapper.selectDmsInspectInstanceDetailProjectJoinList(queryInspectInstanceDetailProject); - // 将查询结果设置到检查实例详情对象中 + // 将查询结果设置到检查工单详情对象中 dmsInspectInstanceDetail.setDmsInspectInstanceDetailProjectList(dmsInspectInstanceDetailProjects); - // 更新检查实例的开始时间 + // 更新检查工单的开始时间 DmsBillsInspectInstanceBo dmsBillsInspectInstance = new DmsBillsInspectInstanceBo(); // 设置检查实例ID dmsBillsInspectInstance.setInspectInstanceId(dmsBillsInspectInstanceScan.getInspectInstanceId()); @@ -342,4 +353,89 @@ public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInsta } + /** + * 更新点巡检工单明细项目信息 + * + * @param dmsInspectInstanceDetail 点巡检工单明细 + * @return 处理后的点巡检工单明细,包含更新后的状态信息 + */ + private DmsInspectInstanceDetailBo handleDmsInspectInstanceDetailProject(DmsInspectInstanceDetailBo dmsInspectInstanceDetail) { + // 【初始化状态】默认设置为完成状态和通过状态 + String instanceDetailStatus = DmsConstants.DMS_INSPECT_INSTANCE_DETAIL_STATUS_FINISH; + String inspectStatus = DmsConstants.DMS_INSPECT_INSTANCE_DETAIL_INSPECT_STATUS_PASS; // 质检结果检验状态 + + // 【获取项目列表】获取点巡检工单明细项目列表 + List inspectInstanceDetailProjectList = dmsInspectInstanceDetail.getDmsInspectInstanceDetailProjectList(); + + // 【项目列表校验】如果项目列表不为空,进行处理 + if (StringUtils.isNotNull(inspectInstanceDetailProjectList)) { + // 【创建返回对象】创建返回的检查实例详情对象 + DmsInspectInstanceDetailBo returnInspectInstanceDetail = new DmsInspectInstanceDetailBo(); + List toUpdatedList = new ArrayList<>(); + + // 【遍历处理项目】逐个处理每个巡检项目 + for (DmsInspectInstanceDetailProject inspectInstanceDetailProject : inspectInstanceDetailProjectList) { + String inspectProjectProperty = inspectInstanceDetailProject.getInspectProjectProperty(); + + // 【定性检查处理】如果是定性检查项目 + if (inspectProjectProperty.equals(DmsConstants.DMS_INSPECT_INSTANCE_PROJECT_PROPERTY_QUALITATIVE)) { + String inspectProjectStatus = inspectInstanceDetailProject.getInspectProjectStatus(); + if (inspectProjectStatus != null) { + // 【定性结果判断】如果检查结果为异常,设置整体状态为异常 + if (inspectProjectStatus.equals(DmsConstants.DMS_INSPECT_INSTANCE_DETAIL_PROJECT_STATUS_FAIL)) { + inspectStatus = DmsConstants.DMS_INSPECT_INSTANCE_DETAIL_INSPECT_STATUS_FAIL; + } + } else { + // 【定性未完成】如果检查状态为空,设置为巡检中状态 + instanceDetailStatus = DmsConstants.DMS_INSPECT_INSTANCE_DETAIL_STATUS_INSPECTING; + } + } else { + // 【定量检查处理】如果是定量检查项目 + BigDecimal inspectProjectResult = inspectInstanceDetailProject.getInspectProjectResult(); + if (inspectProjectResult != null) { + // 【获取标准值和限制值】 + BigDecimal standardValue = inspectInstanceDetailProject.getDefValue(); + BigDecimal upperDiff = inspectInstanceDetailProject.getUpLimit(); + BigDecimal downDiff = inspectInstanceDetailProject.getLowLimit(); + + // 【限制值处理】如果没设置上差值,则标准值为上差值 + if (upperDiff == null) { + upperDiff = standardValue; + } + // 【限制值处理】如果没设置下差值,则标准值为下差值 + if (downDiff == null) { + downDiff = standardValue; + } + + // 【范围判断】直接使用BigDecimal进行精确比较 + if (inspectProjectResult.compareTo(downDiff) >= 0 && inspectProjectResult.compareTo(upperDiff) <= 0) { + // 【定量通过】在合格范围内,设置为通过 + inspectInstanceDetailProject.setInspectProjectStatus(DmsConstants.DMS_INSPECT_INSTANCE_DETAIL_PROJECT_STATUS_PASS); + } else { + // 【定量异常】超出合格范围,设置为异常 + inspectInstanceDetailProject.setInspectProjectStatus(DmsConstants.DMS_INSPECT_INSTANCE_DETAIL_PROJECT_STATUS_FAIL); + inspectStatus = DmsConstants.DMS_INSPECT_INSTANCE_DETAIL_INSPECT_STATUS_FAIL; + } + } else { + // 【定量未完成】如果检查结果为空,设置为巡检中状态 + instanceDetailStatus = DmsConstants.DMS_INSPECT_INSTANCE_DETAIL_STATUS_INSPECTING; + } + } + + // 【添加到更新列表】将处理后的项目添加到待更新列表 + toUpdatedList.add(inspectInstanceDetailProject); + } + + // 【设置返回结果】设置处理后的状态和项目列表 + returnInspectInstanceDetail.setInspectStatus(inspectStatus); + returnInspectInstanceDetail.setInstanceDetailStatus(instanceDetailStatus); + returnInspectInstanceDetail.setDmsInspectInstanceDetailProjectList(toUpdatedList); + + return returnInspectInstanceDetail; + } + + // 【无项目列表】如果项目列表为空,返回null + return null; + } + } 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 500f76e..a239423 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 @@ -5,7 +5,10 @@ import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import io.seata.spring.annotation.GlobalTransactional; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; +import com.alibaba.ttl.TtlRunnable; +import cn.dev33.satoken.stp.StpUtil; import org.dromara.common.core.constant.DmsConstants; import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.DateUtils; @@ -30,11 +33,14 @@ import org.dromara.dms.mapper.*; import org.dromara.dms.service.IDmsBillsLubeInstanceService; import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.domain.RemoteCompleteTask; +import org.dromara.workflow.api.domain.RemoteStartProcess; +import org.dromara.workflow.api.domain.RemoteStartProcessReturn; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.util.ObjectUtils; import java.util.*; +import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; /** @@ -43,6 +49,7 @@ import java.util.stream.Collectors; * @author zch * @date 2025-03-25 */ +@Slf4j @RequiredArgsConstructor @Service public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceService { @@ -290,7 +297,7 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer // 设置润滑详情对象的润滑ID queryBillsLubeDetail.setLubeInstanceId(newestBillsLubeInstance.getLubeInstanceId()); List dmsBillsLubeDetails = dmsBillsLubeDetailMapper.selectDmsBillsLubeDetailJoinList(queryBillsLubeDetail); - newestBillsLubeInstance.setDmsBillsLubeDetails(dmsBillsLubeDetails); + newestBillsLubeInstance.setDmsBillsLubeDetailList(dmsBillsLubeDetails); } return newestBillsLubeInstance; @@ -315,8 +322,6 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer Long userId = LoginHelper.getUserId(); String userName = LoginHelper.getLoginUser()==null ? LoginHelper.getUsername() :LoginHelper.getLoginUser().getNickname(); - - // 获取润滑状态,如果为空则设置为待润滑状态 String lubeStatus = StringUtils.isEmpty(dmsBillsLubeInstance.getLubeStatus()) ? DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_TO_LUBE : dmsBillsLubeInstance.getLubeStatus(); @@ -330,19 +335,50 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer updateInstance.setLubeInstanceId(dmsBillsLubeInstance.getLubeInstanceId()); updateInstance.setLubeStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_LUBING); updateInstance.setRealBeginTime(currentDate); - //updateInstance.setUpdateBy(userId); - // 更新润滑工单信息 - this.updateByBo(updateInstance); + // 【工作流启动】创建远程启动流程对象 + RemoteStartProcess startProcess = new RemoteStartProcess(); + // 设置润滑工作流程代码 + startProcess.setFlowCode(DmsConstants.DMS_BILLS_LUBE_INSTANCE_WF_CODE); + // 获取业务ID(润滑实例ID) + String businessId = dmsBillsLubeInstance.getLubeInstanceId().toString(); + // 设置业务ID + startProcess.setBusinessId(businessId); + // 启动工作流程 + RemoteStartProcessReturn remoteStartProcessReturn = remoteWorkflowService.startWorkFlow(startProcess); + // 获取任务ID + Long taskId = remoteStartProcessReturn.getTaskId(); + // 如果任务ID为空,抛出流程启动失败异常 + if (StringUtils.isNull(taskId)) { + throw new ServiceException("润滑工作流启动失败"); + } else { + // 【异步线程上下文传递】解决Sa-Token在异步线程中丢失的问题 + // 1. 【捕获Token】: 在主线程中获取当前用户的Token + final String tokenValue = StpUtil.getTokenValue(); + // 2. 【异步更新工作流】: 使用TtlRunnable包装异步任务,确保ThreadLocal变量传递 + CompletableFuture.runAsync(TtlRunnable.get(() -> { + try { + // 3. 【设置上下文】: 在异步线程中恢复Token上下文 + StpUtil.setTokenValue(tokenValue); + // 4. 【执行业务】: 更新润滑工单的工作流信息 + updateLubeWorkFlow(updateInstance, taskId); + } catch (Exception e) { + // 【错误处理】记录异常但不影响主流程 + log.error("异步更新润滑工作流失败,getBillsLubeCode: {}, 错误: {}", + dmsBillsLubeInstance.getBillsLubeCode(), e.getMessage(), e); + // 可以考虑记录到失败表,后续补偿处理 + } + })); + } // 更新润滑工单明细状态 bo.setBeginTime(currentDate); bo.setMaintStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_LUBING); - dmsBillsLubeDetailMapper.updateById(MapstructUtils.convert(bo, DmsBillsLubeDetail.class)); + int i = dmsBillsLubeDetailMapper.updateById(MapstructUtils.convert(bo, DmsBillsLubeDetail.class)); } else { // 润滑中状态只需更新润滑工单明细 //bo.setUpdateBy(userId); - dmsBillsLubeDetailMapper.updateById(MapstructUtils.convert(bo, DmsBillsLubeDetail.class)); + int i = dmsBillsLubeDetailMapper.updateById(MapstructUtils.convert(bo, DmsBillsLubeDetail.class)); } return true; @@ -364,21 +400,11 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer // 根据润滑工单ID查询润滑实例信息 DmsBillsLubeInstanceVo dmsBillsLubeInstance = this.queryById(lubeInstanceId); - // 获取工作流任务ID - Long taskId = dmsBillsLubeInstance.getWfDefinitionId(); - // 创建远程完成任务的实例 - RemoteCompleteTask completeTask = new RemoteCompleteTask(); - // 设置任务ID - completeTask.setTaskId(taskId); - // 调用远程服务完成任务,返回任务执行状态 - boolean taskFlag = remoteWorkflowService.completeTask(completeTask); - - // 获取润滑状态,如果为空则设置为待润滑状态 String lubeStatus = StringUtils.isEmpty(dmsBillsLubeInstance.getLubeStatus()) ? DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_TO_LUBE : dmsBillsLubeInstance.getLubeStatus(); - // 验证润滑状态 + // 【状态验证】验证润滑状态 if (lubeStatus.equals(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_COMPLETE)) { throw new ServiceException("已经润滑完成"); } @@ -391,14 +417,14 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer Date currentDate = DateUtils.getNowDate(); Long userId = LoginHelper.getUserId(); - // 查询所有相关的润滑明细 + // 【查询相关明细】查询所有相关的润滑明细 MPJLambdaWrapper detailWrapper = JoinWrappers.lambda(DmsBillsLubeDetail.class) .selectAll(DmsBillsLubeDetail.class) .eq(DmsBillsLubeDetail::getLubeInstanceId, lubeInstanceId); List lubeDetails = dmsBillsLubeDetailMapper.selectJoinList(DmsBillsLubeDetailVo.class, detailWrapper); - /**获取未完成的润滑明细,并且需要排除当前提交完成的润滑明细*/ + /**【筛选未完成明细】获取未完成的润滑明细,并且需要排除当前提交完成的润滑明细*/ List inCompleteLubeDetails = lubeDetails.stream() .filter(lubeDetail -> !lubeDetail.getBillsLubeDetailId().equals(bo.getBillsLubeDetailId()) && (lubeDetail.getMaintStatus() == null @@ -407,17 +433,35 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer || lubeDetail.getMaintStatus().equals(Long.valueOf(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_LUBING)))) .collect(Collectors.toList()); - /**如果已经没有未完成的,则需要将工单修改成已完成,并更新结束时间*/ + /**【整体完成处理】如果已经没有未完成的,则需要将工单修改成已完成,并完成工作流*/ if (inCompleteLubeDetails == null || inCompleteLubeDetails.isEmpty()) { DmsBillsLubeInstanceBo updateInstance = new DmsBillsLubeInstanceBo(); updateInstance.setLubeInstanceId(lubeInstanceId); updateInstance.setLubeStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_COMPLETE); updateInstance.setRealEndTime(currentDate); -// updateInstance.setUpdateBy(userId); + + // 【工作流完成】完成润滑工作流 + Long taskId = dmsBillsLubeInstance.getWfDefinitionId(); + if (taskId != null) { + RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask(); + remoteCompleteTask.setTaskId(taskId); + remoteCompleteTask.setMessage("润滑工单完成,自动推进"); + // 【关键】设置消息类型为非null的List(避免原始错误) + List messageTypes = new ArrayList<>(); + messageTypes.add("system"); // 系统消息 + remoteCompleteTask.setMessageType(messageTypes); + // 完成工作流任务 + boolean taskCompleted = remoteWorkflowService.completeTask(remoteCompleteTask); + if (!taskCompleted) { + log.error("润滑工作流完成失败,taskId: {}", taskId); + } + } + + // 更新润滑工单状态 this.updateByBo(updateInstance); } - // 更新润滑明细状态为已完成 + // 【更新明细状态】更新润滑明细状态为已完成 bo.setEndTime(currentDate); //bo.setUpdateBy(userId); bo.setMaintStatus(String.valueOf(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_COMPLETE)); @@ -450,5 +494,45 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer return baseMapper.updateById(entity) > 0; } + /** + * 【异步工作流更新方法】更新润滑工单的工作流信息 + * + * @param updateInstance 润滑工单更新对象 + * @param taskId 工作流任务ID + * @return 更新是否成功 + */ + private Boolean updateLubeWorkFlow(DmsBillsLubeInstanceBo updateInstance, Long taskId) { + // 【设置工作流任务ID】将工作流任务ID设置到润滑工单中 + updateInstance.setWfDefinitionId(taskId); + // 【更新润滑工单信息】保存工作流相关信息 + DmsBillsLubeInstanceVo dmsBillsLubeInstanceVo = this.updateByBo(updateInstance); + if (ObjectUtils.isEmpty(dmsBillsLubeInstanceVo)){ + // 【更新失败处理】润滑工单更新失败,记录错误并返回false + log.error("润滑工单工作流信息更新失败,lubeInstanceId: {}", updateInstance.getLubeInstanceId()); + return false; + } + // 【自动推进工作流】完成第一步任务,推进到下一步 + RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask(); + // 设置任务ID + remoteCompleteTask.setTaskId(taskId); + // 设置完成消息 + remoteCompleteTask.setMessage("润滑工单启动,自动推进"); + // 【关键】设置消息类型为非null的List(避免原始错误) + List messageTypes = new ArrayList<>(); + messageTypes.add("system"); // 系统消息 + remoteCompleteTask.setMessageType(messageTypes); + + // 【执行任务完成】推进工作流到下一步 + boolean taskCompleted = remoteWorkflowService.completeTask(remoteCompleteTask); + + if (!taskCompleted) { + // 工作流推进失败,记录日志但不抛异常(避免影响主流程) + log.error("润滑工作流自动推进失败,taskId: {}", taskId); + return false; + } + + return taskCompleted; + } + } 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 dc2f1cd..68a4c0b 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 @@ -5,6 +5,7 @@ import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.wrapper.MPJLambdaWrapper; import io.seata.spring.annotation.GlobalTransactional; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.dubbo.config.annotation.DubboReference; import com.alibaba.ttl.TtlRunnable; import cn.dev33.satoken.stp.StpUtil; @@ -48,6 +49,7 @@ import java.util.stream.Collectors; * @author zch * @date 2025-03-31 */ +@Slf4j @RequiredArgsConstructor @Service public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceService { @@ -350,7 +352,8 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS updateWorkFlow(dmsBillsMaintInstance, taskId); } catch (Exception e) { // 简单记录错误,不影响主流程 - System.err.println("异步更新工作流失败,getBillsMaintCode: " + dmsBillsMaintInstance.getBillsMaintCode() + ", 错误: " + e.getMessage()); + log.error("异步更新保养工作流失败,getBillsMaintCode: {}, 错误: {}", + dmsBillsMaintInstance.getBillsMaintCode(), e.getMessage(), e); // 可以考虑记录到失败表,后续补偿处理 } })); diff --git a/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsBillsInspectInstanceMapper.xml b/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsBillsInspectInstanceMapper.xml index 6c7211f..8bc04a3 100644 --- a/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsBillsInspectInstanceMapper.xml +++ b/ruoyi-modules/hwmom-dms/src/main/resources/mapper/dms/DmsBillsInspectInstanceMapper.xml @@ -95,4 +95,46 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" order by dbii.create_time desc + + + + + + +