lipenghui 3 місяців тому
батько
коміт
f460e70d8b

+ 5 - 0
yudao-module-pms/yudao-module-pms-api/src/main/java/cn/iocoder/yudao/module/pms/enums/ErrorCodeConstant.java

@@ -43,4 +43,9 @@ public interface ErrorCodeConstant{
     ErrorCode IOT_INSPECT_PLAN_NOT_EXISTS = new ErrorCode(135, "巡检计划不存在");
     ErrorCode IOT_INSPECT_ORDER_NOT_EXISTS = new ErrorCode(136, "巡检工单不存在");
     ErrorCode IOT_INSPECT_ORDER_DETAIL_NOT_EXISTS = new ErrorCode(137, "巡检工单巡检明细不存在");
+    ErrorCode IOT_MAIN_WORK_ORDER_DETAILS_NOT_EXISTS = new ErrorCode(138, "保养工单详情不存在");
+    ErrorCode IOT_MAIN_WORK_ORDER_BOM_NOT_EXISTS = new ErrorCode(138, "保养工单BOM不存在");
+    ErrorCode IOT_MAIN_WORK_ORDER_BOM_MATERIAL_NOT_EXISTS = new ErrorCode(139,"保养bom物料不存在");
+    ErrorCode IOT_MAINTENANCE_PLAN_NO_EXISTS = new ErrorCode(140,"维修计划不存在");
+    ErrorCode IOT_MAIN_WORK_ORDER_NOT_EXISTS = new ErrorCode(141,"保养工单不存在");
 }

+ 3 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/inspect/order/vo/IotInspectOrderPageReqVO.java

@@ -37,4 +37,7 @@ public class IotInspectOrderPageReqVO extends PageParam {
     @Schema(description = "设备id")
     private String deviceIds;
 
+    private String type;
+
+    private String charge;
 }

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/inspect/order/vo/IotInspectOrderRespVO.java

@@ -44,4 +44,5 @@ public class IotInspectOrderRespVO {
     @ExcelProperty("设备id")
     private String deviceIds;
 
+    private String type;
 }

+ 5 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/inspect/IotInspectOrderDO.java

@@ -52,4 +52,9 @@ public class IotInspectOrderDO extends BaseDO {
      */
     private String deviceIds;
 
+    private String type;
+
+    private String charge;
+    private String planCode;
+    private String chargeName;
 }

+ 2 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/inspect/IotInspectPlanDO.java

@@ -64,4 +64,6 @@ public class IotInspectPlanDO extends BaseDO {
     private Long deptId;
 
     private Integer status;
+
+    private LocalDateTime lastCreateTime;
 }

+ 1 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/inspect/IotInspectOrderMapper.java

@@ -26,6 +26,7 @@ public interface IotInspectOrderMapper extends BaseMapperX<IotInspectOrderDO> {
                 .betweenIfPresent(IotInspectOrderDO::getCreateTime, reqVO.getCreateTime())
                 .eqIfPresent(IotInspectOrderDO::getDeptId, reqVO.getDeptId())
                 .eqIfPresent(IotInspectOrderDO::getDeviceIds, reqVO.getDeviceIds())
+                .likeIfPresent(IotInspectOrderDO::getCharge, reqVO.getCharge())
                 .orderByDesc(IotInspectOrderDO::getId));
     }
 

+ 108 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/InspectCreateOrderJob.java

