|
|
|
|
@ -10,6 +10,8 @@ import com.aucma.dms.domain.vo.DmsBillsFaultInstanceScanVo;
|
|
|
|
|
import com.aucma.dms.domain.vo.DmsBillsInspectInstanceScanVo;
|
|
|
|
|
import com.aucma.base.domain.BaseDeviceLedger;
|
|
|
|
|
import com.aucma.base.service.IBaseDeviceLedgerService;
|
|
|
|
|
import com.aucma.base.domain.BaseDeviceParamVal;
|
|
|
|
|
import com.aucma.base.service.IBaseDeviceParamValService;
|
|
|
|
|
import com.aucma.dms.service.*;
|
|
|
|
|
import org.slf4j.Logger;
|
|
|
|
|
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.databind.ObjectMapper;
|
|
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
import org.springframework.util.CollectionUtils;
|
|
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
|
@ -67,6 +70,17 @@ public class DmsMobileController extends BaseController {
|
|
|
|
|
@Autowired
|
|
|
|
|
private IBaseDeviceLedgerService baseDeviceLedgerService;
|
|
|
|
|
|
|
|
|
|
@Autowired
|
|
|
|
|
private IBaseDeviceParamValService baseDeviceParamValService;
|
|
|
|
|
|
|
|
|
|
// 停机原因服务
|
|
|
|
|
@Autowired
|
|
|
|
|
private IDmsBaseShutReasonService dmsBaseShutReasonService;
|
|
|
|
|
|
|
|
|
|
// 停机记录服务
|
|
|
|
|
@Autowired
|
|
|
|
|
private IDmsRecordShutDownService dmsRecordShutDownService;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 根据设备编号获取设备信息
|
|
|
|
|
* 【重构】使用aucma-base模块的BaseDeviceLedger,返回类型转换为DmsBaseDeviceLedger
|
|
|
|
|
@ -210,6 +224,101 @@ public class DmsMobileController extends BaseController {
|
|
|
|
|
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-报修
|
|
|
|
|
* <p>
|
|
|
|
|
@ -236,6 +345,8 @@ public class DmsMobileController extends BaseController {
|
|
|
|
|
}
|
|
|
|
|
}*/
|
|
|
|
|
dmsBillsFaultInstance.setFileUrls(fileUrls);
|
|
|
|
|
// PDA发起的报修默认视为已审批通过,避免进入待审批状态
|
|
|
|
|
dmsBillsFaultInstance.setApproveStatus("2");
|
|
|
|
|
return success(dmsBillsFaultInstanceService.insertDmsBillsFaultInstance(dmsBillsFaultInstance));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@ -321,91 +432,87 @@ public class DmsMobileController extends BaseController {
|
|
|
|
|
* - 触发断点1和断点2,确保数据完整性
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/startRepair")
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public AjaxResult startRepair(@RequestBody DmsFaultInstanceActivity dmsFaultInstanceActivity) {
|
|
|
|
|
try {
|
|
|
|
|
Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId();
|
|
|
|
|
String repairer = dmsFaultInstanceActivity.getRepairer();
|
|
|
|
|
Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId();
|
|
|
|
|
String repairer = dmsFaultInstanceActivity.getRepairer();
|
|
|
|
|
|
|
|
|
|
log.info("PDA开始维修,故障报修ID: {}, 维修人: {}", repairInstanceId, repairer);
|
|
|
|
|
log.info("PDA开始维修,故障报修ID: {}, 维修人: {}", repairInstanceId, repairer);
|
|
|
|
|
|
|
|
|
|
// ========== 步骤1:调用原有的开始维修逻辑 ==========
|
|
|
|
|
int result = dmsBillsFaultInstanceService.startRepair(dmsFaultInstanceActivity);
|
|
|
|
|
|
|
|
|
|
// ========== 步骤2:查询故障报修详情 ==========
|
|
|
|
|
DmsBillsFaultInstance fault = dmsBillsFaultInstanceService
|
|
|
|
|
.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId);
|
|
|
|
|
if (fault == null) {
|
|
|
|
|
log.warn("故障报修[{}]不存在", repairInstanceId);
|
|
|
|
|
return success(result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ========== 步骤3:检查是否已有维修工单 ==========
|
|
|
|
|
DmsRepairWorkOrder existingOrder = dmsRepairWorkOrderService.selectByFaultInstanceId(repairInstanceId);
|
|
|
|
|
|
|
|
|
|
if (existingOrder == null) {
|
|
|
|
|
// ========== 步骤4:【断点1】自动创建维修工单 ==========
|
|
|
|
|
DmsRepairWorkOrder newOrder = new DmsRepairWorkOrder();
|
|
|
|
|
newOrder.setFaultInstanceId(repairInstanceId);
|
|
|
|
|
newOrder.setDeviceId(fault.getDeviceId());
|
|
|
|
|
newOrder.setFaultType(fault.getFaultType());
|
|
|
|
|
newOrder.setFaultDescription(fault.getFaultDescription());
|
|
|
|
|
newOrder.setRepairType(fault.getRepairType());
|
|
|
|
|
newOrder.setOrderStatus("2"); // 直接设为维修中(PDA开始维修即进入维修状态)
|
|
|
|
|
newOrder.setPriority("3"); // 默认中优先级
|
|
|
|
|
newOrder.setActualStartTime(new Date());
|
|
|
|
|
// 设置执行人信息
|
|
|
|
|
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
|
|
|
|
|
newOrder.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
|
|
|
|
|
}
|
|
|
|
|
if (repairer != null && !repairer.isEmpty()) {
|
|
|
|
|
newOrder.setExecutorName(repairer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dmsRepairWorkOrderService.insertDmsRepairWorkOrder(newOrder);
|
|
|
|
|
log.info("【断点1】PDA自动创建维修工单,工单ID: {}, 工单编号: {}",
|
|
|
|
|
newOrder.getWorkOrderId(), newOrder.getWorkOrderCode());
|
|
|
|
|
|
|
|
|
|
// ========== 步骤5:【断点2】自动创建派工计划并接收 ==========
|
|
|
|
|
DmsDispatchPlan plan = new DmsDispatchPlan();
|
|
|
|
|
plan.setWorkOrderId(newOrder.getWorkOrderId());
|
|
|
|
|
plan.setWorkOrderCode(newOrder.getWorkOrderCode());
|
|
|
|
|
plan.setDeviceId(fault.getDeviceId());
|
|
|
|
|
plan.setDispatchType("1"); // 单人派工
|
|
|
|
|
plan.setReceiveStatus("1"); // 直接设为已接收(PDA开始维修即表示已接收)
|
|
|
|
|
plan.setExecutionStatus("1"); // 执行中
|
|
|
|
|
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
|
|
|
|
|
plan.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
|
|
|
|
|
}
|
|
|
|
|
if (repairer != null && !repairer.isEmpty()) {
|
|
|
|
|
plan.setExecutorName(repairer);
|
|
|
|
|
}
|
|
|
|
|
plan.setDispatchNotes("由PDA端开始维修自动生成");
|
|
|
|
|
|
|
|
|
|
dmsDispatchPlanService.insertDmsDispatchPlan(plan);
|
|
|
|
|
log.info("【断点2】PDA自动创建派工计划并接收,计划ID: {}", plan.getPlanId());
|
|
|
|
|
} else {
|
|
|
|
|
// 已有维修工单,更新状态为维修中
|
|
|
|
|
if (!"2".equals(existingOrder.getOrderStatus()) && !"3".equals(existingOrder.getOrderStatus())) {
|
|
|
|
|
DmsRepairWorkOrder updateOrder = new DmsRepairWorkOrder();
|
|
|
|
|
updateOrder.setWorkOrderId(existingOrder.getWorkOrderId());
|
|
|
|
|
updateOrder.setOrderStatus("2"); // 维修中
|
|
|
|
|
updateOrder.setActualStartTime(new Date());
|
|
|
|
|
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
|
|
|
|
|
updateOrder.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
|
|
|
|
|
}
|
|
|
|
|
if (repairer != null && !repairer.isEmpty()) {
|
|
|
|
|
updateOrder.setExecutorName(repairer);
|
|
|
|
|
}
|
|
|
|
|
dmsRepairWorkOrderService.updateDmsRepairWorkOrder(updateOrder);
|
|
|
|
|
log.info("PDA更新已有维修工单[{}]状态为维修中", existingOrder.getWorkOrderCode());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// ========== 步骤1:调用原有的开始维修逻辑 ==========
|
|
|
|
|
int result = dmsBillsFaultInstanceService.startRepair(dmsFaultInstanceActivity);
|
|
|
|
|
|
|
|
|
|
// ========== 步骤2:查询故障报修详情 ==========
|
|
|
|
|
DmsBillsFaultInstance fault = dmsBillsFaultInstanceService
|
|
|
|
|
.selectDmsBillsFaultInstanceByRepairInstanceId(repairInstanceId);
|
|
|
|
|
if (fault == null) {
|
|
|
|
|
log.warn("故障报修[{}]不存在", repairInstanceId);
|
|
|
|
|
return success(result);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("PDA开始维修失败", e);
|
|
|
|
|
return error("开始维修失败:" + e.getMessage());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ========== 步骤3:检查是否已有维修工单 ==========
|
|
|
|
|
DmsRepairWorkOrder existingOrder = dmsRepairWorkOrderService.selectByFaultInstanceId(repairInstanceId);
|
|
|
|
|
|
|
|
|
|
if (existingOrder == null) {
|
|
|
|
|
// ========== 步骤4:【断点1】自动创建维修工单 ==========
|
|
|
|
|
DmsRepairWorkOrder newOrder = new DmsRepairWorkOrder();
|
|
|
|
|
newOrder.setFaultInstanceId(repairInstanceId);
|
|
|
|
|
newOrder.setDeviceId(fault.getDeviceId());
|
|
|
|
|
newOrder.setFaultType(fault.getFaultType());
|
|
|
|
|
newOrder.setFaultDescription(fault.getFaultDescription());
|
|
|
|
|
newOrder.setRepairType(fault.getRepairType());
|
|
|
|
|
newOrder.setOrderStatus("2"); // 直接设为维修中(PDA开始维修即进入维修状态)
|
|
|
|
|
newOrder.setPriority("3"); // 默认中优先级
|
|
|
|
|
newOrder.setActualStartTime(new Date());
|
|
|
|
|
// 设置执行人信息
|
|
|
|
|
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
|
|
|
|
|
newOrder.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
|
|
|
|
|
}
|
|
|
|
|
if (repairer != null && !repairer.isEmpty()) {
|
|
|
|
|
newOrder.setExecutorName(repairer);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dmsRepairWorkOrderService.insertDmsRepairWorkOrder(newOrder);
|
|
|
|
|
log.info("【断点1】PDA自动创建维修工单,工单ID: {}, 工单编号: {}",
|
|
|
|
|
newOrder.getWorkOrderId(), newOrder.getWorkOrderCode());
|
|
|
|
|
|
|
|
|
|
// ========== 步骤5:【断点2】自动创建派工计划并接收 ==========
|
|
|
|
|
DmsDispatchPlan plan = new DmsDispatchPlan();
|
|
|
|
|
plan.setWorkOrderId(newOrder.getWorkOrderId());
|
|
|
|
|
plan.setWorkOrderCode(newOrder.getWorkOrderCode());
|
|
|
|
|
plan.setDeviceId(fault.getDeviceId());
|
|
|
|
|
plan.setDispatchType("1"); // 单人派工
|
|
|
|
|
plan.setReceiveStatus("1"); // 直接设为已接收(PDA开始维修即表示已接收)
|
|
|
|
|
plan.setExecutionStatus("1"); // 执行中
|
|
|
|
|
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
|
|
|
|
|
plan.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
|
|
|
|
|
}
|
|
|
|
|
if (repairer != null && !repairer.isEmpty()) {
|
|
|
|
|
plan.setExecutorName(repairer);
|
|
|
|
|
}
|
|
|
|
|
plan.setDispatchNotes("由PDA端开始维修自动生成");
|
|
|
|
|
|
|
|
|
|
dmsDispatchPlanService.insertDmsDispatchPlan(plan);
|
|
|
|
|
log.info("【断点2】PDA自动创建派工计划并接收,计划ID: {}", plan.getPlanId());
|
|
|
|
|
} else {
|
|
|
|
|
// 已有维修工单,更新状态为维修中
|
|
|
|
|
if (!"2".equals(existingOrder.getOrderStatus()) && !"3".equals(existingOrder.getOrderStatus())) {
|
|
|
|
|
DmsRepairWorkOrder updateOrder = new DmsRepairWorkOrder();
|
|
|
|
|
updateOrder.setWorkOrderId(existingOrder.getWorkOrderId());
|
|
|
|
|
updateOrder.setOrderStatus("2"); // 维修中
|
|
|
|
|
updateOrder.setActualStartTime(new Date());
|
|
|
|
|
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
|
|
|
|
|
updateOrder.setExecutorId(dmsFaultInstanceActivity.getHandleUserId());
|
|
|
|
|
}
|
|
|
|
|
if (repairer != null && !repairer.isEmpty()) {
|
|
|
|
|
updateOrder.setExecutorName(repairer);
|
|
|
|
|
}
|
|
|
|
|
dmsRepairWorkOrderService.updateDmsRepairWorkOrder(updateOrder);
|
|
|
|
|
log.info("PDA更新已有维修工单[{}]状态为维修中", existingOrder.getWorkOrderCode());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return success(result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
@ -417,91 +524,91 @@ public class DmsMobileController extends BaseController {
|
|
|
|
|
* - 触发断点3,确保数据完整性
|
|
|
|
|
*/
|
|
|
|
|
@PostMapping("/completeRepair")
|
|
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
|
|
public AjaxResult completeRepair(DmsFaultInstanceActivity dmsFaultInstanceActivity, @RequestParam(value = "files", required = false) List<MultipartFile> files) throws JsonProcessingException {
|
|
|
|
|
try {
|
|
|
|
|
Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId();
|
|
|
|
|
String repairer = dmsFaultInstanceActivity.getRepairer();
|
|
|
|
|
Long repairInstanceId = dmsFaultInstanceActivity.getRepairInstanceId();
|
|
|
|
|
String repairer = dmsFaultInstanceActivity.getRepairer();
|
|
|
|
|
|
|
|
|
|
log.info("PDA完成维修,故障报修ID: {}, 维修人: {}", repairInstanceId, repairer);
|
|
|
|
|
log.info("PDA完成维修,故障报修ID: {}, 维修人: {}", repairInstanceId, repairer);
|
|
|
|
|
|
|
|
|
|
// ========== 步骤1:原有逻辑 - 设置确认信息和解析配件 ==========
|
|
|
|
|
dmsFaultInstanceActivity.setRepairConfirm(2);
|
|
|
|
|
dmsFaultInstanceActivity.setConfirmTime(new Date());
|
|
|
|
|
String parts1 = dmsFaultInstanceActivity.getParts1();
|
|
|
|
|
if (parts1 != null && !parts1.isEmpty()) {
|
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
List<DmsFaultCompentsParts> parts2 = objectMapper.readValue(parts1, new TypeReference<List<DmsFaultCompentsParts>>() {});
|
|
|
|
|
dmsFaultInstanceActivity.setParts(parts2);
|
|
|
|
|
}
|
|
|
|
|
List<String> fileUrls = new ArrayList<>();
|
|
|
|
|
dmsFaultInstanceActivity.setFileUrls(fileUrls);
|
|
|
|
|
|
|
|
|
|
// ========== 步骤2:调用原有的完成维修逻辑 ==========
|
|
|
|
|
int result = dmsBillsFaultInstanceService.completeRepair(dmsFaultInstanceActivity);
|
|
|
|
|
|
|
|
|
|
// ========== 步骤3:查询关联的维修工单 ==========
|
|
|
|
|
DmsRepairWorkOrder workOrder = dmsRepairWorkOrderService.selectByFaultInstanceId(repairInstanceId);
|
|
|
|
|
|
|
|
|
|
if (workOrder != null) {
|
|
|
|
|
// ========== 步骤4:更新维修工单状态为已完成 ==========
|
|
|
|
|
DmsRepairWorkOrder updateOrder = new DmsRepairWorkOrder();
|
|
|
|
|
updateOrder.setWorkOrderId(workOrder.getWorkOrderId());
|
|
|
|
|
updateOrder.setOrderStatus("3"); // 已完成
|
|
|
|
|
updateOrder.setActualEndTime(new Date());
|
|
|
|
|
updateOrder.setRepairResult(dmsFaultInstanceActivity.getRepairContent());
|
|
|
|
|
dmsRepairWorkOrderService.updateDmsRepairWorkOrder(updateOrder);
|
|
|
|
|
log.info("PDA更新维修工单[{}]状态为已完成", workOrder.getWorkOrderCode());
|
|
|
|
|
|
|
|
|
|
// ========== 步骤5:【断点3】自动创建维修记录 ==========
|
|
|
|
|
DmsRepairRecord record = new DmsRepairRecord();
|
|
|
|
|
record.setWorkOrderId(workOrder.getWorkOrderId());
|
|
|
|
|
record.setWorkOrderCode(workOrder.getWorkOrderCode());
|
|
|
|
|
record.setDeviceId(workOrder.getDeviceId());
|
|
|
|
|
record.setDeviceCode(workOrder.getDeviceCode());
|
|
|
|
|
record.setDeviceName(workOrder.getDeviceName());
|
|
|
|
|
record.setFaultPhenomenon(workOrder.getFaultDescription());
|
|
|
|
|
// 维修人员信息
|
|
|
|
|
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
|
|
|
|
|
record.setRepairerId(dmsFaultInstanceActivity.getHandleUserId());
|
|
|
|
|
} else if (workOrder.getExecutorId() != null) {
|
|
|
|
|
record.setRepairerId(workOrder.getExecutorId());
|
|
|
|
|
}
|
|
|
|
|
if (repairer != null && !repairer.isEmpty()) {
|
|
|
|
|
record.setRepairerName(repairer);
|
|
|
|
|
} else if (workOrder.getExecutorName() != null) {
|
|
|
|
|
record.setRepairerName(workOrder.getExecutorName());
|
|
|
|
|
}
|
|
|
|
|
// 维修时间
|
|
|
|
|
record.setStartTime(workOrder.getActualStartTime());
|
|
|
|
|
record.setEndTime(new Date());
|
|
|
|
|
// 维修内容
|
|
|
|
|
record.setRepairResult(dmsFaultInstanceActivity.getRepairContent());
|
|
|
|
|
// 默认未存档
|
|
|
|
|
record.setIsArchived("0");
|
|
|
|
|
|
|
|
|
|
dmsRepairRecordService.insertDmsRepairRecord(record);
|
|
|
|
|
log.info("【断点3】PDA自动创建维修记录,记录ID: {}", record.getRecordId());
|
|
|
|
|
|
|
|
|
|
// ========== 步骤6:更新派工计划状态为已完成 ==========
|
|
|
|
|
DmsDispatchPlan queryPlan = new DmsDispatchPlan();
|
|
|
|
|
queryPlan.setWorkOrderId(workOrder.getWorkOrderId());
|
|
|
|
|
List<DmsDispatchPlan> plans = dmsDispatchPlanService.selectDmsDispatchPlanList(queryPlan);
|
|
|
|
|
if (!CollectionUtils.isEmpty(plans)) {
|
|
|
|
|
DmsDispatchPlan updatePlan = new DmsDispatchPlan();
|
|
|
|
|
updatePlan.setPlanId(plans.get(0).getPlanId());
|
|
|
|
|
updatePlan.setExecutionStatus("2"); // 已完成
|
|
|
|
|
dmsDispatchPlanService.updateDmsDispatchPlan(updatePlan);
|
|
|
|
|
log.info("PDA更新派工计划[{}]状态为已完成", plans.get(0).getPlanCode());
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
log.warn("故障报修[{}]无关联维修工单,跳过维修记录创建", repairInstanceId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return success(result);
|
|
|
|
|
} catch (Exception e) {
|
|
|
|
|
log.error("PDA完成维修失败", e);
|
|
|
|
|
return error("完成维修失败:" + e.getMessage());
|
|
|
|
|
// ========== 步骤1:原有逻辑 - 设置确认信息和解析配件 ==========
|
|
|
|
|
dmsFaultInstanceActivity.setRepairConfirm(2);
|
|
|
|
|
dmsFaultInstanceActivity.setConfirmTime(new Date());
|
|
|
|
|
// 标记完成节点,确保维修内容/安全措施等信息持久化并可回显
|
|
|
|
|
dmsFaultInstanceActivity.setProcessActivityId(1021L);
|
|
|
|
|
String parts1 = dmsFaultInstanceActivity.getParts1();
|
|
|
|
|
if (parts1 != null && !parts1.isEmpty()) {
|
|
|
|
|
ObjectMapper objectMapper = new ObjectMapper();
|
|
|
|
|
List<DmsFaultCompentsParts> parts2 = objectMapper.readValue(parts1, new TypeReference<List<DmsFaultCompentsParts>>() {});
|
|
|
|
|
dmsFaultInstanceActivity.setParts(parts2);
|
|
|
|
|
}
|
|
|
|
|
List<String> fileUrls = new ArrayList<>();
|
|
|
|
|
dmsFaultInstanceActivity.setFileUrls(fileUrls);
|
|
|
|
|
|
|
|
|
|
// ========== 步骤2:调用原有的完成维修逻辑 ==========
|
|
|
|
|
int result = dmsBillsFaultInstanceService.completeRepair(dmsFaultInstanceActivity);
|
|
|
|
|
|
|
|
|
|
// ========== 步骤3:查询关联的维修工单 ==========
|
|
|
|
|
DmsRepairWorkOrder workOrder = dmsRepairWorkOrderService.selectByFaultInstanceId(repairInstanceId);
|
|
|
|
|
|
|
|
|
|
if (workOrder != null) {
|
|
|
|
|
// ========== 步骤4:更新维修工单状态为已完成 ==========
|
|
|
|
|
DmsRepairWorkOrder updateOrder = new DmsRepairWorkOrder();
|
|
|
|
|
updateOrder.setWorkOrderId(workOrder.getWorkOrderId());
|
|
|
|
|
updateOrder.setOrderStatus("3"); // 已完成
|
|
|
|
|
updateOrder.setActualEndTime(new Date());
|
|
|
|
|
updateOrder.setRepairResult("1"); // 维修结果:1-成功
|
|
|
|
|
updateOrder.setRepairNotes(dmsFaultInstanceActivity.getRepairContent()); // 维修内容存到维修说明
|
|
|
|
|
dmsRepairWorkOrderService.updateDmsRepairWorkOrder(updateOrder);
|
|
|
|
|
log.info("PDA更新维修工单[{}]状态为已完成", workOrder.getWorkOrderCode());
|
|
|
|
|
|
|
|
|
|
// ========== 步骤5:【断点3】自动创建维修记录 ==========
|
|
|
|
|
DmsRepairRecord record = new DmsRepairRecord();
|
|
|
|
|
record.setWorkOrderId(workOrder.getWorkOrderId());
|
|
|
|
|
record.setWorkOrderCode(workOrder.getWorkOrderCode());
|
|
|
|
|
record.setDeviceId(workOrder.getDeviceId());
|
|
|
|
|
record.setDeviceCode(workOrder.getDeviceCode());
|
|
|
|
|
record.setDeviceName(workOrder.getDeviceName());
|
|
|
|
|
record.setFaultPhenomenon(workOrder.getFaultDescription());
|
|
|
|
|
// 维修人员信息
|
|
|
|
|
if (dmsFaultInstanceActivity.getHandleUserId() != null) {
|
|
|
|
|
record.setRepairerId(dmsFaultInstanceActivity.getHandleUserId());
|
|
|
|
|
} else if (workOrder.getExecutorId() != null) {
|
|
|
|
|
record.setRepairerId(workOrder.getExecutorId());
|
|
|
|
|
}
|
|
|
|
|
if (repairer != null && !repairer.isEmpty()) {
|
|
|
|
|
record.setRepairerName(repairer);
|
|
|
|
|
} else if (workOrder.getExecutorName() != null) {
|
|
|
|
|
record.setRepairerName(workOrder.getExecutorName());
|
|
|
|
|
}
|
|
|
|
|
// 维修时间
|
|
|
|
|
record.setStartTime(workOrder.getActualStartTime());
|
|
|
|
|
record.setEndTime(new Date());
|
|
|
|
|
// 维修结果和维修方法
|
|
|
|
|
record.setRepairResult("1"); // 维修结果:1-成功
|
|
|
|
|
record.setRepairMethod(dmsFaultInstanceActivity.getRepairContent()); // 维修内容存到维修方法
|
|
|
|
|
// 默认未存档
|
|
|
|
|
record.setIsArchived("0");
|
|
|
|
|
|
|
|
|
|
dmsRepairRecordService.insertDmsRepairRecord(record);
|
|
|
|
|
log.info("【断点3】PDA自动创建维修记录,记录ID: {}", record.getRecordId());
|
|
|
|
|
|
|
|
|
|
// ========== 步骤6:更新派工计划状态为已完成 ==========
|
|
|
|
|
DmsDispatchPlan queryPlan = new DmsDispatchPlan();
|
|
|
|
|
queryPlan.setWorkOrderId(workOrder.getWorkOrderId());
|
|
|
|
|
List<DmsDispatchPlan> plans = dmsDispatchPlanService.selectDmsDispatchPlanList(queryPlan);
|
|
|
|
|
if (!CollectionUtils.isEmpty(plans)) {
|
|
|
|
|
DmsDispatchPlan updatePlan = new DmsDispatchPlan();
|
|
|
|
|
updatePlan.setPlanId(plans.get(0).getPlanId());
|
|
|
|
|
updatePlan.setExecutionStatus("2"); // 已完成
|
|
|
|
|
dmsDispatchPlanService.updateDmsDispatchPlan(updatePlan);
|
|
|
|
|
log.info("PDA更新派工计划[{}]状态为已完成", plans.get(0).getPlanCode());
|
|
|
|
|
}
|
|
|
|
|
} else {
|
|
|
|
|
log.warn("故障报修[{}]无关联维修工单,跳过维修记录创建", repairInstanceId);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return success(result);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|