Jelajahi Sumber

巡检定时任务及工单

lipenghui 2 bulan lalu
induk
melakukan
67cac597c9

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

@@ -69,4 +69,5 @@ public interface ErrorCodeConstant{
     ErrorCode IOT_PROJECT_INFO_NOT_EXISTS = new ErrorCode(152, "项目信息不存在");
     ErrorCode IOT_PROJECT_TASK_NOT_EXISTS = new ErrorCode(153, "该任务不存在");
     ErrorCode PRODUCT_EXITS_CHILDREN = new ErrorCode(1_002_004_003, "存在子分类,无法删除");
+    ErrorCode INSPECT_DEVICE_CHANGE = new ErrorCode(154, "该工单设备已调拨");
 }

+ 49 - 11
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/inspect/order/IotInspectOrderController.java

@@ -1,38 +1,46 @@
 package cn.iocoder.yudao.module.pms.controller.admin.inspect.order;
 
 import cn.hutool.core.collection.CollUtil;
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
 import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
+import cn.iocoder.yudao.framework.common.exception.ServiceException;
 import cn.iocoder.yudao.framework.common.pojo.CommonResult;
 import cn.iocoder.yudao.framework.common.pojo.PageParam;
 import cn.iocoder.yudao.framework.common.pojo.PageResult;
 import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
+import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
 import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.tenant.core.aop.TenantIgnore;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
 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.mysql.inspect.IotInspectOrderDetailMapper;
+import cn.iocoder.yudao.module.pms.enums.ErrorCodeConstant;
 import cn.iocoder.yudao.module.pms.service.IotDeviceService;
 import cn.iocoder.yudao.module.pms.service.inspect.IotInspectOrderService;
+import cn.iocoder.yudao.module.pms.service.inspect.IotInspectPlanService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import lombok.Data;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.annotation.security.PermitAll;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.time.ZoneId;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
@@ -51,6 +59,8 @@ public class IotInspectOrderController {
     private IotInspectOrderDetailMapper iotInspectOrderDetailMapper;
     @Autowired
     private IotDeviceService iotDeviceService;
+    @Autowired
+    private IotInspectPlanService iotInspectPlanService;
 
     @PostMapping("/create")
     @Operation(summary = "创建巡检工单")
@@ -90,12 +100,17 @@ public class IotInspectOrderController {
             IotDeviceDO iotDevice = iotDeviceService.getIotDevice(k);
             OrderDetail orderDetail = new OrderDetail();
             orderDetail.setDeviceId(k);
-            orderDetail.setDeviceName(iotDevice.getDeviceName());
-            orderDetail.setDeviceCode(iotDevice.getDeviceCode());
-            orderDetail.setOrderDetails(v);
-            orderDetails.add(orderDetail);
+            if (Objects.nonNull(iotDevice)) {
+                orderDetail.setDeviceName(iotDevice.getDeviceName());
+                orderDetail.setDeviceCode(iotDevice.getDeviceCode());
+                orderDetail.setOrderDetails(v);
+                orderDetails.add(orderDetail);
+            }
         });
 
+        if (CollUtil.isEmpty(orderDetails)) {
+            throw new ServiceException(ErrorCodeConstant.INSPECT_DEVICE_CHANGE);
+        }
         bean.setDetails(orderDetails);
         return success(bean);
     }
@@ -112,10 +127,15 @@ public class IotInspectOrderController {
             IotDeviceDO iotDevice = iotDeviceService.getIotDevice(k);
             OrderDetail orderDetail = new OrderDetail();
             orderDetail.setDeviceId(k);
-            orderDetail.setDeviceName(iotDevice.getDeviceCode()+iotDevice.getDeviceName());
-            orderDetail.setOrderDetails(v);
-            orderDetails.add(orderDetail);
+            if (Objects.nonNull(iotDevice)) {
+                orderDetail.setDeviceName(iotDevice.getDeviceCode()+iotDevice.getDeviceName());
+                orderDetail.setOrderDetails(v);
+                orderDetails.add(orderDetail);
+            }
         });
+        if (CollUtil.isEmpty(orderDetails)) {
+            throw new ServiceException(ErrorCodeConstant.INSPECT_DEVICE_CHANGE);
+        }
         return success(orderDetails);
     }
 
@@ -170,4 +190,22 @@ public class IotInspectOrderController {
         return CommonResult.success("成功");
     }
 
+    @GetMapping("/test")
+    @PermitAll
+    @DataPermission(enable = false)
+    @TenantIgnore
+    public void test(){
+        IotInspectPlanDO plan = iotInspectPlanService.getIotInspectPlan(38L);
+        Date date = Date.from(
+                plan.getLastCreateTime().atZone(ZoneId.systemDefault()) // 使用系统默认时区
+                        .toInstant()                    // 转为 Instant(时间戳)
+        );
+        Date date1 = new Date();
+        int i = Integer.parseInt(StringUtils.substringBeforeLast(String.valueOf(plan.getPlanCycle()), "."));
+        DateTime dateTime = DateUtil.offsetHour(date, i);
+        if (date1.compareTo(dateTime) > 0){
+            System.out.println("-----------------");
+        }
+    }
+
 }

+ 14 - 45
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/service/inspect/IotInspectOrderServiceImpl.java

