From fea22e82e7e49691f6e0c20a29b228d0ab3173e9 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期三, 29 十月 2025 17:08:38 +0800
Subject: [PATCH] 修改问题
---
ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java | 200 ++++++++++++++++++++++++++++++-------------------
1 files changed, 123 insertions(+), 77 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..cd9d594 100644
--- a/ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java
@@ -5,9 +5,11 @@
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.google.common.util.concurrent.AtomicDouble;
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.IDemeritRecordService;
import com.ycl.utils.DateUtils;
@@ -50,6 +52,8 @@
private final ReportMapper reportMapper;
+ private final IMonitorConstructionMapper monitorConstructionMapper;
+
private static final ExecutorService executorService = new ThreadPoolExecutor(16,
128,
5000,
@@ -59,21 +63,12 @@
);
private final IDemeritRecordService demeritRecordService;
- // 鎻愬彇鍏叡杩囨护鏂规硶
- private Predicate<RecordMetaDSumResult> deviceNameStartsWith(String prefix) {
- return result -> result.getDeviceName() != null && result.getDeviceName().startsWith(prefix);
- }
-
- 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) {
@@ -126,7 +121,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 +130,7 @@
// 鑾峰彇鍊掓暟绗竷浣嶇殑瀛楃
char seventhFromEnd = deviceId.charAt(deviceId.length() - 7);
return seventhFromEnd != '1'; //涓�1 鍒欎細 false 鍘婚櫎鎺�
- });
+ }).collect(Collectors.toList());
log.info("杩囨护鍚庡墿浣欏叏鏅澶囨暟{}",results.size());
//鍙�冩牳LT_銆�(涓夋湡)
@@ -143,28 +138,43 @@
// DX_R銆侊紙鍥涘尯浜鸿劯锛�
// DX_RS銆侊紙鍥涘尯浜鸿劯锛�
// 锛堥渶瑕佹帓闄X_R2銆丏X_RD銆丣_銆乀1銆乀3浠ュ強娌℃湁鍓嶇紑鐨勮澶囷級
- List<String> prefixes = Arrays.asList("LT_", "DX_", "DX_R", "DX_RS");
-
- results.stream()
+// List<String> prefixes = Arrays.asList("LT_", "DX_", "DX_R", "DX_RS");
+ //鏌ヨ璁惧鏍囩琛ㄤ腑鐨凪onitorConstruction鍒楄〃
+ List<MonitorConstruction> monitorConstructionList = new LambdaQueryChainWrapper<>(monitorConstructionMapper)
+ .eq(MonitorConstruction::getDeleted, Boolean.FALSE)
+ .list();
+ List<String> serialNumberList = monitorConstructionList.stream()
+ .map(MonitorConstruction::getSerialNumber).collect(Collectors.toList());
+ //杩囨护鑾峰緱鍖呭惈浜嗚繖浜涙爣绛剧殑璁惧褰曞儚鎯呭喌闆嗗悎
+ results = results.stream()
.filter(result -> {
- String deviceName = result.getDeviceName();
- if (deviceName == null) {
- return false;
- }
- return prefixes.stream().anyMatch(deviceName::startsWith);
+ String sn = result.getNo();
+ // 浠讳竴瀛楁闈炵┖涓斿湪闆嗗悎涓嵆鍙�
+ return (sn != null && serialNumberList.contains(sn));
})
.collect(Collectors.toList());
+
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瀵硅薄鏈韩
@@ -177,7 +187,7 @@
Set<String> deviceIdSet = new HashSet<>(deviceIds);
log.info("鎶ュ璁惧鏁皗}",deviceIdSet.size());
- results.stream()
+ results = results.stream()
.filter(result -> {
// 鑾峰彇褰撳墠瀵硅薄鐨刣eviceId
String resultDeviceId = result.getDeviceId();
@@ -202,6 +212,24 @@
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,65 +246,62 @@
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(),yesterday,demeritRecords);
+ //涓夋湡
+ buildAndAddDemeritRecords(phase_three, ConstructionTypeEnum.PHASE_THREE.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ //鍥涙湡
+ buildAndAddDemeritRecords(phase_fourth, ConstructionTypeEnum.PHASE_FOURTH.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ //鍏ュ窛鍗虫
+ buildAndAddDemeritRecords(check_enter_sichuan, ConstructionTypeEnum.CHECK_ENTER_SICHUAN.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ //涓滈儴鏂板煄
+ buildAndAddDemeritRecords(eastern_new_city, ConstructionTypeEnum.EASTERN_NEW_CITY.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ //娌挎哗浜屾湡浜鸿劯
+ buildAndAddDemeritRecords(yan_tan_phase_two_face, ConstructionTypeEnum.YAN_TAN_PHASE_TWO_FACE.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
}
-
-
}
@@ -292,4 +317,25 @@
log.info("缁撴潫璁$畻姣忔棩鎵e垎璁板綍鎯呭喌锛氭彃鍏ユ暟鎹噺{},鏁版嵁淇℃伅:{}",demeritRecords.size(),demeritRecords);
}
+ public void buildAndAddDemeritRecords(List<RecordMetaDSumResult> constructionByRecordMetaList,
+ String constructionType,Integer areaDeptId,Date recordTime,
+ List<DemeritRecord> demeritRecords) {
+ if (CollectionUtils.isNotEmpty(constructionByRecordMetaList)) {
+ BigDecimal deduction = calculateTotalDeduction(constructionByRecordMetaList);
+ DemeritRecord demeritRecord = buildDemeritRecord(
+ constructionType,
+ deduction,
+ areaDeptId,
+ DateUtils.getDayStart(recordTime));
+ demeritRecords.add(demeritRecord);
+ }else{
+ DemeritRecord demeritRecord = buildDemeritRecord(
+ constructionType,
+ BigDecimal.ZERO,
+ areaDeptId,
+ DateUtils.getDayStart(recordTime));
+ demeritRecords.add(demeritRecord);
+ }
+ }
+
}
--
Gitblit v1.8.0