Sfoglia il codice sorgente

计量器具预警

Zimo 1 giorno fa
parent
commit
cfbe860169

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

@@ -10,12 +10,16 @@ import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBo
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookRespVO;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookSaveReqVO;
 import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBookSaveReqVO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.qhse.measure.IotMeasureBookDO;
 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.pms.service.qhse.measure.IotMeasureBookService;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO;
 import cn.iocoder.yudao.module.system.controller.admin.user.vo.user.UserImportRespVO;
+import cn.iocoder.yudao.module.system.service.dept.DeptService;
+import com.google.common.collect.ImmutableMap;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameter;
 import io.swagger.v3.oas.annotations.Parameters;
 import io.swagger.v3.oas.annotations.Parameters;
 import io.swagger.v3.oas.annotations.tags.Tag;
 import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 import org.springframework.web.bind.annotation.*;
@@ -25,7 +29,10 @@ import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpServletResponse;
 import javax.validation.Valid;
 import javax.validation.Valid;
 import java.io.IOException;
 import java.io.IOException;
+import java.util.HashSet;
 import java.util.List;
 import java.util.List;
+import java.util.Objects;
+import java.util.Set;
 
 
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
@@ -39,6 +46,10 @@ public class IotMeasureBookController {
 
 
     @Resource
     @Resource
     private IotMeasureBookService iotMeasureBookService;
     private IotMeasureBookService iotMeasureBookService;
+    @Autowired
+    private IotMeasureBookMapper iotMeasureBookMapper;
+    @Autowired
+    private DeptService deptService;
 
 
     @PostMapping("/create")
     @PostMapping("/create")
     @Operation(summary = "创建计量器具台账")
     @Operation(summary = "创建计量器具台账")
@@ -111,4 +122,26 @@ public class IotMeasureBookController {
                         BeanUtils.toBean(list, IotMeasureBookRespVO.class));
                         BeanUtils.toBean(list, IotMeasureBookRespVO.class));
     }
     }
 
 
+
+    @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);
+
+
+
+        return success(ImmutableMap.of("expired", expired, "warn", warn));
+    }
 }
 }

+ 3 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/controller/admin/qhse/measure/vo/IotMeasureBookPageReqVO.java

@@ -64,4 +64,7 @@ public class IotMeasureBookPageReqVO extends PageParam {
 
 
     @Schema(description = "是否过期")
     @Schema(description = "是否过期")
     private Boolean expired;
     private Boolean expired;
+
+    @Schema(description = "是否90天预警")
+    private Boolean alertWarn;
 }
 }

+ 5 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/dataobject/qhse/measure/IotMeasureBookDO.java

@@ -83,4 +83,9 @@ public class IotMeasureBookDO extends BaseDO {
      * 检测是否到期
      * 检测是否到期
      */
      */
     private Boolean expired;
     private Boolean expired;
+
+    /**
+     * 预警告警
+     */
+    private Boolean alertWarn;
 }
 }

+ 15 - 0
yudao-module-pms/yudao-module-pms-biz/src/main/java/cn/iocoder/yudao/module/pms/dal/mysql/qhse/measure/IotMeasureBookMapper.java

@@ -7,6 +7,7 @@ import cn.iocoder.yudao.module.pms.controller.admin.qhse.measure.vo.IotMeasureBo
 import cn.iocoder.yudao.module.pms.dal.dataobject.qhse.measure.IotMeasureBookDO;
 import cn.iocoder.yudao.module.pms.dal.dataobject.qhse.measure.IotMeasureBookDO;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Mapper;
 
 
