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_QUANTITATIVE = "2";//定量

@ -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<DmsBillsFaultInstanceVo> billsFaultInstances = dmsBillsFaultInstanceService.queryList(queryBillsFaultInstance);
TableDataInfo<DmsBillsFaultInstanceVo> 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<MultipartFile> files) {
List<String> 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<DmsFaultComponentsParts> parts2 = objectMapper.readValue(parts1, new TypeReference<List<DmsFaultComponentsParts>>() {
});
dmsFaultInstanceActivity.setParts(parts2);
List<String> 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);
}

@ -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<DmsInspectInstanceDetailProject> dmsInspectInstanceDetailProjectList;
}

@ -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;
/**
*

@ -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<DmsInspectInstanceDetailProject> dmsInspectInstanceDetailProjectList;
}

@ -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;
/**
*

@ -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
private Date createTime;
/**
*
*/
private List<LubricationDetail> dmsBillsLubeDetails;
// private List<LubricationDetail> dmsBillsLubeDetails;
private String lubeStatusStr;

@ -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;
/**
*

@ -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<DmsBillsIn
*/
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;
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);
/**

@ -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<DmsRecordInspect> 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<DmsRecordInspect> 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<DmsInspectInstanceDetailProject> 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<DmsInspectInstanceDetailProject> 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<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 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<LubricationDetail> 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<DmsBillsLubeDetail> detailWrapper = JoinWrappers.lambda(DmsBillsLubeDetail.class)
.selectAll(DmsBillsLubeDetail.class)
.eq(DmsBillsLubeDetail::getLubeInstanceId, lubeInstanceId);
List<DmsBillsLubeDetailVo> lubeDetails = dmsBillsLubeDetailMapper.selectJoinList(DmsBillsLubeDetailVo.class, detailWrapper);
/**获取未完成的润滑明细,并且需要排除当前提交完成的润滑明细*/
/**【筛选未完成明细】获取未完成的润滑明细,并且需要排除当前提交完成的润滑明细*/
List<DmsBillsLubeDetailVo> 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<String> 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<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 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);
// 可以考虑记录到失败表,后续补偿处理
}
}));

@ -95,4 +95,46 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
order by dbii.create_time desc
</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>

Loading…
Cancel
Save