|
@@ -0,0 +1,116 @@
|
|
|
|
+package cn.iocoder.yudao.module.pms.job.mainworkorder;
|
|
|
|
+
|
|
|
|
+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.job.TenantJob;
|
|
|
|
+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.IotInspectPlanDO;
|
|
|
|
+import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.IotInspectRouteDO;
|
|
|
|
+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.iotmainworkorder.IotMainWorkOrderService;
|
|
|
|
+import cn.iocoder.yudao.module.pms.service.maintenance.IotMaintenancePlanService;
|
|
|
|
+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.time.ZoneId;
|
|
|
|
+import java.util.*;
|
|
|
|
+import java.util.stream.Collectors;
|
|
|
|
+
|
|
|
|
+@Component
|
|
|
|
+@Slf4j
|
|
|
|
+public class CreateMainWorkOrderJob implements JobHandler {
|
|
|
|
+ @Resource
|
|
|
|
+ private IotInspectPlanMapper iotInspectPlanMapper;
|
|
|
|
+ @Resource
|
|
|
|
+ private IotInspectOrderMapper iotInspectOrderMapper;
|
|
|
|
+ @Autowired
|
|
|
|
+ private IotInspectOrderDetailMapper iotInspectOrderDetailMapper;
|
|
|
|
+
|
|
|
|
+ @Resource
|
|
|
|
+ private IotMaintenancePlanService iotMaintenancePlanService;
|
|
|
|
+ @Resource
|
|
|
|
+ private IotMainWorkOrderService iotMainWorkOrderService;
|
|
|
|
+
|
|
|
|
+ @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.setIndexId(Long.valueOf(String.valueOf(item.get("index"))));
|
|
|
|
+ detailDO.setDeleted(false);
|
|
|
|
+ results.add(detailDO);
|
|
|
|
+ });
|
|
|
|
+ });
|
|
|
|
+ iotInspectOrderDetailMapper.insertBatch(results);
|
|
|
|
+ }
|
|
|
|
+}
|