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 | 138 ++++++++++++++++++++++++++++++++++-----------
1 files changed, 104 insertions(+), 34 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 cd9d594..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,6 +4,7 @@
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;
@@ -11,6 +12,7 @@
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;
@@ -54,6 +56,8 @@
private final IMonitorConstructionMapper monitorConstructionMapper;
+ private final IDailyMonitorDemeritRecordService dailyMonitorDemeritRecordService;
+
private static final ExecutorService executorService = new ThreadPoolExecutor(16,
128,
5000,
@@ -63,6 +67,8 @@
);
private final IDemeritRecordService demeritRecordService;
+ private final IDailyMonitorDemeritRecordService iDailyMonitorDemeritRecordService;
+
private DemeritRecord buildDemeritRecord(String constructionType,BigDecimal demerit,Integer deptId,Date recordTime) {
DemeritRecord record = new DemeritRecord();
record.setConstructionType(constructionType);
@@ -71,7 +77,19 @@
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) {
@@ -94,6 +112,8 @@
} else {
deduction = BigDecimal.ZERO;
}
+ dailyMonitorDemeritRecords.add(buildDailyMonitorDemeritRecord(recordTime,record.getDeviceId()
+ ,record.getConstructionType(),deduction,deptId,false,record.getDeviceName()));
// 绱姞鎬绘墸鍒嗭紙鏈�鍚庣粺涓�澶勭悊绮惧害锛岄伩鍏嶄腑闂村洓鑸嶄簲鍏ヨ宸級
total = total.add(deduction);
@@ -143,19 +163,34 @@
List<MonitorConstruction> monitorConstructionList = new LambdaQueryChainWrapper<>(monitorConstructionMapper)
.eq(MonitorConstruction::getDeleted, Boolean.FALSE)
.list();
- List<String> serialNumberList = monitorConstructionList.stream()
- .map(MonitorConstruction::getSerialNumber).collect(Collectors.toList());
- //杩囨护鑾峰緱鍖呭惈浜嗚繖浜涙爣绛剧殑璁惧褰曞儚鎯呭喌闆嗗悎
+
+ //鎸夌紪鍙峰垎缁勶紝鍊间负璁惧瀵瑰簲鏍囩
+ 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 sn = result.getNo();
- // 浠讳竴瀛楁闈炵┖涓斿湪闆嗗悎涓嵆鍙�
- return (sn != null && serialNumberList.contains(sn));
+ // 杩囨护鏉′欢锛氬簭鍒楀彿闈炵┖ + 鍦ㄦ爣绛綧ap涓瓨鍦紙鍗虫湁瀵瑰簲鏍囩锛�
+ boolean isMatch = sn != null && serialTagMap.containsKey(sn);
+ if (isMatch) {
+ // 鍖归厤鎴愬姛锛屽皢鏍囩璧嬪�肩粰result锛堥渶纭繚RecordMetaDSumResult鏈塻etTag()鏂规硶锛�
+ String tag = serialTagMap.get(sn);
+ result.setConstructionType(tag); // 鍏抽敭锛氳祴鍊兼爣绛�
+ }
+ return isMatch; // 鍙繚鐣欐湁鏍囩鐨剅esult
})
.collect(Collectors.toList());
- log.info("鍓╀綑鑰冩牳璁惧杩囨护鍚庤澶囨暟{}",results.size());
+ log.info("鏈夋爣绛剧殑璁惧璁板綍闆嗗悎澶у皬:{}",results.size());//杩欐槸闇�瑕佽绠楁墸鍒嗙殑褰曞儚鏁版嵁
+
+
//杩囨护鎺夋姤澶囩殑璁惧
//鏌ヨ鍦ㄥ綋鍓嶆椂闂存湁鎶ュ鐨勬墍鏈夎澶囷紝
@@ -186,19 +221,14 @@
.map(Report::getSerialNumber).collect(Collectors.toList());
Set<String> deviceIdSet = new HashSet<>(deviceIds);
+
log.info("鎶ュ璁惧鏁皗}",deviceIdSet.size());
- results = 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);
@@ -206,9 +236,42 @@
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));
@@ -290,17 +353,17 @@
.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_one_two, ConstructionTypeEnum.PHASE_ONE_TWO.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
//涓夋湡
- buildAndAddDemeritRecords(phase_three, ConstructionTypeEnum.PHASE_THREE.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ buildAndAddDemeritRecords(phase_three, ConstructionTypeEnum.PHASE_THREE.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
//鍥涙湡
- buildAndAddDemeritRecords(phase_fourth, ConstructionTypeEnum.PHASE_FOURTH.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ buildAndAddDemeritRecords(phase_fourth, ConstructionTypeEnum.PHASE_FOURTH.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
//鍏ュ窛鍗虫
- buildAndAddDemeritRecords(check_enter_sichuan, ConstructionTypeEnum.CHECK_ENTER_SICHUAN.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ 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(),yesterday,demeritRecords);
+ 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(),yesterday,demeritRecords);
+ buildAndAddDemeritRecords(yan_tan_phase_two_face, ConstructionTypeEnum.YAN_TAN_PHASE_TWO_FACE.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
}
}
@@ -308,32 +371,39 @@
//澶勭悊瀹屾暟鎹彃鍏ユ暟鎹簱涓�
//鍏堝垹闄ら渶瑕佹彃鍏ユ椂闂存槸鍚﹀瓨鍦ㄦ暟鎹�
- 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<DemeritRecord> demeritRecords,
+ List<DailyMonitorDemeritRecord> dailyMonitorDemeritRecords) {
if (CollectionUtils.isNotEmpty(constructionByRecordMetaList)) {
- BigDecimal deduction = calculateTotalDeduction(constructionByRecordMetaList);
+ BigDecimal deduction = calculateTotalDeduction(constructionByRecordMetaList,recordTime,areaDeptId,dailyMonitorDemeritRecords);
DemeritRecord demeritRecord = buildDemeritRecord(
constructionType,
deduction,
areaDeptId,
- DateUtils.getDayStart(recordTime));
+ recordTime);
demeritRecords.add(demeritRecord);
}else{
DemeritRecord demeritRecord = buildDemeritRecord(
constructionType,
BigDecimal.ZERO,
areaDeptId,
- DateUtils.getDayStart(recordTime));
+ recordTime);
demeritRecords.add(demeritRecord);
}
}
--
Gitblit v1.8.0