change(dms): 修改PDA接口返回对象

- 新增 DmsBillsFaultInstanceMobile、DmsBillsInspectInstanceMobile、DmsBillsLubeInstanceMobile 和 DmsBillsMaintInstanceMobile 类
- 使用 MapstructUtils 进行对象转换,提高性能
- 优化 SQL 查询
- 调整字段类型,确保与数据库一致
master
zch 4 days ago
parent f82c93b424
commit 3453b72363

@ -7,6 +7,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.MapstructUtils;
import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType;
@ -15,8 +16,7 @@ import org.dromara.common.web.core.BaseController;
import org.dromara.dms.domain.DmsBillsMaintDetail;
import org.dromara.dms.domain.DmsFaultComponentsParts;
import org.dromara.dms.domain.bo.*;
import org.dromara.dms.domain.mobile.DeviceBeen;
import org.dromara.dms.domain.mobile.Outsourcing;
import org.dromara.dms.domain.mobile.*;
import org.dromara.dms.domain.vo.*;
import org.dromara.dms.service.*;
import org.dromara.resource.api.RemoteFileService;
@ -254,10 +254,12 @@ public class DmsMobileController extends BaseController {
// @RequiresPermissions("qms:checkrule:list")
@GetMapping("/getBillsFaultInstanceByRepairInstanceId/{repairInstanceId}")
@RepeatSubmit
public R<DmsBillsFaultInstanceVo> getBillsFaultInstanceByRepairInstanceId(@PathVariable("repairInstanceId") Long repairInstanceId) {
public R<DmsBillsFaultInstanceMobile> getBillsFaultInstanceByRepairInstanceId(@PathVariable("repairInstanceId") Long repairInstanceId) {
//fixme图片地址完整路径IP
DmsBillsFaultInstanceVo billsFaultInstance = dmsBillsFaultInstanceService.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId);
return R.ok(billsFaultInstance);
// 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题
DmsBillsFaultInstanceMobile mobileInstance = MapstructUtils.convert(billsFaultInstance, DmsBillsFaultInstanceMobile.class);
return R.ok(mobileInstance);
}
@ -283,9 +285,11 @@ public class DmsMobileController extends BaseController {
// @RequiresPermissions("qms:checkrule:list")
@GetMapping("/getBillsFaultInstance4Repair/{repairInstanceId}")
@RepeatSubmit
public R<DmsBillsFaultInstanceVo> getBillsFaultInstance4Repair(@PathVariable("repairInstanceId") Long repairInstanceId) {
public R<DmsBillsFaultInstanceMobile> getBillsFaultInstance4Repair(@PathVariable("repairInstanceId") Long repairInstanceId) {
DmsBillsFaultInstanceVo billsFaultInstance = dmsBillsFaultInstanceService.queryById(repairInstanceId);
return R.ok(billsFaultInstance);
// 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题
DmsBillsFaultInstanceMobile mobileInstance = MapstructUtils.convert(billsFaultInstance, DmsBillsFaultInstanceMobile.class);
return R.ok(mobileInstance);
}
@ -345,9 +349,11 @@ public class DmsMobileController extends BaseController {
// @RequiresPermissions("qms:checkrule:list")
@GetMapping("/getNewestInspectInstance")
@RepeatSubmit
public R<DmsBillsInspectInstanceVo> getNewestInspectInstance(DmsBillsInspectInstanceBo dmsBillsInspectInstance) {
public R<DmsBillsInspectInstanceMobile> getNewestInspectInstance(DmsBillsInspectInstanceBo dmsBillsInspectInstance) {
DmsBillsInspectInstanceVo newestInspectInstance = dmsBillsInspectInstanceService.getNewestBillsInspectInstance(dmsBillsInspectInstance);
return R.ok(newestInspectInstance);
// 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题
DmsBillsInspectInstanceMobile mobileInstance = MapstructUtils.convert(newestInspectInstance, DmsBillsInspectInstanceMobile.class);
return R.ok(mobileInstance);
}
@ -381,9 +387,11 @@ public class DmsMobileController extends BaseController {
// @RequiresPermissions("qms:checkrule:list")
@GetMapping("/getNewestMaintInstance")
// @RepeatSubmit
public R<DmsBillsMaintInstanceVo> getNewestMaintInstance(DmsBillsMaintInstanceBo dmsBillsMaintInstance) {
public R<DmsBillsMaintInstanceMobile> getNewestMaintInstance(DmsBillsMaintInstanceBo dmsBillsMaintInstance) {
DmsBillsMaintInstanceVo newestMaintInstance = dmsBillsMaintInstanceService.getNewestBillsMaintInstance(dmsBillsMaintInstance);
return R.ok(newestMaintInstance);
// 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题
DmsBillsMaintInstanceMobile mobileInstance = MapstructUtils.convert(newestMaintInstance, DmsBillsMaintInstanceMobile.class);
return R.ok(mobileInstance);
}
@ -418,9 +426,11 @@ public class DmsMobileController extends BaseController {
// @RequiresPermissions("qms:checkrule:list")
@GetMapping("/getNewestLubeInstance")
// @RepeatSubmit
public R<DmsBillsLubeInstanceVo> getNewestLubeInstance(DmsBillsLubeInstanceBo dmsBillsLubeInstance) {
public R<DmsBillsLubeInstanceMobile> getNewestLubeInstance(DmsBillsLubeInstanceBo dmsBillsLubeInstance) {
DmsBillsLubeInstanceVo newestLubeInstance = dmsBillsLubeInstanceService.getNewestBillsLubeInstance(dmsBillsLubeInstance);
return R.ok(newestLubeInstance);
// 使用MapstructUtils进行高性能对象转换避免时间字段序列化问题
DmsBillsLubeInstanceMobile mobileInstance = MapstructUtils.convert(newestLubeInstance, DmsBillsLubeInstanceMobile.class);
return R.ok(mobileInstance);
}
/**

@ -7,11 +7,11 @@ import lombok.Data;
@Data
public class DmsBillsInspectInstanceScanBo {
@NotNull(message="点巡检工单ID必须输入")
// @NotNull(message="点巡检工单ID必须输入")
private Long inspectInstanceId;
/** 设备编号 */
@NotBlank(message="设备编号必须输入")
// @NotBlank(message="设备编号必须输入")
private String deviceCode;
}

@ -0,0 +1,238 @@
package org.dromara.dms.domain.mobile;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.dms.domain.DmsFaultComponentsParts;
import org.dromara.dms.domain.DmsInstanceFile;
import org.dromara.dms.domain.vo.DmsBillsFaultInstanceVo;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* dms_bills_fault_instance
*
* @author zch
* @date 2025-04-07
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = DmsBillsFaultInstanceVo.class, reverseConvertGenerate = true)
public class DmsBillsFaultInstanceMobile implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* ;
*/
@ExcelProperty(value = "主键标识;此表不会长期保存")
private Long repairInstanceId;
/**
*
*/
@ExcelProperty(value = "工单编号")
private String billsFaultCode;
/**
* 1 2
*/
@ExcelProperty(value = "工单类型", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "instance_type")
private String instanceType;
/**
* (1 2 3 9)
*/
@ExcelProperty(value = "报修来源类型(1检修 2点检 3巡检 9其他)", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "fault_source_type")
private String faultSourceType;
/**
* ID
*/
@ExcelProperty(value = "报修来源ID", converter = ExcelDictConvert.class)
@ExcelDictFormat(readConverterExp = "预=留字段不显示")
private Long faultSourceId;
/**
* ID,wf_definition_configid
*/
@ExcelProperty(value = "流程定义ID,关联wf_definition_config的id")
private Long wfDefinitionId;
/**
* IDprod_base_machine_infomachine_id
*/
@ExcelProperty(value = "设备ID关联prod_base_machine_info的machine_id")
private Long machineId;
/**
*
*/
@ExcelProperty(value = "申请人")
private String applyUser;
/**
*
*/
@ExcelProperty(value = "申请时间")
private Date applyTime;
/**
*
*/
@ExcelProperty(value = "实际开始时间")
private Date realBeginTime;
/**
*
*/
@ExcelProperty(value = "实际完成时间")
private Date realEndTime;
/**
*
*/
@ExcelProperty(value = "要求完成时间")
private Date requireEndTime;
/**
* 0 1 2
*/
@ExcelProperty(value = "工单状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "bills_status")
private String billsStatus;
/**
*
*/
@ExcelProperty(value = "审批状态")
private String approveStatus;
/**
* 0 1
*/
@ExcelProperty(value = "确认状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "repair_confirm")
private String repairConfirm;
/**
*
*/
@ExcelProperty(value = "确认人")
private String confirmUser;
/**
* 1 0
*/
@ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "active_flag")
private String activeFlag;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
*
*/
private String filePath;//join
private String machineCode;//JOIN
private String machineName;//JOIN
private String machineLocation;//JOIN
private String machineSpec;//JOIN
/**
* ID machine_id
*/
private int deviceId;
/**
* machine_code
*/
private String deviceCode;
/**
* machine_name
*/
private String deviceName;
/**
* machine_location
*/
private String deviceLocation;
/**
* ID machine_type
*
*/
private Long deviceTypeId;
/**
* machine_spec
*/
private String deviceSpec;
/**
* machine_status
* String int
*/
private int deviceStatus;
private String imgUrl;//JOIN
private Long instanceActivityId;//JOIN
private String faultType;//JOIN
private String faultDescription;//JOIN
private String designOperations;//JOIN
private String repairType;//JOIN
private Long outsourcingId;//JOIN
private String processHandleResolution;//JOIN
private List<String> fileUrls;//JOIN
// private List<SysFile> sysFiles;
private List<DmsInstanceFile> dmsInstanceFiles;//JOIN
private List<DmsInstanceFile> dmsInstanceFiles1;//JOIN
private String checkedFault;//JOIN
private String repairContent;//JOIN
private String protectedMethod;//JOIN
private String repairer;//JOIN
private Date confirmTime;//JOIN
private Long componentsPartsId;//JOIN
private List<DmsFaultComponentsParts> parts;//JOIN
}

@ -0,0 +1,131 @@
package org.dromara.dms.domain.mobile;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.dms.domain.vo.DmsBillsInspectInstanceVo;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* dms_bills_inspect_instance
*
* @author zch
* @date 2025-03-31
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = DmsBillsInspectInstanceVo.class, reverseConvertGenerate = true)
public class DmsBillsInspectInstanceMobile implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "主键标识")
private Long inspectInstanceId;
/**
* IDdms_plan_inspectplan_inspect_id
*/
@ExcelProperty(value = "计划ID关联dms_plan_inspect的plan_inspect_id")
private Long planInspectId;
/**
* IDwf_definition_configid
*/
@ExcelProperty(value = "流程定义ID关联wf_definition_config的id")
private Long wfDefinitionId;
/**
* (1 2)
*/
@ExcelProperty(value = "检查类型(1巡检 2点检)", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "inspect_type")
private String inspectType;
/**
* 线IDdms_base_inspect_routeinspect_route_id
*/
@ExcelProperty(value = "巡检线路ID关联dms_base_inspect_route的inspect_route_id")
private Long inspectRouteId;
/**
*
*/
@ExcelProperty(value = "巡检编号")
private String billsInspectCode;
// /**
// * 计划开始时间
// */
// @ExcelProperty(value = "计划开始时间")
// private Date planBeginTime;
//
// /**
// * 计划结束时间;超时报警
// */
// @ExcelProperty(value = "计划结束时间;超时报警")
// private Date planEndTime;
//
// /**
// * 实际开始时间
// */
// @ExcelProperty(value = "实际开始时间")
// private Date realBeginTime;
//
// /**
// * 实际结束时间
// */
// @ExcelProperty(value = "实际结束时间")
// private Date realEndTime;
/**
* 1 2 3
*/
@ExcelProperty(value = "巡检状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "dms_inspect_status")
private String inspectStatus;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
*
*/
private String status;
/**
* 线
*/
private String routeName;
/**
*
*/
private String performer;
/**
* - 使Mobile
*/
private List<DmsInspectInstanceDetailMobile> dmsInspectInstanceDetailList;
private String planInspectCode;
private String inspectStatusStr;
}

@ -0,0 +1,154 @@
package org.dromara.dms.domain.mobile;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.dms.domain.vo.DmsBillsLubeDetailVo;
import org.dromara.dms.domain.vo.DmsBillsLubeInstanceVo;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* dms_bills_lube_instance
*
* @author zch
* @date 2025-03-25
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = DmsBillsLubeInstanceVo.class, reverseConvertGenerate = true)
public class DmsBillsLubeInstanceMobile implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "主键标识")
private Long lubeInstanceId;
/**
* IDdms_plan_lubeplan_lube_id
*/
@ExcelProperty(value = "计划ID关联dms_plan_lube的plan_lube_id")
private Long planLubeId;
/**
*
*/
@ExcelProperty(value = "润滑工单编号")
private String billsLubeCode;
/**
*
*/
@ExcelProperty(value = "润滑组别")
private String lubeGroup;
/**
*
*/
@ExcelProperty(value = "润滑负责人")
private String lubeSupervisor;
/**
* 1 2 3
*/
@ExcelProperty(value = "润滑级别", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "lube_level")
private String lubeLevel;
// /**
// * 计划润滑开始时间
// */
// @ExcelProperty(value = "计划润滑开始时间")
// private Date planBeginTime;
//
// /**
// * 计划润滑完成时间
// */
// @ExcelProperty(value = "计划润滑完成时间")
// private Date planEndTime;
//
// /**
// * 实际润滑开始时间
// */
// @ExcelProperty(value = "实际润滑开始时间")
// private Date realBeginTime;
//
// /**
// * 实际润滑完成时间;超期报警
// */
// @ExcelProperty(value = "实际润滑完成时间;超期报警")
// private Date realEndTime;
/**
* 1 2 3
*/
@ExcelProperty(value = "润滑状态", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "lube_status")
private String lubeStatus;
/**
* 1 0
*/
@ExcelProperty(value = "激活标识", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "active_flag")
private String activeFlag;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
*
*/
private String status;
/**
* IDwf_definition_configid
*/
private Long wfDefinitionId;
/**
*
*/
private String planLubeCode;
/**
*
*/
private List<DmsBillsLubeDetailVo> dmsBillsLubeDetailList;
/**
*
*/
@ExcelIgnore
private Long createBy;
/**
*
*/
@ExcelIgnore
private Date createTime;
/**
*
*/
private List<LubricationDetail> dmsBillsLubeDetails;
private String lubeStatusStr;
}

@ -0,0 +1,146 @@
package org.dromara.dms.domain.mobile;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.dms.domain.DmsBillsMaintDetail;
import org.dromara.dms.domain.vo.DmsBillsMaintInstanceVo;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.List;
/**
* dms_bills_maint_instance
*
* @author zch
* @date 2025-03-31
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = DmsBillsMaintInstanceVo.class, reverseConvertGenerate = true)
public class DmsBillsMaintInstanceMobile implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "主键标识")
private Long maintInstanceId;
/**
* ID,dms_plan_maintplan_maint_id
*/
@ExcelProperty(value = "保养计划ID,关联dms_plan_maint的plan_maint_id")
private Long planMaintId;
/**
* ID,wf_definition_configid
*/
@ExcelProperty(value = "流程定义ID,关联wf_definition_config的id")
private Long wfDefinitionId;
/**
*
*/
@ExcelProperty(value = "保养单号")
private String billsMaintCode;
/**
*
*/
@ExcelProperty(value = "保养组别")
private String maintGroup;
/**
*
*/
@ExcelProperty(value = "保养负责人")
private String maintSupervisor;
/**
* (1 2 3)
*/
@ExcelProperty(value = "保养级别(1日常保养 2月度保养 3年度保养)", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "maint_level")
private Long maintLevel;
// /**
// * 计划保养时间
// */
// @ExcelProperty(value = "计划保养时间")
// private Date planBeginTime;
//
// /**
// * 实际开始时间
// */
// @ExcelProperty(value = "实际开始时间")
// private Date realBeginTime;
//
// /**
// * 计划完成时间;根据计划的时限计算
// */
// @ExcelProperty(value = "计划完成时间;根据计划的时限计算")
// private Date planEndTime;
//
// /**
// * 实际完成时间
// */
// @ExcelProperty(value = "实际完成时间")
// private Date realEndTime;
/**
* (1 2 3)
*/
@ExcelProperty(value = "保养状态(1待保养 2保养中 3已完成)", converter = ExcelDictConvert.class)
@ExcelDictFormat(dictType = "maint_status")
/* private String maintStatus;*/
private Long maintStatus;
/**
*
*/
@ExcelProperty(value = "保养完成率")
private BigDecimal maintCompRate;
/**
*
*/
@ExcelProperty(value = "备注")
private String remark;
/**
*
*/
private String status;
/**
* - PDALong
* selectNewestDmsBillsMaintInstance
* dbmi.wf_definition_id as wf_process_id
*/
private Long wfProcessId;
private String maintStatusStr;
private String planRemark;
private String maintLevelName;
private List<DmsBillsMaintDetail> dmsBillsMaintDetailList;
// private Date createTime;
}

@ -0,0 +1,109 @@
package org.dromara.dms.domain.mobile;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import io.github.linpeilie.annotations.AutoMapper;
import lombok.Data;
import org.dromara.dms.domain.DmsInspectInstanceDetail;
import org.dromara.dms.domain.vo.DmsInspectInstanceDetailVo;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* Mobile - PDA
*
* @author system
* @date 2025-06-21
*/
@Data
@ExcelIgnoreUnannotated
@AutoMapper(target = DmsInspectInstanceDetailVo.class, reverseConvertGenerate = true)
public class DmsInspectInstanceDetailMobile implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@ExcelProperty(value = "主键标识")
private Long instanceDetailId;
/**
* ID
*/
@ExcelProperty(value = "点巡检工单ID")
private Long inspectInstanceId;
/**
*
*/
private Long lineStep;
/**
*
*/
private Long realLineStep;
/**
* ID - machineIdPDAint
*/
@ExcelProperty(value = "设备ID")
private int deviceId;
/**
* 1 2 3
*/
@ExcelProperty(value = "巡检状态")
private String instanceDetailStatus;
/**
*
*/
private String inspectStandard;
/**
*
*/
@ExcelProperty(value = "巡检描述")
private String inspectDesc;
/**
* 1 0
*/
@ExcelProperty(value = "设备状态")
private String inspectStatus;
/**
* - PDA
*/
private String beginTime;
/**
* - PDA
*/
private String endTime;
/**
*
*/
private String remark;
/**
* - PDA
*/
private String deviceCode;
/**
* - PDA
*/
private String deviceName;
/**
* - PDA (JSONnull)
*/
// private List<DmsInspectInstanceDetailProjectMobile> dmsInspectInstanceDetailProjectList;
}