+import java.util.List;
 import java.util.Set;
 import java.util.Set;
 
 
 /**
 /**
@@ -37,4 +38,18 @@ public interface IotMeasureBookMapper extends BaseMapperX<IotMeasureBookDO> {
                 .orderByDesc(IotMeasureBookDO::getId));
                 .orderByDesc(IotMeasureBookDO::getId));
     }
     }
 
 
+    default Long selectCountByDeptAndExpireAndWarn(IotMeasureBookPageReqVO reqVO, Set<Long> ids) {
+        return selectCount(new LambdaQueryWrapperX<IotMeasureBookDO>()
+                .eqIfPresent(IotMeasureBookDO::getExpired, reqVO.getExpired())
+                .eqIfPresent(IotMeasureBookDO::getAlertWarn, reqVO.getAlertWarn())
+                .inIfPresent(IotMeasureBookDO::getDeptId, ids)
+                .betweenIfPresent(IotMeasureBookDO::getCreateTime, reqVO.getCreateTime()));
+    }
+
+    default List<IotMeasureBookDO> selectListByDept(IotMeasureBookPageReqVO reqVO, Set<Long> ids) {
+        return selectList(new LambdaQueryWrapperX<IotMeasureBookDO>()
+                .eqIfPresent(IotMeasureBookDO::getExpired, reqVO.getExpired())
+                .inIfPresent(IotMeasureBookDO::getDeptId, ids));
+    }
+
 }
 }

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

@@ -1,6 +1,5 @@
 package cn.iocoder.yudao.module.pms.job.qhse;
 package cn.iocoder.yudao.module.pms.job.qhse;
 
 
-import cn.hutool.core.collection.CollUtil;
 import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
 import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
 import cn.iocoder.yudao.framework.quartz.core.handler.JobHandler;
 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.aop.TenantIgnore;
@@ -20,12 +19,11 @@ import org.springframework.stereotype.Component;
 
 
 import javax.annotation.Resource;
 import javax.annotation.Resource;
 import java.time.LocalDateTime;
 import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.List;
 import java.util.Objects;
 import java.util.Objects;
-import java.util.Set;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.CompletableFuture;
-import java.util.stream.Collectors;
 
 
 @Component
 @Component
 public class CertJob implements JobHandler {
 public class CertJob implements JobHandler {
@@ -74,13 +72,35 @@ public class CertJob implements JobHandler {
         });
         });
         iotMeasureCertMapper.updateBatch(iotMeasureCertDOS);
         iotMeasureCertMapper.updateBatch(iotMeasureCertDOS);
         //处理计量器具的检测是否过期
         //处理计量器具的检测是否过期
-        List<IotMeasureDetectDO> collect = iotMeasureDetectMapper.selectList().stream().filter(e -> Objects.nonNull(e.getValidityPeriod()) && (e.getValidityPeriod().isBefore(LocalDateTime.now()))).collect(Collectors.toList());
-        if (CollUtil.isNotEmpty(collect)) {
-            Set<Long> collect1 = collect.stream().map(IotMeasureDetectDO::getMeasureId).collect(Collectors.toSet());
-            List<IotMeasureBookDO> iotMeasureBookDOS = iotMeasureBookMapper.selectByIds(collect1);
-            iotMeasureBookDOS.forEach(item -> item.setExpired(true));
-            iotMeasureBookMapper.updateBatch(iotMeasureBookDOS);
-        }
+        List<IotMeasureBookDO> iotMeasureBookDOS1 = iotMeasureBookMapper.selectList();
+        List<IotMeasureDetectDO> iotMeasureDetectDOS = iotMeasureDetectMapper.selectList();
+        iotMeasureBookDOS1.forEach(item -> {
+            iotMeasureDetectDOS.stream()
+                    .filter(e -> e.getMeasureId().equals(item.getId()))
+                    .map(IotMeasureDetectDO::getValidityPeriod) // 提取日期
+                    .filter(Objects::nonNull) // 过滤掉null
+                    .max(LocalDateTime::compareTo) // 取最大日期
+                    .ifPresent(maxDate -> {
+                        // 判断:最大日期 是否在 当前时间 之前
+                        if (maxDate.isBefore(LocalDateTime.now())) {
+                            item.setExpired(true);
+                        }
+                        //如果相差不到90天了就进行预警
+                        if (maxDate.isAfter(LocalDateTime.now()) && ChronoUnit.DAYS.between(LocalDateTime.now(), maxDate) < 90) {
+                            item.setAlertWarn(true);
+                        }
+                        iotMeasureBookMapper.updateById(item);
+                    });
+        });
+
+
+//        List<IotMeasureDetectDO> collect = iotMeasureDetectMapper.selectList().stream().filter(e -> Objects.nonNull(e.getValidityPeriod()) && (e.getValidityPeriod().isBefore(LocalDateTime.now()))).collect(Collectors.toList());
+//        if (CollUtil.isNotEmpty(collect)) {
+//            Set<Long> collect1 = collect.stream().map(IotMeasureDetectDO::getMeasureId).collect(Collectors.toSet());
+//            List<IotMeasureBookDO> iotMeasureBookDOS = iotMeasureBookMapper.selectByIds(collect1);
+//            iotMeasureBookDOS.forEach(item -> item.setExpired(true));
+//            iotMeasureBookMapper.updateBatch(iotMeasureBookDOS);
+//        }
         return "执行成功";
         return "执行成功";
     }
     }
 }
 }