refactor(dms): 优化点巡检工单处理逻辑,新增DmsRecordInspect相关,添加润滑工单工作流

- @Slf4j异步记录
- 修改DmsInspectInstanceDetailProject实体类(包括bo vo)部分字段从Long改为BigDecimal
- 生成DmsRecordInspect相关
- 添加润滑工单工作流启动和完成逻辑
master
zch 2 days ago
parent 2b74ae610c
commit df82be7716

@ -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_QUALITATIVE = "1";//定性
public static final String DMS_INSPECT_INSTANCE_PROJECT_PROPERTY_QUANTITATIVE = "2";//定量

@ -239,7 +239,6 @@ public class DmsMobileController extends BaseController {
// @RepeatSubmit // @RepeatSubmit
public AjaxResult getOutsrcInfos() { public AjaxResult getOutsrcInfos() {
DmsBaseOutsourcingInfoBo queryBaseOutsrcInfo = new DmsBaseOutsourcingInfoBo(); DmsBaseOutsourcingInfoBo queryBaseOutsrcInfo = new DmsBaseOutsourcingInfoBo();
//沒有外协状态,用激活状态 //沒有外协状态,用激活状态
// queryBaseOutsrcInfo.setOutsrcStatus(DmsConstants.DMS_BASE_OUTSRC_INFO_STATUS_NROMAL); // queryBaseOutsrcInfo.setOutsrcStatus(DmsConstants.DMS_BASE_OUTSRC_INFO_STATUS_NROMAL);
queryBaseOutsrcInfo.setActiveFlag("1"); queryBaseOutsrcInfo.setActiveFlag("1");
@ -253,7 +252,6 @@ public class DmsMobileController extends BaseController {
outsourcing.setOutsrcName(vo.getOutsourcingName()); outsourcing.setOutsrcName(vo.getOutsourcingName());
outsourcingList.add(outsourcing); outsourcingList.add(outsourcing);
} }
return AjaxResult.success(outsourcingList); return AjaxResult.success(outsourcingList);
} }
@ -325,8 +323,8 @@ public class DmsMobileController extends BaseController {
//TODO:文件存储待测试 //TODO:文件存储待测试
dmsBillsFaultInstance.setFileUrls(fileUrls); dmsBillsFaultInstance.setFileUrls(fileUrls);
dmsBillsFaultInstanceService.insertByBo(dmsBillsFaultInstance); Boolean b = dmsBillsFaultInstanceService.insertByBo(dmsBillsFaultInstance);
return AjaxResult.success(); return AjaxResult.success(b);
} }
@ -338,11 +336,10 @@ public class DmsMobileController extends BaseController {
// @RequiresPermissions("qms:checkrule:list") // @RequiresPermissions("qms:checkrule:list")
@GetMapping("/getBillsFaultInstances") @GetMapping("/getBillsFaultInstances")
@RepeatSubmit @RepeatSubmit
public AjaxResult getBillsFaultInstances() { public TableDataInfo getBillsFaultInstances() {
DmsBillsFaultInstanceBo queryBillsFaultInstance = new DmsBillsFaultInstanceBo(); DmsBillsFaultInstanceBo queryBillsFaultInstance = new DmsBillsFaultInstanceBo();
List<DmsBillsFaultInstanceVo> billsFaultInstances = dmsBillsFaultInstanceService.queryList(queryBillsFaultInstance); List<DmsBillsFaultInstanceVo> billsFaultInstances = dmsBillsFaultInstanceService.queryList(queryBillsFaultInstance);
TableDataInfo<DmsBillsFaultInstanceVo> dataTable = TableDataInfo.build(billsFaultInstances); return TableDataInfo.build(billsFaultInstances);
return AjaxResult.success().put("rows", dataTable.getRows()).put("total", dataTable.getTotal());
} }
/** /**
@ -358,10 +355,8 @@ public class DmsMobileController extends BaseController {
DmsBillsFaultInstanceVo billsFaultInstance = dmsBillsFaultInstanceService.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId); DmsBillsFaultInstanceVo billsFaultInstance = dmsBillsFaultInstanceService.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId);
// 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题 // 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题
DmsBillsFaultInstanceMobile mobileInstance = MapstructUtils.convert(billsFaultInstance, DmsBillsFaultInstanceMobile.class); DmsBillsFaultInstanceMobile mobileInstance = MapstructUtils.convert(billsFaultInstance, DmsBillsFaultInstanceMobile.class);
// 手动格式化时间字段确保PDA客户端兼容性 // 手动格式化时间字段确保PDA客户端兼容性
formatTimeFields(mobileInstance, billsFaultInstance); formatTimeFields(mobileInstance, billsFaultInstance);
return AjaxResult.success(mobileInstance); return AjaxResult.success(mobileInstance);
} }
@ -377,8 +372,8 @@ public class DmsMobileController extends BaseController {
@RequestParam(value = "files" , required = false) List<MultipartFile> files) { @RequestParam(value = "files" , required = false) List<MultipartFile> files) {
List<String> fileUrls = handleFileUploads(files); List<String> fileUrls = handleFileUploads(files);
dmsFaultInstanceActivity.setFileUrls(fileUrls); dmsFaultInstanceActivity.setFileUrls(fileUrls);
dmsBillsFaultInstanceService.updateDmsFaultInstanceActivity(dmsFaultInstanceActivity); int i = dmsBillsFaultInstanceService.updateDmsFaultInstanceActivity(dmsFaultInstanceActivity);
return AjaxResult.success(); return AjaxResult.success(i);
} }
/** /**
@ -394,10 +389,8 @@ public class DmsMobileController extends BaseController {
DmsBillsFaultInstanceVo billsFaultInstance = dmsBillsFaultInstanceService.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId); DmsBillsFaultInstanceVo billsFaultInstance = dmsBillsFaultInstanceService.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId);
// 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题 // 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题
DmsBillsFaultInstanceMobile mobileInstance = MapstructUtils.convert(billsFaultInstance, DmsBillsFaultInstanceMobile.class); DmsBillsFaultInstanceMobile mobileInstance = MapstructUtils.convert(billsFaultInstance, DmsBillsFaultInstanceMobile.class);
// 手动格式化时间字段确保PDA客户端兼容性 // 手动格式化时间字段确保PDA客户端兼容性
formatTimeFields(mobileInstance, billsFaultInstance); formatTimeFields(mobileInstance, billsFaultInstance);
return AjaxResult.success(mobileInstance); return AjaxResult.success(mobileInstance);
} }
@ -411,7 +404,6 @@ public class DmsMobileController extends BaseController {
@GetMapping("/scanDevice4Repair") @GetMapping("/scanDevice4Repair")
@RepeatSubmit @RepeatSubmit
public AjaxResult scanDevice4Repair(@Validated DmsBillsFaultInstanceScanBo dmsBillsFaultInstanceScan) { public AjaxResult scanDevice4Repair(@Validated DmsBillsFaultInstanceScanBo dmsBillsFaultInstanceScan) {
//FIXME:返回从void改为long
return AjaxResult.success(dmsBillsFaultInstanceService.scanDevice4Repair(dmsBillsFaultInstanceScan)); return AjaxResult.success(dmsBillsFaultInstanceService.scanDevice4Repair(dmsBillsFaultInstanceScan));
} }
@ -424,8 +416,8 @@ public class DmsMobileController extends BaseController {
@PostMapping("/startRepair") @PostMapping("/startRepair")
@RepeatSubmit @RepeatSubmit
public AjaxResult startRepair(@RequestBody DmsFaultInstanceActivityBo dmsFaultInstanceActivity) { public AjaxResult startRepair(@RequestBody DmsFaultInstanceActivityBo dmsFaultInstanceActivity) {
dmsBillsFaultInstanceService.startRepair(dmsFaultInstanceActivity); int i = dmsBillsFaultInstanceService.startRepair(dmsFaultInstanceActivity);
return AjaxResult.success(); return AjaxResult.success(i);
} }
/** /**
@ -444,12 +436,11 @@ public class DmsMobileController extends BaseController {
List<DmsFaultComponentsParts> parts2 = objectMapper.readValue(parts1, new TypeReference<List<DmsFaultComponentsParts>>() { List<DmsFaultComponentsParts> parts2 = objectMapper.readValue(parts1, new TypeReference<List<DmsFaultComponentsParts>>() {
}); });
dmsFaultInstanceActivity.setParts(parts2); dmsFaultInstanceActivity.setParts(parts2);
List<String> fileUrls = handleFileUploads(files); List<String> fileUrls = handleFileUploads(files);
dmsFaultInstanceActivity.setFileUrls(fileUrls); dmsFaultInstanceActivity.setFileUrls(fileUrls);
//FIXME:关于工作流相关的本页代码以及调用方法都需测试完善修改 //FIXME:关于工作流相关的本页代码以及调用方法都需测试完善修改
dmsBillsFaultInstanceService.completeRepair(dmsFaultInstanceActivity); int i = dmsBillsFaultInstanceService.completeRepair(dmsFaultInstanceActivity);
return AjaxResult.success(); return AjaxResult.success(i);
} }
@ -476,19 +467,19 @@ public class DmsMobileController extends BaseController {
@GetMapping("/scanInspectInstanceDetail") @GetMapping("/scanInspectInstanceDetail")
@RepeatSubmit @RepeatSubmit
public AjaxResult scanInspectInstanceDetail(@Validated DmsBillsInspectInstanceScanBo dmsBillsInspectInstanceScan) { public AjaxResult scanInspectInstanceDetail(@Validated DmsBillsInspectInstanceScanBo dmsBillsInspectInstanceScan) {
dmsBillsInspectInstanceService.scanInspectInstanceDetail(dmsBillsInspectInstanceScan); DmsInspectInstanceDetailVo dmsInspectInstanceDetailVo = dmsBillsInspectInstanceService.scanInspectInstanceDetail(dmsBillsInspectInstanceScan);
return AjaxResult.success(); DmsInspectInstanceDetailMobile dmsInspectInstanceDetailMobile = MapstructUtils.convert(dmsInspectInstanceDetailVo, DmsInspectInstanceDetailMobile.class);
return AjaxResult.success(dmsInspectInstanceDetailMobile);
} }
/** /**
* *
*/ */
// @Log(title = "点巡检工单明细", businessType = BusinessType.INSERT) @Log(title = "点巡检工单明细", businessType = BusinessType.INSERT)
// @PostMapping("/saveInspectInstanceDetail") @PostMapping("/saveInspectInstanceDetail")
// public R saveInspectInstanceDetail(@RequestBody DmsInspectInstanceDetailBo dmsInspectInstanceDetail) { public AjaxResult saveInspectInstanceDetail(@RequestBody DmsInspectInstanceDetailBo dmsInspectInstanceDetail) {
// return R.ok(dmsBillsInspectInstanceService.updateDmsInspectInstanceDetail(dmsInspectInstanceDetail)); return AjaxResult.success(dmsBillsInspectInstanceService.updateDmsInspectInstanceDetail(dmsInspectInstanceDetail));
// }
// }
/** /**
@ -503,10 +494,8 @@ public class DmsMobileController extends BaseController {
DmsBillsMaintInstanceVo newestMaintInstance = dmsBillsMaintInstanceService.getNewestBillsMaintInstance(dmsBillsMaintInstance); DmsBillsMaintInstanceVo newestMaintInstance = dmsBillsMaintInstanceService.getNewestBillsMaintInstance(dmsBillsMaintInstance);
// 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题 // 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题
DmsBillsMaintInstanceMobile mobileInstance = MapstructUtils.convert(newestMaintInstance, DmsBillsMaintInstanceMobile.class); DmsBillsMaintInstanceMobile mobileInstance = MapstructUtils.convert(newestMaintInstance, DmsBillsMaintInstanceMobile.class);
// 手动格式化时间字段确保PDA客户端兼容性 // 手动格式化时间字段确保PDA客户端兼容性
// formatMaintTimeFields(mobileInstance, newestMaintInstance); // formatMaintTimeFields(mobileInstance, newestMaintInstance);
return AjaxResult.success(mobileInstance); return AjaxResult.success(mobileInstance);
} }
@ -531,8 +520,8 @@ public class DmsMobileController extends BaseController {
@PostMapping("/completeMaint") @PostMapping("/completeMaint")
@RepeatSubmit @RepeatSubmit
public AjaxResult completeMaint(@RequestBody DmsBillsMaintDetail dmsBillsMaintDetail) { public AjaxResult completeMaint(@RequestBody DmsBillsMaintDetail dmsBillsMaintDetail) {
dmsBillsMaintInstanceService.completeMaint(dmsBillsMaintDetail); int i = dmsBillsMaintInstanceService.completeMaint(dmsBillsMaintDetail);
return AjaxResult.success(); return AjaxResult.success(i);
} }
@ -548,10 +537,8 @@ public class DmsMobileController extends BaseController {
DmsBillsLubeInstanceVo newestLubeInstance = dmsBillsLubeInstanceService.getNewestBillsLubeInstance(dmsBillsLubeInstance); DmsBillsLubeInstanceVo newestLubeInstance = dmsBillsLubeInstanceService.getNewestBillsLubeInstance(dmsBillsLubeInstance);
// 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题 // 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题
DmsBillsLubeInstanceMobile mobileInstance = MapstructUtils.convert(newestLubeInstance, DmsBillsLubeInstanceMobile.class); DmsBillsLubeInstanceMobile mobileInstance = MapstructUtils.convert(newestLubeInstance, DmsBillsLubeInstanceMobile.class);
// 注意润滑Mobile类中的时间字段已被注释无需格式化 // 注意润滑Mobile类中的时间字段已被注释无需格式化
// 如果将来启用时间字段,请添加相应的格式化方法 // 如果将来启用时间字段,请添加相应的格式化方法
return AjaxResult.success(mobileInstance); return AjaxResult.success(mobileInstance);
} }
@ -563,9 +550,8 @@ public class DmsMobileController extends BaseController {
@PostMapping("/startLube") @PostMapping("/startLube")
@RepeatSubmit @RepeatSubmit
public AjaxResult startLube(@RequestBody DmsBillsLubeDetailBo dmsBillsLubeDetail) { public AjaxResult startLube(@RequestBody DmsBillsLubeDetailBo dmsBillsLubeDetail) {
Boolean b = dmsBillsLubeInstanceService.startLube(dmsBillsLubeDetail);
dmsBillsLubeInstanceService.startLube(dmsBillsLubeDetail); return AjaxResult.success(b);
return AjaxResult.success();
} }
/** /**
@ -576,8 +562,8 @@ public class DmsMobileController extends BaseController {
@PostMapping("/completeLube") @PostMapping("/completeLube")
@RepeatSubmit @RepeatSubmit
public AjaxResult completeLube(@RequestBody DmsBillsLubeDetailBo dmsBillsLubeDetail) { public AjaxResult completeLube(@RequestBody DmsBillsLubeDetailBo dmsBillsLubeDetail) {
dmsBillsLubeInstanceService.completeLube(dmsBillsLubeDetail); int i = dmsBillsLubeInstanceService.completeLube(dmsBillsLubeDetail);
return AjaxResult.success(); return AjaxResult.success(i);
} }

@ -1,6 +1,7 @@
package org.dromara.dms.domain; package org.dromara.dms.domain;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
@ -9,6 +10,7 @@ import org.dromara.common.tenant.core.TenantEntity;
import java.io.Serial; import java.io.Serial;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* dms_inspect_instance_detail * dms_inspect_instance_detail
@ -85,5 +87,7 @@ public class DmsInspectInstanceDetail extends TenantEntity {
*/ */
private String remark; private String remark;
@TableField(exist = false)
private List<DmsInspectInstanceDetailProject> dmsInspectInstanceDetailProjectList;
} }

