|
|
|
@ -189,6 +189,8 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS
|
|
|
|
|
add.setApproveStatus(DmsConstants.DMS_BILLS_FAULT_INSTANCE_APPROVE_STATUS_PENDING);
|
|
|
|
|
// 设置实例类型为手动录入
|
|
|
|
|
add.setInstanceType(DmsConstants.DMS_BILLS_FAULT_INSTANCE_TYPE_MAUAL);
|
|
|
|
|
// 【修复】工单创建时确认状态应该为null,不设置任何值
|
|
|
|
|
add.setRepairConfirm(null);
|
|
|
|
|
|
|
|
|
|
boolean flag = baseMapper.insert(add) > 0;
|
|
|
|
|
if (flag) {
|
|
|
|
@ -517,7 +519,7 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS
|
|
|
|
|
* 主管确认维修结果
|
|
|
|
|
*
|
|
|
|
|
* @param repairInstanceId 工单ID
|
|
|
|
|
* @param confirmResult 确认结果(1-确认完成)
|
|
|
|
|
* @param confirmResult 确认结果(1-确认通过,2-确认不通过)
|
|
|
|
|
* @param confirmUser 确认人
|
|
|
|
|
* @return 是否确认成功
|
|
|
|
|
*/
|
|
|
|
@ -539,35 +541,57 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS
|
|
|
|
|
throw new ServiceException("工单已经确认过了");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 更新确认状态
|
|
|
|
|
// 根据确认结果设置不同的业务状态
|
|
|
|
|
if ("1".equals(confirmResult)) {
|
|
|
|
|
// 确认通过:完成工单
|
|
|
|
|
workOrder.setRepairConfirm(confirmResult);
|
|
|
|
|
workOrder.setConfirmUser(confirmUser);
|
|
|
|
|
workOrder.setConfirmUser(confirmUser != null ? confirmUser : LoginHelper.getUsername());
|
|
|
|
|
workOrder.setConfirmTime(new Date());
|
|
|
|
|
} else {
|
|
|
|
|
// 确认不通过:返回到维修环节,重置相关状态
|
|
|
|
|
workOrder.setRepairConfirm(confirmResult);
|
|
|
|
|
workOrder.setConfirmUser(confirmUser != null ? confirmUser : LoginHelper.getUsername());
|
|
|
|
|
workOrder.setConfirmTime(new Date());
|
|
|
|
|
// 重置工单状态为待维修,让维修人员重新维修
|
|
|
|
|
workOrder.setBillsStatus(DmsConstants.DMS_BILLS_FAULT_INSTANCE_STATUS_TO_REPAIR);
|
|
|
|
|
// 清空实际结束时间,因为需要重新维修
|
|
|
|
|
workOrder.setRealEndTime(null);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 推进工作流到最终完成状态
|
|
|
|
|
// 推进工作流:业务状态和工作流分支变量分离处理
|
|
|
|
|
if (workOrder.getWfDefinitionId() != null) {
|
|
|
|
|
Long currentTaskId = remoteWorkflowService.getCurrentTaskIdByInstanceId(workOrder.getWfDefinitionId());
|
|
|
|
|
if (currentTaskId != null) {
|
|
|
|
|
RemoteCompleteTask remoteCompleteTask = new RemoteCompleteTask();
|
|
|
|
|
remoteCompleteTask.setTaskId(currentTaskId);
|
|
|
|
|
remoteCompleteTask.setMessage("主管确认完成");
|
|
|
|
|
|
|
|
|
|
// 设置工作流变量 - 用于互斥网关判断分支走向
|
|
|
|
|
Map<String, Object> variables = new HashMap<>();
|
|
|
|
|
if ("1".equals(confirmResult)) {
|
|
|
|
|
// 确认通过:工作流分支变量=0(走确认通过分支,结束流程)
|
|
|
|
|
remoteCompleteTask.setMessage("主管确认通过,工单完成");
|
|
|
|
|
variables.put("repairConfirm", "0");
|
|
|
|
|
} else {
|
|
|
|
|
// 确认不通过:工作流分支变量=1(走确认不通过分支,返回维修环节)
|
|
|
|
|
remoteCompleteTask.setMessage("主管确认不通过,返回维修环节");
|
|
|
|
|
variables.put("repairConfirm", "1");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
variables.put("businessId", repairInstanceId.toString());
|
|
|
|
|
remoteCompleteTask.setVariables(variables);
|
|
|
|
|
|
|
|
|
|
List<String> messageTypes = new ArrayList<>();
|
|
|
|
|
messageTypes.add("system");
|
|
|
|
|
remoteCompleteTask.setMessageType(messageTypes);
|
|
|
|
|
|
|
|
|
|
// 设置工作流变量 - repairConfirm用于互斥网关判断
|
|
|
|
|
// 确认通过传0,确认不通过传1
|
|
|
|
|
Map<String, Object> variables = new HashMap<>();
|
|
|
|
|
if ("1".equals(confirmResult)) {
|
|
|
|
|
// 确认完成 -> 工作流变量设为0(确认通过)
|
|
|
|
|
variables.put("repairConfirm", "0");
|
|
|
|
|
boolean workflowResult = remoteWorkflowService.completeTask(remoteCompleteTask);
|
|
|
|
|
if (!workflowResult) {
|
|
|
|
|
log.warn("工作流推进失败,但业务状态已更新成功,repairInstanceId: {}, confirmResult: {}",
|
|
|
|
|
repairInstanceId, confirmResult);
|
|
|
|
|
} else {
|
|
|
|
|
// 其他情况 -> 工作流变量设为1(确认不通过)
|
|
|
|
|
variables.put("repairConfirm", "1");
|
|
|
|
|
log.info("主管确认完成,工作流推进成功,repairInstanceId: {}, confirmResult: {}",
|
|
|
|
|
repairInstanceId, confirmResult);
|
|
|
|
|
}
|
|
|
|
|
remoteCompleteTask.setVariables(variables);
|
|
|
|
|
|
|
|
|
|
remoteWorkflowService.completeTask(remoteCompleteTask);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -713,6 +737,16 @@ public class DmsBillsFaultInstanceServiceImpl implements IDmsBillsFaultInstanceS
|
|
|
|
|
public DmsBillsFaultInstanceVo selectDmsBillsFaultInstanceByRepairInstanceId(Long repairInstanceId) {
|
|
|
|
|
// 根据repairInstanceId查询故障实例及其关联的设备和第一条活动记录
|
|
|
|
|
DmsBillsFaultInstanceVo dmsBillsFaultInstance = baseMapper.selectFaultInstanceJoinFirstAndDeviceById(repairInstanceId);
|
|
|
|
|
|
|
|
|
|
// 【关键修复】查询零部件信息,确保PDA端兼容性
|
|
|
|
|
List<DmsFaultComponentsPartsVo> partsVoList = baseMapper.selectParts(repairInstanceId);
|
|
|
|
|
if (partsVoList == null) {
|
|
|
|
|
partsVoList = new ArrayList<>(); // 确保不为null
|
|
|
|
|
}
|
|
|
|
|
// 转换为实体对象并设置到工单中
|
|
|
|
|
List<DmsFaultComponentsParts> partsList = MapstructUtils.convert(partsVoList, DmsFaultComponentsParts.class);
|
|
|
|
|
dmsBillsFaultInstance.setParts(partsList);
|
|
|
|
|
|
|
|
|
|
// 创建实例文件查询对象
|
|
|
|
|
DmsInstanceFileBo queryInstanceFile = new DmsInstanceFileBo();
|
|
|
|
|
// 设置目标类型为故障实例活动
|
|
|
|
|