@@ -4,11 +4,13 @@ import cn.hutool.core.collection.CollUtil;
 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.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.framework.tenant.core.util.TenantUtils;
 import cn.iocoder.yudao.module.pms.constant.PmsConstants;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.iotdeviceperson.vo.IotDevicePersonPageReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.vo.IotDevicePageReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.IotDeviceDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.inspect.*;
 import cn.iocoder.yudao.module.pms.dal.dataobject.iotdeviceperson.IotDevicePersonDO;
@@ -18,6 +20,7 @@ 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.message.PmsMessage;
+import cn.iocoder.yudao.module.pms.service.IotDeviceService;
 import cn.iocoder.yudao.module.pms.service.iotdeviceperson.IotDevicePersonService;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
@@ -67,6 +70,8 @@ public class IotInspectOrderServiceImpl implements IotInspectOrderService {
     private IotDevicePersonService iotDevicePersonService;
     @Resource
     private PmsMessage pmsMessage;
+    @Autowired
+    private IotDeviceService iotDeviceService;
 
     @Override
     @Transactional(rollbackFor = Exception.class)
@@ -80,60 +85,24 @@ public class IotInspectOrderServiceImpl implements IotInspectOrderService {
         if (Objects.isNull(order)){
             throw exception(IOT_INSPECT_ORDER_NOT_EXISTS);
         }
-        //删除已有的
-//        IotInspectRouteDO routeDO1 = JSON.parseArray(order.getDeviceIds(), IotInspectRouteDO.class).stream().filter(e -> String.valueOf(e.getDeviceId()).equals(deviceId)).findFirst().get();
-//        List<Map> maps1 = JSON.parseArray(routeDO1.getItemJson(), Map.class);
-
         List<IotInspectOrderDetailDO> details = iotInspectOrderDetailMapper.selectByMap(ImmutableMap.of("order_id", orderId, "device_id", deviceId, "index_id", Long.valueOf(indexId)));
         if (CollUtil.isEmpty(details)){
             throw exception(IOT_INSPECT_ORDER_DETAIL_NOT_EXISTS);
         }
         IotInspectOrderDetailDO detailDO = details.get(0);
-//        iotInspectOrderDetailMapper.deleteByIds(details);
         detailDO.setIfNormal("true".equals(ifNormal));
         detailDO.setDescription(description);
         detailDO.setPicUrl(picUrl);
         iotInspectOrderDetailMapper.updateById(detailDO);
-        //更新order的json串
-//        List<IotInspectRouteDO> routeDOS = JSON.parseArray(order.getDeviceIds(), IotInspectRouteDO.class);
-//        List<IotInspectRouteDO> newArray = new ArrayList<>();
-//        for (IotInspectRouteDO routeDO : routeDOS) {
-//            IotInspectRouteDO newRoute = new IotInspectRouteDO();
-//            BeanUtils.copyProperties(routeDO, newRoute);
-//            List<Map> maps = JSON.parseArray(routeDO.getItemJson(), Map.class);
-//            List<Map> newMaps = new ArrayList<>();
-//            for (Map map : maps) {
-//                Map newMap = new HashMap();
-////                BeanUtils.copyProperties(map, newMap);
-//                newMap.put("itemId", map.get("itemId"));
-//                newMap.put("index", map.get("index"));
-//                newMap.put("item", map.get("item"));
-//                newMap.put("standard", map.get("standard"));
-//                if (Objects.nonNull(map.get("ifNormal"))) {
-//                    newMap.put("ifNormal", map.get("ifNormal"));
-//                }
-//                if (Objects.nonNull(map.get("description"))) {
-//                    newMap.put("description", map.get("description"));
-//                }
-//                if (Objects.nonNull(map.get("picUrl"))) {
-//                    newMap.put("picUrl", map.get("picUrl"));
-//                }
-//                if (String.valueOf(map.get("index")).equals(indexId)) {
-//                    newMap.put("ifNormal", "true".equals(ifNormal));
-//                    if (StringUtils.isNotBlank(description)) {
-//                        newMap.put("description", description);
-//                    }
-//                    if (StringUtils.isNotBlank(picUrl)) {
-//                        newMap.put("picUrl", picUrl);
-//                    }
-//                }
-//                newMaps.add(newMap);
-//            }
-//            newRoute.setItemJson(JSON.toJSONString(newMaps));
-//            newArray.add(newRoute);
-//        }
-//        order.setDeviceIds(JSON.toJSONString(newArray));
-        boolean ma = iotInspectOrderDetailMapper.selectList("order_id", orderId).stream().anyMatch(e -> Objects.isNull(e.getIfNormal()));
+
+        Long deptId = SecurityFrameworkUtils.getLoginUserDeptId();
+        Set<Long> ids = new HashSet<>();
+        if (Objects.nonNull(deptId)) {
+            ids = deptService.getChildDeptIdListFromCache(deptId);
+            ids.add(deptId);
+        }
+        Set<Long> collect = iotDeviceMapper.selectSimpleList(new IotDevicePageReqVO(), ids).stream().map(IotDeviceDO::getId).collect(Collectors.toSet());
+        boolean ma = iotInspectOrderDetailMapper.selectList("order_id", orderId).stream().filter(e -> collect.contains(e.getDeviceId())).anyMatch(f -> Objects.isNull(f.getIfNormal()));
         if (!ma) {
             order.setStatus("finished");
         }