@ -6,6 +6,7 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serial; import java.io.Serial;
import java.math.BigDecimal;
/** /**
* dms_inspect_instance_detail_project * 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;
/** /**
* *

@ -5,8 +5,10 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import org.dromara.common.mybatis.core.domain.BaseEntity; import org.dromara.common.mybatis.core.domain.BaseEntity;
import org.dromara.dms.domain.DmsInspectInstanceDetail; import org.dromara.dms.domain.DmsInspectInstanceDetail;
import org.dromara.dms.domain.DmsInspectInstanceDetailProject;
import java.util.Date; import java.util.Date;
import java.util.List;
/** /**
* dms_inspect_instance_detail * dms_inspect_instance_detail
@ -96,4 +98,6 @@ public class DmsInspectInstanceDetailBo extends BaseEntity {
*/ */
private Long deviceId;////表结构中是machine_id private Long deviceId;////表结构中是machine_id
private List<DmsInspectInstanceDetailProject> dmsInspectInstanceDetailProjectList;
} }

@ -9,6 +9,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import java.math.BigDecimal;
/** /**
* dms_inspect_instance_detail_project * 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;
/** /**
* *

@ -129,7 +129,7 @@ public class DmsBillsLubeInstanceVo implements Serializable {
/** /**
* *
*/ */
private List<DmsBillsLubeDetailVo> dmsBillsLubeDetailList; private List<LubricationDetail> dmsBillsLubeDetailList;
/** /**
@ -144,10 +144,7 @@ public class DmsBillsLubeInstanceVo implements Serializable {
@ExcelIgnore @ExcelIgnore
private Date createTime; private Date createTime;
/** // private List<LubricationDetail> dmsBillsLubeDetails;
*
*/
private List<LubricationDetail> dmsBillsLubeDetails;
private String lubeStatusStr; private String lubeStatusStr;

