feat(mobile): 添加PDA停机功能和优化维修流程

- 在DmsBillsFaultInstanceMapper中添加approveStatus字段支持
- 新增PDA停机原因列表查询接口
- 实现PDA停机记录新增功能,支持自动匹配停机类型
- 添加三色灯状态参数同步机制,针对OLD-01~OLD-05设备
- PDA报修默认设置为已审批通过状态
- 优化PDA开始维修流程,移除异常处理包装
- 完善PDA完成维修流程,改进维修结果存储方式
- 自动创建维修记录和更新派工计划状态
- 添加事务注解确保数据一致性
master
zangch@mesnac.com 2 weeks ago
parent db08d8425c
commit cca55021e5

@ -10,6 +10,8 @@ import com.aucma.dms.domain.vo.DmsBillsFaultInstanceScanVo;
import com.aucma.dms.domain.vo.DmsBillsInspectInstanceScanVo; import com.aucma.dms.domain.vo.DmsBillsInspectInstanceScanVo;
import com.aucma.base.domain.BaseDeviceLedger; import com.aucma.base.domain.BaseDeviceLedger;
import com.aucma.base.service.IBaseDeviceLedgerService; import com.aucma.base.service.IBaseDeviceLedgerService;
import com.aucma.base.domain.BaseDeviceParamVal;
import com.aucma.base.service.IBaseDeviceParamValService;
import com.aucma.dms.service.*; import com.aucma.dms.service.*;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -17,6 +19,7 @@ import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -67,6 +70,17 @@ public class DmsMobileController extends BaseController {
@Autowired @Autowired
private IBaseDeviceLedgerService baseDeviceLedgerService; private IBaseDeviceLedgerService baseDeviceLedgerService;
@Autowired
private IBaseDeviceParamValService baseDeviceParamValService;
// 停机原因服务
@Autowired
private IDmsBaseShutReasonService dmsBaseShutReasonService;
// 停机记录服务
@Autowired
private IDmsRecordShutDownService dmsRecordShutDownService;
/** /**
* *
* 使aucma-baseBaseDeviceLedgerDmsBaseDeviceLedger * 使aucma-baseBaseDeviceLedgerDmsBaseDeviceLedger
@ -210,6 +224,101 @@ public class DmsMobileController extends BaseController {
return dms; return dms;
} }
// ========== PDA 停机相关 ==========
/**
* PDA- isFlag=1
*/
@GetMapping("/shutReason/list")
public AjaxResult listShutReasonsForPda(DmsBaseShutReason reason) {
reason.setIsFlag("1");
List<DmsBaseShutReason> list = dmsBaseShutReasonService.selectDmsBaseShutReasonList(reason);
return success(list);
}
/**
* PDA-
*/
@PostMapping("/shutDown/add")
@Transactional(rollbackFor = Exception.class)
public AjaxResult addShutDownForPda(@RequestBody DmsRecordShutDown shutDown) {
// 若传入了停机原因ID则查询原因并回填类型
if (shutDown.getShutReason() != null) {
DmsBaseShutReason query = new DmsBaseShutReason();
query.setShutReason(shutDown.getShutReason());
query.setIsFlag("1");
List<DmsBaseShutReason> reasons = dmsBaseShutReasonService.selectDmsBaseShutReasonList(query);
if (!reasons.isEmpty()) {
shutDown.setShutType(reasons.get(0).getShutTypeId());
// 若前端未传 deviceId尝试从原因带出
if (shutDown.getDeviceId() == null) {
shutDown.setDeviceId(reasons.get(0).getDeviceId());
}
}
}
// 默认启用标识
if (shutDown.getIsFlag() == null) {
shutDown.setIsFlag(1L);
}
int rows = dmsRecordShutDownService.insertDmsRecordShutDown(shutDown);
// 对指定设备OLD-01~OLD-05同步写入三色灯状态参数供设备状态统计使用
String deviceCode = shutDown.getDeviceCode();
if (deviceCode != null && deviceCode.startsWith("OLD-")) {
insertTriColorStatusParams(deviceCode, shutDown.getDeviceId());
}
return success(rows);
}
/**
* //
*/
private void insertTriColorStatusParams(String deviceCode, Long deviceId) {
// 仅处理 OLD-01~OLD-05
if (!"OLD-01".equals(deviceCode) && !"OLD-02".equals(deviceCode)
&& !"OLD-03".equals(deviceCode) && !"OLD-04".equals(deviceCode)
&& !"OLD-05".equals(deviceCode)) {
return;
}
// 补齐 deviceId如果未传
Long resolvedDeviceId = deviceId;
if (resolvedDeviceId == null) {
BaseDeviceLedger query = new BaseDeviceLedger();
query.setDeviceCode(deviceCode);
query.setIsFlag(1L);
List<BaseDeviceLedger> list = baseDeviceLedgerService.selectBaseDeviceLedgerList(query);
if (!list.isEmpty()) {
resolvedDeviceId = list.get(0).getObjId();
}
}
Date now = new Date();
// 运行、暂停、报警 三个参数,只有“暂停”置 TRUE其余 FALSE
List<BaseDeviceParamVal> records = new ArrayList<>();
records.add(buildParamVal("295", deviceCode, resolvedDeviceId, "机台状态-三色灯机器运行", "False", now));
records.add(buildParamVal("296", deviceCode, resolvedDeviceId, "机台状态-三色灯机器暂停", "True", now));
records.add(buildParamVal("297", deviceCode, resolvedDeviceId, "机台状态-三色灯机器报警", "False", now));
for (BaseDeviceParamVal rec : records) {
baseDeviceParamValService.insertBaseDeviceParamVal(rec);
}
}
private BaseDeviceParamVal buildParamVal(String paramCode, String deviceCode, Long deviceId,
String paramName, String paramValue, Date time) {
BaseDeviceParamVal v = new BaseDeviceParamVal();
v.setParamCode(paramCode);
v.setDeviceCode(deviceCode);
v.setDeviceId(deviceId);
v.setParamName(paramName);
v.setParamValue(paramValue);
v.setCollectTime(time);
v.setRecordTime(time);
return v;
}
/** /**
* PDA- * PDA-
* <p> * <p>
@ -236,6 +345,8 @@ public class DmsMobileController extends BaseController {
} }
}*/ }*/
dmsBillsFaultInstance.setFileUrls(fileUrls); dmsBillsFaultInstance.setFileUrls(fileUrls);
// PDA发起的报修默认视为已审批通过避免进入待审批状态
dmsBillsFaultInstance.setApproveStatus("2");
return success(dmsBillsFaultInstanceService.insertDmsBillsFaultInstance(dmsBillsFaultInstance)); return success(dmsBillsFaultInstanceService.insertDmsBillsFaultInstance(dmsBillsFaultInstance));
} }
@ -321,8 +432,8 @@ public class DmsMobileController extends BaseController {
* - 12 * - 12
*/ */
@PostMapping("/startRepair") @PostMapping("/startRepair")
@Transactional(rollbackFor = Exception.class)
public AjaxResult startRepair(@RequestBody DmsFaultInstanceActivity dmsFaultInstanceActivity) { public AjaxResult startRepair(@RequestBody DmsFaultInstanceActivity dmsFaultInstanceActivity) {
try {
Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId(); Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId();
String repairer = dmsFaultInstanceActivity.getRepairer(); String repairer = dmsFaultInstanceActivity.getRepairer();
@ -402,10 +513,6 @@ public class DmsMobileController extends BaseController {
} }
return success(result); return success(result);
} catch (Exception e) {
log.error("PDA开始维修失败", e);
return error("开始维修失败:" + e.getMessage());
}
} }
/** /**
@ -417,8 +524,8 @@ public class DmsMobileController extends BaseController {
* - 3 * - 3
*/ */
@PostMapping("/completeRepair") @PostMapping("/completeRepair")
@Transactional(rollbackFor = Exception.class)
public AjaxResult completeRepair(DmsFaultInstanceActivity dmsFaultInstanceActivity, @RequestParam(value = "files", required = false) List<MultipartFile> files) throws JsonProcessingException { public AjaxResult completeRepair(DmsFaultInstanceActivity dmsFaultInstanceActivity, @RequestParam(value = "files", required = false) List<MultipartFile> files) throws JsonProcessingException {
try {
Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId(); Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId();
String repairer = dmsFaultInstanceActivity.getRepairer(); String repairer = dmsFaultInstanceActivity.getRepairer();
@ -427,6 +534,8 @@ public class DmsMobileController extends BaseController {
// ========== 步骤1原有逻辑 - 设置确认信息和解析配件 ========== // ========== 步骤1原有逻辑 - 设置确认信息和解析配件 ==========
dmsFaultInstanceActivity.setRepairConfirm(2); dmsFaultInstanceActivity.setRepairConfirm(2);
dmsFaultInstanceActivity.setConfirmTime(new Date()); dmsFaultInstanceActivity.setConfirmTime(new Date());
// 标记完成节点,确保维修内容/安全措施等信息持久化并可回显
dmsFaultInstanceActivity.setProcessActivityId(1021L);
String parts1 = dmsFaultInstanceActivity.getParts1(); String parts1 = dmsFaultInstanceActivity.getParts1();
if (parts1 != null && !parts1.isEmpty()) { if (parts1 != null && !parts1.isEmpty()) {
ObjectMapper objectMapper = new ObjectMapper(); ObjectMapper objectMapper = new ObjectMapper();
@ -448,7 +557,8 @@ public class DmsMobileController extends BaseController {
updateOrder.setWorkOrderId(workOrder.getWorkOrderId()); updateOrder.setWorkOrderId(workOrder.getWorkOrderId());
updateOrder.setOrderStatus("3"); // 已完成 updateOrder.setOrderStatus("3"); // 已完成
updateOrder.setActualEndTime(new Date()); updateOrder.setActualEndTime(new Date());
updateOrder.setRepairResult(dmsFaultInstanceActivity.getRepairContent()); updateOrder.setRepairResult("1"); // 维修结果1-成功
updateOrder.setRepairNotes(dmsFaultInstanceActivity.getRepairContent()); // 维修内容存到维修说明
dmsRepairWorkOrderService.updateDmsRepairWorkOrder(updateOrder); dmsRepairWorkOrderService.updateDmsRepairWorkOrder(updateOrder);
log.info("PDA更新维修工单[{}]状态为已完成", workOrder.getWorkOrderCode()); log.info("PDA更新维修工单[{}]状态为已完成", workOrder.getWorkOrderCode());
@ -474,8 +584,9 @@ public class DmsMobileController extends BaseController {
// 维修时间 // 维修时间
record.setStartTime(workOrder.getActualStartTime()); record.setStartTime(workOrder.getActualStartTime());
record.setEndTime(new Date()); record.setEndTime(new Date());
// 维修内容 // 维修结果和维修方法
record.setRepairResult(dmsFaultInstanceActivity.getRepairContent()); record.setRepairResult("1"); // 维修结果1-成功
record.setRepairMethod(dmsFaultInstanceActivity.getRepairContent()); // 维修内容存到维修方法
// 默认未存档 // 默认未存档
record.setIsArchived("0"); record.setIsArchived("0");
@ -498,10 +609,6 @@ public class DmsMobileController extends BaseController {
} }
return success(result); return success(result);
} catch (Exception e) {
log.error("PDA完成维修失败", e);
return error("完成维修失败:" + e.getMessage());
}
} }

@ -138,6 +138,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="faultLevel != null">fault_level,</if> <if test="faultLevel != null">fault_level,</if>
<if test="faultDescription != null">fault_description,</if> <if test="faultDescription != null">fault_description,</if>
<if test="designOperations != null">design_operations,</if> <if test="designOperations != null">design_operations,</if>
<if test="approveStatus != null">approveStatus,</if>
<if test="applyTime != null">apply_time,</if> <if test="applyTime != null">apply_time,</if>
<if test="realBeginTime != null">real_begin_time,</if> <if test="realBeginTime != null">real_begin_time,</if>
<if test="realEndTime != null">real_end_time,</if> <if test="realEndTime != null">real_end_time,</if>
@ -166,6 +167,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="faultLevel != null">#{faultLevel},</if> <if test="faultLevel != null">#{faultLevel},</if>
<if test="faultDescription != null">#{faultDescription},</if> <if test="faultDescription != null">#{faultDescription},</if>
<if test="designOperations != null">#{designOperations},</if> <if test="designOperations != null">#{designOperations},</if>
<if test="approveStatus != null">#{approveStatus},</if>
<if test="applyTime != null">#{applyTime},</if> <if test="applyTime != null">#{applyTime},</if>
<if test="realBeginTime != null">#{realBeginTime},</if> <if test="realBeginTime != null">#{realBeginTime},</if>
<if test="realEndTime != null">#{realEndTime},</if> <if test="realEndTime != null">#{realEndTime},</if>

Loading…
Cancel
Save