@ -7,7 +7,7 @@ import lombok.Data;
import org.dromara.common.excel.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.dms.domain.DmsBillsInspectInstance;
import org.dromara.dms.domain.DmsInspectInstanceDetail;
import org.dromara.dms.domain.vo.DmsInspectInstanceDetailVo;
import java.io.Serial;
import java.io.Serializable;
@ -119,7 +119,7 @@ public class DmsBillsInspectInstanceVo implements Serializable {
*/
private String performer;
private List<DmsInspectInstanceDetail> dmsInspectInstanceDetailList;
private List<DmsInspectInstanceDetailVo> dmsInspectInstanceDetailList;
private String planInspectCode;

@ -141,6 +141,6 @@ public class DmsBillsMaintInstanceVo implements Serializable {
private List<DmsBillsMaintDetail> dmsBillsMaintDetailList;
private String createTime;
private Date createTime;
}

@ -35,6 +35,6 @@ public interface DmsInspectInstanceDetailMapper extends BaseMapperPlus<DmsInspec
* @param dmsInspectInstanceDetail
* @return
*/
public List<DmsInspectInstanceDetail> selectDmsInspectInstanceDetailJoinList(DmsInspectInstanceDetailBo dmsInspectInstanceDetail);
public List<DmsInspectInstanceDetailVo> selectDmsInspectInstanceDetailJoinList(DmsInspectInstanceDetailBo dmsInspectInstanceDetail);
}