@ -10,6 +10,7 @@ import lombok.Data;
import java.io.Serial; import java.io.Serial;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
@ -57,7 +58,7 @@ public class DmsInspectInstanceDetailProjectVo implements Serializable {
* , * ,
*/ */
@ExcelProperty(value = "巡检结果,具体值") @ExcelProperty(value = "巡检结果,具体值")
private Long inspectProjectResult; private BigDecimal inspectProjectResult;
/** /**
* *
@ -69,7 +70,7 @@ public class DmsInspectInstanceDetailProjectVo implements Serializable {
* () * ()
*/ */
@ExcelProperty(value = "标准值(冗余字段)") @ExcelProperty(value = "标准值(冗余字段)")
private Long defValue; private BigDecimal defValue;
/** /**
* *
@ -88,13 +89,13 @@ public class DmsInspectInstanceDetailProjectVo implements Serializable {
* *
*/ */
@ExcelProperty(value = "上差值,检验时从检验项目复制过来的值") @ExcelProperty(value = "上差值,检验时从检验项目复制过来的值")
private Long upLimit; private BigDecimal upLimit;
/** /**
* *
*/ */
@ExcelProperty(value = "下差值,检验时从检验项目复制过来的值") @ExcelProperty(value = "下差值,检验时从检验项目复制过来的值")
private Long lowLimit; private BigDecimal lowLimit;
/** /**
* *

@ -1,7 +1,9 @@
package org.dromara.dms.mapper; package org.dromara.dms.mapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus; import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.dms.domain.DmsBillsInspectInstance; import org.dromara.dms.domain.DmsBillsInspectInstance;
import org.dromara.dms.domain.DmsRecordInspect;
import org.dromara.dms.domain.bo.DmsBillsInspectInstanceBo; import org.dromara.dms.domain.bo.DmsBillsInspectInstanceBo;
import org.dromara.dms.domain.vo.DmsBillsInspectInstanceVo; import org.dromara.dms.domain.vo.DmsBillsInspectInstanceVo;
@ -38,5 +40,9 @@ public interface DmsBillsInspectInstanceMapper extends BaseMapperPlus<DmsBillsIn
*/ */
public DmsBillsInspectInstanceVo selectNewestDmsBillsInspectInstance(DmsBillsInspectInstanceBo dmsBillsInspectInstanceBo); public DmsBillsInspectInstanceVo selectNewestDmsBillsInspectInstance(DmsBillsInspectInstanceBo dmsBillsInspectInstanceBo);
DmsRecordInspect selectRecord(@Param("instanceDetailId") Long instanceDetailId);
List<DmsRecordInspect> selectRecordByInstainceId(@Param("inspectInstanceId") Long inspectInstanceId);
int selectUnCompletedInstance(@Param("inspectInstanceId") Long inspectInstanceId);
} }

