|
@@ -1,17 +1,23 @@
|
|
package cn.iocoder.yudao.module.pms.job.mainworkorder;
|
|
package cn.iocoder.yudao.module.pms.job.mainworkorder;
|
|
|
|
|
|
|
|
+import cn.hutool.core.collection.CollUtil;
|
|
import cn.hutool.core.date.DateTime;
|
|
import cn.hutool.core.date.DateTime;
|
|
import cn.hutool.core.date.DateUtil;
|
|
import cn.hutool.core.date.DateUtil;
|
|
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.iotmaintenancebom.vo.IotTobeMaintenanceBomRespVO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.IotInspectOrderDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.IotInspectOrderDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.IotInspectOrderDetailDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.IotInspectOrderDetailDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.IotInspectPlanDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.IotInspectPlanDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.IotInspectRouteDO;
|
|
import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.IotInspectRouteDO;
|
|
|
|
+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.mysql.inspect.IotInspectOrderDetailMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.inspect.IotInspectOrderDetailMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.inspect.IotInspectOrderMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.inspect.IotInspectOrderMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.inspect.IotInspectPlanMapper;
|
|
import cn.iocoder.yudao.module.pms.dal.mysql.inspect.IotInspectPlanMapper;
|
|
|
|
+import cn.iocoder.yudao.module.pms.enums.common.FailureAuditStatusEnum;
|
|
import cn.iocoder.yudao.module.pms.service.iotmainworkorder.IotMainWorkOrderService;
|
|
import cn.iocoder.yudao.module.pms.service.iotmainworkorder.IotMainWorkOrderService;
|
|
|
|
+import cn.iocoder.yudao.module.pms.service.iotmainworkorderbom.IotMainWorkOrderBomService;
|
|
import cn.iocoder.yudao.module.pms.service.maintenance.IotMaintenancePlanService;
|
|
import cn.iocoder.yudao.module.pms.service.maintenance.IotMaintenancePlanService;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -20,8 +26,8 @@ import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
import javax.annotation.Resource;
|
|
-import java.time.ZoneId;
|
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
|
|
+import java.util.concurrent.atomic.AtomicReference;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Component
|
|
@Component
|
|
@@ -38,27 +44,71 @@ public class CreateMainWorkOrderJob implements JobHandler {
|
|
private IotMaintenancePlanService iotMaintenancePlanService;
|
|
private IotMaintenancePlanService iotMaintenancePlanService;
|
|
@Resource
|
|
@Resource
|
|
private IotMainWorkOrderService iotMainWorkOrderService;
|
|
private IotMainWorkOrderService iotMainWorkOrderService;
|
|
|
|
+ @Resource
|
|
|
|
+ private IotMainWorkOrderBomService iotMainWorkOrderBomService;
|
|
|
|
|
|
@Override
|
|
@Override
|
|
@TenantJob
|
|
@TenantJob
|
|
public String execute(String param) throws Exception {
|
|
public String execute(String param) throws Exception {
|
|
- // 查询所有的 保养计划
|
|
|
|
- List<IotInspectPlanDO> plans = iotInspectPlanMapper.selectList();
|
|
|
|
- plans.forEach(plan -> {
|
|
|
|
- if (plan.getLastCreateTime()==null) {
|
|
|
|
- Date date = Date.from(
|
|
|
|
- plan.getCreateTime().atZone(ZoneId.systemDefault()) // 使用系统默认时区
|
|
|
|
- .toInstant() // 转为 Instant(时间戳)
|
|
|
|
- );
|
|
|
|
- deal(plan, date);
|
|
|
|
- } else {
|
|
|
|
- Date lastdate = Date.from(
|
|
|
|
- plan.getLastCreateTime().atZone(ZoneId.systemDefault()) // 使用系统默认时区
|
|
|
|
- .toInstant() // 转为 Instant(时间戳)
|
|
|
|
- );
|
|
|
|
- deal(plan, lastdate);
|
|
|
|
- }
|
|
|
|
- });
|
|
|
|
|
|
+ // 查询所有的 在保养规则周期内的 设备-bom 关联信息
|
|
|
|
+ List<IotTobeMaintenanceBomRespVO> tobeMaintenanceBomRespVOS = iotMaintenancePlanService.toBeMaintenanceDeviceBOMs();
|
|
|
|
+
|
|
|
|
+ Map<String, IotTobeMaintenanceBomRespVO> maintenancePair = new HashMap<>();
|
|
|
|
+ Map<String, Long> workOrderIdPair = new HashMap<>();
|
|
|
|
+ if (CollUtil.isNotEmpty(tobeMaintenanceBomRespVOS)) {
|
|
|
|
+ tobeMaintenanceBomRespVOS.forEach(maintenance -> {
|
|
|
|
+ maintenancePair.put(maintenance.getSerialNumber(), maintenance);
|
|
|
|
+ });
|
|
|
|
+ // 暂时使用以保养计划为维度,生成保养工单
|
|
|
|
+ // 查询最新的保养工单id
|
|
|
|
+ AtomicReference<Long> theMaxId = new AtomicReference<>(iotMainWorkOrderService.theMaxId());
|
|
|
|
+ List<IotMainWorkOrderDO> workOrders = new ArrayList<>();
|
|
|
|
+ List<IotMainWorkOrderBomDO> workOrderBOMs = new ArrayList<>();
|
|
|
|
+ // 组装工单集合
|
|
|
|
+ maintenancePair.forEach((k,v) ->{
|
|
|
|
+ IotMainWorkOrderDO workOrder = new IotMainWorkOrderDO();
|
|
|
|
+ theMaxId.getAndSet(theMaxId.get() + 1);
|
|
|
|
+ workOrder.setId(theMaxId.get());
|
|
|
|
+ workOrder.setDeptId(v.getDeptId());
|
|
|
|
+ workOrder.setPlanId(v.getId());
|
|
|
|
+ workOrder.setOrderNumber(iotMainWorkOrderService.createWorkOrderNumber());
|
|
|
|
+ workOrder.setName(v.getPlanName());
|
|
|
|
+ workOrder.setType(1); // 计划生成
|
|
|
|
+ workOrder.setResponsiblePerson(v.getResponsiblePerson());
|
|
|
|
+ workOrder.setAuditStatus(FailureAuditStatusEnum.DRAFT.getStatus());
|
|
|
|
+ workOrder.setCreator(v.getResponsiblePerson());
|
|
|
|
+ workOrders.add(workOrder);
|
|
|
|
+ workOrderIdPair.put(k, theMaxId.get());
|
|
|
|
+ });
|
|
|
|
+ // 组装 工单明细 集合
|
|
|
|
+ tobeMaintenanceBomRespVOS.forEach(maintenance -> {
|
|
|
|
+ IotMainWorkOrderBomDO workOrderBom = new IotMainWorkOrderBomDO();
|
|
|
|
+ workOrderBom.setWorkOrderId(workOrderIdPair.get(maintenance.getSerialNumber()));
|
|
|
|
+ workOrderBom.setDeviceCategoryId(maintenance.getDeviceCategoryId());
|
|
|
|
+ workOrderBom.setDeviceId(maintenance.getDeviceId());
|
|
|
|
+ workOrderBom.setMileageRule(maintenance.getMileageRule());
|
|
|
|
+ workOrderBom.setRunningTimeRule(maintenance.getRunningTimeRule());
|
|
|
|
+ workOrderBom.setNaturalDateRule(maintenance.getNaturalDateRule());
|
|
|
|
+ workOrderBom.setLastRunningTime(maintenance.getLastRunningTime());
|
|
|
|
+ workOrderBom.setNextRunningTime(maintenance.getNextRunningTime());
|
|
|
|
+ workOrderBom.setTimePeriodLead(maintenance.getTimePeriodLead());
|
|
|
|
+ workOrderBom.setLastRunningKilometers(maintenance.getLastRunningKilometers());
|
|
|
|
+ workOrderBom.setNextRunningKilometers(maintenance.getNextRunningKilometers());
|
|
|
|
+ workOrderBom.setKiloCycleLead(maintenance.getKiloCycleLead());
|
|
|
|
+ workOrderBom.setLastNaturalDate(maintenance.getLastNaturalDate());
|
|
|
|
+ workOrderBom.setNextNaturalDate(maintenance.getNextNaturalDate());
|
|
|
|
+ workOrderBom.setNaturalDatePeriodLead(maintenance.getNaturalDatePeriodLead());
|
|
|
|
+ workOrderBom.setBomNodeId(maintenance.getBomNodeId());
|
|
|
|
+ workOrderBom.setName(maintenance.getNodeName());
|
|
|
|
+ workOrderBom.setCode(maintenance.getCode());
|
|
|
|
+ workOrderBOMs.add(workOrderBom);
|
|
|
|
+ });
|
|
|
|
+ // 批量新增 保养工单记录
|
|
|
|
+ iotMainWorkOrderService.batchAddOrders(workOrders);
|
|
|
|
+ // 批量新增 保养工单明细
|
|
|
|
+ iotMainWorkOrderBomService.batchAddOrderBOMs(workOrderBOMs);
|
|
|
|
+ }
|
|
|
|
+ // 查询需要保养的node节点是否包含在正在执行的保养工单中
|
|
return "创建成功";
|
|
return "创建成功";
|
|
}
|
|
}
|
|
|
|
|