From cb415813de667096290d6bd0f924f5b523104117 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 10 十一月 2025 17:41:04 +0800
Subject: [PATCH] 报备工单bug修改,定时任务在线问题修改新增导出扣分明细功能

---
 ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java |  300 +++++++++++++++++++++++++++++++++++++++++------------------
 1 files changed, 208 insertions(+), 92 deletions(-)

diff --git a/ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java b/ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java
index fbd70f3..25803d6 100644
--- a/ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java
@@ -4,11 +4,15 @@
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.google.common.util.concurrent.AtomicDouble;
+import com.ycl.platform.domain.entity.DailyMonitorDemeritRecord;
 import com.ycl.platform.domain.entity.DemeritRecord;
+import com.ycl.platform.domain.entity.MonitorConstruction;
 import com.ycl.platform.domain.entity.Report;
 import com.ycl.platform.domain.result.UY.RecordMetaDSumResult;
 import com.ycl.platform.mapper.DemeritRecordMapper;
+import com.ycl.platform.mapper.IMonitorConstructionMapper;
 import com.ycl.platform.mapper.ReportMapper;
+import com.ycl.platform.service.IDailyMonitorDemeritRecordService;
 import com.ycl.platform.service.IDemeritRecordService;
 import com.ycl.utils.DateUtils;
 import enumeration.ConstructionTypeEnum;
@@ -50,6 +54,10 @@
 
     private final ReportMapper reportMapper;
 
+    private final IMonitorConstructionMapper monitorConstructionMapper;
+
+    private final IDailyMonitorDemeritRecordService dailyMonitorDemeritRecordService;
+
     private static final ExecutorService executorService = new ThreadPoolExecutor(16,
             128,
             5000,
@@ -59,24 +67,29 @@
     );
     private final IDemeritRecordService demeritRecordService;
 
-    // 鎻愬彇鍏叡杩囨护鏂规硶
-    private Predicate<RecordMetaDSumResult> deviceNameStartsWith(String prefix) {
-        return result -> result.getDeviceName() != null && result.getDeviceName().startsWith(prefix);
-    }
+    private final IDailyMonitorDemeritRecordService iDailyMonitorDemeritRecordService;
 