@ -1,13 +1,11 @@
package org.dromara.dms.service; package org.dromara.dms.service;
import org.dromara.dms.domain.DmsBillsInspectInstance; import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.dms.domain.DmsInspectInstanceDetail; 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.DmsBillsInspectInstanceScanBo;
import org.dromara.dms.domain.bo.DmsInspectInstanceDetailBo; import org.dromara.dms.domain.bo.DmsInspectInstanceDetailBo;
import org.dromara.dms.domain.vo.DmsBillsInspectInstanceVo; 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 org.dromara.dms.domain.vo.DmsInspectInstanceDetailVo;
import java.util.Collection; import java.util.Collection;
@ -85,7 +83,7 @@ public interface IDmsBillsInspectInstanceService {
* @param dmsInspectInstanceDetail * @param dmsInspectInstanceDetail
* @return * @return
*/ */
// int updateDmsInspectInstanceDetail(DmsInspectInstanceDetailBo dmsInspectInstanceDetail); int updateDmsInspectInstanceDetail(DmsInspectInstanceDetailBo dmsInspectInstanceDetail);
/** /**

@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.yulichang.toolkit.JoinWrappers; import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import lombok.RequiredArgsConstructor; 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.constant.DmsConstants;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils; 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.bo.DmsInspectInstanceDetailBo;
import org.dromara.dms.domain.vo.DmsBillsInspectInstanceVo; import org.dromara.dms.domain.vo.DmsBillsInspectInstanceVo;
import org.dromara.dms.domain.vo.DmsInspectInstanceDetailVo; import org.dromara.dms.domain.vo.DmsInspectInstanceDetailVo;
import org.dromara.dms.mapper.DmsBillsInspectInstanceMapper; import org.dromara.dms.mapper.*;
import org.dromara.dms.mapper.DmsInspectInstanceDetailMapper;
import org.dromara.dms.mapper.DmsInspectInstanceDetailProjectMapper;
import org.dromara.dms.mapper.DmsPlanInspectMapper;
import org.dromara.dms.service.IDmsBillsInspectInstanceService; import org.dromara.dms.service.IDmsBillsInspectInstanceService;
import org.dromara.workflow.api.RemoteWorkflowService;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.Collection; import java.math.BigDecimal;
import java.util.Date; import java.util.*;
import java.util.List;
import java.util.Map;
/** /**
* Service * Service
@ -36,6 +34,7 @@ import java.util.Map;
* @author zch * @author zch
* @date 2025-03-31 * @date 2025-03-31
*/ */
@Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInstanceService { public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInstanceService {
@ -50,6 +49,10 @@ public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInsta
private final DmsInspectInstanceDetailProjectMapper dmsInspectInstanceDetailPrjectMapper; 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 * @return
*/ */
// @Override @Override
// @Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
// public int updateDmsInspectInstanceDetail(DmsInspectInstanceDetailBo dmsInspectInstanceDetail) { public int updateDmsInspectInstanceDetail(DmsInspectInstanceDetailBo dmsInspectInstanceDetail) {
// // 根据instanceDetailId查询记录检查信息 // 根据instanceDetailId查询记录检查信息
// DmsRecordInspect dmsRecordInspect = dmsBillsInspectInstanceMapper.selectRecord(dmsInspectInstanceDetail.getInstanceDetailId()); DmsRecordInspect dmsRecordInspect = dmsBillsInspectInstanceMapper.selectRecord(dmsInspectInstanceDetail.getInstanceDetailId());
// // 根据inspectInstanceId批量查询记录检查信息
// // 根据inspectInstanceId批量查询记录检查信息 List<DmsRecordInspect> recordInspect = dmsBillsInspectInstanceMapper.selectRecordByInstainceId(dmsRecordInspect.getInspectInstanceId());
// List<DmsRecordInspect> recordInspect = dmsBillsInspectInstanceMapper.selectRecordByInstainceId(dmsRecordInspect.getInspectInstanceId()); // 直接将状态设置为3表示完成
//// if (recordInspect!=null&&recordInspect.size()>0){ dmsRecordInspect.setInspectStatus(String.valueOf(3L));
//// // 如果有未完成的检查记录设置状态为2 // 插入记录检查信息
//// dmsRecordInspect.setInspectStatus(2l); int i1 = dmsRecordInspectMapper.insert(dmsRecordInspect);
//// }else { // 查询未完成的检查实例数量
//// // 如果所有检查记录都完成设置状态为3 int count = dmsBillsInspectInstanceMapper.selectUnCompletedInstance(dmsRecordInspect.getInspectInstanceId());
//// dmsRecordInspect.setInspectStatus(3l); // 创建新的检查实例对象
//// } DmsBillsInspectInstanceBo dmsBillsInspectInstance = new DmsBillsInspectInstanceBo();
// // 直接将状态设置为3表示完成 if (count==0||count==1){
// dmsRecordInspect.setInspectStatus(3l); // 如果没有未完成的检查实例设置状态为3
// // 插入记录检查信息 dmsBillsInspectInstance.setInspectStatus("3");
// int i1 = dmsBillsInspectInstanceMapper.insertRecord(dmsRecordInspect); }else{
// // 查询未完成的检查实例数量 // 如果有未完成的检查实例设置状态为2
// int count = dmsBillsInspectInstanceMapper.selectUnCompletedInstance(dmsRecordInspect.getInspectInstanceId()); dmsBillsInspectInstance.setInspectStatus("2");
//// int count1 = dmsBillsInspectInstanceMapper.selectAllInstance(dmsRecordInspect.getInspectInstanceId()); }
// // 创建新的检查实例对象 // 设置检查实例ID
// DmsBillsInspectInstanceBo dmsBillsInspectInstance = new DmsBillsInspectInstanceBo(); dmsBillsInspectInstance.setInspectInstanceId(dmsInspectInstanceDetail.getInspectInstanceId());
// if (count==0||count==1){ // 设置实际结束时间
// // 如果没有未完成的检查实例设置状态为3 dmsBillsInspectInstance.setRealEndTime(new Date());
// dmsBillsInspectInstance.setInspectStatus("3"); // 更新检查实例信息
// }else{ this.updateByBo(dmsBillsInspectInstance);
// // 如果有未完成的检查实例设置状态为2
// dmsBillsInspectInstance.setInspectStatus("2"); // 处理检查实例详情的子项目
// } DmsInspectInstanceDetailBo returnInspectInstanceDetail = handleDmsInspectInstanceDetailProject(dmsInspectInstanceDetail);
// // 设置检查实例ID if (returnInspectInstanceDetail != null) {
// dmsBillsInspectInstance.setInspectInstanceId(dmsInspectInstanceDetail.getInspectInstanceId()); // 更新检查状态和实例详情状态
// // 设置实际结束时间 dmsInspectInstanceDetail.setInspectStatus(returnInspectInstanceDetail.getInspectStatus());
// dmsBillsInspectInstance.setRealEndTime(new Date()); dmsInspectInstanceDetail.setInstanceDetailStatus(returnInspectInstanceDetail.getInstanceDetailStatus());
// // 更新检查实例信息 // 设置子项目列表
// dmsBillsInspectInstanceService.updateByBo(dmsBillsInspectInstance); dmsInspectInstanceDetail.setDmsInspectInstanceDetailProjectList(returnInspectInstanceDetail.getDmsInspectInstanceDetailProjectList());
// // 获取当前登录用户的信息 // 批量更新子项目信息
// String userName = LoginHelper.getLoginUser()==null ? LoginHelper.getUsername() :LoginHelper.getLoginUser().getNickname(); batchUpdateDmsInspectInstanceDetailProject(dmsInspectInstanceDetail);
// // 获取当前日期 }
// Date currentDate = new Date();
// // 设置更新时间和更新人 // 转换为实体对象进行更新
// dmsInspectInstanceDetail.setUpdateTime(currentDate); DmsInspectInstanceDetail updateEntity = MapstructUtils.convert(dmsInspectInstanceDetail, DmsInspectInstanceDetail.class);
// dmsInspectInstanceDetail.setUpdateBy(Long.valueOf(userName)); // 返回更新结果
// return dmsInspectInstanceDetailMapper.updateById(updateEntity);
// // 处理检查实例详情的子项目 }
// DmsInspectInstanceDetail returnInspectInstanceDetail = handleDmsInspectInstanceDetailProject(dmsInspectInstanceDetail);
// if (returnInspectInstanceDetail != null) { /**
// // 更新检查状态和实例详情状态 *
// dmsInspectInstanceDetail.setInspectStatus(returnInspectInstanceDetail.getInspectStatus()); *
// dmsInspectInstanceDetail.setInstanceDetailStatus(returnInspectInstanceDetail.getInstanceDetailStatus()); * @param dmsInspectInstanceDetail
// // 设置子项目列表 */
// dmsInspectInstanceDetail.setDmsInspectInstanceDetailProjectList(returnInspectInstanceDetail.getDmsInspectInstanceDetailProjectList()); private void batchUpdateDmsInspectInstanceDetailProject(DmsInspectInstanceDetailBo dmsInspectInstanceDetail) {
// // 批量更新子项目信息 // 【获取项目列表】获取需要更新的项目列表
// batchUpdateDmsInspectInstanceDetailProject(dmsInspectInstanceDetail); List<DmsInspectInstanceDetailProject> projectList = dmsInspectInstanceDetail.getDmsInspectInstanceDetailProjectList();
// }
// // 【项目列表校验】如果项目列表不为空且不为空列表,进行批量更新
// // 返回更新结果 if (StringUtils.isNotNull(projectList) && !projectList.isEmpty()) {
// return dmsInspectInstanceDetailMapper.update(dmsInspectInstanceDetail); // 【遍历更新项目】逐个更新每个巡检项目的状态
// } for (DmsInspectInstanceDetailProject project : projectList) {
// 【项目状态更新】只更新有ID的项目已存在的项目
if (project.getInstanceDetailProjectId() != null) {
// 使用Mapper直接更新项目状态信息
dmsInspectInstanceDetailPrjectMapper.updateById(project);
}
}
}
}
/** /**
@ -300,7 +311,7 @@ public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInsta
*/ */
@Override @Override
public DmsInspectInstanceDetailVo scanInspectInstanceDetail(DmsBillsInspectInstanceScanBo dmsBillsInspectInstanceScan) { public DmsInspectInstanceDetailVo scanInspectInstanceDetail(DmsBillsInspectInstanceScanBo dmsBillsInspectInstanceScan) {
// 根据检查实例ID和设备编码查询检查实例详细信息 // 根据检查实例ID和设备编码查询检查工单详细信息
DmsInspectInstanceDetailVo dmsInspectInstanceDetail = dmsInspectInstanceDetailMapper.selectDmsInspectInstanceDetailByUI(dmsBillsInspectInstanceScan.getInspectInstanceId(), DmsInspectInstanceDetailVo dmsInspectInstanceDetail = dmsInspectInstanceDetailMapper.selectDmsInspectInstanceDetailByUI(dmsBillsInspectInstanceScan.getInspectInstanceId(),
dmsBillsInspectInstanceScan.getDeviceCode()); dmsBillsInspectInstanceScan.getDeviceCode());
// 如果查询结果为空,抛出异常提示无此设备的检查工单 // 如果查询结果为空,抛出异常提示无此设备的检查工单
@ -317,14 +328,14 @@ public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInsta
Long projectId = dmsInspectInstanceDetailPrjectMapper.selectProjectByStandardId(dmsInspectInstanceDetail.getInspectStandard()); Long projectId = dmsInspectInstanceDetailPrjectMapper.selectProjectByStandardId(dmsInspectInstanceDetail.getInspectStandard());
// 设置检查项目ID // 设置检查项目ID
queryInspectInstanceDetailProject.setInspectProjectId(projectId); queryInspectInstanceDetailProject.setInspectProjectId(projectId);
// 设置检查实例详情ID // 设置检查工单明细ID
queryInspectInstanceDetailProject.setInstanceDetailId(dmsInspectInstanceDetail.getInstanceDetailId()); queryInspectInstanceDetailProject.setInstanceDetailId(dmsInspectInstanceDetail.getInstanceDetailId());
// 查询检查实例详细项目列表 // 查询检查工单详细项目列表
List<DmsInspectInstanceDetailProject> dmsInspectInstanceDetailProjects = dmsInspectInstanceDetailPrjectMapper.selectDmsInspectInstanceDetailProjectJoinList(queryInspectInstanceDetailProject); List<DmsInspectInstanceDetailProject> dmsInspectInstanceDetailProjects = dmsInspectInstanceDetailPrjectMapper.selectDmsInspectInstanceDetailProjectJoinList(queryInspectInstanceDetailProject);
// 将查询结果设置到检查实例详情对象中 // 将查询结果设置到检查工单详情对象中
dmsInspectInstanceDetail.setDmsInspectInstanceDetailProjectList(dmsInspectInstanceDetailProjects); dmsInspectInstanceDetail.setDmsInspectInstanceDetailProjectList(dmsInspectInstanceDetailProjects);
// 更新检查实例的开始时间 // 更新检查工单的开始时间
DmsBillsInspectInstanceBo dmsBillsInspectInstance = new DmsBillsInspectInstanceBo(); DmsBillsInspectInstanceBo dmsBillsInspectInstance = new DmsBillsInspectInstanceBo();
// 设置检查实例ID // 设置检查实例ID
dmsBillsInspectInstance.setInspectInstanceId(dmsBillsInspectInstanceScan.getInspectInstanceId()); 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<DmsInspectInstanceDetailProject> inspectInstanceDetailProjectList = dmsInspectInstanceDetail.getDmsInspectInstanceDetailProjectList();
// 【项目列表校验】如果项目列表不为空,进行处理
if (StringUtils.isNotNull(inspectInstanceDetailProjectList)) {
// 【创建返回对象】创建返回的检查实例详情对象
DmsInspectInstanceDetailBo returnInspectInstanceDetail = new DmsInspectInstanceDetailBo();
List<DmsInspectInstanceDetailProject> 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;
}
} }