@ -281,7 +281,7 @@ public class DmsBillsInspectInstanceServiceImpl implements IDmsBillsInspectInsta
// 设置巡检实例ID
queryInspectInstanceDetail.setInspectInstanceId(newestBillsInspectInstance.getInspectInstanceId());
// 查询巡检实例详情列表
List<DmsInspectInstanceDetail> inspectInstanceDetails = dmsInspectInstanceDetailMapper.selectDmsInspectInstanceDetailJoinList(queryInspectInstanceDetail);
List<DmsInspectInstanceDetailVo> inspectInstanceDetails = dmsInspectInstanceDetailMapper.selectDmsInspectInstanceDetailJoinList(queryInspectInstanceDetail);
// 设置巡检实例详情列表到newestBillsInspectInstance对象中
newestBillsInspectInstance.setDmsInspectInstanceDetailList(inspectInstanceDetails);
}

@ -37,6 +37,7 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors;
/**
@ -292,62 +293,110 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
@Override
@GlobalTransactional(rollbackFor = Exception.class)
public DmsBillsMaintDetail startMaint(DmsBillsMaintDetail dmsBillsMaintDetail) {
// 根据保养实例ID查询保养实例信息
DmsBillsMaintInstance dmsBillsMaintInstance = baseMapper.
selectDmsBillsMaintInstanceByMaintInstanceId(dmsBillsMaintDetail.getMaintInstanceId());
// 获取当前保养状态,如果为空则设置为待保养状态
Long maintStatus = dmsBillsMaintInstance.getMaintStatus() == null ?
DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_TO_MAINT : dmsBillsMaintInstance.getMaintStatus();
// 如果保养状态为已完成,抛出异常提示已经保养完成
if (maintStatus.equals(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_COMPLETE)) {//保养完成
throw new ServiceException("已经保养完成");
}
// 获取当前日期时间
Date currentDate = new Date();
// 如果保养状态为待保养,进行以下操作
if (maintStatus.equals(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_TO_MAINT)) {//待保养
// 设置保养状态为保养中
dmsBillsMaintInstance.setMaintStatus(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_MAINTING);
// 设置实际开始保养时间为当前时间
dmsBillsMaintInstance.setRealBeginTime(currentDate);
//FIXME:工作流相关
// FIXME:工作流相关
// 创建远程启动流程对象
RemoteStartProcess startProcess = new RemoteStartProcess();
// 设置流程代码
startProcess.setFlowCode(DmsConstants.DMS_BILLS_MAINT_INSTANCE_WF_CODE);
// 获取业务ID保养实例ID
String businessId = dmsBillsMaintInstance.getMaintInstanceId().toString();
// 设置业务ID
startProcess.setBusinessId(businessId);
// 启动工作流程
RemoteStartProcessReturn remoteStartProcessReturn = remoteWorkflowService.startWorkFlow(startProcess);
// 获取任务ID
Long taskId = remoteStartProcessReturn.getTaskId();
// 如果任务ID为空抛出流程启动失败异常
if (StringUtils.isNull(taskId)) {
throw new ServiceException("流程启动失败");
}else{
dmsBillsMaintInstance.setWfDefinitionId(taskId);
dmsBillsMaintInstance.setRealBeginTime(new Date());
//FIXME:完成第一步,待测试待完善
RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask();
remoteCompleteTask.setTaskId(taskId);
remoteCompleteTask.setMessage("同意");
remoteWorkflowService.completeTask(remoteCompleteTask);
//TODO:异步线程内执行updateWrokFlow
CompletableFuture.runAsync(() -> {
try {
updateWorkFlow(dmsBillsMaintInstance, taskId);
} catch (Exception e) {
// 简单记录错误,不影响主流程
System.err.println("异步更新工作流失败getBillsMaintCode: " + dmsBillsMaintInstance.getBillsMaintCode() + ", 错误: " + e.getMessage());
// 可以考虑记录到失败表,后续补偿处理
}
});
}
baseMapper.updateById(dmsBillsMaintInstance);
// 设置保养明细的实际开始时间为当前时间
dmsBillsMaintDetail.setBeginTime(currentDate);
// 设置保养明细的状态为保养中
dmsBillsMaintDetail.setMaintStatus(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_MAINTING);
// 更新保养明细信息
dmsBillsMaintDetailMapper.updateById(dmsBillsMaintDetail);
}
// else {//保养中
// // 更新人不为空,则设置更新人为当前用户,更新时间为当前时间
// dmsBillsMaintDetail.setUpdateBy(userName);
// dmsBillsMaintDetail.setUpdateTime(currentDate);
// dmsBillsMaintDetailMapper.updateDmsBillsMaintDetail(dmsBillsMaintDetail);
// }
// 创建查询保养明细项目的对象
DmsBillsMaintDetailProjectBo queryBillsMaintDetailProject = new DmsBillsMaintDetailProjectBo();
// 设置保养明细ID
queryBillsMaintDetailProject.setBillsMaintDetailId(dmsBillsMaintDetail.getBillsMaintDetailId());
MPJLambdaWrapper<DmsBillsMaintDetailProject> queryBillsMaintDetailProjectWrapper = new MPJLambdaWrapper<>();
// 查询保养明细项目列表
List<DmsBillsMaintDetailProjectVo> dmsBillsMaintDetailProjects = dmsBillsMaintInstanceProjectService.queryList(queryBillsMaintDetailProject);
// 设置保养明细的项目列表
dmsBillsMaintDetail.setDmsBillsMaintDetailProjectList(dmsBillsMaintDetailProjects);
// 返回更新后的保养明细对象
return dmsBillsMaintDetail;
}
private Boolean updateWorkFlow(DmsBillsMaintInstance dmsBillsMaintInstance, Long taskId){
// 设置工作流定义ID
dmsBillsMaintInstance.setWfDefinitionId(taskId);
// 重新设置实际开始时间为当前时间(可能已变化)
dmsBillsMaintInstance.setRealBeginTime(new Date());
// FIXME:完成第一步,待测试待完善
// 创建远程完成任务对象
RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask();
// 设置任务ID
remoteCompleteTask.setTaskId(taskId);
// 设置完成后的消息
remoteCompleteTask.setMessage("自动推进");
// 关键设置messageType为非null的List解决原始错误
List<String> messageTypes = new ArrayList<>();
messageTypes.add("system"); // 系统消息
remoteCompleteTask.setMessageType(messageTypes);
// 完成该任务
boolean b = remoteWorkflowService.completeTask(remoteCompleteTask);
if (!b){
return false;
}else{
// 更新保养实例信息
int i = baseMapper.updateById(dmsBillsMaintInstance);
return i > 0;
}
}
/**
*

@ -84,7 +84,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select>
<!-- <select id="selectFaultInstanceJoinFirstAndDeviceById" parameterType="Long" resultMap="DmsBillsFaultInstanceResult">
select dbfi.repair_instance_id, dbfi.fault_source_type, dbfi.fault_source_id,
dbfi.wf_definition_id,
dbfi.bills_fault_code, dbfi.bills_status,
dbfi.apply_user, dbfi.apply_time, dbfi.real_begin_time, dbfi.real_end_time, dbfi.require_end_time, dbfi.machine_id,dbfi.approveStatus,
dbdl.machine_code,dbdl.machine_name,dbdl.machine_location,dbdl.machine_spec,
dfia.instance_activity_id,dfia.fault_type,dfia.fault_description,dfia.design_operations,dfia.repair_type,
dfia.outsourcing_id,
dfia.process_handle_resolution
,dfia.checked_fault checked_fault,
dfia.repair_content repair_content,
dfia.protected_method protected_method,
dfia.repairer repairer,
dfia.repair_confirm repair_confirm,
dfia.confirm_time confirm_time,dfia.components_parts_id components_parts_id
from dms_bills_fault_instance dbfi
left join prod_base_machine_info dbdl on dbfi.machine_id=dbdl.machine_id
left join dms_fault_instance_activity dfia on dbfi.repair_instance_id=dfia.repair_instance_id
where dbfi.repair_instance_id = #{repairInstanceId}
&lt;!&ndash; and dfia.process_step_order=1 &ndash;&gt;
and dfia.process_step_order=2
</select>-->
<select id="selectFaultInstanceJoinFirstAndDeviceById" parameterType="Long" resultMap="DmsBillsFaultInstanceResult">
select dbfi.repair_instance_id, dbfi.fault_source_type, dbfi.fault_source_id,
@ -103,10 +124,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
dfia.confirm_time confirm_time,dfia.components_parts_id components_parts_id
from dms_bills_fault_instance dbfi
left join prod_base_machine_info dbdl on dbfi.machine_id=dbdl.machine_id
left join dms_fault_instance_activity dfia on dbfi.repair_instance_id=dfia.repair_instance_id
left join dms_fault_instance_activity dfia on (dbfi.repair_instance_id=dfia.repair_instance_id
and dfia.process_step_order = (
select max(process_step_order)
from dms_fault_instance_activity dfia2
where dfia2.repair_instance_id = dbfi.repair_instance_id
))
where dbfi.repair_instance_id = #{repairInstanceId}
<!-- and dfia.process_step_order=1 -->
and dfia.process_step_order=2
</select>

@ -65,7 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join prod_base_machine_info dbdl on
diid.machine_id = dbdl.machine_id
left join dms_inspect_instance_detail_project a on diid.instance_detail_id = a.instance_detail_id
where diid.inspect_instance_id = #{inspectInstanceId} and dbdl.machine_code = #{machineCode}
where diid.inspect_instance_id = #{inspectInstanceId} and dbdl.machine_code = #{deviceCode}
</select>
<select id="selectProjectId" resultType="java.lang.Long" parameterType="java.lang.String">

Loading…
Cancel
Save