-    private Predicate<RecordMetaDSumResult> deviceNameStartsWithAny(String... prefixes) {
-        return result -> result.getDeviceName() != null &&
-                Arrays.stream(prefixes).anyMatch(prefix -> result.getDeviceName().startsWith(prefix));
-    }
-
-    private DemeritRecord buildDemeritRecord(String constructionType,BigDecimal demerit,Integer deptId) {
+    private DemeritRecord buildDemeritRecord(String constructionType,BigDecimal demerit,Integer deptId,Date recordTime) {
         DemeritRecord record = new DemeritRecord();
         record.setConstructionType(constructionType);
         record.setDemerit(demerit);
         record.setDeptId(deptId);
+        record.setRecordTime(recordTime);
         return record;
     }
-    private BigDecimal calculateTotalDeduction(List<RecordMetaDSumResult> records) {
+    private DailyMonitorDemeritRecord buildDailyMonitorDemeritRecord(Date recordTime,String deviceId,String constructionType,BigDecimal demerit,Integer deptId,Boolean isReport,String deviceName) {
+        DailyMonitorDemeritRecord demeritRecord  = new DailyMonitorDemeritRecord();
+        demeritRecord.setRecordTime(recordTime);
+        demeritRecord.setDemerit(demerit);
+        demeritRecord.setConstructionType(constructionType);
+        demeritRecord.setSerialNumber(deviceId);
+        demeritRecord.setIsReport(isReport);
+        demeritRecord.setDeptId(deptId);
+        demeritRecord.setDeviceName(deviceName);
+        return demeritRecord;
+    }
+
+    private BigDecimal calculateTotalDeduction(List<RecordMetaDSumResult> records,Date recordTime,Integer deptId,List<DailyMonitorDemeritRecord> dailyMonitorDemeritRecords) {
         BigDecimal total = BigDecimal.ZERO; // 鍗曠嚎绋嬪惊鐜紝鏃犻渶AtomicReference
 
         for (RecordMetaDSumResult record : records) {
@@ -99,6 +112,8 @@
             } else {
                 deduction = BigDecimal.ZERO;
             }
+            dailyMonitorDemeritRecords.add(buildDailyMonitorDemeritRecord(recordTime,record.getDeviceId()
+                    ,record.getConstructionType(),deduction,deptId,false,record.getDeviceName()));
 
             // 绱姞鎬绘墸鍒嗭紙鏈�鍚庣粺涓�澶勭悊绮惧害锛岄伩鍏嶄腑闂村洓鑸嶄簲鍏ヨ宸級
             total = total.add(deduction);
@@ -126,7 +141,7 @@
 
         log.info("鏃ユ湡:{},鏌ヨ鍑虹殑璁惧褰曞儚璁板綍鏁皗}",today,results.size());
         //杩囨护鎺夐潪鍏ㄦ櫙鐨勮澶� 涓� 1鍒欎负缁嗚妭锛屽鏋滄槸0鍒欎负鍏ㄦ櫙
-        results.stream().filter(obj ->
+        results = results.stream().filter(obj ->
         {
             String deviceId = obj.getDeviceId();
             if (deviceId == null || deviceId.length() < 7) {
@@ -135,7 +150,7 @@
             // 鑾峰彇鍊掓暟绗竷浣嶇殑瀛楃
             char seventhFromEnd = deviceId.charAt(deviceId.length() - 7);
             return seventhFromEnd != '1'; //涓�1 鍒欎細 false 鍘婚櫎鎺�
-        });
+        }).collect(Collectors.toList());
 
         log.info("杩囨护鍚庡墿浣欏叏鏅澶囨暟{}",results.size());
         //鍙�冩牳LT_銆�(涓夋湡)
@@ -143,28 +158,58 @@
         // DX_R銆侊紙鍥涘尯浜鸿劯锛�
         // DX_RS銆侊紙鍥涘尯浜鸿劯锛�
         // 锛堥渶瑕佹帓闄X_R2銆丏X_RD銆丣_銆乀1銆乀3浠ュ強娌℃湁鍓嶇紑鐨勮澶囷級
-        List<String> prefixes = Arrays.asList("LT_", "DX_", "DX_R", "DX_RS");
+//        List<String> prefixes = Arrays.asList("LT_", "DX_", "DX_R", "DX_RS");
+        //鏌ヨ璁惧鏍囩琛ㄤ腑鐨凪onitorConstruction鍒楄〃
+        List<MonitorConstruction> monitorConstructionList = new LambdaQueryChainWrapper<>(monitorConstructionMapper)
+                .eq(MonitorConstruction::getDeleted, Boolean.FALSE)
+                .list();
 
-        results.stream()
+        //鎸夌紪鍙峰垎缁勶紝鍊间负璁惧瀵瑰簲鏍囩
+        Map<String, String> serialTagMap = monitorConstructionList.stream()
+                .filter(mc -> mc.getSerialNumber() != null) // 杩囨护搴忓垪鍙蜂负绌虹殑鏃犳晥鏁版嵁
+                .collect(Collectors.toMap(
+                        MonitorConstruction::getSerialNumber,
+                        MonitorConstruction::getTag,
+                        (oldVal, newVal) -> newVal
+                ));
+        //杩囨护鎺夋病鏈夋爣绛剧殑闆嗗悎 骞跺皢鏍囩璧嬪�肩粰褰曞儚鎯呭喌闆嗗悎
+        results = results.stream()
                 .filter(result -> {
-                    String deviceName = result.getDeviceName();
-                    if (deviceName == null) {
-                        return false;
+                    String sn = result.getNo();
+                    // 杩囨护鏉′欢锛氬簭鍒楀彿闈炵┖ + 鍦ㄦ爣绛綧ap涓瓨鍦紙鍗虫湁瀵瑰簲鏍囩锛�
+                    boolean isMatch = sn != null && serialTagMap.containsKey(sn);
+                    if (isMatch) {
+                        // 鍖归厤鎴愬姛锛屽皢鏍囩璧嬪�肩粰result锛堥渶纭繚RecordMetaDSumResult鏈塻etTag()鏂规硶锛�
+                        String tag = serialTagMap.get(sn);
+                        result.setConstructionType(tag); // 鍏抽敭锛氳祴鍊兼爣绛�
                     }
-                    return prefixes.stream().anyMatch(deviceName::startsWith);
+                    return isMatch; // 鍙繚鐣欐湁鏍囩鐨剅esult
                 })
                 .collect(Collectors.toList());
 
-        log.info("鍓╀綑鑰冩牳璁惧杩囨护鍚庤澶囨暟{}",results.size());
+
+        log.info("鏈夋爣绛剧殑璁惧璁板綍闆嗗悎澶у皬:{}",results.size());//杩欐槸闇�瑕佽绠楁墸鍒嗙殑褰曞儚鏁版嵁
+
+
 
         //杩囨护鎺夋姤澶囩殑璁惧
         //鏌ヨ鍦ㄥ綋鍓嶆椂闂存湁鎶ュ鐨勬墍鏈夎澶囷紝
         //鍥犱负褰曞儚鏁版嵁鐨勬椂闂�
-        List<String> deviceIds = new LambdaQueryChainWrapper<>(reportMapper)
+        Date yesterday =new Date();
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(yesterday);
+        calendar.add(Calendar.DAY_OF_YEAR, -1); // 鍑忓幓1澶� 娴嬭瘯鐢�
+        yesterday = calendar.getTime();
+        log.info("娴嬭瘯鏃堕棿:{}",yesterday);
+
+        List<Report> list = new LambdaQueryChainWrapper<>(reportMapper)
                 .eq(Report::getStatus, 1)
-                .ge(Report::getBeginCreateTime, today)
-                .le(Report::getEndCreateTime, today)
-                .list().stream()
+                .ge(Report::getBeginCreateTime, DateUtils.getDayStart(yesterday))
+                .le(Report::getEndCreateTime,  DateUtils.getDayEnd(yesterday))
+                .list();
+
+        log.info("鎶ュ璁板綍锛歿}",list);
+        List<String> deviceIds = list.stream()
                 .collect(Collectors.toMap(
                         Report::getSerialNumber,  // key: serialNumber
                         Function.identity(),      // value: Report瀵硅薄鏈韩
@@ -176,19 +221,14 @@
                 .map(Report::getSerialNumber).collect(Collectors.toList());
 
         Set<String> deviceIdSet = new HashSet<>(deviceIds);
+
         log.info("鎶ュ璁惧鏁皗}",deviceIdSet.size());
-        results.stream()
-                .filter(result -> {
-                    // 鑾峰彇褰撳墠瀵硅薄鐨刣eviceId
-                    String resultDeviceId = result.getDeviceId();
-                    // 杩囨护鏉′欢锛歞eviceId涓嶅湪闆嗗悎涓紙娉ㄦ剰澶勭悊null鍊硷紝閬垮厤NPE锛�
-                    return resultDeviceId != null && !deviceIdSet.contains(resultDeviceId);
-                })
-                .collect(Collectors.toList());
-
-        log.info("鍓╀綑杩囨护鎶ュ鍚庤澶囨暟{}",results.size());
-
-        // 鎸夊尯鍩熷垝鍒� 缁勮鎴恗ap
+        List<DailyMonitorDemeritRecord> dailyMonitorDemeritRecords = new ArrayList<>();
+        Date yesterdayBegin = DateUtils.getDayStart(yesterday);
+        // 閬嶅巻鍖哄垎瀵硅薄鐨勬姤澶囩姸鎬�
+        // 鍥犱负涓嬮潰浼氳繃婊よ鐩栨帀鑰冩牳璁惧锛岄渶瑕佸凡鎶ュ鐨勮澶囧綍鍍忔儏鍐典俊鎭紝
+        // 鎵�浠ユ澶勫簲璇ュ皢宸叉姤澶囩殑璁惧褰曞儚鎯呭喌淇℃伅娣诲姞鍒版瘡鏃ユ墸鍒嗚鎯呰褰曚腑骞跺垵濮嬪寲濂� 鍚庣画涓嶅湪澶勭悊鐩存帴娣诲姞鏁版嵁搴撲腑
+        // 灏嗗尯鍩熶俊鎭� 鏀惧叆闆嗗悎涓�
         results.forEach(item -> {
             String areaCode = item.getArealayername().substring(0, 6);
             AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode);
@@ -196,12 +236,63 @@
                 item.setArealayerno(areaDeptEnum.getCode());
             }
         });
+        results.forEach(result ->{
+            String deviceId = result.getDeviceId();
+            if (StringUtils.isNotBlank(deviceId)) {
+                if (deviceIdSet.contains(deviceId)) {
+                    //宸叉姤澶囪澶囪褰�
+                    AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(result.getArealayerno());
+                    if (areaDeptEnum == null) {
+                        log.info("鍖哄煙鏁版嵁寮傚父锛屽紓甯稿尯鍩熼敭鍊硷細{}",result.getArealayerno());
+                        return;
+                    }
+                    DailyMonitorDemeritRecord demeritRecord  = buildDailyMonitorDemeritRecord(
+                            yesterdayBegin,deviceId,
+                            result.getConstructionType(),
+                            BigDecimal.ZERO,
+                            areaDeptEnum.getDeptId(),
+                            true,
+                            result.getDeviceName()
+                    );
+                    dailyMonitorDemeritRecords.add(demeritRecord);
+                }
+            }
+        });
+        // 杩囨护鑾峰緱鏈姤澶囬泦鍚�
+        results = results.stream()
+                .filter(result -> {
+                    String resultDeviceId = result.getDeviceId();
+                    return resultDeviceId != null && !deviceIdSet.contains(resultDeviceId);
+                })
+                .collect(Collectors.toList());
+
+        log.info("鍓╀綑杩囨护鎶ュ鍚庤澶囨暟{}",results.size());
+
+
         //闇�瑕佹坊鍔犳暟鎹簱鐨勬暟鎹泦鍚�
         List<DemeritRecord> demeritRecords = new ArrayList<>();
-
+        // 鎸夊尯鍩熷垝鍒� 缁勮鎴恗ap
         Map<String,List<RecordMetaDSumResult>> groupByArealayerno = results.stream()
                 .collect(Collectors.groupingBy(RecordMetaDSumResult::getArealayerno));
 
+        //鎸夊缓璁剧被鍨嬫爣绛惧垎缁勮澶嘚O monitorConstructionList
+        //鎸夋爣绛惧垎缁�
+        Map<String, List<String>> groupByTag = monitorConstructionList.stream()
+                // 鍒嗙粍閿細鎻愬彇姣忎釜瀵硅薄鐨� tag锛堟敞鎰忓鐞� tag 涓� null 鐨勬儏鍐碉紝閬垮厤閿负 null锛�
+                .collect(Collectors.groupingBy(
+                        mc -> mc.getTag() != null ? mc.getTag() : "DEFAULT_TAG",
+                        Collectors.mapping(MonitorConstruction::getSerialNumber, Collectors.toList())
+
+                ));
+        List<String> phaseOneTwoSerials = groupByTag.getOrDefault(ConstructionTypeEnum.PHASE_ONE_TWO.getDesc(), Collections.emptyList());
+        List<String> phaseThreeSerials = groupByTag.getOrDefault(ConstructionTypeEnum.PHASE_THREE.getDesc(), Collections.emptyList());
+        List<String> phaseFourthSerials = groupByTag.getOrDefault(ConstructionTypeEnum.PHASE_FOURTH.getDesc(), Collections.emptyList());
+
+        List<String> checkEnterSichuan = groupByTag.getOrDefault(ConstructionTypeEnum.CHECK_ENTER_SICHUAN.getDesc(), Collections.emptyList());
+
+        List<String> easternNewCity= groupByTag.getOrDefault(ConstructionTypeEnum.EASTERN_NEW_CITY.getDesc(), Collections.emptyList());
+
+        List<String> yanTanPhaseTwoFace = groupByTag.getOrDefault(ConstructionTypeEnum.YAN_TAN_PHASE_TWO_FACE.getDesc(), Collections.emptyList());
         //寰幆鍒嗙粍鍚庣殑map
         for (Map.Entry<String, List<RecordMetaDSumResult>> entry : groupByArealayerno.entrySet()) {
             String arealayerno = entry.getKey();
@@ -218,78 +309,103 @@
             if (CollectionUtils.isNotEmpty(resultList)) {
                 // 瀵规瘡涓狶ist杩涜澶勭悊 鍒嗗缓绫诲瀷澶勭悊闆嗗悎
                 List<RecordMetaDSumResult> phase_one_two = resultList.stream()
-                        .filter(deviceNameStartsWith("DX_"))
+                        .filter(result -> {
+                            String no = result.getNo();
+                            return no != null && phaseOneTwoSerials.contains(no);
+                        })
                         .collect(Collectors.toList());
-                log.info("涓�浜屾湡鑰冩牳璁板綍鏁皗}",phase_one_two.size());
+                log.info("涓�浜屾湡鑰冩牳璁板綍鏁皗}", phase_one_two.size());
                 List<RecordMetaDSumResult> phase_three = resultList.stream()
-                        .filter(deviceNameStartsWith("LT_"))
+                        .filter(result -> {
+                            String no = result.getNo();
+                            return no != null && phaseThreeSerials.contains(no);
+                        })
                         .collect(Collectors.toList());
-                log.info("涓夋湡鑰冩牳璁板綍鏁皗}",phase_three.size());
+                log.info("涓夋湡鑰冩牳璁板綍鏁皗}", phase_three.size());
                 List<RecordMetaDSumResult> phase_fourth = resultList.stream()
-                        .filter(deviceNameStartsWithAny("DX_R", "DX_RS"))
+                        .filter(result -> {
+                            String no = result.getNo();
+                            return no != null && phaseFourthSerials.contains(no);
+                        })
                         .collect(Collectors.toList());
-                log.info("鍥涙湡鑰冩牳璁板綍鏁皗}",phase_fourth.size());
-                if (CollectionUtils.isNotEmpty(phase_one_two)){
-                    BigDecimal phaseOneTwoDeduction = calculateTotalDeduction(phase_one_two);
-                    DemeritRecord demeritRecordPhaseOneTwo = buildDemeritRecord(
-                            ConstructionTypeEnum.PHASE_ONE_TWO.name(),
-                            phaseOneTwoDeduction,
-                            areaDeptEnum.getDeptId());
-                    demeritRecords.add(demeritRecordPhaseOneTwo);
-                }else{
-                    DemeritRecord phaseOneTwoDeduction = buildDemeritRecord(
-                            ConstructionTypeEnum.PHASE_ONE_TWO.name(),
-                            BigDecimal.ZERO,
-                            areaDeptEnum.getDeptId());
-                    demeritRecords.add(phaseOneTwoDeduction);
-                }
+                log.info("鍥涙湡鑰冩牳璁板綍鏁皗}", phase_fourth.size());
 
+                List<RecordMetaDSumResult> check_enter_sichuan = resultList.stream()
+                        .filter(result ->{
+                            String no = result.getNo();
+                            return  no != null && checkEnterSichuan.contains(no);
+                        })
+                        .collect(Collectors.toList());
+                log.info("鍏ュ窛鍗虫{}", check_enter_sichuan.size());
 
-                if (CollectionUtils.isNotEmpty(phase_three)){
-                    BigDecimal phaseThreeDeduction = calculateTotalDeduction(phase_three);
-                    DemeritRecord demeritRecordPhaseThree = buildDemeritRecord(
-                            ConstructionTypeEnum.PHASE_THREE.name(),
-                            phaseThreeDeduction,
-                            areaDeptEnum.getDeptId());
-                    demeritRecords.add(demeritRecordPhaseThree);
-                }else {
-                    DemeritRecord phaseThreeDeduction = buildDemeritRecord(
-                            ConstructionTypeEnum.PHASE_THREE.name(),
-                            BigDecimal.ZERO,
-                            areaDeptEnum.getDeptId());
-                    demeritRecords.add(phaseThreeDeduction);
-                }
-                if (CollectionUtils.isNotEmpty(phase_fourth)){
-                    BigDecimal phaseFourthDeduction = calculateTotalDeduction(phase_fourth);
-                    DemeritRecord demeritRecordPhaseFourth = buildDemeritRecord(
-                            ConstructionTypeEnum.PHASE_FOURTH.name(),
-                            phaseFourthDeduction,
-                            areaDeptEnum.getDeptId());
-                    demeritRecords.add(demeritRecordPhaseFourth);
-                }else{
-                    DemeritRecord phaseFourthDeduction = buildDemeritRecord(
-                            ConstructionTypeEnum.PHASE_FOURTH.name(),
-                            BigDecimal.ZERO,
-                            areaDeptEnum.getDeptId());
-                    demeritRecords.add(phaseFourthDeduction);
-                }
-
+                List<RecordMetaDSumResult> eastern_new_city = resultList.stream()
+                        .filter(result ->{
+                            String no = result.getNo();
+                            return  no != null && easternNewCity.contains(no);
+                        })
+                        .collect(Collectors.toList());
+                log.info("涓滈儴鏂板煄{}", eastern_new_city.size());
+                List<RecordMetaDSumResult> yan_tan_phase_two_face = resultList.stream()
+                        .filter(result ->{
+                            String no = result.getNo();
+                            return  no != null && yanTanPhaseTwoFace.contains(no);
+                        })
+                        .collect(Collectors.toList());
+                log.info("娌挎哗浜屾湡浜鸿劯{}", yan_tan_phase_two_face.size());
+                //涓�浜屾湡
+                buildAndAddDemeritRecords(phase_one_two, ConstructionTypeEnum.PHASE_ONE_TWO.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
+                //涓夋湡
+                buildAndAddDemeritRecords(phase_three, ConstructionTypeEnum.PHASE_THREE.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
+                //鍥涙湡
+                buildAndAddDemeritRecords(phase_fourth, ConstructionTypeEnum.PHASE_FOURTH.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
+                //鍏ュ窛鍗虫
+                buildAndAddDemeritRecords(check_enter_sichuan, ConstructionTypeEnum.CHECK_ENTER_SICHUAN.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
+                //涓滈儴鏂板煄
+                buildAndAddDemeritRecords(eastern_new_city, ConstructionTypeEnum.EASTERN_NEW_CITY.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
+                //娌挎哗浜屾湡浜鸿劯
+                buildAndAddDemeritRecords(yan_tan_phase_two_face, ConstructionTypeEnum.YAN_TAN_PHASE_TWO_FACE.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
             }
-
-
 
         }
 
         //澶勭悊瀹屾暟鎹彃鍏ユ暟鎹簱涓�
         //鍏堝垹闄ら渶瑕佹彃鍏ユ椂闂存槸鍚﹀瓨鍦ㄦ暟鎹�
 
-        LambdaQueryWrapper<DemeritRecord> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.ge(DemeritRecord::getCreateTime,DateUtils.getDayStart(today))
+        LambdaQueryWrapper<DemeritRecord> demeritRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        demeritRecordLambdaQueryWrapper.ge(DemeritRecord::getCreateTime,DateUtils.getDayStart(today))
                         .le(DemeritRecord::getCreateTime,DateUtils.getDayEnd(today));
-        demeritRecordService.remove(queryWrapper);
+        demeritRecordService.remove(demeritRecordLambdaQueryWrapper);
         demeritRecordService.saveBatch(demeritRecords);
-
         log.info("缁撴潫璁$畻姣忔棩鎵e垎璁板綍鎯呭喌锛氭彃鍏ユ暟鎹噺{},鏁版嵁淇℃伅:{}",demeritRecords.size(),demeritRecords);
+        //濉厖璁惧褰曞儚鎯呭喌鎵e垎璇︽儏缁撴灉
+        LambdaQueryWrapper<DailyMonitorDemeritRecord> dailyMonitorDemeritRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        dailyMonitorDemeritRecordLambdaQueryWrapper.ge(DailyMonitorDemeritRecord::getCreateTime,DateUtils.getDayStart(today))
+                .le(DailyMonitorDemeritRecord::getCreateTime,DateUtils.getDayEnd(today));
+        iDailyMonitorDemeritRecordService.remove(dailyMonitorDemeritRecordLambdaQueryWrapper);
+        iDailyMonitorDemeritRecordService.saveBatch(dailyMonitorDemeritRecords);
+        log.info("缁撴潫璁$畻姣忔棩鎵e垎璁板綍璇︽儏鎯呭喌锛氭彃鍏ユ暟鎹噺{},鏁版嵁淇℃伅:{}",dailyMonitorDemeritRecords.size(),dailyMonitorDemeritRecords);
 
     }
+    public void buildAndAddDemeritRecords(List<RecordMetaDSumResult> constructionByRecordMetaList,
+                                          String constructionType,Integer areaDeptId,Date recordTime,
+                                          List<DemeritRecord> demeritRecords,
+                                          List<DailyMonitorDemeritRecord> dailyMonitorDemeritRecords) {
+        if (CollectionUtils.isNotEmpty(constructionByRecordMetaList)) {
+                    BigDecimal deduction = calculateTotalDeduction(constructionByRecordMetaList,recordTime,areaDeptId,dailyMonitorDemeritRecords);
+                    DemeritRecord demeritRecord = buildDemeritRecord(
+                            constructionType,
+                            deduction,
+                            areaDeptId,
+                            recordTime);
+                    demeritRecords.add(demeritRecord);
+                }else{
+                    DemeritRecord demeritRecord = buildDemeritRecord(
+                            constructionType,
+                            BigDecimal.ZERO,
+                            areaDeptId,
+                            recordTime);
+                    demeritRecords.add(demeritRecord);
+        }
+    }
+
 }

--
Gitblit v1.8.0