@ -5,7 +5,10 @@ import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.seata.spring.annotation.GlobalTransactional; import io.seata.spring.annotation.GlobalTransactional;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; 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.constant.DmsConstants;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.DateUtils; 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.dms.service.IDmsBillsLubeInstanceService;
import org.dromara.workflow.api.RemoteWorkflowService; import org.dromara.workflow.api.RemoteWorkflowService;
import org.dromara.workflow.api.domain.RemoteCompleteTask; 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.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.*; import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -43,6 +49,7 @@ import java.util.stream.Collectors;
* @author zch * @author zch
* @date 2025-03-25 * @date 2025-03-25
*/ */
@Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceService { public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceService {
@ -290,7 +297,7 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer
// 设置润滑详情对象的润滑ID // 设置润滑详情对象的润滑ID
queryBillsLubeDetail.setLubeInstanceId(newestBillsLubeInstance.getLubeInstanceId()); queryBillsLubeDetail.setLubeInstanceId(newestBillsLubeInstance.getLubeInstanceId());
List<LubricationDetail> dmsBillsLubeDetails = dmsBillsLubeDetailMapper.selectDmsBillsLubeDetailJoinList(queryBillsLubeDetail); List<LubricationDetail> dmsBillsLubeDetails = dmsBillsLubeDetailMapper.selectDmsBillsLubeDetailJoinList(queryBillsLubeDetail);
newestBillsLubeInstance.setDmsBillsLubeDetails(dmsBillsLubeDetails); newestBillsLubeInstance.setDmsBillsLubeDetailList(dmsBillsLubeDetails);
} }
return newestBillsLubeInstance; return newestBillsLubeInstance;
@ -315,8 +322,6 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
String userName = LoginHelper.getLoginUser()==null ? LoginHelper.getUsername() :LoginHelper.getLoginUser().getNickname(); String userName = LoginHelper.getLoginUser()==null ? LoginHelper.getUsername() :LoginHelper.getLoginUser().getNickname();
// 获取润滑状态,如果为空则设置为待润滑状态 // 获取润滑状态,如果为空则设置为待润滑状态
String lubeStatus = StringUtils.isEmpty(dmsBillsLubeInstance.getLubeStatus()) ? String lubeStatus = StringUtils.isEmpty(dmsBillsLubeInstance.getLubeStatus()) ?
DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_TO_LUBE : 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.setLubeInstanceId(dmsBillsLubeInstance.getLubeInstanceId());
updateInstance.setLubeStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_LUBING); updateInstance.setLubeStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_LUBING);
updateInstance.setRealBeginTime(currentDate); 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.setBeginTime(currentDate);
bo.setMaintStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_LUBING); 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 { } else {
// 润滑中状态只需更新润滑工单明细 // 润滑中状态只需更新润滑工单明细
//bo.setUpdateBy(userId); //bo.setUpdateBy(userId);
dmsBillsLubeDetailMapper.updateById(MapstructUtils.convert(bo, DmsBillsLubeDetail.class)); int i = dmsBillsLubeDetailMapper.updateById(MapstructUtils.convert(bo, DmsBillsLubeDetail.class));
} }
return true; return true;
@ -364,21 +400,11 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer
// 根据润滑工单ID查询润滑实例信息 // 根据润滑工单ID查询润滑实例信息
DmsBillsLubeInstanceVo dmsBillsLubeInstance = this.queryById(lubeInstanceId); 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()) ? String lubeStatus = StringUtils.isEmpty(dmsBillsLubeInstance.getLubeStatus()) ?
DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_TO_LUBE : dmsBillsLubeInstance.getLubeStatus(); DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_TO_LUBE : dmsBillsLubeInstance.getLubeStatus();
// 验证润滑状态 // 【状态验证】验证润滑状态
if (lubeStatus.equals(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_COMPLETE)) { if (lubeStatus.equals(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_COMPLETE)) {
throw new ServiceException("已经润滑完成"); throw new ServiceException("已经润滑完成");
} }
@ -391,14 +417,14 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer
Date currentDate = DateUtils.getNowDate(); Date currentDate = DateUtils.getNowDate();
Long userId = LoginHelper.getUserId(); Long userId = LoginHelper.getUserId();
// 查询所有相关的润滑明细 // 【查询相关明细】查询所有相关的润滑明细
MPJLambdaWrapper<DmsBillsLubeDetail> detailWrapper = JoinWrappers.lambda(DmsBillsLubeDetail.class) MPJLambdaWrapper<DmsBillsLubeDetail> detailWrapper = JoinWrappers.lambda(DmsBillsLubeDetail.class)
.selectAll(DmsBillsLubeDetail.class) .selectAll(DmsBillsLubeDetail.class)
.eq(DmsBillsLubeDetail::getLubeInstanceId, lubeInstanceId); .eq(DmsBillsLubeDetail::getLubeInstanceId, lubeInstanceId);
List<DmsBillsLubeDetailVo> lubeDetails = dmsBillsLubeDetailMapper.selectJoinList(DmsBillsLubeDetailVo.class, detailWrapper); List<DmsBillsLubeDetailVo> lubeDetails = dmsBillsLubeDetailMapper.selectJoinList(DmsBillsLubeDetailVo.class, detailWrapper);
/**获取未完成的润滑明细,并且需要排除当前提交完成的润滑明细*/ /**【筛选未完成明细】获取未完成的润滑明细,并且需要排除当前提交完成的润滑明细*/
List<DmsBillsLubeDetailVo> inCompleteLubeDetails = lubeDetails.stream() List<DmsBillsLubeDetailVo> inCompleteLubeDetails = lubeDetails.stream()
.filter(lubeDetail -> !lubeDetail.getBillsLubeDetailId().equals(bo.getBillsLubeDetailId()) .filter(lubeDetail -> !lubeDetail.getBillsLubeDetailId().equals(bo.getBillsLubeDetailId())
&& (lubeDetail.getMaintStatus() == null && (lubeDetail.getMaintStatus() == null
@ -407,17 +433,35 @@ public class DmsBillsLubeInstanceServiceImpl implements IDmsBillsLubeInstanceSer
|| lubeDetail.getMaintStatus().equals(Long.valueOf(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_LUBING)))) || lubeDetail.getMaintStatus().equals(Long.valueOf(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_LUBING))))
.collect(Collectors.toList()); .collect(Collectors.toList());
/**如果已经没有未完成的,则需要将工单修改成已完成,并更新结束时间*/ /**【整体完成处理】如果已经没有未完成的,则需要将工单修改成已完成,并完成工作流*/
if (inCompleteLubeDetails == null || inCompleteLubeDetails.isEmpty()) { if (inCompleteLubeDetails == null || inCompleteLubeDetails.isEmpty()) {
DmsBillsLubeInstanceBo updateInstance = new DmsBillsLubeInstanceBo(); DmsBillsLubeInstanceBo updateInstance = new DmsBillsLubeInstanceBo();
updateInstance.setLubeInstanceId(lubeInstanceId); updateInstance.setLubeInstanceId(lubeInstanceId);
updateInstance.setLubeStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_COMPLETE); updateInstance.setLubeStatus(DmsConstants.DMS_BILLS_LUBE_INSTANCE_STATUS_COMPLETE);
updateInstance.setRealEndTime(currentDate); 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<String> messageTypes = new ArrayList<>();
messageTypes.add("system"); // 系统消息
remoteCompleteTask.setMessageType(messageTypes);
// 完成工作流任务
boolean taskCompleted = remoteWorkflowService.completeTask(remoteCompleteTask);
if (!taskCompleted) {
log.error("润滑工作流完成失败taskId: {}", taskId);
}
}
// 更新润滑工单状态
this.updateByBo(updateInstance); this.updateByBo(updateInstance);
} }
// 更新润滑明细状态为已完成 // 【更新明细状态】更新润滑明细状态为已完成
bo.setEndTime(currentDate); bo.setEndTime(currentDate);
//bo.setUpdateBy(userId); //bo.setUpdateBy(userId);
bo.setMaintStatus(String.valueOf(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_COMPLETE)); 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; 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<String> messageTypes = new ArrayList<>();
messageTypes.add("system"); // 系统消息
remoteCompleteTask.setMessageType(messageTypes);
// 【执行任务完成】推进工作流到下一步
boolean taskCompleted = remoteWorkflowService.completeTask(remoteCompleteTask);
if (!taskCompleted) {
// 工作流推进失败,记录日志但不抛异常(避免影响主流程)
log.error("润滑工作流自动推进失败taskId: {}", taskId);
return false;
}
return taskCompleted;
}
} }

