Procházet zdrojové kódy

运行监控排序

lipenghui před 1 týdnem
rodič
revize
576d4ef54d

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

@@ -19,6 +19,7 @@ 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.IotDeviceMapper;
 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;
@@ -73,6 +74,8 @@ public class IotInspectOrderController {
     private IotInspectRouteService iotInspectRouteService;
     @Autowired
     private DeptApi deptApi;
+    @Autowired
+    private IotDeviceMapper iotDeviceMapper;
 
     @PostMapping("/create")
     @Operation(summary = "创建巡检工单")
@@ -333,6 +336,7 @@ public class IotInspectOrderController {
     @PreAuthorize("@ss.hasPermission('rq:iot-inspect-order:query')")
     public CommonResult<PageResult<IotInspectOrderRespVO>> getIotInspectOrderPageReport(@Valid IotInspectOrderPageReqVO pageReqVO) {
         PageResult<IotInspectOrderDO> pageResult = iotInspectOrderService.getIotInspectOrderPage(pageReqVO);
+        List<IotDeviceDO> iotDeviceDOS = iotDeviceMapper.selectList();
         List<IotInspectOrderRespVO> collect = pageResult.getList().stream().map(e -> {
             IotInspectOrderRespVO iotInspectOrderRespVO = new IotInspectOrderRespVO();
             BeanUtils.copyProperties(e, iotInspectOrderRespVO);
@@ -362,6 +366,13 @@ public class IotInspectOrderController {
                     }
                 }
             }
+            StringBuilder stringBuilder = new StringBuilder();
+            iotInspectOrderDetailMapper.selectList("order_id", e.getId()).stream().map(IotInspectOrderDetailDO::getDeviceId).collect(Collectors.toSet()).forEach(f ->{
+                iotDeviceDOS.stream().filter(g -> g.getId().equals(f)).findFirst().ifPresent(g -> {
+                    stringBuilder.append(g.getDeviceCode()).append("|").append(g.getDeviceName()).append(";");
+                });
+            });
+            iotInspectOrderRespVO.setDeviceInfo(stringBuilder.toString());
             return iotInspectOrderRespVO;
         }).collect(Collectors.toList());
         return success(new PageResult<>(collect, pageResult.getTotal()));

+ 10 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/inspect/order/IotInspectOrderDetailController.java

@@ -6,9 +6,11 @@ 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.excel.core.util.ExcelUtils;
+import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderDetailPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderDetailRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectOrderDetailSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.stat.DeptUtil;
 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;
@@ -59,6 +61,8 @@ public class IotInspectOrderDetailController {
     private IotInspectOrderService iotInspectOrderService;
     @Autowired
     private DeptService deptService;
+    @Autowired
+    private DeptUtil deptUtil;
 
     @PostMapping("/create")
     @Operation(summary = "创建巡检工单巡检明细")
@@ -140,8 +144,12 @@ public class IotInspectOrderDetailController {
     @Parameter(name = "id", description = "编号", required = true, example = "1024")
     @PreAuthorize("@ss.hasPermission('rq:iot-inspect-item:query')")
     public CommonResult<ImmutableMap<String, ? extends Serializable>> getIotInspectItemStatusReport(IotCountDataDO vo) {
-        Set<Long> ids = new HashSet<>();
-        if (Objects.nonNull(vo.getDeptId())) {
+        Set<Long> ids;
+        if (Objects.isNull(vo.getDeptId())){
+            Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId();
+            String companyCode = deptUtil.getCompanyCode(loginUserDeptId);
+            ids = deptUtil.getDeptIds(companyCode);
+        } else {
             ids = deptService.getChildDeptIdListFromCache(vo.getDeptId());
             ids.add(vo.getDeptId());
         }

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

@@ -54,7 +54,7 @@ public class IotInspectOrderRespVO {
     private Long exceptionCount;
     private Integer needDevice;
     private LocalDateTime executeDate;
-
+    private String deviceInfo;
     private List<IotInspectOrderController.OrderDetail> details;
 
     private String company;

+ 33 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/stat/IotStaticController.java

@@ -171,6 +171,8 @@ public class IotStaticController {
     private IotRdDailyReportMapper iotRdDailyReportMapper;
     @Resource
     private IotDeptTypeMapper iotDeptTypeMapper;
+    @Autowired
+    private DeptUtil deptUtil;
 
     @GetMapping("/main/day")
     public CommonResult<Map<String, Object>> getMaintainDay() {
@@ -305,6 +307,22 @@ public class IotStaticController {
         return CommonResult.success(order);
     }
 
+    @GetMapping("/report/inspect/status")
+    public CommonResult<Map<String, Long>> getInspectStatusInfoReport(IotCountDataDO vo) {
+        Set<Long> ids;
+        if (Objects.isNull(vo.getDeptId())){
+            Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId();
+            String companyCode = deptUtil.getCompanyCode(loginUserDeptId);
+            ids = deptUtil.getDeptIds(companyCode);
+        } else {
+            ids = deptService.getChildDeptIdListFromCache(vo.getDeptId());
+            ids.add(vo.getDeptId());
+        }
+        List<IotInspectOrderDO> iotInspectOrderDOS = iotInspectOrderMapper.selectListStat(vo, ids);
+        Map<String, Long> order = iotInspectOrderDOS.stream().collect(Collectors.groupingBy(IotInspectOrderDO::getStatus, Collectors.counting()));
+        return CommonResult.success(order);
+    }
+
     @GetMapping("/inspect/statuss/{dept}")
     public CommonResult<Map<String, Long>> getInspectStatusInfos(@PathVariable("dept") String dept) {
         Set<Long> ids = getDeptIds(dept);
@@ -639,6 +657,21 @@ public class IotStaticController {
         return success(ImmutableMap.of("todo", todo.get(),"finished", finished.get(), "ignore", ignore.get()));
     }
 
+    @GetMapping("/inspect/exception/device")
+    public CommonResult<ImmutableMap<String, Long>> getDeviceException(IotCountDataDO vo) {
+        Set<Long> ids;
+        if (Objects.isNull(vo.getDeptId())){
+            Long loginUserDeptId = SecurityFrameworkUtils.getLoginUserDeptId();
+            String companyCode = deptUtil.getCompanyCode(loginUserDeptId);
+            ids = deptUtil.getDeptIds(companyCode);
+        } else {
+            ids = deptService.getChildDeptIdListFromCache(vo.getDeptId());
+            ids.add(vo.getDeptId());
+        }
+        Long deviceException = iotInspectOrderDetailMapper.selectDeviceException(vo, ids);
+        return success(ImmutableMap.of("exceptionNum",deviceException));
+    }
+
     @GetMapping("/rh/ywcb/{dept}")
     @PermitAll
     public CommonResult<Map<String, Object>> getRhYwcbStat(@PathVariable("dept") String dept) {

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

@@ -8,6 +8,7 @@ import cn.iocoder.yudao.module.pms.controller.admin.inspect.order.vo.IotInspectO
 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.iotcountdata.IotCountDataDO;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -53,6 +54,24 @@ public interface IotInspectOrderDetailMapper extends BaseMapperX<IotInspectOrder
         );
     }
 
+    default Long selectDeviceException(IotCountDataDO vo, Set<Long> ids) {
+        return selectCount(
+                new QueryWrapper<IotInspectOrderDetailDO>()
+                        .select("DISTINCT device_id")
+                        // 核心:仅当 createTime 非空且是有效数组(长度≥2)时,才生效 between 条件
+                        .between(
+                                "create_time",
+                                // 起始时间:createTime 非空且数组长度≥2 时取第一个元素,否则 null
+                                (vo.getCreateTime() != null && vo.getCreateTime().length >= 2) ? vo.getCreateTime()[0] : null,
+                                // 结束时间:同上,否则 null
+                                (vo.getCreateTime() != null && vo.getCreateTime().length >= 2) ? vo.getCreateTime()[1] : null
+                        )
+                        // in 条件:ids 非空且非空集合时生效,否则失效(原生特性)
+                        .in(ids != null && !ids.isEmpty(), "dept_id", ids)
+                        .eq("if_normal", false)
+        );
+    }
+
     default Long selectExceptionReport(IotCountDataDO vo, Set<Long> ids) {
         return selectCount(new LambdaQueryWrapperX<IotInspectOrderDetailDO>()
                         .betweenIfPresent(IotInspectOrderDetailDO::getCreateTime, vo.getCreateTime())