|
@@ -2,6 +2,9 @@ package cn.iocoder.yudao.module.pms.job.mainworkorder;
|
|
|
|
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.util.ObjUtil;
|
|
import cn.hutool.core.util.ObjUtil;
|
|
|
|
+import cn.hutool.core.util.StrUtil;
|
|
|
|
+import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
|
|
|
+import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
|
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
|
|
import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
|
|
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
|
|
import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceperson.vo.IotDevicePersonPageReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceperson.vo.IotDevicePersonPageReqVO;
|
|
@@ -9,12 +12,14 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotdevicerunlog.vo.IotDevice
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotmaintenancebom.vo.IotMaintenanceBomPageReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotmaintenancebom.vo.IotMaintenanceBomPageReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbom.vo.IotMainWorkOrderBomPageReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbom.vo.IotMainWorkOrderBomPageReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.maintenance.vo.IotMaintenancePlanPageReqVO;
|
|
import cn.iocoder.yudao.module.pms.controller.admin.maintenance.vo.IotMaintenancePlanPageReqVO;
|
|
|
|
+import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDeviceRespVO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotdeviceperson.IotDevicePersonDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotdeviceperson.IotDevicePersonDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaintenancebom.IotMaintenanceBomDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotmaintenancebom.IotMaintenanceBomDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorder.IotMainWorkOrderDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorder.IotMainWorkOrderDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorderbom.IotMainWorkOrderBomDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorderbom.IotMainWorkOrderBomDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.maintenance.IotMaintenancePlanDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.maintenance.IotMaintenancePlanDO;
|
|
import cn.iocoder.yudao.module.pms.enums.common.FailureAuditStatusEnum;
|
|
import cn.iocoder.yudao.module.pms.enums.common.FailureAuditStatusEnum;
|
|
|
|
+import cn.iocoder.yudao.module.pms.service.IotDeviceService;
|
|
import cn.iocoder.yudao.module.pms.service.iotdeviceperson.IotDevicePersonService;
|
|
import cn.iocoder.yudao.module.pms.service.iotdeviceperson.IotDevicePersonService;
|
|
import cn.iocoder.yudao.module.pms.service.iotdevicerunlog.IotDeviceRunLogService;
|
|
import cn.iocoder.yudao.module.pms.service.iotdevicerunlog.IotDeviceRunLogService;
|
|
import cn.iocoder.yudao.module.pms.service.iotmaintenancebom.IotMaintenanceBomService;
|
|
import cn.iocoder.yudao.module.pms.service.iotmaintenancebom.IotMaintenanceBomService;
|
|
@@ -28,6 +33,7 @@ import org.springframework.stereotype.Component;
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
import java.time.LocalDateTime;
|
|
import java.time.LocalDateTime;
|
|
|
|
+import java.time.format.DateTimeFormatter;
|
|
import java.util.*;
|
|
import java.util.*;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
@@ -51,6 +57,8 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
private IotMainWorkOrderService iotMainWorkOrderService;
|
|
private IotMainWorkOrderService iotMainWorkOrderService;
|
|
@Resource
|
|
@Resource
|
|
private IotMainWorkOrderBomService iotMainWorkOrderBomService;
|
|
private IotMainWorkOrderBomService iotMainWorkOrderBomService;
|
|
|
|
+ @Resource
|
|
|
|
+ private IotDeviceService iotDeviceService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@TenantJob
|
|
@TenantJob
|
|
@@ -91,6 +99,8 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
)
|
|
)
|
|
));
|
|
));
|
|
}
|
|
}
|
|
|
|
+ // 查询所有设备名称 设备编码集合
|
|
|
|
+ Map<Long, IotDeviceRespVO> devices = iotDeviceService.getDeviceMap(deviceIds);
|
|
// 查询保养计划明细中所有设备的累计运行里程、累计运行时间
|
|
// 查询保养计划明细中所有设备的累计运行里程、累计运行时间
|
|
Map<Long, IotDeviceRunLogRespVO> deviceRunLogMap = iotDeviceRunLogService.getDeviceRunLogMap(convertListByFlatMap(mainBomList,
|
|
Map<Long, IotDeviceRunLogRespVO> deviceRunLogMap = iotDeviceRunLogService.getDeviceRunLogMap(convertListByFlatMap(mainBomList,
|
|
bom -> Stream.of(bom.getDeviceId())));
|
|
bom -> Stream.of(bom.getDeviceId())));
|
|
@@ -207,13 +217,13 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
});
|
|
});
|
|
// 以保养计划id对待保养工单分组 分组后便于生成 保养工单主表记录
|
|
// 以保养计划id对待保养工单分组 分组后便于生成 保养工单主表记录
|
|
// key保养计划id value待保养工单明细集合
|
|
// key保养计划id value待保养工单明细集合
|
|
- Map<Long, List<IotMainWorkOrderBomDO>> workOrderBomPair = new HashMap<>();
|
|
|
|
|
|
+ // Map<Long, List<IotMainWorkOrderBomDO>> workOrderBomPair = new HashMap<>();
|
|
// 以设备为维度 统计每种设备对应的 保养项集合 key保养计划id+设备id value设备对应的保养项集合
|
|
// 以设备为维度 统计每种设备对应的 保养项集合 key保养计划id+设备id value设备对应的保养项集合
|
|
Map<String, List<IotMainWorkOrderBomDO>> deviceBomPair = new HashMap<>();
|
|
Map<String, List<IotMainWorkOrderBomDO>> deviceBomPair = new HashMap<>();
|
|
// 最终使用的保养工单明细 设置了保养工单主表id
|
|
// 最终使用的保养工单明细 设置了保养工单主表id
|
|
List<IotMainWorkOrderBomDO> finalWorkOrderBomS = new ArrayList<>();
|
|
List<IotMainWorkOrderBomDO> finalWorkOrderBomS = new ArrayList<>();
|
|
if (CollUtil.isNotEmpty(workOrderBOMs)) {
|
|
if (CollUtil.isNotEmpty(workOrderBOMs)) {
|
|
- workOrderBOMs.forEach(workOrderBom -> {
|
|
|
|
|
|
+ /* workOrderBOMs.forEach(workOrderBom -> {
|
|
if (workOrderBomPair.containsKey(workOrderBom.getWorkOrderId())) {
|
|
if (workOrderBomPair.containsKey(workOrderBom.getWorkOrderId())) {
|
|
List<IotMainWorkOrderBomDO> tempOrderBomS = workOrderBomPair.get(workOrderBom.getWorkOrderId());
|
|
List<IotMainWorkOrderBomDO> tempOrderBomS = workOrderBomPair.get(workOrderBom.getWorkOrderId());
|
|
tempOrderBomS.add(workOrderBom);
|
|
tempOrderBomS.add(workOrderBom);
|
|
@@ -223,7 +233,7 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
tempOrderBomS.add(workOrderBom);
|
|
tempOrderBomS.add(workOrderBom);
|
|
workOrderBomPair.put(workOrderBom.getWorkOrderId(), tempOrderBomS);
|
|
workOrderBomPair.put(workOrderBom.getWorkOrderId(), tempOrderBomS);
|
|
}
|
|
}
|
|
- });
|
|
|
|
|
|
+ }); */
|
|
// 组装设备及对应的 保养项集合 map
|
|
// 组装设备及对应的 保养项集合 map
|
|
workOrderBOMs.forEach(bom -> {
|
|
workOrderBOMs.forEach(bom -> {
|
|
String uniqueKey = bom.getWorkOrderId()+"-"+bom.getDeviceId();
|
|
String uniqueKey = bom.getWorkOrderId()+"-"+bom.getDeviceId();
|
|
@@ -239,11 +249,55 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
});
|
|
});
|
|
|
|
|
|
// 按照 保养计划id+设备id 分组 每个"保养计划id+设备id" 生成一个工单
|
|
// 按照 保养计划id+设备id 分组 每个"保养计划id+设备id" 生成一个工单
|
|
- deviceBomPair.forEach((k,v) -> {
|
|
|
|
-
|
|
|
|
|
|
+ Map<Long, List<Long>> finalDevicePersonPair = devicePersonPair;
|
|
|
|
+ // 获取当前时间的 yyyy-MM-dd 格式
|
|
|
|
+ String currentDate = LocalDateTime.now().format(DateTimeFormatter.ofPattern(DateUtils.FORMAT_YEAR_MONTH_DAY));
|
|
|
|
+ deviceBomPair.forEach((k, v) -> {
|
|
|
|
+ String[] planIdDeviceIdStrS = k.split("-");
|
|
|
|
+ // 查询当前设备关联的责任人 如果有多个责任人 需要建立多个对应的工单 但是多个工单 要建立关联关系
|
|
|
|
+ if (finalDevicePersonPair.containsKey(Long.valueOf(planIdDeviceIdStrS[1]))) {
|
|
|
|
+ List<Long> personIds = finalDevicePersonPair.get(Long.valueOf(planIdDeviceIdStrS[1]));
|
|
|
|
+ if (CollUtil.isNotEmpty(personIds)) {
|
|
|
|
+ // 多个责任人的相同工单 使用 order_group_id 建立关联
|
|
|
|
+ String orderGroupId = StrUtil.uuid();
|
|
|
|
+ personIds.forEach(personId -> {
|
|
|
|
+ // k保养计划id v已经触发的保养工单明细
|
|
|
|
+ IotMaintenancePlanDO plan = maintenancePair.get(Long.valueOf(planIdDeviceIdStrS[0]));
|
|
|
|
+ IotMainWorkOrderDO workOrder = new IotMainWorkOrderDO();
|
|
|
|
+ theMaxId.getAndSet(theMaxId.get() + 1);
|
|
|
|
+ workOrder.setId(theMaxId.get());
|
|
|
|
+ // 设备多个责任人关联工单标识
|
|
|
|
+ workOrder.setOrderGroupId(orderGroupId);
|
|
|
|
+ // 查询设备对应的部门
|
|
|
|
+ workOrder.setDeptId(plan.getDeptId());
|
|
|
|
+ workOrder.setName(plan.getName() + " 工单");
|
|
|
|
+ if (devices.containsKey(Long.valueOf(planIdDeviceIdStrS[1]))) {
|
|
|
|
+ workOrder.setDeptId(devices.get(Long.valueOf(planIdDeviceIdStrS[1])).getDeptId());
|
|
|
|
+ workOrder.setName(devices.get(Long.valueOf(planIdDeviceIdStrS[1])).getDeviceCode() + " "
|
|
|
|
+ + devices.get(Long.valueOf(planIdDeviceIdStrS[1])).getDeviceName() + currentDate + " 保养工单");
|
|
|
|
+ }
|
|
|
|
+ workOrder.setPlanId(plan.getId());
|
|
|
|
+ workOrder.setOrderNumber(iotMainWorkOrderService.createWorkOrderNumber());
|
|
|
|
+ workOrder.setType(1); // 计划生成
|
|
|
|
+ workOrder.setResult(1); // 待执行
|
|
|
|
+ workOrder.setResponsiblePerson(String.valueOf(personId));
|
|
|
|
+ workOrder.setAuditStatus(FailureAuditStatusEnum.DRAFT.getStatus());
|
|
|
|
+ workOrder.setCreator(String.valueOf(personId));
|
|
|
|
+ workOrders.add(workOrder);
|
|
|
|
+ // 2. 处理关联的BOM明细
|
|
|
|
+ final long workOrderId = workOrder.getId(); // 获取当前工单ID
|
|
|
|
+ v.forEach(bom -> {
|
|
|
|
+ IotMainWorkOrderBomDO tempBom = new IotMainWorkOrderBomDO();
|
|
|
|
+ BeanUtils.copyProperties(bom,tempBom);
|
|
|
|
+ tempBom.setWorkOrderId(workOrderId);
|
|
|
|
+ finalWorkOrderBomS.add(tempBom);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
});
|
|
});
|
|
|
|
|
|
- workOrderBomPair.forEach((k,v) -> {
|
|
|
|
|
|
+ /* workOrderBomPair.forEach((k,v) -> {
|
|
// k保养计划id v已经触发的保养工单明细
|
|
// k保养计划id v已经触发的保养工单明细
|
|
IotMaintenancePlanDO plan = maintenancePair.get(k);
|
|
IotMaintenancePlanDO plan = maintenancePair.get(k);
|
|
IotMainWorkOrderDO workOrder = new IotMainWorkOrderDO();
|
|
IotMainWorkOrderDO workOrder = new IotMainWorkOrderDO();
|
|
@@ -264,7 +318,7 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
v.forEach(bom -> bom.setWorkOrderId(workOrderId)); // 设置明细关联ID
|
|
v.forEach(bom -> bom.setWorkOrderId(workOrderId)); // 设置明细关联ID
|
|
// 3. 添加到最终集合
|
|
// 3. 添加到最终集合
|
|
finalWorkOrderBomS.addAll(v);
|
|
finalWorkOrderBomS.addAll(v);
|
|
- });
|
|
|
|
|
|
+ }); */
|
|
}
|
|
}
|
|
// 批量新增 保养工单记录
|
|
// 批量新增 保养工单记录
|
|
if (CollUtil.isNotEmpty(workOrders)) {
|
|
if (CollUtil.isNotEmpty(workOrders)) {
|