@ -5,6 +5,7 @@ import com.github.yulichang.toolkit.JoinWrappers;
import com.github.yulichang.wrapper.MPJLambdaWrapper; import com.github.yulichang.wrapper.MPJLambdaWrapper;
import io.seata.spring.annotation.GlobalTransactional; import io.seata.spring.annotation.GlobalTransactional;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.dubbo.config.annotation.DubboReference; import org.apache.dubbo.config.annotation.DubboReference;
import com.alibaba.ttl.TtlRunnable; import com.alibaba.ttl.TtlRunnable;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
@ -48,6 +49,7 @@ import java.util.stream.Collectors;
* @author zch * @author zch
* @date 2025-03-31 * @date 2025-03-31
*/ */
@Slf4j
@RequiredArgsConstructor @RequiredArgsConstructor
@Service @Service
public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceService { public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceService {
@ -350,7 +352,8 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
updateWorkFlow(dmsBillsMaintInstance, taskId); updateWorkFlow(dmsBillsMaintInstance, taskId);
} catch (Exception e) { } catch (Exception e) {
// 简单记录错误,不影响主流程 // 简单记录错误,不影响主流程
System.err.println("异步更新工作流失败getBillsMaintCode: " + dmsBillsMaintInstance.getBillsMaintCode() + ", 错误: " + e.getMessage()); log.error("异步更新保养工作流失败getBillsMaintCode: {}, 错误: {}",
dmsBillsMaintInstance.getBillsMaintCode(), e.getMessage(), e);
// 可以考虑记录到失败表,后续补偿处理 // 可以考虑记录到失败表,后续补偿处理
} }
})); }));