@@ -0,0 +1,108 @@
+package cn.iocoder.yudao.module.pms.job;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
+import cn.iocoder.yudao.framework.tenant.core.job.TenantJob;
+import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.*;
+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.IotInspectPlanMapper;
+import cn.iocoder.yudao.module.pms.service.inspect.IotInspectPlanService;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.Resource;
+import java.math.BigDecimal;
+import java.time.ZoneId;
+import java.util.*;
+import java.util.stream.Collectors;
+
+@Component
+@Slf4j
+public class InspectCreateOrderJob implements JobHandler {
+    @Resource
+    private IotInspectPlanMapper iotInspectPlanMapper;
+    @Resource
+    private IotInspectOrderMapper iotInspectOrderMapper;
+    @Autowired
+    private IotInspectOrderDetailMapper iotInspectOrderDetailMapper;
+
+    @Override
+    @TenantJob
+    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);
+            }
+        });
+        return "创建成功";
+    }
+
+    private void deal(IotInspectPlanDO plan, Date date) {
+        Date date1 = new Date();
+        if ("hour".equals(plan.getPlanUnit())){
+            //todo
+            DateTime dateTime = DateUtil.offsetMinute(date, Integer.parseInt(StringUtils.substringBeforeLast(String.valueOf(plan.getPlanCycle()),".")));
+            if (date1.compareTo(dateTime) > 0){
+                createPlan(plan);
+            }
+        } else if ("day".equals(plan.getPlanUnit())){
+            DateTime dateTime = DateUtil.offsetDay(date, Integer.parseInt(String.valueOf(plan.getPlanCycle())));
+            if (date1.compareTo(dateTime) > 0){
+                createPlan(plan);
+            }
+        } else if ("month".equals(plan.getPlanUnit())){
+            DateTime dateTime = DateUtil.offsetMonth(date, Integer.parseInt(String.valueOf(plan.getPlanCycle())));
+            if (date1.compareTo(dateTime) > 0){
+                createPlan(plan);
+            }
+        }
+    }
+
+    private void createPlan(IotInspectPlanDO iotInspectPlan) {
+        IotInspectOrderDO iotInspectOrderDO = new IotInspectOrderDO();
+        iotInspectOrderDO.setInspectOrderTitle(iotInspectPlan.getPlanTitle()+"-巡检工单");
+        iotInspectOrderDO.setInspectOrderCode("IN"+ DateUtil.format(new Date(),"yyyyMMddHHmmss"));
+        String collect = Arrays.stream(iotInspectPlan.getCharge().split(",")).map(charge -> "io" + charge + "io").collect(Collectors.joining(","));
+        iotInspectOrderDO.setCharge(collect);
+        iotInspectOrderDO.setStatus("todo");
+        iotInspectOrderDO.setDeviceIds(iotInspectPlan.getDeviceIds());
+        iotInspectOrderDO.setType("计划生成");
+        iotInspectOrderDO.setPlanCode(iotInspectPlan.getPlanCode());
+        iotInspectOrderDO.setDeleted(false);
+        iotInspectOrderDO.setChargeName(iotInspectPlan.getChargeName());
+        iotInspectOrderMapper.insert(iotInspectOrderDO);
+        List<IotInspectRouteDO> routeDOS = JSON.parseArray(iotInspectPlan.getDeviceIds(), IotInspectRouteDO.class);
+        List<IotInspectOrderDetailDO> results = new ArrayList<>();
+        //处理巡检项
+        routeDOS.forEach(routeDO -> {
+            List<Map> itemos = JSON.parseArray(routeDO.getItemJson(), Map.class);
+            itemos.forEach(item -> {
+                IotInspectOrderDetailDO detailDO = new IotInspectOrderDetailDO();
+                detailDO.setOrderId(iotInspectOrderDO.getId());
+                detailDO.setDeviceId(routeDO.getDeviceId());
+                detailDO.setItemId(Long.valueOf(String.valueOf(item.get("itemId"))));
+
+                detailDO.setDeleted(false);
+                results.add(detailDO);
+            });
+        });
+        iotInspectOrderDetailMapper.insertBatch(results);
+    }
+}

+ 2 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/inspect/IotInspectPlanServiceImpl.java

@@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.pms.service.inspect;
 import cn.hutool.core.date.DateUtil;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.plan.vo.IotInspectPlanPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.plan.vo.IotInspectPlanSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.IotInspectPlanDO;
@@ -35,7 +36,6 @@ public class IotInspectPlanServiceImpl implements IotInspectPlanService {
     private IotInspectPlanMapper iotInspectPlanMapper;
     @Autowired
     private AdminUserApi adminUserApi;
-
     @Override
     public void updateInspectPlanStatus(Long id, Integer status) {
         IotInspectPlanDO iotInspectPlanDO = iotInspectPlanMapper.selectById(id).setStatus(status);
@@ -54,6 +54,7 @@ public class IotInspectPlanServiceImpl implements IotInspectPlanService {
         String collect1 = adminUserApi.getUserList(collect).stream().map(AdminUserRespDTO::getNickname).collect(Collectors.joining(","));
         iotInspectPlan.setChargeName(collect1);
         iotInspectPlanMapper.insert(iotInspectPlan);
+        //创建定时任务
         // 返回
         return iotInspectPlan.getId();
     }

+ 3 - 3
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/iotmainworkorderbom/IotMainWorkOrderBomServiceImpl.java

@@ -6,13 +6,13 @@ import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbom.vo.IotMa
 import cn.iocoder.yudao.module.pms.controller.admin.iotmainworkorderbom.vo.IotMainWorkOrderBomSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotmainworkorderbom.IotMainWorkOrderBomDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.iotmainworkorderbom.IotMainWorkOrderBomMapper;
+import cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 
 import javax.annotation.Resource;
 
 import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
-import static cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant.IOT_MAIN_WORK_ORDER_BOM_NOT_EXISTS;
 
 /**
  * PMS 保养计划明细BOM Service 实现类
@@ -54,7 +54,7 @@ public class IotMainWorkOrderBomServiceImpl implements IotMainWorkOrderBomServic
 
     private void validateIotMainWorkOrderBomExists(Long id) {
         if (iotMainWorkOrderBomMapper.selectById(id) == null) {
-            throw exception(IOT_MAIN_WORK_ORDER_BOM_NOT_EXISTS);
+            throw exception(ErrorCodeConstant.IOT_MAIN_WORK_ORDER_BOM_NOT_EXISTS);
         }
     }
 
@@ -68,4 +68,4 @@ public class IotMainWorkOrderBomServiceImpl implements IotMainWorkOrderBomServic
         return iotMainWorkOrderBomMapper.selectPage(pageReqVO);
     }
 
-}
+}