Browse Source

资质证书的预警设置

Zimo 1 ngày trước cách đây
mục cha
commit
16292b97f3

+ 42 - 2
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/qhse/cert/IotMeasureCertController.java

@@ -9,14 +9,19 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.cert.vo.IotMeasureCertPageReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.cert.vo.IotMeasureCertRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.cert.vo.IotMeasureCertSaveReqVO;
+import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.IotMeasureBookController;
+import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookPageReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.qhse.cert.IotMeasureCertDO;
+import cn.iocoder.yudao.module.pms.dal.dataobject.qhse.measure.IotMeasureBookDO;
 import cn.iocoder.yudao.module.pms.service.qhse.cert.IotMeasureCertService;
 import cn.iocoder.yudao.module.system.api.dept.DeptApi;
 import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO;
 import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
 import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
 import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
+import cn.iocoder.yudao.module.system.service.dept.DeptService;
 import cn.iocoder.yudao.module.system.service.dict.DictDataService;
+import com.google.common.collect.ImmutableMap;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.tags.Tag;
@@ -29,8 +34,7 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
@@ -51,6 +55,8 @@ public class IotMeasureCertController {
     private AdminUserApi adminUserApi;
     @Autowired
     private DictDataService dictDataService;
+    @Autowired
+    private DeptService deptService;
 
     @PostMapping("/create")
     @Operation(summary = "创建计量器具-证书管理")
@@ -140,4 +146,38 @@ public class IotMeasureCertController {
         ExcelUtils.write(response, "计量器具-证书管理.xls", "数据", IotMeasureCertRespVO.class, bean);
     }
 
+    @GetMapping("/stat")
+    @Operation(summary = "计量器具统计")
+    public CommonResult<ImmutableMap> generateNum(Long deptId) {
+        Set<Long> ids = new HashSet<>();
+        if (Objects.nonNull(deptId)) {
+            ids = deptService.getChildDeptIdListFromCache(deptId);
+            ids.add(deptId);
+        }
+        //到期
+        IotMeasureBookPageReqVO reqVO = new IotMeasureBookPageReqVO();
+        reqVO.setExpired(true);
+        long expired = iotMeasureBookMapper.selectCountByDeptAndExpireAndWarn(reqVO, ids);
+        reqVO.setExpired(null);
+        reqVO.setAlertWarn(true);
+        //90天预警
+        long warn = iotMeasureBookMapper.selectCountByDeptAndExpireAndWarn(reqVO, ids);
+        reqVO.setAlertWarn(null);
+        List<IotMeasureBookDO> iotMeasureBookDOS = iotMeasureBookMapper.selectListByDept(reqVO, ids);
+        Map<String, Long> classifyCountMap = iotMeasureBookDOS.stream()
+                .collect(Collectors.groupingBy(
+                        IotMeasureBookDO::getClassify,
+                        Collectors.counting()  // 直接统计每个分组的数量
+                ));
+        List<IotMeasureBookController.ClassifyMeasureBookStatVo> results = new ArrayList<>();
+        List<DictDataDO> dictType = dictDataService.getDictDataListByDictType("measure_type");
+        classifyCountMap.forEach((key, value) -> dictType.stream().filter(e -> e.getValue().equals(key)).findFirst().ifPresent(f ->{
+            IotMeasureBookController.ClassifyMeasureBookStatVo statVo = new IotMeasureBookController.ClassifyMeasureBookStatVo();
+            statVo.setClassify(f.getLabel());
+            statVo.setCount(value);
+            results.add(statVo);
+        }));
+
+        return success(ImmutableMap.of("expired", expired, "warn", warn, "classify", results));
+    }
 }

+ 29 - 7
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/qhse/measure/IotMeasureBookController.java

@@ -13,12 +13,15 @@ import cn.iocoder.yudao.module.pms.dal.dataobject.qhse.measure.IotMeasureBookDO;
 import cn.iocoder.yudao.module.pms.dal.mysql.qhse.measure.IotMeasureBookMapper;
 import cn.iocoder.yudao.module.pms.service.qhse.measure.IotMeasureBookService;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO;
+import cn.iocoder.yudao.module.system.dal.dataobject.dict.DictDataDO;
 import cn.iocoder.yudao.module.system.service.dept.DeptService;
+import cn.iocoder.yudao.module.system.service.dict.DictDataService;
 import com.google.common.collect.ImmutableMap;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameters;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import lombok.Data;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
@@ -29,10 +32,8 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import java.io.IOException;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
+import java.util.*;
+import java.util.stream.Collectors;
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -50,6 +51,8 @@ public class IotMeasureBookController {
     private IotMeasureBookMapper iotMeasureBookMapper;
     @Autowired
     private DeptService deptService;
+    @Autowired
+    private DictDataService dictDataService;
 
     @PostMapping("/create")
     @Operation(summary = "创建计量器具台账")
@@ -139,9 +142,28 @@ public class IotMeasureBookController {
         reqVO.setAlertWarn(true);
         //90天预警
         long warn = iotMeasureBookMapper.selectCountByDeptAndExpireAndWarn(reqVO, ids);
+        reqVO.setAlertWarn(null);
+        List<IotMeasureBookDO> iotMeasureBookDOS = iotMeasureBookMapper.selectListByDept(reqVO, ids);
+        Map<String, Long> classifyCountMap = iotMeasureBookDOS.stream()
+                .collect(Collectors.groupingBy(
+                        IotMeasureBookDO::getClassify,
+                        Collectors.counting()  // 直接统计每个分组的数量
+                ));
+        List<ClassifyMeasureBookStatVo> results = new ArrayList<>();
+        List<DictDataDO> dictType = dictDataService.getDictDataListByDictType("measure_type");
+        classifyCountMap.forEach((key, value) -> dictType.stream().filter(e -> e.getValue().equals(key)).findFirst().ifPresent(f ->{
+            ClassifyMeasureBookStatVo statVo = new ClassifyMeasureBookStatVo();
+            statVo.setClassify(f.getLabel());
+            statVo.setCount(value);
+            results.add(statVo);
+        }));
+
+        return success(ImmutableMap.of("expired", expired, "warn", warn, "classify", results));
+    }
 
-
-
-        return success(ImmutableMap.of("expired", expired, "warn", warn));
+    @Data
+    public static class ClassifyMeasureBookStatVo {
+        private String classify;
+        private Long count;
     }
 }

+ 5 - 1
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/qhse/cert/IotMeasureCertDO.java

@@ -85,7 +85,11 @@ public class IotMeasureCertDO extends BaseDO {
      */
     private String remark;
     /**
-     * 是否国企
+     * 是否过期
      */
     private Boolean expired;
+    /**
+     * 是否90天预警
+     */
+    private Boolean alertWarn;
 }

+ 3 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/job/qhse/CertJob.java

@@ -56,6 +56,9 @@ public class CertJob implements JobHandler {
                 //证书已过期的话,更新expired为true
                 item.setExpired(true);
             } else  {
+                if (ChronoUnit.DAYS.between(LocalDateTime.now(), certExpire) < 60) {
+                    item.setAlertWarn(true);//设置为60天预警过期
+                }
                 item.setExpired(false);
             }
         });