@ -95,4 +95,46 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by dbii.create_time desc order by dbii.create_time desc
</select> </select>
<select id="selectRecord" resultType="org.dromara.dms.domain.DmsRecordInspect" parameterType="java.lang.Long">
select
x.inspect_instance_id,
c.plan_inspect_code bills_inspect_code,
c.inspect_type ,
c.device_amount ,
a.plan_begin_time ,
a.plan_end_time ,
a.real_begin_time ,
a.real_end_time ,
b.inspect_route_id inspect_route_id ,
c.performer ,
x.instance_detail_status inspect_status,
c.remark
from
dms_inspect_instance_detail x
left join dms_bills_inspect_instance a on
x.inspect_instance_id = a.inspect_instance_id
left join dms_base_inspect_route b on
a.inspect_route_id = b.inspect_route_id
left join dms_plan_inspect c on
a.plan_inspect_id = c.plan_inspect_id
where
x.instance_detail_id = #{instanceDetailId}
</select>
<select id="selectRecordByInstainceId" resultType="org.dromara.dms.domain.DmsRecordInspect"
parameterType="java.lang.Long">
select * from dms_record_inspect where inspect_instance_id = #{inspectInstanceId} and inspect_status != 3
</select>
<select id="selectUnCompletedInstance" resultType="java.lang.Integer">
select
count(1)
from
dms_inspect_instance_detail x
where
x.inspect_instance_id = #{inspectInstanceId}
and instance_detail_status != 3
</select>
</mapper> </mapper>

Loading…
Cancel
Save