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

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

@ -7,6 +7,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.domain.R; import org.dromara.common.core.domain.R;
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.idempotent.annotation.RepeatSubmit; import org.dromara.common.idempotent.annotation.RepeatSubmit;
import org.dromara.common.log.annotation.Log; import org.dromara.common.log.annotation.Log;
import org.dromara.common.log.enums.BusinessType; 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.DmsBillsMaintDetail;
import org.dromara.dms.domain.DmsFaultComponentsParts; import org.dromara.dms.domain.DmsFaultComponentsParts;
import org.dromara.dms.domain.bo.*; import org.dromara.dms.domain.bo.*;
import org.dromara.dms.domain.mobile.DeviceBeen; import org.dromara.dms.domain.mobile.*;
import org.dromara.dms.domain.mobile.Outsourcing;
import org.dromara.dms.domain.vo.*; import org.dromara.dms.domain.vo.*;
import org.dromara.dms.service.*; import org.dromara.dms.service.*;
import org.dromara.resource.api.RemoteFileService; import org.dromara.resource.api.RemoteFileService;
@ -254,10 +254,12 @@ public class DmsMobileController extends BaseController {
// @RequiresPermissions("qms:checkrule:list") // @RequiresPermissions("qms:checkrule:list")
@GetMapping("/getBillsFaultInstanceByRepairInstanceId/{repairInstanceId}") @GetMapping("/getBillsFaultInstanceByRepairInstanceId/{repairInstanceId}")
@RepeatSubmit @RepeatSubmit
public R<DmsBillsFaultInstanceVo> getBillsFaultInstanceByRepairInstanceId(@PathVariable("repairInstanceId") Long repairInstanceId) { public R<DmsBillsFaultInstanceMobile> getBillsFaultInstanceByRepairInstanceId(@PathVariable("repairInstanceId") Long repairInstanceId) {
//fixme图片地址完整路径IP //fixme图片地址完整路径IP
DmsBillsFaultInstanceVo billsFaultInstance = dmsBillsFaultInstanceService.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId); 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") // @RequiresPermissions("qms:checkrule:list")
@GetMapping("/getBillsFaultInstance4Repair/{repairInstanceId}") @GetMapping("/getBillsFaultInstance4Repair/{repairInstanceId}")
@RepeatSubmit @RepeatSubmit
public R<DmsBillsFaultInstanceVo> getBillsFaultInstance4Repair(@PathVariable("repairInstanceId") Long repairInstanceId) { public R<DmsBillsFaultInstanceMobile> getBillsFaultInstance4Repair(@PathVariable("repairInstanceId") Long repairInstanceId) {
DmsBillsFaultInstanceVo billsFaultInstance = dmsBillsFaultInstanceService.queryById(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") // @RequiresPermissions("qms:checkrule:list")
@GetMapping("/getNewestInspectInstance") @GetMapping("/getNewestInspectInstance")
@RepeatSubmit @RepeatSubmit
public R<DmsBillsInspectInstanceVo> getNewestInspectInstance(DmsBillsInspectInstanceBo dmsBillsInspectInstance) { public R<DmsBillsInspectInstanceMobile> getNewestInspectInstance(DmsBillsInspectInstanceBo dmsBillsInspectInstance) {
DmsBillsInspectInstanceVo newestInspectInstance = dmsBillsInspectInstanceService.getNewestBillsInspectInstance(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") // @RequiresPermissions("qms:checkrule:list")
@GetMapping("/getNewestMaintInstance") @GetMapping("/getNewestMaintInstance")
// @RepeatSubmit // @RepeatSubmit
public R<DmsBillsMaintInstanceVo> getNewestMaintInstance(DmsBillsMaintInstanceBo dmsBillsMaintInstance) { public R<DmsBillsMaintInstanceMobile> getNewestMaintInstance(DmsBillsMaintInstanceBo dmsBillsMaintInstance) {
DmsBillsMaintInstanceVo newestMaintInstance = dmsBillsMaintInstanceService.getNewestBillsMaintInstance(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") // @RequiresPermissions("qms:checkrule:list")
@GetMapping("/getNewestLubeInstance") @GetMapping("/getNewestLubeInstance")
// @RepeatSubmit // @RepeatSubmit
public R<DmsBillsLubeInstanceVo> getNewestLubeInstance(DmsBillsLubeInstanceBo dmsBillsLubeInstance) { public R<DmsBillsLubeInstanceMobile> getNewestLubeInstance(DmsBillsLubeInstanceBo dmsBillsLubeInstance) {
DmsBillsLubeInstanceVo newestLubeInstance = dmsBillsLubeInstanceService.getNewestBillsLubeInstance(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 @Data
public class DmsBillsInspectInstanceScanBo { public class DmsBillsInspectInstanceScanBo {
@NotNull(message="点巡检工单ID必须输入") // @NotNull(message="点巡检工单ID必须输入")
private Long inspectInstanceId; private Long inspectInstanceId;
/** 设备编号 */ /** 设备编号 */
@NotBlank(message="设备编号必须输入") // @NotBlank(message="设备编号必须输入")
private String deviceCode; 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.annotation.ExcelDictFormat;
import org.dromara.common.excel.convert.ExcelDictConvert; import org.dromara.common.excel.convert.ExcelDictConvert;
import org.dromara.dms.domain.DmsBillsInspectInstance; 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.Serial;
import java.io.Serializable; import java.io.Serializable;
@ -119,7 +119,7 @@ public class DmsBillsInspectInstanceVo implements Serializable {
*/ */
private String performer; private String performer;
private List<DmsInspectInstanceDetail> dmsInspectInstanceDetailList; private List<DmsInspectInstanceDetailVo> dmsInspectInstanceDetailList;
private String planInspectCode; private String planInspectCode;

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

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

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

@ -37,6 +37,7 @@ 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;
/** /**
@ -292,62 +293,110 @@ public class DmsBillsMaintInstanceServiceImpl implements IDmsBillsMaintInstanceS
@Override @Override
@GlobalTransactional(rollbackFor = Exception.class) @GlobalTransactional(rollbackFor = Exception.class)
public DmsBillsMaintDetail startMaint(DmsBillsMaintDetail dmsBillsMaintDetail) { public DmsBillsMaintDetail startMaint(DmsBillsMaintDetail dmsBillsMaintDetail) {
// 根据保养实例ID查询保养实例信息
DmsBillsMaintInstance dmsBillsMaintInstance = baseMapper. DmsBillsMaintInstance dmsBillsMaintInstance = baseMapper.
selectDmsBillsMaintInstanceByMaintInstanceId(dmsBillsMaintDetail.getMaintInstanceId()); selectDmsBillsMaintInstanceByMaintInstanceId(dmsBillsMaintDetail.getMaintInstanceId());
// 获取当前保养状态,如果为空则设置为待保养状态
Long maintStatus = dmsBillsMaintInstance.getMaintStatus() == null ? Long maintStatus = dmsBillsMaintInstance.getMaintStatus() == null ?
DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_TO_MAINT : dmsBillsMaintInstance.getMaintStatus(); DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_TO_MAINT : dmsBillsMaintInstance.getMaintStatus();
// 如果保养状态为已完成,抛出异常提示已经保养完成
if (maintStatus.equals(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_COMPLETE)) {//保养完成 if (maintStatus.equals(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_COMPLETE)) {//保养完成
throw new ServiceException("已经保养完成"); throw new ServiceException("已经保养完成");
} }
// 获取当前日期时间
Date currentDate = new Date(); Date currentDate = new Date();
// 如果保养状态为待保养,进行以下操作
if (maintStatus.equals(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_TO_MAINT)) {//待保养 if (maintStatus.equals(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_TO_MAINT)) {//待保养
// 设置保养状态为保养中
dmsBillsMaintInstance.setMaintStatus(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_MAINTING); dmsBillsMaintInstance.setMaintStatus(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_MAINTING);
// 设置实际开始保养时间为当前时间
dmsBillsMaintInstance.setRealBeginTime(currentDate); dmsBillsMaintInstance.setRealBeginTime(currentDate);
// FIXME:工作流相关 // FIXME:工作流相关
// 创建远程启动流程对象
RemoteStartProcess startProcess = new RemoteStartProcess(); RemoteStartProcess startProcess = new RemoteStartProcess();
// 设置流程代码
startProcess.setFlowCode(DmsConstants.DMS_BILLS_MAINT_INSTANCE_WF_CODE); startProcess.setFlowCode(DmsConstants.DMS_BILLS_MAINT_INSTANCE_WF_CODE);
// 获取业务ID保养实例ID
String businessId = dmsBillsMaintInstance.getMaintInstanceId().toString(); String businessId = dmsBillsMaintInstance.getMaintInstanceId().toString();
// 设置业务ID
startProcess.setBusinessId(businessId); startProcess.setBusinessId(businessId);
// 启动工作流程
RemoteStartProcessReturn remoteStartProcessReturn = remoteWorkflowService.startWorkFlow(startProcess); RemoteStartProcessReturn remoteStartProcessReturn = remoteWorkflowService.startWorkFlow(startProcess);
// 获取任务ID
Long taskId = remoteStartProcessReturn.getTaskId(); Long taskId = remoteStartProcessReturn.getTaskId();
// 如果任务ID为空抛出流程启动失败异常
if (StringUtils.isNull(taskId)) { if (StringUtils.isNull(taskId)) {
throw new ServiceException("流程启动失败"); throw new ServiceException("流程启动失败");
}else{ }else{
dmsBillsMaintInstance.setWfDefinitionId(taskId); //TODO:异步线程内执行updateWrokFlow
dmsBillsMaintInstance.setRealBeginTime(new Date()); CompletableFuture.runAsync(() -> {
//FIXME:完成第一步,待测试待完善 try {
RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask(); updateWorkFlow(dmsBillsMaintInstance, taskId);
remoteCompleteTask.setTaskId(taskId); } catch (Exception e) {
remoteCompleteTask.setMessage("同意"); // 简单记录错误,不影响主流程
remoteWorkflowService.completeTask(remoteCompleteTask); System.err.println("异步更新工作流失败getBillsMaintCode: " + dmsBillsMaintInstance.getBillsMaintCode() + ", 错误: " + e.getMessage());
// 可以考虑记录到失败表,后续补偿处理
}
});
} }
// 设置保养明细的实际开始时间为当前时间
baseMapper.updateById(dmsBillsMaintInstance);
dmsBillsMaintDetail.setBeginTime(currentDate); dmsBillsMaintDetail.setBeginTime(currentDate);
// 设置保养明细的状态为保养中
dmsBillsMaintDetail.setMaintStatus(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_MAINTING); dmsBillsMaintDetail.setMaintStatus(DmsConstants.DMS_BILLS_MAINT_INSTANCE_STATUS_MAINTING);
// 更新保养明细信息
dmsBillsMaintDetailMapper.updateById(dmsBillsMaintDetail); dmsBillsMaintDetailMapper.updateById(dmsBillsMaintDetail);
} }
// else {//保养中 // else {//保养中
// // 更新人不为空,则设置更新人为当前用户,更新时间为当前时间
// dmsBillsMaintDetail.setUpdateBy(userName); // dmsBillsMaintDetail.setUpdateBy(userName);
// dmsBillsMaintDetail.setUpdateTime(currentDate); // dmsBillsMaintDetail.setUpdateTime(currentDate);
// dmsBillsMaintDetailMapper.updateDmsBillsMaintDetail(dmsBillsMaintDetail); // dmsBillsMaintDetailMapper.updateDmsBillsMaintDetail(dmsBillsMaintDetail);
// } // }
// 创建查询保养明细项目的对象
DmsBillsMaintDetailProjectBo queryBillsMaintDetailProject = new DmsBillsMaintDetailProjectBo(); DmsBillsMaintDetailProjectBo queryBillsMaintDetailProject = new DmsBillsMaintDetailProjectBo();
// 设置保养明细ID
queryBillsMaintDetailProject.setBillsMaintDetailId(dmsBillsMaintDetail.getBillsMaintDetailId()); queryBillsMaintDetailProject.setBillsMaintDetailId(dmsBillsMaintDetail.getBillsMaintDetailId());
MPJLambdaWrapper<DmsBillsMaintDetailProject> queryBillsMaintDetailProjectWrapper = new MPJLambdaWrapper<>(); // 查询保养明细项目列表
List<DmsBillsMaintDetailProjectVo> dmsBillsMaintDetailProjects = dmsBillsMaintInstanceProjectService.queryList(queryBillsMaintDetailProject); List<DmsBillsMaintDetailProjectVo> dmsBillsMaintDetailProjects = dmsBillsMaintInstanceProjectService.queryList(queryBillsMaintDetailProject);
// 设置保养明细的项目列表
dmsBillsMaintDetail.setDmsBillsMaintDetailProjectList(dmsBillsMaintDetailProjects); dmsBillsMaintDetail.setDmsBillsMaintDetailProjectList(dmsBillsMaintDetailProjects);
// 返回更新后的保养明细对象
return dmsBillsMaintDetail; 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,9 +84,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</select> </select>
<!-- <select id="selectFaultInstanceJoinFirstAndDeviceById" parameterType="Long" resultMap="DmsBillsFaultInstanceResult">
<select id="selectFaultInstanceJoinFirstAndDeviceById" parameterType="Long" resultMap="DmsBillsFaultInstanceResult">
select dbfi.repair_instance_id, dbfi.fault_source_type, dbfi.fault_source_id, select dbfi.repair_instance_id, dbfi.fault_source_type, dbfi.fault_source_id,
dbfi.wf_definition_id, dbfi.wf_definition_id,
dbfi.bills_fault_code, dbfi.bills_status, dbfi.bills_fault_code, dbfi.bills_status,
@ -105,8 +103,34 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join prod_base_machine_info dbdl on dbfi.machine_id=dbdl.machine_id 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
where dbfi.repair_instance_id = #{repairInstanceId} where dbfi.repair_instance_id = #{repairInstanceId}
<!-- and dfia.process_step_order=1 --> &lt;!&ndash; and dfia.process_step_order=1 &ndash;&gt;
and dfia.process_step_order=2 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,
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
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}
</select> </select>

@ -65,7 +65,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
left join prod_base_machine_info dbdl on left join prod_base_machine_info dbdl on
diid.machine_id = dbdl.machine_id diid.machine_id = dbdl.machine_id
left join dms_inspect_instance_detail_project a on diid.instance_detail_id = a.instance_detail_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>
<select id="selectProjectId" resultType="java.lang.Long" parameterType="java.lang.String"> <select id="selectProjectId" resultType="java.lang.Long" parameterType="java.lang.String">

Loading…
Cancel
Save