From d4096551507885a7feb1c3133a47728c49034cb2 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Wed, 15 Oct 2025 18:06:23 +0800 Subject: [PATCH 01/21] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/CrawlerCraneCurrentDataServiceImpl.java | 11 +++++++---- .../impl/TruckCraneCurrentDataServiceImpl.java | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/CrawlerCraneCurrentDataServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/CrawlerCraneCurrentDataServiceImpl.java index 08c49bad0..f62790a97 100644 --- a/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/CrawlerCraneCurrentDataServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/CrawlerCraneCurrentDataServiceImpl.java @@ -36,7 +36,8 @@ public class CrawlerCraneCurrentDataServiceImpl extends ServiceImpl> windSpeedTrend(Map map) { - if (MapUtils.getInteger(map, "selectType") == 1) { + Integer selectType = MapUtils.getInteger(map, "selectType"); + if (selectType == 1) { map.put("reportTime_begin", DateUtil.formatDateTime(DateUtil.beginOfDay(new Date()))); map.put("reportTime_end", DateUtil.formatDateTime(new Date())); } @@ -44,9 +45,9 @@ public class CrawlerCraneCurrentDataServiceImpl extends ServiceImpl list = this.list(queryWrapper); List crawlerCraneList = crawlerCraneService.list(Wrappers.lambdaQuery().eq(CrawlerCrane::getProjectSn, MapUtils.getString(map, "projectSn"))); List dayList; - if (MapUtils.getInteger(map, "selectType") == 1) { + if (selectType == 1) { dayList = DateUtils.getDateTimeStrList(100, "HH:mm"); - } else if (MapUtils.getInteger(map, "selectType") == 2){ + } else if (selectType == 2){ dayList = DateUtils.getNowFewDaysAgoList(7); } else { dayList = DateUtils.getNowFewDaysAgoList(29); @@ -56,7 +57,9 @@ public class CrawlerCraneCurrentDataServiceImpl extends ServiceImpl deviceMap = new HashMap<>(16); List> dataList = new ArrayList<>(); for (String day : dayList) { - List collect = list.stream().filter(l -> l.getDevSn().equals(crawlerCrane.getDevSn()) && DateUtil.formatDateTime(l.getReportTime()).contains(day)).collect(Collectors.toList()); + List collect = list.stream().filter(l -> l.getDevSn().equals(crawlerCrane.getDevSn()) + && ((selectType != 1 && DateUtil.formatDateTime(l.getReportTime()).contains(day)) + ||(selectType == 1 && DateUtil.format(l.getReportTime(),"HH:00").equals(day)))).collect(Collectors.toList()); Map result = new HashMap<>(16); result.put("dayTitle", day); result.put("windSpeed", collect.size() > 0 ? collect.get(0).getWindSpeed() : 0); diff --git a/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TruckCraneCurrentDataServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TruckCraneCurrentDataServiceImpl.java index eb22c3535..7037e031a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TruckCraneCurrentDataServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/bigdevice/service/impl/TruckCraneCurrentDataServiceImpl.java @@ -39,7 +39,8 @@ public class TruckCraneCurrentDataServiceImpl extends ServiceImpl> windSpeedTrend(Map map) { - if (MapUtils.getInteger(map, "selectType") == 1) { + Integer selectType = MapUtils.getInteger(map, "selectType"); + if (selectType == 1) { map.put("reportTime_begin", DateUtil.formatDateTime(DateUtil.beginOfDay(new Date()))); map.put("reportTime_end", DateUtil.formatDateTime(new Date())); } @@ -47,9 +48,9 @@ public class TruckCraneCurrentDataServiceImpl extends ServiceImpl list = this.list(queryWrapper); List truckCraneList = truckCraneService.list(Wrappers.lambdaQuery().eq(TruckCrane::getProjectSn, MapUtils.getString(map, "projectSn"))); List dayList; - if (MapUtils.getInteger(map, "selectType") == 1) { + if (selectType == 1) { dayList = DateUtils.getDateTimeStrList(100, "HH:mm"); - } else if (MapUtils.getInteger(map, "selectType") == 2){ + } else if (selectType == 2){ dayList = DateUtils.getNowFewDaysAgoList(7); } else { dayList = DateUtils.getNowFewDaysAgoList(29); @@ -59,7 +60,9 @@ public class TruckCraneCurrentDataServiceImpl extends ServiceImpl deviceMap = new HashMap<>(16); List> dataList = new ArrayList<>(); for (String day : dayList) { - List collect = list.stream().filter(l -> l.getDevSn().equals(truckCrane.getDevSn()) && DateUtil.formatDateTime(l.getReportTime()).contains(day)).collect(Collectors.toList()); + List collect = list.stream().filter(l -> l.getDevSn().equals(truckCrane.getDevSn()) + && ((selectType != 1 && DateUtil.formatDateTime(l.getReportTime()).contains(day)) + ||(selectType == 1 && DateUtil.format(l.getReportTime(),"HH:00").equals(day)))).collect(Collectors.toList()); Map result = new HashMap<>(16); result.put("dayTitle", day); result.put("windSpeed", collect.size() > 0 ? collect.get(0).getWindSpeed() : 0); From 4df713ca2830ef919d19f44992600b63765ea16f Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 17 Oct 2025 18:54:29 +0800 Subject: [PATCH 02/21] =?UTF-8?q?=E6=89=B9=E9=87=8F=E5=A4=8D=E5=88=B6?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=B7=A5=E7=A7=8D=E6=95=B0=E6=8D=AE=E5=88=B0?= =?UTF-8?q?=E6=9F=90=E4=B8=AA=E9=A1=B9=E7=9B=AEbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xmgl/modules/worker/service/impl/WorkerTypeServiceImpl.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerTypeServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerTypeServiceImpl.java index dfde81988..e6b0e5bd4 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerTypeServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerTypeServiceImpl.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.zhgd.jeecg.common.execption.OpenAlertException; +import com.zhgd.xmgl.constant.Cts; import com.zhgd.xmgl.modules.worker.entity.TeamInfo; import com.zhgd.xmgl.modules.worker.entity.WorkerType; import com.zhgd.xmgl.modules.worker.mapper.TeamInfoMapper; @@ -37,6 +38,7 @@ public class WorkerTypeServiceImpl extends ServiceImpl queryWrapper=new QueryWrapper<>(); queryWrapper.lambda().eq(WorkerType::getProjectSn,"0"); + queryWrapper.last(Cts.IGNORE_DATA_SCOPE_CONDITION); List list=workerTypeMapper.selectList(queryWrapper); if(list!=null&&list.size()>0){ for(WorkerType workerType:list){ From 13f7360162497198409f822aed527de79b3e6260 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Tue, 21 Oct 2025 15:10:37 +0800 Subject: [PATCH 03/21] =?UTF-8?q?=E5=90=84=E4=B8=93=E4=B8=9A=E9=9A=90?= =?UTF-8?q?=E6=82=A3=E5=B0=8F=E7=B1=BB=E9=A3=8E=E9=99=A9=E8=B5=B0=E5=8A=BF?= =?UTF-8?q?=E5=9B=BEbug=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mapper/xml/XzSecurityQualityInspectionRecordMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml b/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml index f561d937f..6b82c364c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml @@ -1162,7 +1162,7 @@ ,count(*) as y_val from xz_security_quality_inspection_record r join xz_security_danger_type_record t on t.id=r.danger_type_id - join xz_security_danger_type_record t2 on t.id=r.danger_type_id + join xz_security_danger_type_record t2 on t2.id=r.danger_second_type_id where r.project_sn = #{projectSn} and t2.level = 2 and r.status != 6 From 01c354735207f3f53813598a99534b157ee34665 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Wed, 22 Oct 2025 18:14:33 +0800 Subject: [PATCH 04/21] =?UTF-8?q?=E7=99=BB=E5=BD=95null=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basicdata/service/impl/SystemUserServiceImpl.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java index dc1dda7fa..e9dba96e6 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/SystemUserServiceImpl.java @@ -543,8 +543,14 @@ public class SystemUserServiceImpl extends ServiceImpl Date: Fri, 24 Oct 2025 17:56:25 +0800 Subject: [PATCH 05/21] =?UTF-8?q?=E8=A7=84=E5=88=99=E6=8A=A5=E8=AD=A6?= =?UTF-8?q?=E5=92=8C=E5=BC=82=E6=AD=A5=E7=BA=BF=E7=A8=8B=E6=B1=A0=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/xmgl/async/AsyncAiAnalyse.java | 34 ++++---- .../ExternalCallBackController.java | 5 +- .../impl/DictionaryItemServiceImpl.java | 5 +- .../car/service/impl/CarInfoServiceImpl.java | 12 +-- .../impl/DustNoiseDataServiceImpl.java | 5 +- .../impl/EnvironmentAlarmServiceImpl.java | 83 +++++++++---------- .../EnableMessageDevRuleController.java | 1 + .../impl/EnableMessageDevRuleServiceImpl.java | 1 + .../service/impl/ProjectServiceImpl.java | 4 +- .../service/impl/VideoItemServiceImpl.java | 4 +- .../impl/DepartmentInfoServiceImpl.java | 13 +-- .../impl/EnterpriseInfoServiceImpl.java | 12 +-- .../service/impl/TeamInfoServiceImpl.java | 13 +-- .../service/impl/WorkerInfoServiceImpl.java | 36 ++++---- ...DangerStatisticsAndAnalysisController.java | 2 +- ...zSecurityQualityInspectionRecordMapper.xml | 4 +- .../impl/XzHikvisionSyncServiceImpl.java | 14 ++-- .../java/com/zhgd/xmgl/task/CarInfoTask.java | 6 +- .../DischargingPlatformCurrentDataTask.java | 8 +- .../zhgd/xmgl/task/EnvironmentDevTask.java | 8 +- .../java/com/zhgd/xmgl/task/Mcs8Task.java | 6 +- .../zhgd/xmgl/task/MessageDevRuleTask.java | 22 +++-- .../com/zhgd/xmgl/task/SafetyHatTask.java | 7 +- .../java/com/zhgd/xmgl/task/TowerTask.java | 7 +- .../xmgl/task/TowerWorkerAttendanceTask.java | 8 +- .../xmgl/task/TunnelBoringMachineTask.java | 11 +-- .../java/com/zhgd/xmgl/task/WorkerTask.java | 11 +-- .../com/zhgd/xmgl/util/AsyncTaskUtil.java | 18 +++- 28 files changed, 181 insertions(+), 179 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/async/AsyncAiAnalyse.java b/src/main/java/com/zhgd/xmgl/async/AsyncAiAnalyse.java index 035859eef..3f27825a7 100644 --- a/src/main/java/com/zhgd/xmgl/async/AsyncAiAnalyse.java +++ b/src/main/java/com/zhgd/xmgl/async/AsyncAiAnalyse.java @@ -26,6 +26,7 @@ import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl; import com.zhgd.xmgl.modules.xz.entity.XzAiDeductRule; import com.zhgd.xmgl.modules.xz.service.IXzAiDeductRuleService; import com.zhgd.xmgl.push.service.UniPushService; +import com.zhgd.xmgl.util.AsyncTaskUtil; import com.zhgd.xmgl.util.MapBuilder; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.CollectionUtils; @@ -41,7 +42,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.CompletableFuture; /** * @program: wisdomSite @@ -129,7 +129,7 @@ public class AsyncAiAnalyse { * @param alarmType */ private void sendMessage(String typeName, String location, String projectSn, String hardwareId, Integer alarmType) { - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { Map dictDataMap = dictionaryItemService.getDictDataMapByProjectSn(DictionaryConstant.AI_ANALYSE_HARD_WARE_ALARM_RECORD_TYPE, projectSn); DictionaryItem dictionaryItem = dictDataMap.get(Convert.toStr(alarmType)); if (dictionaryItem == null) { @@ -137,21 +137,25 @@ public class AsyncAiAnalyse { } XzAiDeductRule rule = xzAiDeductRuleService.getOne(new LambdaQueryWrapper() .eq(XzAiDeductRule::getDictionaryItemId, dictionaryItem.getId()) - .eq(XzAiDeductRule::getProjectSn, dictionaryItem.getProjectSn()) + .eq(XzAiDeductRule::getProjectSn, projectSn) ); - String monitoringLevelName = xzAiDeductRuleService.getLevelName(rule.getLevel()); - EnableMessageDevRule messageDevRule = enableMessageDevRuleService.getRule(ParamEnum.MessageModuleNameEnum.AIJC, hardwareId, dictionaryItem.getName(), monitoringLevelName); - if (Objects.equals(messageDevRule.getEnableSmsNotification(), 1)) { - List templateParams = new ArrayList<>(); - //报警类型,报警名称,设备名称,报警值,阈值,超标时间,超标量 - templateParams.add(typeName); - templateParams.add(location); - String text = StrUtil.format("AI警报!{},位置{}", typeName, location); - enableMessageDevRuleService.sendSms(messageDevRule, templateParams, text, null); + if (rule != null) { + String monitoringLevelName = xzAiDeductRuleService.getLevelName(rule.getLevel()); + EnableMessageDevRule messageDevRule = enableMessageDevRuleService.getRule(ParamEnum.MessageModuleNameEnum.AIJC, hardwareId, dictionaryItem.getName(), monitoringLevelName); + if (messageDevRule != null) { + if (Objects.equals(messageDevRule.getEnableSmsNotification(), 1)) { + List templateParams = new ArrayList<>(); + //报警类型,报警名称,设备名称,报警值,阈值,超标时间,超标量 + templateParams.add(typeName); + templateParams.add(location); + String text = StrUtil.format("AI警报!{},位置{}", typeName, location); + enableMessageDevRuleService.sendSms(messageDevRule, templateParams, text, null); + } + enableMessageDevRuleService.sendSystemMessage(messageDevRule, "8"); + enableMessageDevRuleService.sendBroadcast(messageDevRule); + } } - enableMessageDevRuleService.sendSystemMessage(messageDevRule, "8"); - enableMessageDevRuleService.sendBroadcast(messageDevRule); - }, threadPoolTaskExecutor); + }); } public String getTitleByAlarmType(Integer alarmType, String projectSn) { diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/ExternalCallBackController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/ExternalCallBackController.java index 449f78115..302fefdbc 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/ExternalCallBackController.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/ExternalCallBackController.java @@ -31,6 +31,7 @@ import com.zhgd.xmgl.modules.worker.service.IWorkerInfoService; import com.zhgd.xmgl.modules.worker.service.impl.WorkerAttendanceServiceImpl; import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync; import com.zhgd.xmgl.modules.xz.service.impl.XzHikvisionSyncServiceImpl; +import com.zhgd.xmgl.util.AsyncTaskUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -256,7 +257,7 @@ public class ExternalCallBackController { CarManufacturer carManufacturer = carManufacturerFactory.getCarManufacturer(projectSn); if (carManufacturer != null) { CarInfo finalCarInfo = carInfo; - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { CarPassRecord carPassRecord = new CarPassRecord(); carPassRecord.setCarNumber(data.getCarNum()); boolean isIn = Objects.equals(data.getCarStatus(), 0); @@ -275,7 +276,7 @@ public class ExternalCallBackController { carPassRecord.setCameraId(data.getEnterItcDevChnid()); carPassRecord.setIsOpen(1); carPassRecordService.savePassRecord(carPassRecord, finalCarInfo); - }, threadPoolTaskExecutor); + }); } } diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/DictionaryItemServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/DictionaryItemServiceImpl.java index 16f1a0cb1..e98c17363 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/DictionaryItemServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/DictionaryItemServiceImpl.java @@ -21,6 +21,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.function.Function; import java.util.stream.Collectors; @@ -50,7 +51,7 @@ public class DictionaryItemServiceImpl extends ServiceImplm.getRequest()).orElse(null); return queryList(di, request); } @@ -127,7 +128,7 @@ public class DictionaryItemServiceImpl extends ServiceImpl queryWrapper = QueryGenerator.initQueryWrapper(dictionaryItem, req.getParameterMap(), null, + QueryWrapper queryWrapper = QueryGenerator.initQueryWrapper(dictionaryItem, req != null ? req.getParameterMap() : null, null, RefUtil.fieldNames(DictionaryItem::getName)) .orderByAsc(RefUtil.fieldNameUlc(DictionaryItem::getOrderNum)); queryWrapper.eq(RefUtil.fieldNameUlc(DictionaryItem::getIsEnable), 1); diff --git a/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java index 577675cd4..95da96ab3 100644 --- a/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/car/service/impl/CarInfoServiceImpl.java @@ -207,9 +207,9 @@ public class CarInfoServiceImpl extends ServiceImpl impl CarManufacturer carManufacturer = carManufacturerFactory.getCarManufacturer(c.getProjectSn()); if (carManufacturer != null) { carManufacturer.saveCarProcessStatus(c); - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { carManufacturer.saveCar(c); - }, threadPoolTaskExecutor); + }); } } @@ -485,9 +485,9 @@ public class CarInfoServiceImpl extends ServiceImpl impl CarManufacturer carManufacturer = carManufacturerFactory.getCarManufacturer(carInfo.getProjectSn()); if (carManufacturer != null) { carManufacturer.saveCarProcessStatus(carInfo); - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { carManufacturer.saveCar(carInfo); - }, threadPoolTaskExecutor); + }); } } @@ -582,9 +582,9 @@ public class CarInfoServiceImpl extends ServiceImpl impl CarManufacturer carManufacturer = carManufacturerFactory.getCarManufacturer(carInfo.getProjectSn()); if (carManufacturer != null) { - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { carManufacturer.deleteCar(carInfo); - }, threadPoolTaskExecutor); + }); } } diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/DustNoiseDataServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/DustNoiseDataServiceImpl.java index 441d16ff4..4342c7682 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/DustNoiseDataServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/DustNoiseDataServiceImpl.java @@ -19,6 +19,7 @@ import com.zhgd.xmgl.modules.environment.mapper.EnvironmentWarningMapper; import com.zhgd.xmgl.modules.environment.service.IDustNoiseDataService; import com.zhgd.xmgl.modules.environment.service.IEnvironmentAlarmService; import com.zhgd.xmgl.modules.environment.service.IEnvironmentDevService; +import com.zhgd.xmgl.util.AsyncTaskUtil; import com.zhgd.xmgl.util.DateUtils; import com.zhgd.xmgl.util.MessageUtil; import com.zhgd.xmgl.util.WindDirectionUtils; @@ -267,13 +268,13 @@ public class DustNoiseDataServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { try { rzckStartHj212(); } catch (InterruptedException e) { log.error("仁智测控转发扬尘错误:", e); } - }, threadPoolTaskExecutor); + }); } /** diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentAlarmServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentAlarmServiceImpl.java index 98134c228..65ac77f88 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentAlarmServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentAlarmServiceImpl.java @@ -35,6 +35,7 @@ import com.zhgd.xmgl.modules.project.service.IEnableMessageDevRuleService; import com.zhgd.xmgl.modules.project.service.IMessageConfigV2Service; import com.zhgd.xmgl.modules.sprayrt.service.ISprayRtDevService; import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl; +import com.zhgd.xmgl.util.AsyncTaskUtil; import com.zhgd.xmgl.util.DateUtils; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -50,7 +51,6 @@ import org.springframework.util.CollectionUtils; import javax.annotation.Resource; import java.sql.Timestamp; import java.util.*; -import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; /** @@ -163,10 +163,9 @@ public class EnvironmentAlarmServiceImpl extends ServiceImpl= warningMap.getNoiseWarning().doubleValue()) { @@ -198,10 +197,9 @@ public class EnvironmentAlarmServiceImpl extends ServiceImpl= warningMap.getWindSpeed().doubleValue()) { @@ -492,9 +490,9 @@ public class EnvironmentAlarmServiceImpl extends ServiceImpl= warningMap.getEvaporationRate().doubleValue()) { @@ -563,9 +561,9 @@ public class EnvironmentAlarmServiceImpl extends ServiceImpl= warningMap.getMaxTemperature().doubleValue()) { @@ -635,9 +633,9 @@ public class EnvironmentAlarmServiceImpl extends ServiceImpl { + private void sendMsg(String devname, EnvironmentAlarm environmentAlarm, String alarmName) { + AsyncTaskUtil.runAsync(() -> { String monitoringLevelName = environmentAlarm.getType() == 1 ? "预警" : "报警"; String threshold = NumberUtil.sub(environmentAlarm.getAlarmValue(), environmentAlarm.getExceed()) + ""; String time = DateUtil.formatDateTime(environmentAlarm.getAlarmTime()); String monitoringParameterName = environmentAlarmTypeService.getById(environmentAlarm.getAlarmTypeId()).getAlarmType(); EnableMessageDevRule messageDevRule = enableMessageDevRuleService.getRule(ParamEnum.MessageModuleNameEnum.YCJC, environmentAlarm.getDeviceId(), monitoringParameterName, monitoringLevelName); - if (Objects.equals(messageDevRule.getEnableSmsNotification(), 1)) { - List templateParams = new ArrayList<>(); - //报警类型,报警名称,设备名称,报警值,阈值,超标时间,超标量 - templateParams.add(monitoringLevelName); - templateParams.add(alarmName); - templateParams.add(devname); - templateParams.add(environmentAlarm.getAlarmValue() + ""); - templateParams.add(threshold); - templateParams.add(time); - templateParams.add(environmentAlarm.getExceed() + ""); - String text = StrUtil.format("扬尘超标警报!报警类型:{},报警名称:{},设备名称:{},报警值:{},阈值:{},超标时间:{},超标量:{}", - monitoringLevelName, alarmName, devname, environmentAlarm.getAlarmValue() + "", threshold, time, environmentAlarm.getExceed() + ""); - enableMessageDevRuleService.sendSms(messageDevRule, templateParams, text, null); + if (messageDevRule != null) { + if (Objects.equals(messageDevRule.getEnableSmsNotification(), 1)) { + List templateParams = new ArrayList<>(); + //报警类型,报警名称,设备名称,报警值,阈值,超标时间,超标量 + templateParams.add(monitoringLevelName); + templateParams.add(alarmName); + templateParams.add(devname); + templateParams.add(environmentAlarm.getAlarmValue() + ""); + templateParams.add(threshold); + templateParams.add(time); + templateParams.add(environmentAlarm.getExceed() + ""); + String text = StrUtil.format("扬尘超标警报!报警类型:{},报警名称:{},设备名称:{},报警值:{},阈值:{},超标时间:{},超标量:{}", + monitoringLevelName, alarmName, devname, environmentAlarm.getAlarmValue() + "", threshold, time, environmentAlarm.getExceed() + ""); + enableMessageDevRuleService.sendSms(messageDevRule, templateParams, text, null); + } + enableMessageDevRuleService.sendSystemMessage(messageDevRule, "7"); + enableMessageDevRuleService.sendBroadcast(messageDevRule); } - enableMessageDevRuleService.sendSystemMessage(messageDevRule, "7"); - enableMessageDevRuleService.sendBroadcast(messageDevRule); - }, threadPoolTaskExecutor); + }); } @Override diff --git a/src/main/java/com/zhgd/xmgl/modules/project/controller/EnableMessageDevRuleController.java b/src/main/java/com/zhgd/xmgl/modules/project/controller/EnableMessageDevRuleController.java index dc682eba3..a76a05bee 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/controller/EnableMessageDevRuleController.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/controller/EnableMessageDevRuleController.java @@ -238,6 +238,7 @@ public class EnableMessageDevRuleController { String monitoringLevelName = enableMessageDevRuleDto.getMonitoringLevelName(); EnableMessageDevRule db = enableMessageDevRuleService.getOne(new LambdaQueryWrapper() .eq(EnableMessageDevRule::getDevSn, devSn) + .eq(EnableMessageDevRule::getProjectSn, enableMessageDevRuleDto.getProjectSn()) .eq(EnableMessageDevRule::getMonitoringModuleName, monitoringModuleName) .eq(EnableMessageDevRule::getMonitoringParameterName, monitoringParameterName) .eq(EnableMessageDevRule::getMonitoringLevelName, monitoringLevelName)); diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EnableMessageDevRuleServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EnableMessageDevRuleServiceImpl.java index e8b201e03..7a6bda0ae 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EnableMessageDevRuleServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EnableMessageDevRuleServiceImpl.java @@ -138,6 +138,7 @@ public class EnableMessageDevRuleServiceImpl extends ServiceImpl() .eq(EnableMessageDevRule::getMonitoringModuleName, moduleEnum.getDesc()) .eq(EnableMessageDevRule::getDevSn, devSn) + .eq(EnableMessageDevRule::getProjectSn, messageDev.getProjectSn()) .eq(EnableMessageDevRule::getMonitoringParameterName, monitoringParameterName) .eq(EnableMessageDevRule::getMonitoringLevelName, monitoringLevelName) ); diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java index 6f7773761..3f47135b7 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/ProjectServiceImpl.java @@ -434,9 +434,9 @@ public class ProjectServiceImpl extends ServiceImpl impl asyncHikvision.editProjectForHikvision(old); WorkerManufacturer workerManufacturer = workerManufacturerFactory.getWorkerManufacturer(project.getProjectSn()); if (workerManufacturer != null) { - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveProject(project); - }, threadPoolTaskExecutor); + }); } } diff --git a/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java index 5cdc008fc..3607a99d1 100644 --- a/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/video/service/impl/VideoItemServiceImpl.java @@ -390,7 +390,7 @@ public class VideoItemServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { try { TimeUnit.SECONDS.sleep(2); // 延迟2秒 } catch (InterruptedException e) { @@ -400,7 +400,7 @@ public class VideoItemServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.deleteDepartmentInfo(departmentInfo); - }, threadPoolTaskExecutor); + }); } } @@ -121,9 +122,9 @@ public class DepartmentInfoServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveDepartmentInfo(departmentInfo); - }, threadPoolTaskExecutor); + }); } return departmentInfo; } @@ -148,9 +149,9 @@ public class DepartmentInfoServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveDepartmentInfo(departmentInfo); - }, threadPoolTaskExecutor); + }); } return departmentInfo; } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java index 1049828f9..4aaeffdb3 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/EnterpriseInfoServiceImpl.java @@ -301,9 +301,9 @@ public class EnterpriseInfoServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveEnterpriseInfo(enterpriseInfo); - }, threadPoolTaskExecutor); + }); } return enterpriseInfo; } @@ -360,9 +360,9 @@ public class EnterpriseInfoServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.deleteEnterpriseInfo(enterpriseInfo); - }, threadPoolTaskExecutor); + }); } } @@ -418,9 +418,9 @@ public class EnterpriseInfoServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveEnterpriseInfo(enterpriseInfo); - }, threadPoolTaskExecutor); + }); } return enterpriseInfo; } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/TeamInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/TeamInfoServiceImpl.java index 7465d5b45..4260dd0c1 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/TeamInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/TeamInfoServiceImpl.java @@ -26,6 +26,7 @@ import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper; import com.zhgd.xmgl.modules.worker.mapper.WorkerTypeMapper; import com.zhgd.xmgl.modules.worker.service.IEnterpriseInfoService; import com.zhgd.xmgl.modules.worker.service.ITeamInfoService; +import com.zhgd.xmgl.util.AsyncTaskUtil; import com.zhgd.xmgl.util.MessageUtil; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; @@ -99,9 +100,9 @@ public class TeamInfoServiceImpl extends ServiceImpl i asyncHikvision.deleteTeamInfoForHikvision(teamInfo.getId() + "", teamInfo); WorkerManufacturer workerManufacturer = workerManufacturerFactory.getWorkerManufacturer(teamInfo.getProjectSn()); if (workerManufacturer != null) { - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.deleteTeamInfo(teamInfo); - },threadPoolTaskExecutor); + }); } } @@ -161,9 +162,9 @@ public class TeamInfoServiceImpl extends ServiceImpl i asyncHikvision.editTeamInfoForHikvision(teamInfo); WorkerManufacturer workerManufacturer = workerManufacturerFactory.getWorkerManufacturer(teamInfo.getProjectSn()); if (workerManufacturer != null) { - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveTeamInfo(teamInfo); - }, threadPoolTaskExecutor); + }); } return teamInfo; } @@ -199,9 +200,9 @@ public class TeamInfoServiceImpl extends ServiceImpl i asyncHikvision.addTeamInfoForHikvision(teamInfo); WorkerManufacturer workerManufacturer = workerManufacturerFactory.getWorkerManufacturer(teamInfo.getProjectSn()); if (workerManufacturer != null) { - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveTeamInfo(teamInfo); - },threadPoolTaskExecutor); + }); } return teamInfo; } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java index 67a553f36..c7bc020f4 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerInfoServiceImpl.java @@ -472,9 +472,9 @@ public class WorkerInfoServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveWorkerUFaceAuth(info); - }, threadPoolTaskExecutor); + }); } } } @@ -607,10 +607,14 @@ public class WorkerInfoServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveWorkerAndFace(workerInfo); - }, threadPoolTaskExecutor).thenRunAsync(() -> { - workerManufacturer.saveWorkerUFaceAuth(workerInfo); + }).thenRunAsync(() -> { + try { + workerManufacturer.saveWorkerUFaceAuth(workerInfo); + } catch (Exception e) { + log.error("异步任务执行异常",e); + } }); } return workerInfo; @@ -700,10 +704,14 @@ public class WorkerInfoServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveWorkerAndFace(workerInfo); - }, threadPoolTaskExecutor).thenRunAsync(() -> { - workerManufacturer.saveWorkerUFaceAuth(workerInfo); + }).thenRunAsync(() -> { + try { + workerManufacturer.saveWorkerUFaceAuth(workerInfo); + } catch (Exception e) { + log.error("异步任务执行异常",e); + } }); } return workerInfo; @@ -760,9 +768,9 @@ public class WorkerInfoServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.deleteWorker(workerInfo); - }, threadPoolTaskExecutor); + }); } } @@ -2141,9 +2149,9 @@ public class WorkerInfoServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveWorkerAndFace(workerInfo); - }, threadPoolTaskExecutor); + }); } } @@ -2155,9 +2163,9 @@ public class WorkerInfoServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { workerManufacturer.saveWorkerAndFace(workerInfo); - }, threadPoolTaskExecutor); + }); } } diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/controller/HiddenDangerStatisticsAndAnalysisController.java b/src/main/java/com/zhgd/xmgl/modules/xz/security/controller/HiddenDangerStatisticsAndAnalysisController.java index fdf0a6580..9f9e0551b 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/controller/HiddenDangerStatisticsAndAnalysisController.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/controller/HiddenDangerStatisticsAndAnalysisController.java @@ -99,7 +99,7 @@ public class HiddenDangerStatisticsAndAnalysisController { @ApiImplicitParam(name = "startMonth", value = "开始时间,格式2020-08", dataType = "String", paramType = "body", required = true), @ApiImplicitParam(name = "endMonth", value = "结束时间,格式2020-08", dataType = "String", paramType = "body", required = true), @ApiImplicitParam(name = "dutyMajor", value = "责任专业(字典值)", dataType = "String", paramType = "body", required = false), - @ApiImplicitParam(name = "smallId", value = "小类的id", dataType = "String", paramType = "body", required = false), + @ApiImplicitParam(name = "smallName", value = "小类的名称", dataType = "String", paramType = "body", required = false), }) @PostMapping(value = "/countSmallByMonth") public Result countSmallByMonth(@RequestBody Map map) { diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml b/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml index 6b82c364c..01fc12575 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/xz/security/mapper/xml/XzSecurityQualityInspectionRecordMapper.xml @@ -1175,8 +1175,8 @@ and r.duty_major = #{dutyMajor} - - and t2.id = #{smallId} + + and t2.danger_name = #{smallName} group by x_name diff --git a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionSyncServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionSyncServiceImpl.java index feb1e90c2..80be2207c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionSyncServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/xz/service/impl/XzHikvisionSyncServiceImpl.java @@ -31,16 +31,12 @@ import com.zhgd.xmgl.modules.worker.entity.UfaceDev; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; import com.zhgd.xmgl.modules.worker.mapper.UfaceDevMapper; import com.zhgd.xmgl.modules.worker.mapper.WorkerInfoMapper; -import com.zhgd.xmgl.modules.worker.service.IWorkerInfoService; import com.zhgd.xmgl.modules.xz.entity.XzHikvisionSync; import com.zhgd.xmgl.modules.xz.enums.XzHikvisionSyncOperateEnum; import com.zhgd.xmgl.modules.xz.enums.XzHikvisionSyncTypeEnum; import com.zhgd.xmgl.modules.xz.mapper.XzHikvisionSyncMapper; import com.zhgd.xmgl.modules.xz.service.IXzHikvisionSyncService; -import com.zhgd.xmgl.util.PageUtil; -import com.zhgd.xmgl.util.RefUtil; -import com.zhgd.xmgl.util.ThreadLocalUtil; -import com.zhgd.xmgl.util.ZyMqttFaceDevUtil; +import com.zhgd.xmgl.util.*; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.tuple.ImmutablePair; import org.apache.commons.lang3.tuple.Pair; @@ -255,13 +251,13 @@ public class XzHikvisionSyncServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { if (saveOperate) { carManufacturer.saveCar(carInfo); } else { carManufacturer.deleteCar(carInfo); } - }, threadPoolTaskExecutor); + }); } else { CarInfo carInfo = carInfoMapper.selectById(whoId); if (carInfo == null) { @@ -290,7 +286,7 @@ public class XzHikvisionSyncServiceImpl extends ServiceImpl { + AsyncTaskUtil.runAsync(() -> { if (Objects.equals(xzHikvisionSync.getType(), XzHikvisionSyncTypeEnum.PERSON.getValue())) { if (saveOperate) { workerManufacturer.saveWorker(workerInfo); @@ -314,7 +310,7 @@ public class XzHikvisionSyncServiceImpl extends ServiceImpl sendAddDeleteDevSns = new ImmutablePair<>(devSns, notDevSns); workerManufacturer.saveWorkerUFaceAuthToOneDev(workerInfo, sendAddDeleteDevSns); } - }, threadPoolTaskExecutor); + }); } else { //海康的 WorkerInfo workerInfo = workerInfoMapper.selectById(whoId); diff --git a/src/main/java/com/zhgd/xmgl/task/CarInfoTask.java b/src/main/java/com/zhgd/xmgl/task/CarInfoTask.java index 225725702..1223a4640 100644 --- a/src/main/java/com/zhgd/xmgl/task/CarInfoTask.java +++ b/src/main/java/com/zhgd/xmgl/task/CarInfoTask.java @@ -24,6 +24,7 @@ import com.zhgd.xmgl.modules.car.service.ICarMeasureSpeedDevService; import com.zhgd.xmgl.modules.car.service.impl.CarInfoServiceImpl; import com.zhgd.xmgl.modules.project.entity.Project; import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; +import com.zhgd.xmgl.util.AsyncTaskUtil; import com.zhgd.xmgl.util.HikvisionUtil; import lombok.extern.slf4j.Slf4j; import net.javacrumbs.shedlock.core.SchedulerLock; @@ -38,7 +39,6 @@ import org.springframework.web.bind.annotation.RestController; import java.math.BigDecimal; import java.util.*; -import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.stream.Collectors; @@ -191,9 +191,9 @@ public class CarInfoTask { for (Project project : projects) { CarManufacturer carManufacturer = carManufacturerFactory.getCarManufacturer(project.getProjectSn()); if (carManufacturer != null) { - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { carManufacturer.saveCarAttendances(startTime,endTime); - }, threadPoolTaskExecutor); + }); } } } diff --git a/src/main/java/com/zhgd/xmgl/task/DischargingPlatformCurrentDataTask.java b/src/main/java/com/zhgd/xmgl/task/DischargingPlatformCurrentDataTask.java index fe093bef3..9daf87d6f 100644 --- a/src/main/java/com/zhgd/xmgl/task/DischargingPlatformCurrentDataTask.java +++ b/src/main/java/com/zhgd/xmgl/task/DischargingPlatformCurrentDataTask.java @@ -14,6 +14,7 @@ import com.zhgd.xmgl.modules.discharging.service.IDischargingPlatformCurrentData import com.zhgd.xmgl.modules.project.entity.Project; import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; import com.zhgd.xmgl.task.dto.DischargingPlatformCurrentDataDto; +import com.zhgd.xmgl.util.AsyncTaskUtil; import com.zhgd.xmgl.util.XiwonUtil; import lombok.extern.slf4j.Slf4j; import net.javacrumbs.shedlock.core.SchedulerLock; @@ -21,13 +22,11 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.*; -import java.util.concurrent.CompletableFuture; @Slf4j @Component @@ -64,11 +63,8 @@ public class DischargingPlatformCurrentDataTask { // 获取设备列表 List devList = dischargingPlatformDevMapper.selectList(new LambdaQueryWrapper() .eq(DischargingPlatformDev::getProjectSn, project.getProjectSn())); - devList.forEach(dev -> CompletableFuture.runAsync(() -> { + devList.forEach(dev -> AsyncTaskUtil.runAsync(() -> { doGetDischargingPlatformCurrentData(dev, project, now); - }).exceptionally(throwable -> { - log.error("err", throwable); - return null; }) ); } diff --git a/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java b/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java index 642846a25..e8f7cf65d 100644 --- a/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java +++ b/src/main/java/com/zhgd/xmgl/task/EnvironmentDevTask.java @@ -21,6 +21,7 @@ import com.zhgd.xmgl.modules.sprayrt.mapper.SprayRtDevMapper; import com.zhgd.xmgl.modules.sprayrt.service.ISprayRtDevService; import com.zhgd.xmgl.modules.sprayrt.service.impl.SprayRtDevServiceImpl; import com.zhgd.xmgl.task.dto.EnvironmentDustDataDto; +import com.zhgd.xmgl.util.AsyncTaskUtil; import com.zhgd.xmgl.util.EnvironmentUtils; import com.zhgd.xmgl.util.WindDirectionUtils; import com.zhgd.xmgl.util.XiwonUtil; @@ -32,7 +33,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -40,7 +40,6 @@ import javax.annotation.Resource; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.*; -import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; /** @@ -160,11 +159,8 @@ public class EnvironmentDevTask { // 获取设备列表 List devList = environmentDevMapper.selectList(new LambdaQueryWrapper() .eq(EnvironmentDev::getProjectSn, project.getProjectSn())); - devList.forEach(dev -> CompletableFuture.runAsync(() -> { + devList.forEach(dev -> AsyncTaskUtil.runAsync(() -> { doGetEnvironmentDustData(dev, project); - }).exceptionally(throwable -> { - log.error("err", throwable); - return null; }) ); } diff --git a/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java b/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java index 60e554ec7..cbc0e3b69 100644 --- a/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java +++ b/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java @@ -6,6 +6,7 @@ import com.zhgd.xmgl.call.factory.PoliceCameraManufacturerFactory; import com.zhgd.xmgl.modules.policecamera.service.IProjectPoliceCameraConfigService; import com.zhgd.xmgl.modules.project.entity.Project; import com.zhgd.xmgl.modules.project.service.IProjectService; +import com.zhgd.xmgl.util.AsyncTaskUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; @@ -18,7 +19,6 @@ import org.springframework.web.bind.annotation.RestController; import java.util.Date; import java.util.List; -import java.util.concurrent.CompletableFuture; @Slf4j @RestController @@ -50,9 +50,9 @@ public class Mcs8Task { try { PoliceCameraManufacturer manufacturer = policeCameraManufacturerFactory.getPoliceCameraManufacturer(project.getProjectSn()); if (manufacturer != null) { - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { manufacturer.pullFile(DateUtil.offsetDay(now, -7), now); - }, threadPoolTaskExecutor); + }); } } catch (Exception e) { log.error("定时从Mcs8获取执法记录仪文件err,{}", project.getProjectName(), e); diff --git a/src/main/java/com/zhgd/xmgl/task/MessageDevRuleTask.java b/src/main/java/com/zhgd/xmgl/task/MessageDevRuleTask.java index 553240520..b470a7639 100644 --- a/src/main/java/com/zhgd/xmgl/task/MessageDevRuleTask.java +++ b/src/main/java/com/zhgd/xmgl/task/MessageDevRuleTask.java @@ -89,12 +89,13 @@ public class MessageDevRuleTask { try { Map environmentTypeMap = environmentAlarmTypeService.list().stream().collect(Collectors.toMap(EnvironmentAlarmType::getId, Function.identity(), (o1, o2) -> o1)); List projects = projectService.list(new LambdaQueryWrapper()); - Map>>> devSn2Parameter2LevelEnvironmentAlarmMap = environmentAlarmService.list(new LambdaQueryWrapper() + Map>>>> devSn2ProjectSn2Parameter2LevelEnvironmentAlarmMap = environmentAlarmService.list(new LambdaQueryWrapper() .ge(EnvironmentAlarm::getAlarmTime, DateUtil.formatDateTime(DateUtil.offsetDay(new Date(), -1))) .le(EnvironmentAlarm::getAlarmTime, new Date()) ).stream().collect(Collectors.groupingBy(EnvironmentAlarm::getDeviceId, + Collectors.groupingBy(EnvironmentAlarm::getProjectSn, Collectors.groupingBy(ea -> environmentTypeMap.get(ea.getAlarmTypeId()).getAlarmType(), - Collectors.groupingBy(ea -> Objects.equals(ea.getType(), 0) ? "报警" : "预警")))); + Collectors.groupingBy(ea -> Objects.equals(ea.getType(), 0) ? "报警" : "预警"))))); List ruleList = enableMessageDevRuleService.list(new LambdaQueryWrapper().eq(EnableMessageDevRule::getIsEnabled, 1)); Map userMap = systemUserService.list(new LambdaQueryWrapper()).stream().collect(Collectors.toMap(SystemUser::getUserId, Function.identity(), (o1, o2) -> o1)); Map> moduleMap = ruleList.stream().collect(Collectors.groupingBy(EnableMessageDevRule::getMonitoringModuleName)); @@ -103,22 +104,24 @@ public class MessageDevRuleTask { Map dictDataMap = dictList.stream().collect(Collectors.toMap(DictionaryItem::getData, Function.identity(), (o1, o2) -> o1)); Map dicIdMap = xzAiDeductRuleService.list(new LambdaQueryWrapper() .eq(XzAiDeductRule::getProjectSn, project.getProjectSn())).stream().collect(Collectors.toMap(XzAiDeductRule::getDictionaryItemId, Function.identity(), (o1, o2) -> o1)); - Map>>> devSn2Parameter2LevelAiMap = aiAnalyseHardWareAlarmRecordService.list(new LambdaQueryWrapper() + Map>>>> devSn2ProjectSn2Parameter2LevelAiMap = aiAnalyseHardWareAlarmRecordService.list(new LambdaQueryWrapper() .ge(AiAnalyseHardWareAlarmRecord::getCreateTime, DateUtil.formatDateTime(DateUtil.offsetDay(new Date(), -1))) .le(AiAnalyseHardWareAlarmRecord::getCreateTime, new Date()) ).stream().filter(r -> { return Objects.nonNull(Optional.ofNullable(dictDataMap.get(Convert.toStr(r.getAlarmType()))).map(m -> dicIdMap.get(m.getId())).map(XzAiDeductRule::getLevel).orElse(null)); }).collect(Collectors.groupingBy(AiAnalyseHardWareAlarmRecord::getHardwareId, - Collectors.groupingBy(r1 -> dictDataMap.get(Convert.toStr(r1.getAlarmType())).getName(), - Collectors.groupingBy(r -> Optional.of(dictDataMap.get(Convert.toStr(r.getAlarmType()))).map(m -> dicIdMap.get(m.getId())).map(r1 -> { - return xzAiDeductRuleService.getLevelName(r1.getLevel()); - }).orElse(null))))); + Collectors.groupingBy(AiAnalyseHardWareAlarmRecord::getProjectSn, + Collectors.groupingBy(r1 -> dictDataMap.get(Convert.toStr(r1.getAlarmType())).getName(), + Collectors.groupingBy(r -> Optional.of(dictDataMap.get(Convert.toStr(r.getAlarmType()))).map(m -> dicIdMap.get(m.getId())).map(r1 -> { + return xzAiDeductRuleService.getLevelName(r1.getLevel()); + }).orElse(null)))))); for (Map.Entry> moduleEntry : moduleMap.entrySet()) { List entryRules = moduleEntry.getValue(); for (EnableMessageDevRule rule : entryRules) { //扬尘 if (Objects.equals(ParamEnum.MessageModuleNameEnum.YCJC.getDesc(), moduleEntry.getKey())) { - List filterAlarms = Optional.ofNullable(devSn2Parameter2LevelEnvironmentAlarmMap.get(rule.getDevSn())) + List filterAlarms = Optional.ofNullable(devSn2ProjectSn2Parameter2LevelEnvironmentAlarmMap.get(rule.getDevSn())) + .map(m -> m.get(rule.getProjectSn())) .map(m -> m.get(rule.getMonitoringParameterName())).map(m -> m.get(rule.getMonitoringLevelName())).orElse(new ArrayList<>()); filterAlarms = filterAlarms.stream().filter(alarm -> DateUtil.compare(alarm.getAlarmTime(), DateUtil.offsetHour(new Date(), rule.getSmsPushFrequency() * -1)) >= 0 @@ -131,7 +134,8 @@ public class MessageDevRuleTask { //AI if (Objects.equals(ParamEnum.MessageModuleNameEnum.AIJC.getDesc(), moduleEntry.getKey())) { - List filterAlarms = Optional.ofNullable(devSn2Parameter2LevelAiMap.get(rule.getDevSn())) + List filterAlarms = Optional.ofNullable(devSn2ProjectSn2Parameter2LevelAiMap.get(rule.getDevSn())) + .map(m -> m.get(rule.getProjectSn())) .map(m -> m.get(rule.getMonitoringParameterName())).map(m -> m.get(rule.getMonitoringLevelName())).orElse(new ArrayList<>()); filterAlarms = filterAlarms.stream().filter(alarm -> DateUtil.compare(DateUtil.parse(alarm.getCreateTime()), DateUtil.offsetHour(new Date(), rule.getSmsPushFrequency() * -1)) >= 0 diff --git a/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java b/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java index 3a6ac86fc..a4f6231f9 100644 --- a/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java +++ b/src/main/java/com/zhgd/xmgl/task/SafetyHatTask.java @@ -29,6 +29,7 @@ import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDataService; import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatDevService; import com.zhgd.xmgl.modules.safetyhat.service.ISafetyHatFenceService; import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl; +import com.zhgd.xmgl.util.AsyncTaskUtil; import com.zhgd.xmgl.util.RegionUtil; import com.zhgd.xmgl.util.RundeSafeyHatUtils; import io.swagger.annotations.ApiImplicitParam; @@ -57,7 +58,6 @@ import java.util.Date; import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.concurrent.CompletableFuture; import java.util.stream.Collectors; /** @@ -104,7 +104,7 @@ public class SafetyHatTask { for (Project project : projectList) { log.info("安全帽user:{}", project.getHelmetUser()); SafetyHatWSClient client = SafetyHatWSClient.clientMap.get(project.getHelmetUser()); - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { try { if (client == null) { log.info("首次连接安全帽:user:{}", project.getHelmetUser()); @@ -117,9 +117,6 @@ public class SafetyHatTask { log.info("异常重连:{}", e.getMessage()); connect(project); } - }).exceptionally(throwable -> { - log.error("err", throwable); - return null; }); } diff --git a/src/main/java/com/zhgd/xmgl/task/TowerTask.java b/src/main/java/com/zhgd/xmgl/task/TowerTask.java index bbd32a51a..7e4cbc5d5 100644 --- a/src/main/java/com/zhgd/xmgl/task/TowerTask.java +++ b/src/main/java/com/zhgd/xmgl/task/TowerTask.java @@ -25,6 +25,7 @@ import com.zhgd.xmgl.modules.project.entity.Project; import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; import com.zhgd.xmgl.task.dto.TowerCycleDataDto; import com.zhgd.xmgl.task.dto.TowerDataDto; +import com.zhgd.xmgl.util.AsyncTaskUtil; import com.zhgd.xmgl.util.XiwonUtil; import lombok.extern.slf4j.Slf4j; import net.javacrumbs.shedlock.core.SchedulerLock; @@ -37,7 +38,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.*; -import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.stream.Collectors; @@ -80,12 +80,9 @@ public class TowerTask { // 获取设备列表 List devList = towerMapper.selectList(new LambdaQueryWrapper() .eq(Tower::getProjectSn, project.getProjectSn())); - devList.forEach(dev -> CompletableFuture.runAsync(() -> { + devList.forEach(dev -> AsyncTaskUtil.runAsync(() -> { doGetTowerData(dev, project); doGetTowerCycleData(dev, project); - }).exceptionally(throwable -> { - log.error("err", throwable); - return null; }) ); } diff --git a/src/main/java/com/zhgd/xmgl/task/TowerWorkerAttendanceTask.java b/src/main/java/com/zhgd/xmgl/task/TowerWorkerAttendanceTask.java index 4666c6fde..e32ccbc5f 100644 --- a/src/main/java/com/zhgd/xmgl/task/TowerWorkerAttendanceTask.java +++ b/src/main/java/com/zhgd/xmgl/task/TowerWorkerAttendanceTask.java @@ -16,6 +16,7 @@ import com.zhgd.xmgl.modules.environment.mapper.DustNoiseDataMapper; import com.zhgd.xmgl.modules.project.entity.Project; import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; import com.zhgd.xmgl.task.dto.TowerWorkerAttendanceDataDto; +import com.zhgd.xmgl.util.AsyncTaskUtil; import com.zhgd.xmgl.util.XiwonUtil; import lombok.extern.slf4j.Slf4j; import net.javacrumbs.shedlock.core.SchedulerLock; @@ -23,7 +24,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -32,7 +32,6 @@ import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.concurrent.CompletableFuture; /** * @program: wisdomSite @@ -73,11 +72,8 @@ public class TowerWorkerAttendanceTask { // 获取设备列表 List devList = towerMapper.selectList(new LambdaQueryWrapper() .eq(Tower::getProjectSn, project.getProjectSn())); - devList.forEach(dev -> CompletableFuture.runAsync(() -> { + devList.forEach(dev -> AsyncTaskUtil.runAsync(() -> { doGetTowerWorkerAttendanceData(dev, project); - }).exceptionally(throwable -> { - log.error("err", throwable); - return null; }) ); } diff --git a/src/main/java/com/zhgd/xmgl/task/TunnelBoringMachineTask.java b/src/main/java/com/zhgd/xmgl/task/TunnelBoringMachineTask.java index 95d5f531a..194389243 100644 --- a/src/main/java/com/zhgd/xmgl/task/TunnelBoringMachineTask.java +++ b/src/main/java/com/zhgd/xmgl/task/TunnelBoringMachineTask.java @@ -19,6 +19,7 @@ import com.zhgd.xmgl.modules.poisonous.entity.PoisonousGasDevAlarm; import com.zhgd.xmgl.modules.poisonous.entity.PoisonousGasDevCurrentData; import com.zhgd.xmgl.modules.poisonous.mapper.PoisonousGasDevAlarmMapper; import com.zhgd.xmgl.modules.poisonous.mapper.PoisonousGasDevCurrentDataMapper; +import com.zhgd.xmgl.util.AsyncTaskUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; @@ -93,11 +94,8 @@ public class TunnelBoringMachineTask { log.info("获取盾构机报警数据开始任务"); // 获取设备列表 List devList = tunnelBoringMachineMapper.selectList(null); - devList.forEach(dev -> CompletableFuture.runAsync(() -> { + devList.forEach(dev -> AsyncTaskUtil.runAsync(() -> { doGetTunnelBoringMachineAlarm(dev); - }).exceptionally(throwable -> { - log.error("err", throwable); - return null; }) ); } @@ -168,11 +166,8 @@ public class TunnelBoringMachineTask { log.info("获取盾构机实时数据开始任务"); // 获取设备列表 List devList = tunnelBoringMachineMapper.selectList(null); - devList.forEach(dev -> CompletableFuture.runAsync(() -> { + devList.forEach(dev -> AsyncTaskUtil.runAsync(() -> { doGetTunnelBoringMachineData(dev); - }).exceptionally(throwable -> { - log.error("err", throwable); - return null; }) ); } diff --git a/src/main/java/com/zhgd/xmgl/task/WorkerTask.java b/src/main/java/com/zhgd/xmgl/task/WorkerTask.java index 300c2c25a..96dd5c236 100644 --- a/src/main/java/com/zhgd/xmgl/task/WorkerTask.java +++ b/src/main/java/com/zhgd/xmgl/task/WorkerTask.java @@ -59,10 +59,7 @@ import com.zhgd.xmgl.modules.xz.service.IXzWorkerSafeWatchAlarmService; import com.zhgd.xmgl.modules.xz.service.IXzWorkerSafeWatchConfigService; import com.zhgd.xmgl.modules.xz.service.IXzWorkerSafeWatchManagerService; import com.zhgd.xmgl.modules.xz.service.impl.XzCertificateExpireAlarmRecordServiceImpl; -import com.zhgd.xmgl.util.Base64Util; -import com.zhgd.xmgl.util.ElecardUtil; -import com.zhgd.xmgl.util.MapBuilder; -import com.zhgd.xmgl.util.NumberUtils; +import com.zhgd.xmgl.util.*; import lombok.extern.slf4j.Slf4j; import net.javacrumbs.shedlock.core.SchedulerLock; import org.apache.commons.lang3.StringUtils; @@ -77,7 +74,6 @@ import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.*; -import java.util.concurrent.CompletableFuture; import java.util.function.Function; import java.util.stream.Collectors; @@ -850,11 +846,8 @@ public class WorkerTask { String idCardNo = obj.getString("idCardNo"); List collect = workerInfoList.stream().filter(w -> w.getIdCard().equals(idCardNo)).collect(Collectors.toList()); if (collect.size() > 0) { - CompletableFuture.runAsync(() -> { + AsyncTaskUtil.runAsync(() -> { doAddWorkerAttend(obj, collect.get(0)); - }).exceptionally(throwable -> { - log.error("err", throwable); - return null; }); } } diff --git a/src/main/java/com/zhgd/xmgl/util/AsyncTaskUtil.java b/src/main/java/com/zhgd/xmgl/util/AsyncTaskUtil.java index 4f54c5f73..50711624f 100644 --- a/src/main/java/com/zhgd/xmgl/util/AsyncTaskUtil.java +++ b/src/main/java/com/zhgd/xmgl/util/AsyncTaskUtil.java @@ -1,5 +1,6 @@ package com.zhgd.xmgl.util; +import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; @@ -9,6 +10,7 @@ import java.util.concurrent.CompletableFuture; import java.util.function.Consumer; @Component +@Slf4j public class AsyncTaskUtil { private static ThreadPoolTaskExecutor doubleCarbonExecutor; @@ -17,7 +19,21 @@ public class AsyncTaskUtil { * 执行异步任务 */ public static CompletableFuture runAsync(Runnable task) { - return CompletableFuture.runAsync(task, doubleCarbonExecutor); + return runAsync(task, "异步任务执行异常"); + } + + /** + * 执行异步任务 + * + * @param task + * @param errLogName 错误日志名称 + * @return + */ + public static CompletableFuture runAsync(Runnable task, String errLogName) { + return CompletableFuture.runAsync(task, doubleCarbonExecutor).exceptionally(throwable -> { + log.error(errLogName, throwable); + return null; + }); } /** From 8d2e1a2e0838394e62dba71c1b6cd489fe849583 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Sat, 25 Oct 2025 16:41:35 +0800 Subject: [PATCH 06/21] =?UTF-8?q?=E8=A7=84=E5=88=99=E6=8A=A5=E8=AD=A6?= =?UTF-8?q?=E5=92=8C=E5=BC=82=E6=AD=A5=E7=BA=BF=E7=A8=8B=E6=B1=A0=E4=BC=98?= =?UTF-8?q?=E5=8C=962?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/xmgl/async/AsyncAiAnalyse.java | 14 +- .../impl/EnvironmentAlarmServiceImpl.java | 14 +- .../EnableMessageDevController.java | 1 + .../EnableMessageDevRuleController.java | 10 ++ .../service/IEnableMessageDevRuleService.java | 15 +- .../impl/EnableMessageDevRuleServiceImpl.java | 84 ++++++++--- .../zhgd/xmgl/task/MessageDevRuleTask.java | 142 ++++++++++-------- 7 files changed, 184 insertions(+), 96 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/async/AsyncAiAnalyse.java b/src/main/java/com/zhgd/xmgl/async/AsyncAiAnalyse.java index 3f27825a7..dbe3d8b8f 100644 --- a/src/main/java/com/zhgd/xmgl/async/AsyncAiAnalyse.java +++ b/src/main/java/com/zhgd/xmgl/async/AsyncAiAnalyse.java @@ -120,7 +120,7 @@ public class AsyncAiAnalyse { } /** - * 发送消息 + * 发送通知规则消息 * * @param typeName * @param location @@ -141,18 +141,20 @@ public class AsyncAiAnalyse { ); if (rule != null) { String monitoringLevelName = xzAiDeductRuleService.getLevelName(rule.getLevel()); - EnableMessageDevRule messageDevRule = enableMessageDevRuleService.getRule(ParamEnum.MessageModuleNameEnum.AIJC, hardwareId, dictionaryItem.getName(), monitoringLevelName); + EnableMessageDevRule messageDevRule = enableMessageDevRuleService.getEnableRule(ParamEnum.MessageModuleNameEnum.AIJC, hardwareId, dictionaryItem.getName(), monitoringLevelName, projectSn); if (messageDevRule != null) { - if (Objects.equals(messageDevRule.getEnableSmsNotification(), 1)) { + if (Objects.equals(messageDevRule.getEnableSmsNotification(), 1) && Objects.equals(messageDevRule.getSmsPushFrequency(),0)) { List templateParams = new ArrayList<>(); //报警类型,报警名称,设备名称,报警值,阈值,超标时间,超标量 templateParams.add(typeName); templateParams.add(location); String text = StrUtil.format("AI警报!{},位置{}", typeName, location); - enableMessageDevRuleService.sendSms(messageDevRule, templateParams, text, null); + enableMessageDevRuleService.sendSmsIfEnable(messageDevRule, templateParams, text, null); } - enableMessageDevRuleService.sendSystemMessage(messageDevRule, "8"); - enableMessageDevRuleService.sendBroadcast(messageDevRule); + if (Objects.equals(messageDevRule.getMessagePushFrequency(),0)) { + enableMessageDevRuleService.sendSystemMessageIfEnable(messageDevRule, "8"); + } + enableMessageDevRuleService.sendBroadcastIfEnable(messageDevRule); } } }); diff --git a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentAlarmServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentAlarmServiceImpl.java index 65ac77f88..b4a21c088 100644 --- a/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentAlarmServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/environment/service/impl/EnvironmentAlarmServiceImpl.java @@ -810,7 +810,7 @@ public class EnvironmentAlarmServiceImpl extends ServiceImpl templateParams = new ArrayList<>(); //报警类型,报警名称,设备名称,报警值,阈值,超标时间,超标量 templateParams.add(monitoringLevelName); @@ -835,10 +835,12 @@ public class EnvironmentAlarmServiceImpl extends ServiceImpl devMap = enableMessageDevService.list(new LambdaQueryWrapper() .in(EnableMessageDev::getDevSn, devSnList) .eq(EnableMessageDev::getMonitoringModule, monitoringModule) + .eq(EnableMessageDev::getProjectSn, projectSn) ).stream().collect(Collectors.toMap(EnableMessageDev::getDevSn, Function.identity(), (o1, o2) -> o1)); for (String devSn : devSnList) { EnableMessageDev dev = devMap.get(devSn); diff --git a/src/main/java/com/zhgd/xmgl/modules/project/controller/EnableMessageDevRuleController.java b/src/main/java/com/zhgd/xmgl/modules/project/controller/EnableMessageDevRuleController.java index a76a05bee..18638938d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/controller/EnableMessageDevRuleController.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/controller/EnableMessageDevRuleController.java @@ -2,6 +2,7 @@ package com.zhgd.xmgl.modules.project.controller; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.zhgd.annotation.OperLog; import com.zhgd.jeecg.common.api.vo.Result; @@ -23,6 +24,7 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -231,6 +233,7 @@ public class EnableMessageDevRuleController { @OperLog(operModul = "通知设备规则管理", operType = "", operDesc = "根据devSn、模块、参数、等级去编辑通知设备规则信息") @ApiOperation(value = "根据devSn、模块、参数、等级去编辑通知设备规则信息", notes = "根据devSn、模块、参数、等级去编辑通知设备规则信息", httpMethod = "POST") @PostMapping(value = "/editByCondition") + @Transactional(rollbackFor = Exception.class) public Result editByCondition(@RequestBody EnableMessageDevRuleDto enableMessageDevRuleDto) { String devSn = enableMessageDevRuleDto.getDevSn(); String monitoringModuleName = enableMessageDevRuleDto.getMonitoringModuleName(); @@ -247,6 +250,13 @@ public class EnableMessageDevRuleController { } else { enableMessageDevRuleDto.setId(db.getId()); enableMessageDevRuleService.updateById(enableMessageDevRuleDto); + enableMessageDevRuleService.update(null, new LambdaUpdateWrapper() + .set(EnableMessageDevRule::getMessagePushTimeBegin, enableMessageDevRuleDto.getMessagePushTimeBegin()) + .set(EnableMessageDevRule::getMessagePushTimeEnd, enableMessageDevRuleDto.getMessagePushTimeEnd()) + .set(EnableMessageDevRule::getSmsPushTimeBegin, enableMessageDevRuleDto.getSmsPushTimeBegin()) + .set(EnableMessageDevRule::getSmsPushTimeEnd, enableMessageDevRuleDto.getSmsPushTimeEnd()) + .eq(EnableMessageDevRule::getId, db.getId()) + ); } return Result.ok(); } diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/IEnableMessageDevRuleService.java b/src/main/java/com/zhgd/xmgl/modules/project/service/IEnableMessageDevRuleService.java index 8c301d2f4..2785f6dc5 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/IEnableMessageDevRuleService.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/IEnableMessageDevRuleService.java @@ -69,15 +69,16 @@ public interface IEnableMessageDevRuleService extends IService templateParams, String text, @Nullable Map userMap); + void sendSmsIfEnable(EnableMessageDevRule rule, List templateParams, String text, @Nullable Map userMap); /** - * 发送系统站内消息 + * 开启就发送系统站内消息 * * @param rule * @param type */ - void sendSystemMessage(EnableMessageDevRule rule, String type); + void sendSystemMessageIfEnable(EnableMessageDevRule rule, String type); /** - * 发送广播 + * 开启就发送广播 * * @param rule */ - void sendBroadcast(EnableMessageDevRule rule); + void sendBroadcastIfEnable(EnableMessageDevRule rule); } diff --git a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EnableMessageDevRuleServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EnableMessageDevRuleServiceImpl.java index 7a6bda0ae..21876d625 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EnableMessageDevRuleServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/service/impl/EnableMessageDevRuleServiceImpl.java @@ -35,6 +35,7 @@ import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.time.LocalTime; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -68,6 +69,52 @@ public class EnableMessageDevRuleServiceImpl extends ServiceImpl queryPageList(HashMap param) { QueryWrapper queryWrapper = this.getQueryWrapper(param); @@ -127,10 +174,11 @@ public class EnableMessageDevRuleServiceImpl extends ServiceImpl() .eq(EnableMessageDev::getMonitoringModule, moduleEnum.getValue()) .eq(EnableMessageDev::getDevSn, devSn) + .eq(EnableMessageDev::getProjectSn, projectSn) ); if (messageDev == null || Objects.equals(messageDev.getIsEnable(), 0)) { return null; @@ -141,6 +189,7 @@ public class EnableMessageDevRuleServiceImpl extends ServiceImpl templateParams, String text, Map userMap) { - DevSmsManufacturer messageManufacturer = devSmsManufacturerFactory.getMessageManufacturer(rule.getProjectSn()); - if (messageManufacturer != null) { - if (userMap == null) { - userMap = systemUserService.list(new LambdaQueryWrapper().eq(SystemUser::getSn, rule.getProjectSn())).stream().collect(Collectors.toMap(SystemUser::getUserId, Function.identity(), (o1, o2) -> o1)); - } - List phoneNums = this.getPhoneNums(rule.getSmsAlarmRecipientIds(), userMap); - if (CollUtil.isNotEmpty(phoneNums)) { - messageManufacturer.sendMsg(phoneNums, rule.getNotificationSmsTemplateId(), templateParams, text); + public void sendSmsIfEnable(EnableMessageDevRule rule, List templateParams, String text, Map userMap) { + if (rule != null && Objects.equals(rule.getEnableSmsNotification(), 1) && EnableMessageDevRuleServiceImpl.isInSmsTime(rule)) { + DevSmsManufacturer messageManufacturer = devSmsManufacturerFactory.getMessageManufacturer(rule.getProjectSn()); + if (messageManufacturer != null) { + if (userMap == null) { + userMap = systemUserService.list(new LambdaQueryWrapper().eq(SystemUser::getSn, rule.getProjectSn())).stream().collect(Collectors.toMap(SystemUser::getUserId, Function.identity(), (o1, o2) -> o1)); + } + List phoneNums = this.getPhoneNums(rule.getSmsAlarmRecipientIds(), userMap); + if (CollUtil.isNotEmpty(phoneNums)) { + messageManufacturer.sendMsg(phoneNums, rule.getNotificationSmsTemplateId(), templateParams, text); + } } } } @Override - public void sendSystemMessage(EnableMessageDevRule rule, String type) { - if (rule == null) { - return; - } - if (Objects.equals(rule.getEnableSystemMessagePush(), 1) && StrUtil.isNotBlank(rule.getAlarmRecipientIds())) { + public void sendSystemMessageIfEnable(EnableMessageDevRule rule, String type) { + if (rule != null && Objects.equals(rule.getEnableSystemMessagePush(), 1) && StrUtil.isNotBlank(rule.getAlarmRecipientIds()) && EnableMessageDevRuleServiceImpl.isInSystemTime(rule)) { List ids = StrUtil.split(rule.getAlarmRecipientIds(), ",").stream().map(Convert::toLong).collect(Collectors.toList()); NoticeMessagePromptTone tone = null; //系统站内声音提示 @@ -191,12 +239,14 @@ public class EnableMessageDevRuleServiceImpl extends ServiceImpl() .put("projectSn", rule.getProjectSn()) .build()); - manufacturer.playVoiceFile(StrUtil.split(rule.getBroadcastDevices(), ","), FileUtils.urlToFileName(rule.getVoiceFileConfiguration()), FileUtils.urlToFilePath(rule.getVoiceFileConfiguration())); + if (manufacturer != null) { + manufacturer.playVoiceFile(StrUtil.split(rule.getBroadcastDevices(), ","), FileUtils.urlToFileName(rule.getVoiceFileConfiguration()), FileUtils.urlToFilePath(rule.getVoiceFileConfiguration())); + } } } diff --git a/src/main/java/com/zhgd/xmgl/task/MessageDevRuleTask.java b/src/main/java/com/zhgd/xmgl/task/MessageDevRuleTask.java index b470a7639..7206656f6 100644 --- a/src/main/java/com/zhgd/xmgl/task/MessageDevRuleTask.java +++ b/src/main/java/com/zhgd/xmgl/task/MessageDevRuleTask.java @@ -28,6 +28,7 @@ import com.zhgd.xmgl.modules.xz.entity.XzAiDeductRule; import com.zhgd.xmgl.modules.xz.service.IXzAiDeductRuleService; import lombok.extern.slf4j.Slf4j; import net.javacrumbs.shedlock.core.SchedulerLock; +import org.jetbrains.annotations.NotNull; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.scheduling.annotation.Scheduled; @@ -89,25 +90,27 @@ public class MessageDevRuleTask { try { Map environmentTypeMap = environmentAlarmTypeService.list().stream().collect(Collectors.toMap(EnvironmentAlarmType::getId, Function.identity(), (o1, o2) -> o1)); List projects = projectService.list(new LambdaQueryWrapper()); - Map>>>> devSn2ProjectSn2Parameter2LevelEnvironmentAlarmMap = environmentAlarmService.list(new LambdaQueryWrapper() + Map>>>> devSn2ProjectSn2Parameter2LevelEnvironmentAlarmMap = environmentAlarmService.list(new LambdaQueryWrapper() .ge(EnvironmentAlarm::getAlarmTime, DateUtil.formatDateTime(DateUtil.offsetDay(new Date(), -1))) .le(EnvironmentAlarm::getAlarmTime, new Date()) ).stream().collect(Collectors.groupingBy(EnvironmentAlarm::getDeviceId, Collectors.groupingBy(EnvironmentAlarm::getProjectSn, - Collectors.groupingBy(ea -> environmentTypeMap.get(ea.getAlarmTypeId()).getAlarmType(), - Collectors.groupingBy(ea -> Objects.equals(ea.getType(), 0) ? "报警" : "预警"))))); + Collectors.groupingBy(ea -> environmentTypeMap.get(ea.getAlarmTypeId()).getAlarmType(), + Collectors.groupingBy(ea -> Objects.equals(ea.getType(), 0) ? "报警" : "预警"))))); List ruleList = enableMessageDevRuleService.list(new LambdaQueryWrapper().eq(EnableMessageDevRule::getIsEnabled, 1)); Map userMap = systemUserService.list(new LambdaQueryWrapper()).stream().collect(Collectors.toMap(SystemUser::getUserId, Function.identity(), (o1, o2) -> o1)); - Map> moduleMap = ruleList.stream().collect(Collectors.groupingBy(EnableMessageDevRule::getMonitoringModuleName)); + Map>> projectSn2ModuleMap = ruleList.stream().collect(Collectors.groupingBy(EnableMessageDevRule::getProjectSn, Collectors.groupingBy(EnableMessageDevRule::getMonitoringModuleName))); + List alarmRecords = aiAnalyseHardWareAlarmRecordService.list(new LambdaQueryWrapper() + .ge(AiAnalyseHardWareAlarmRecord::getCreateTime, DateUtil.formatDateTime(DateUtil.offsetDay(new Date(), -1))) + .le(AiAnalyseHardWareAlarmRecord::getCreateTime, DateUtil.formatDateTime(new Date()) + )); for (Project project : projects) { - List dictList = dictionaryItemService.getDictList(DictionaryConstant.AI_ANALYSE_HARD_WARE_ALARM_RECORD_TYPE, project.getProjectSn()); + String projectSn = project.getProjectSn(); + List dictList = dictionaryItemService.getDictList(DictionaryConstant.AI_ANALYSE_HARD_WARE_ALARM_RECORD_TYPE, projectSn); Map dictDataMap = dictList.stream().collect(Collectors.toMap(DictionaryItem::getData, Function.identity(), (o1, o2) -> o1)); Map dicIdMap = xzAiDeductRuleService.list(new LambdaQueryWrapper() - .eq(XzAiDeductRule::getProjectSn, project.getProjectSn())).stream().collect(Collectors.toMap(XzAiDeductRule::getDictionaryItemId, Function.identity(), (o1, o2) -> o1)); - Map>>>> devSn2ProjectSn2Parameter2LevelAiMap = aiAnalyseHardWareAlarmRecordService.list(new LambdaQueryWrapper() - .ge(AiAnalyseHardWareAlarmRecord::getCreateTime, DateUtil.formatDateTime(DateUtil.offsetDay(new Date(), -1))) - .le(AiAnalyseHardWareAlarmRecord::getCreateTime, new Date()) - ).stream().filter(r -> { + .eq(XzAiDeductRule::getProjectSn, projectSn)).stream().collect(Collectors.toMap(XzAiDeductRule::getDictionaryItemId, Function.identity(), (o1, o2) -> o1)); + Map>>>> devSn2ProjectSn2Parameter2LevelAiMap = alarmRecords.stream().filter(r -> { return Objects.nonNull(Optional.ofNullable(dictDataMap.get(Convert.toStr(r.getAlarmType()))).map(m -> dicIdMap.get(m.getId())).map(XzAiDeductRule::getLevel).orElse(null)); }).collect(Collectors.groupingBy(AiAnalyseHardWareAlarmRecord::getHardwareId, Collectors.groupingBy(AiAnalyseHardWareAlarmRecord::getProjectSn, @@ -115,6 +118,10 @@ public class MessageDevRuleTask { Collectors.groupingBy(r -> Optional.of(dictDataMap.get(Convert.toStr(r.getAlarmType()))).map(m -> dicIdMap.get(m.getId())).map(r1 -> { return xzAiDeductRuleService.getLevelName(r1.getLevel()); }).orElse(null)))))); + Map> moduleMap = projectSn2ModuleMap.get(projectSn); + if (CollUtil.isEmpty(moduleMap)) { + continue; + } for (Map.Entry> moduleEntry : moduleMap.entrySet()) { List entryRules = moduleEntry.getValue(); for (EnableMessageDevRule rule : entryRules) { @@ -123,26 +130,41 @@ public class MessageDevRuleTask { List filterAlarms = Optional.ofNullable(devSn2ProjectSn2Parameter2LevelEnvironmentAlarmMap.get(rule.getDevSn())) .map(m -> m.get(rule.getProjectSn())) .map(m -> m.get(rule.getMonitoringParameterName())).map(m -> m.get(rule.getMonitoringLevelName())).orElse(new ArrayList<>()); - filterAlarms = filterAlarms.stream().filter(alarm -> - DateUtil.compare(alarm.getAlarmTime(), DateUtil.offsetHour(new Date(), rule.getSmsPushFrequency() * -1)) >= 0 - && DateUtil.compare(alarm.getAlarmTime(), new Date()) <= 0).collect(Collectors.toList()); - //sms + List filterAlarms1 = getFilterEnvironmentAlarmRecords(filterAlarms, rule.getSmsPushFrequency()); + if (CollUtil.isNotEmpty(filterAlarms1)) { + sendSmsNotice(rule, filterAlarms1.size(), userMap); + } + List filterAlarms2 = getFilterEnvironmentAlarmRecords(filterAlarms, rule.getMessagePushFrequency()); + if (CollUtil.isNotEmpty(filterAlarms2)) { + //系统站内 + if (!Objects.equals(rule.getMessagePushFrequency(), 0)) { + enableMessageDevRuleService.sendSystemMessageIfEnable(rule, "8"); + } + } if (CollUtil.isNotEmpty(filterAlarms)) { - sendNotice(rule, filterAlarms.size(), userMap, "7"); + //广播 + enableMessageDevRuleService.sendBroadcastIfEnable(rule); } } - //AI - if (Objects.equals(ParamEnum.MessageModuleNameEnum.AIJC.getDesc(), moduleEntry.getKey())) { + else if (Objects.equals(ParamEnum.MessageModuleNameEnum.AIJC.getDesc(), moduleEntry.getKey())) { List filterAlarms = Optional.ofNullable(devSn2ProjectSn2Parameter2LevelAiMap.get(rule.getDevSn())) .map(m -> m.get(rule.getProjectSn())) .map(m -> m.get(rule.getMonitoringParameterName())).map(m -> m.get(rule.getMonitoringLevelName())).orElse(new ArrayList<>()); - filterAlarms = filterAlarms.stream().filter(alarm -> - DateUtil.compare(DateUtil.parse(alarm.getCreateTime()), DateUtil.offsetHour(new Date(), rule.getSmsPushFrequency() * -1)) >= 0 - && DateUtil.compare(DateUtil.parse(alarm.getCreateTime()), new Date()) <= 0).collect(Collectors.toList()); - //sms + List filterAlarms1 = getFilterAiAlarmRecords(filterAlarms, rule.getSmsPushFrequency()); + if (CollUtil.isNotEmpty(filterAlarms1)) { + sendSmsNotice(rule, filterAlarms1.size(), userMap); + } + List filterAlarms2 = getFilterAiAlarmRecords(filterAlarms, rule.getMessagePushFrequency()); + if (CollUtil.isNotEmpty(filterAlarms2)) { + //系统站内 + if (!Objects.equals(rule.getMessagePushFrequency(), 0)) { + enableMessageDevRuleService.sendSystemMessageIfEnable(rule, "8"); + } + } if (CollUtil.isNotEmpty(filterAlarms)) { - sendNotice(rule, filterAlarms.size(), userMap, "8"); + //广播 + enableMessageDevRuleService.sendBroadcastIfEnable(rule); } } } @@ -154,53 +176,53 @@ public class MessageDevRuleTask { } /** - * 发送通知 + * 根据时间和频率获取过滤后扬尘报警记录 + * + * @param filterAlarms + * @param frequency + * @return + */ + @NotNull + private List getFilterEnvironmentAlarmRecords(List filterAlarms, Integer frequency) { + if (Objects.isNull(frequency) || Objects.equals(frequency, 0)) { + return new ArrayList<>(); + } + return filterAlarms.stream().filter(alarm -> + DateUtil.compare(alarm.getAlarmTime(), DateUtil.offsetHour(new Date(), frequency * -1)) >= 0 + && DateUtil.compare(alarm.getAlarmTime(), new Date()) <= 0).collect(Collectors.toList()); + } + + /** + * 根据时间和频率获取过滤后AI报警记录 + * + * @param filterAlarms + * @param frequency + * @return + */ + @NotNull + private List getFilterAiAlarmRecords(List filterAlarms, Integer frequency) { + if (Objects.isNull(frequency) || Objects.equals(frequency, 0)) { + return new ArrayList<>(); + } + return filterAlarms.stream().filter(alarm -> + DateUtil.compare(DateUtil.parse(alarm.getCreateTime()), DateUtil.offsetHour(new Date(), frequency * -1)) >= 0 + && DateUtil.compare(DateUtil.parse(alarm.getCreateTime()), new Date()) <= 0).collect(Collectors.toList()); + } + + /** + * 发送sms通知 * * @param rule * @param filterAlarms * @param userMap - * @param type */ - private void sendNotice(EnableMessageDevRule rule, int filterAlarms, Map userMap, String type) { - if (Objects.equals(rule.getEnableSmsNotification(), 1) && isSmsSendTime(rule)) { + private void sendSmsNotice(EnableMessageDevRule rule, int filterAlarms, Map userMap) { + if (Objects.equals(rule.getEnableSmsNotification(), 1) && !Objects.equals(rule.getSmsPushFrequency(), 0)) { String text = StrUtil.format("{}{}{}异常,近{}小时累计报警{}次!", rule.getMonitoringModuleName(), rule.getMonitoringParameterName(), rule.getMonitoringLevelName(), rule.getSmsPushFrequency(), filterAlarms); List templateParams = Arrays.asList(rule.getMonitoringModuleName(), rule.getMonitoringParameterName(), rule.getMonitoringLevelName(), Convert.toStr(rule.getSmsPushFrequency()), Convert.toStr(filterAlarms)); - enableMessageDevRuleService.sendSms(rule, templateParams, text, userMap); + enableMessageDevRuleService.sendSmsIfEnable(rule, templateParams, text, userMap); } - //系统站内 - if (Objects.equals(rule.getEnableSystemMessagePush(), 1) && isSystemSendTime(rule)) { - enableMessageDevRuleService.sendSystemMessage(rule, type); - } - //广播 - enableMessageDevRuleService.sendBroadcast(rule); } - /** - * 是系统消息需要发送的时间了 - * - * @param rule - * @return - */ - private boolean isSystemSendTime(EnableMessageDevRule rule) { - int hour = DateUtil.hour(new Date(), true); - return Objects.nonNull(rule.getMessagePushFrequency()) && Objects.nonNull(rule.getMessagePushTimeBegin()) && Objects.nonNull(rule.getMessagePushTimeEnd()) - && !Objects.equals(rule.getMessagePushFrequency(), 0) && hour % rule.getMessagePushFrequency() == 0 - && rule.getMessagePushTimeBegin().getHour() <= hour && rule.getMessagePushTimeEnd().getHour() >= hour; - } - - /** - * 是短信需要发送的时间了 - * - * @param rule - * @return - */ - private boolean isSmsSendTime(EnableMessageDevRule rule) { - int hour = DateUtil.hour(new Date(), true); - return Objects.nonNull(rule.getSmsPushFrequency()) && Objects.nonNull(rule.getSmsPushTimeBegin()) && Objects.nonNull(rule.getSmsPushTimeEnd()) - && !Objects.equals(rule.getSmsPushFrequency(), 0) && hour % rule.getSmsPushFrequency() == 0 - && rule.getSmsPushTimeBegin().getHour() <= hour && rule.getSmsPushTimeEnd().getHour() >= hour; - } - - } From 4a59060bdc0683256814f4e48321d779b82a8450 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Sat, 25 Oct 2025 18:08:11 +0800 Subject: [PATCH 07/21] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E5=A4=A7=E5=B1=8F=E9=85=8D=E7=BD=AE=E4=BF=A1=E6=81=AF?= =?UTF-8?q?=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=BF=AE=E6=94=B9=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/LargeScreenConfigController.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/project/controller/LargeScreenConfigController.java b/src/main/java/com/zhgd/xmgl/modules/project/controller/LargeScreenConfigController.java index 653a7b0ca..1fe8b5d38 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/controller/LargeScreenConfigController.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/controller/LargeScreenConfigController.java @@ -1,5 +1,6 @@ package com.zhgd.xmgl.modules.project.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -90,7 +91,16 @@ public class LargeScreenConfigController { @ApiOperation(value = " 添加自定义大屏配置信息", notes = "添加自定义大屏配置信息", httpMethod = "POST") @PostMapping(value = "/add") public Result add(@RequestBody LargeScreenConfig largeScreenConfig) { - largeScreenConfigService.save(largeScreenConfig); + LargeScreenConfig dbConfig = largeScreenConfigService.getOne(new LambdaQueryWrapper() + .eq(LargeScreenConfig::getProjectSn, largeScreenConfig.getProjectSn()) + .eq(LargeScreenConfig::getConfigKey, largeScreenConfig.getConfigKey()) + ); + if (dbConfig != null) { + largeScreenConfig.setId(dbConfig.getId()); + largeScreenConfigService.updateById(largeScreenConfig); + } else { + largeScreenConfigService.save(largeScreenConfig); + } return Result.success("添加成功!"); } From 84d76e5a20f1fce656fc4553599c518ebc0c03c4 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Tue, 28 Oct 2025 14:20:59 +0800 Subject: [PATCH 08/21] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A1=A5=E6=A2=81?= =?UTF-8?q?=E9=95=BF=E5=BA=A6(m)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/zhgd/xmgl/modules/project/entity/Project.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java b/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java index 0091b6423..9bdc56d38 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/entity/Project.java @@ -348,6 +348,13 @@ public class Project implements Serializable { private String xiaosaAppSecret; @ApiModelProperty(value="icc同步id") private java.lang.Long iccId ; + /** + * 桥梁长度(m) + */ + @Excel(name = "桥梁长度(m)", width = 15) + @ApiModelProperty(value = "桥梁长度(m)") + private java.lang.String bridgeLength; + /** * runde平台token */ From 01e4c53ceef35e38282a02d585b85541c96526ea Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Tue, 28 Oct 2025 15:25:57 +0800 Subject: [PATCH 09/21] =?UTF-8?q?=E6=B5=B7=E5=BA=B7ai=E9=A2=84=E8=AD=A6?= =?UTF-8?q?=E7=9A=84=E4=BA=8B=E4=BB=B6=E7=A0=81=E8=BD=ACint=EF=BC=8C?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E5=A4=A7=E4=BA=8Eint=E8=8C=83=E5=9B=B4?= =?UTF-8?q?=EF=BC=8C=E9=9C=80=E8=A6=81=E6=88=AA=E5=8F=96=E5=90=8E=E9=9D=A2?= =?UTF-8?q?9=E4=BD=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/xmgl/call/HikvisionCall.java | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java index b4484f63e..9c0d9faaa 100644 --- a/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java +++ b/src/main/java/com/zhgd/xmgl/call/HikvisionCall.java @@ -635,7 +635,7 @@ public class HikvisionCall { ProjectInfoExtVo projectInfoBySn = projectService.getProjectInfoBySn(dev.getProjectSn()); AiAnalyseHardWareAlarmRecord record = new AiAnalyseHardWareAlarmRecord(); record.setCreateTime(createTime); - record.setAlarmType(Integer.valueOf(eventType)); + record.setAlarmType(stringToInt(eventType)); record.setHardwareId(deviceId); record.setHardwareName(dev.getHardwareName()); record.setLocation(srcName); @@ -653,6 +653,32 @@ public class HikvisionCall { asyncAiAnalyse.sendAiAnalyse(record, Cts.PROJECT_LEVEL_AND_CHILDREN); } + /** + * 海康ai预警的事件码转int,可能大于int范围,需要截取后面9位 + * + * @param eventType + * @return + */ + private static int stringToInt(String eventType) { + if (eventType == null || eventType.trim().isEmpty()) { + return 0; + } + + String trimmedStr = eventType.trim(); + + try { + return Integer.parseInt(trimmedStr); + } catch (NumberFormatException e) { + // 截取后9位 + String last9Digits = trimmedStr.substring(Math.max(0, trimmedStr.length() - 9)); + try { + return Integer.parseInt(last9Digits); + } catch (NumberFormatException ex) { + return 0; + } + } + } + /*** * 异步添加车辆通行数据 * @param dataJo From d47a774e18f170369a287c1110963b41c2e33eaa Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Wed, 29 Oct 2025 10:26:17 +0800 Subject: [PATCH 10/21] =?UTF-8?q?ai=E9=A2=84=E8=AD=A6=E4=B8=8A=E4=BC=A0?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E8=B7=AF=E5=BE=84=E9=87=8D=E5=A4=8D/?= =?UTF-8?q?=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/basicdata/service/impl/UploadFileServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/UploadFileServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/UploadFileServiceImpl.java index 55ecdbe29..76144f672 100644 --- a/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/UploadFileServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/service/impl/UploadFileServiceImpl.java @@ -330,7 +330,8 @@ public class UploadFileServiceImpl implements UploadFileService { @Override public String uploadUrlReturnFileName(String url, String relativePath) { FileInfo fileInfo = fileStorageService.of(UrlUtil.uploadImgUrlToMultipartFile(url)).setPath(relativePath).upload(); - return relativePath + "/" + fileInfo.getFilename(); + String cleanPath = relativePath.replaceAll("/+$", ""); + return cleanPath + "/" + fileInfo.getFilename(); } /** From 2cb471c2a43e63bc5826162fc5d60ba1758d4731 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Wed, 29 Oct 2025 16:42:42 +0800 Subject: [PATCH 11/21] =?UTF-8?q?=E6=AF=8F=E6=9C=88/=E6=97=A5=E5=87=BA?= =?UTF-8?q?=E5=8B=A4/=E5=9C=A8=E8=81=8C=E4=BA=BA=E6=95=B0=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...orkerDailyAttendanceStatisticsV2Mapper.xml | 30 +++++++++++-------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerDailyAttendanceStatisticsV2Mapper.xml b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerDailyAttendanceStatisticsV2Mapper.xml index 876674080..c4d5ca558 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerDailyAttendanceStatisticsV2Mapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/worker/mapper/xml/WorkerDailyAttendanceStatisticsV2Mapper.xml @@ -136,7 +136,23 @@ ,count(*) as total_in_service_num ,ifnull(sum(t.is_attendance),0) as total_attendance_num - from worker_daily_attendance_statistics_v2 t + from ( + select * from + worker_daily_attendance_statistics_v2 t + where 1=1 + + and t.attendance_date =]]> concat(#{startMonth},'-01 00:00:00') + + + and t.attendance_date CONCAT(LAST_DAY(CONCAT(#{endMonth}, '-01')), ' 23:59:59') + + + and t.attendance_date >= #{startDate} + + + and t.attendance_date concat(#{endDate},' 23:59:59') + + ) t JOIN worker_info a on t.person_sn=a.person_sn LEFT JOIN team_info b ON a.team_id = b.id and a.person_type = 1 LEFT JOIN department_info c ON a.department_id = c.id and a.person_type = 2 @@ -156,18 +172,6 @@ and a.department_id=#{departmentId} - - and t.attendance_date =]]> concat(#{startMonth},'-01 00:00:00') - - - and t.attendance_date CONCAT(LAST_DAY(CONCAT(#{endMonth}, '-01')), ' 23:59:59') - - - and t.attendance_date >= #{startDate} - - - and t.attendance_date concat(#{endDate},' 23:59:59') - group by x_name )t From e581718c90f2e04ae161f3d32c922b57d122ed43 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Wed, 29 Oct 2025 16:43:59 +0800 Subject: [PATCH 12/21] =?UTF-8?q?30s=E5=AE=9A=E6=97=B6=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=89=A7=E6=B3=95=E4=BB=AA=E8=AE=BE=E5=A4=87=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/zhgd/xmgl/task/Mcs8Task.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java b/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java index cbc0e3b69..63eeb3425 100644 --- a/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java +++ b/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java @@ -64,7 +64,7 @@ public class Mcs8Task { /** * 定时更新执法仪设备状态 */ - @Scheduled(cron = "0 */5 * * * ?") + @Scheduled(cron = "*/30 * * * * ?") @RequestMapping("updateStatus") public void updateStatus() { List projects = projectService.list(); From 3a3f1660064e7b6b1f3bfdfbbb05a758dd440eed Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Wed, 29 Oct 2025 16:49:28 +0800 Subject: [PATCH 13/21] =?UTF-8?q?10s=E5=AE=9A=E6=97=B6=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=89=A7=E6=B3=95=E4=BB=AA=E8=AE=BE=E5=A4=87=E7=8A=B6=E6=80=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/zhgd/xmgl/task/Mcs8Task.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java b/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java index 63eeb3425..80961b3b9 100644 --- a/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java +++ b/src/main/java/com/zhgd/xmgl/task/Mcs8Task.java @@ -64,7 +64,7 @@ public class Mcs8Task { /** * 定时更新执法仪设备状态 */ - @Scheduled(cron = "*/30 * * * * ?") + @Scheduled(cron = "*/10 * * * * ?") @RequestMapping("updateStatus") public void updateStatus() { List projects = projectService.list(); From fe36de8bce39e9f22e64d33466ccb4043c931824 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Thu, 30 Oct 2025 16:16:18 +0800 Subject: [PATCH 14/21] =?UTF-8?q?=E6=97=A5=E5=BF=97=E6=89=93=E5=8D=B0?= =?UTF-8?q?=E5=A4=AA=E5=A4=9A=E4=BA=86=E6=94=B9=E6=88=90debug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/jeecg/common/util/pass/HttpUtils.java | 4 ++-- src/main/java/com/zhgd/mqtt/server/MqttConfig.java | 8 +++++--- src/main/java/com/zhgd/xmgl/call/util/Mcs8Util.java | 12 ++++++------ .../zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java | 4 ++-- src/main/java/com/zhgd/xmgl/config/TaskAspect.java | 4 ++-- src/main/resources/logback-spring.xml | 4 ++-- 6 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/zhgd/jeecg/common/util/pass/HttpUtils.java b/src/main/java/com/zhgd/jeecg/common/util/pass/HttpUtils.java index 2c215fb33..43ac5641a 100644 --- a/src/main/java/com/zhgd/jeecg/common/util/pass/HttpUtils.java +++ b/src/main/java/com/zhgd/jeecg/common/util/pass/HttpUtils.java @@ -100,7 +100,7 @@ public class HttpUtils { FileUtil.mkParentDirs(destFile); } - log.info("开始下载: {} -> {}", fileUrl, destFile.getAbsolutePath()); + log.debug("开始下载: {} -> {}", fileUrl, destFile.getAbsolutePath()); long startTime = System.currentTimeMillis(); // 使用分块下载大文件 @@ -109,7 +109,7 @@ public class HttpUtils { // 结果验证 if (downloadedSize > 0 && destFile.exists()) { long cost = System.currentTimeMillis() - startTime; - log.info("下载成功! 大小: {} | 耗时: {}ms | 路径: {}", + log.debug("下载成功! 大小: {} | 耗时: {}ms | 路径: {}", FileUtil.readableFileSize(destFile.length()), cost, destFile.getAbsolutePath()); diff --git a/src/main/java/com/zhgd/mqtt/server/MqttConfig.java b/src/main/java/com/zhgd/mqtt/server/MqttConfig.java index 858045445..c4f31c441 100644 --- a/src/main/java/com/zhgd/mqtt/server/MqttConfig.java +++ b/src/main/java/com/zhgd/mqtt/server/MqttConfig.java @@ -1,6 +1,7 @@ package com.zhgd.mqtt.server; import com.zhgd.xmgl.constant.Cts; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.eclipse.paho.client.mqttv3.MqttConnectOptions; import org.slf4j.Logger; @@ -28,6 +29,7 @@ import javax.annotation.Resource; * @create: 2019-10-16 16:21 **/ @Configuration +@Slf4j public class MqttConfig { private static final Logger LOGGER = LoggerFactory.getLogger(MqttConfig.class); @@ -175,10 +177,10 @@ public class MqttConfig { return message -> { try { String topic = message.getHeaders().get("mqtt_receivedTopic").toString(); - LOGGER.info("消息主题:{}", topic); + log.debug("消息主题:{}", topic); Object payLoad = message.getPayload(); - LOGGER.info("主题:{},消息接收到的数据:{}", message.getHeaders().get("mqtt_receivedTopic"), payLoad); - LOGGER.info("===================={}============", payLoad); + log.debug("主题:{},消息接收到的数据:{}", message.getHeaders().get("mqtt_receivedTopic"), payLoad); + log.debug("===================={}============", payLoad); dispatchHandler.message(topic, payLoad); } catch (Exception e) { } diff --git a/src/main/java/com/zhgd/xmgl/call/util/Mcs8Util.java b/src/main/java/com/zhgd/xmgl/call/util/Mcs8Util.java index 7dc816241..372e25f3c 100644 --- a/src/main/java/com/zhgd/xmgl/call/util/Mcs8Util.java +++ b/src/main/java/com/zhgd/xmgl/call/util/Mcs8Util.java @@ -242,10 +242,10 @@ public class Mcs8Util { jo.put("page", page); jo.put("pagesize", pageSize); url = HttpUtil.urlWithForm(url, jo, CharsetUtil.CHARSET_UTF_8, false); - log.info("mcs8 查询文件列表 url:{}", url); + log.debug("mcs8 查询文件列表 url:{}", url); String result = HttpRequest.get(url).header("token", getToken(getHost(config), config.getPort(), config.getAccount(), config.getPassword())).execute().body(); - log.info("mcs8 查询文件列表 result:{}", result); + log.debug("mcs8 查询文件列表 result:{}", result); JSONObject jsonObject = JSONObject.parseObject(result); if (isTokenExpiredError(jsonObject) && retry) { //删除token @@ -271,10 +271,10 @@ public class Mcs8Util { jo.put("id", id); jo.put("expires", 7); url = HttpUtil.urlWithForm(url, jo, CharsetUtil.CHARSET_UTF_8, false); - log.info("mcs8 获取文件网络访问地址 url:{}", url); + log.debug("mcs8 获取文件网络访问地址 url:{}", url); String result = HttpRequest.get(url).header("token", getToken(getHost(config), config.getPort(), config.getAccount(), config.getPassword())).execute().body(); - log.info("mcs8 获取文件网络访问地址 result:{}", result); + log.debug("mcs8 获取文件网络访问地址 result:{}", result); JSONObject jsonObject = JSONObject.parseObject(result); if (isTokenExpiredError(jsonObject) && retry) { //删除token @@ -301,10 +301,10 @@ public class Mcs8Util { jo.put("page", page); jo.put("pageSize", pageSize); url = HttpUtil.urlWithForm(url, jo, CharsetUtil.CHARSET_UTF_8, false); - log.info("mcs8 获取设备列表 url:{} ", url); + log.debug("mcs8 获取设备列表 url:{} ", url); String result = HttpRequest.get(url).header("token", getToken(getHost(config), config.getPort(), config.getAccount(), config.getPassword())).execute().body(); - log.info("mcs8 获取设备列表 result:{}", result); + log.debug("mcs8 获取设备列表 result:{}", result); JSONObject jsonObject = JSONObject.parseObject(result); if (isTokenExpiredError(jsonObject) && retry) { //删除token diff --git a/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java b/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java index 1490113f1..e7547d867 100644 --- a/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java +++ b/src/main/java/com/zhgd/xmgl/config/MdcThreadPoolTaskExecutor.java @@ -22,7 +22,7 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { public void execute(Runnable task) { Map context = MDC.getCopyOfContextMap(); //复制主线程MDC JSONObject tlJo = ThreadLocalUtil.get(); - log.info("MDC异步多线程..."); + log.debug("MDC异步多线程..."); JSONObject copyTl = BeanUtil.toBean(tlJo, JSONObject.class); super.execute(() -> { if (null != context) { @@ -51,7 +51,7 @@ public class MdcThreadPoolTaskExecutor extends ThreadPoolTaskExecutor { public Future submit(Callable task) { Map context = MDC.getCopyOfContextMap(); //复制主线程MDC JSONObject tlJo = ThreadLocalUtil.get(); - log.info("MDC异步多线程..."); + log.debug("MDC异步多线程..."); JSONObject copyTl = BeanUtil.toBean(tlJo, JSONObject.class); return super.submit(() -> { if (null != context) { diff --git a/src/main/java/com/zhgd/xmgl/config/TaskAspect.java b/src/main/java/com/zhgd/xmgl/config/TaskAspect.java index 746b4a797..2811d8ce3 100644 --- a/src/main/java/com/zhgd/xmgl/config/TaskAspect.java +++ b/src/main/java/com/zhgd/xmgl/config/TaskAspect.java @@ -46,7 +46,7 @@ public class TaskAspect { if (null == context) { LogMdcUtil.setRequestId("-t"); //主线程没有MDC就自己生成一个 ThreadLocalUtil.addInKey(Cts.TL_IS_FROM_TASK, true); - log.info("task方法开始:{}", methodName); + log.debug("task方法开始:{}", methodName); } // 获取方法所有参数及其类型 @@ -74,7 +74,7 @@ public class TaskAspect { } } finally { if (null == context) { - log.info("task方法结束:{}", methodName); + log.debug("task方法结束:{}", methodName); LogMdcUtil.clear(); ThreadLocalUtil.remove(); } diff --git a/src/main/resources/logback-spring.xml b/src/main/resources/logback-spring.xml index 68d12b97a..47e4ed126 100644 --- a/src/main/resources/logback-spring.xml +++ b/src/main/resources/logback-spring.xml @@ -30,7 +30,7 @@ 100MB - 15 + 2 @@ -116,7 +116,7 @@ - + From a0a4cc757768f232f9139708c366da876cfd57a7 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Thu, 30 Oct 2025 16:32:46 +0800 Subject: [PATCH 15/21] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E4=B8=AA=E5=88=A0?= =?UTF-8?q?=E9=99=A4=E6=89=80=E6=9C=89=E7=BC=93=E5=AD=98=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../basicdata/controller/CacheController.java | 27 +++++++++++++++++++ .../zhgd/xmgl/security/WebSecurityConfig.java | 1 + 2 files changed, 28 insertions(+) create mode 100644 src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CacheController.java diff --git a/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CacheController.java b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CacheController.java new file mode 100644 index 000000000..715e68254 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/basicdata/controller/CacheController.java @@ -0,0 +1,27 @@ +package com.zhgd.xmgl.modules.basicdata.controller; + +import com.zhgd.jeecg.common.api.vo.Result; +import com.zhgd.redis.lock.RedisRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Lazy; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +@RequestMapping("/xmgl/cache") +public class CacheController { + + @Lazy + @Autowired + private RedisRepository redisRepository; + + /** + * 删除所有缓存 + */ + @GetMapping("/clearAll") + public Result clearAllCache() { + redisRepository.flushDb(); + return Result.ok(); + } +} diff --git a/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java b/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java index ec167241b..111fd6778 100644 --- a/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java +++ b/src/main/java/com/zhgd/xmgl/security/WebSecurityConfig.java @@ -78,6 +78,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter { http.authorizeRequests() //请求路径允许访问 + .antMatchers("/xmgl/cache/clearAll").permitAll() .antMatchers("/xmgl/videoScreenshot/captureScreenshotSync").permitAll() .antMatchers("/xmgl/policeCameraItemFile/*").permitAll() .antMatchers("/xmgl/workTicketOrderApp/*").permitAll() From 5ce08baa5ebf670058603f3f74be0a5e7445a921 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 31 Oct 2025 10:58:15 +0800 Subject: [PATCH 16/21] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=B3=A8=E8=A7=A3@Cont?= =?UTF-8?q?roller?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/zhgd/xmgl/task/VideoTask.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/task/VideoTask.java b/src/main/java/com/zhgd/xmgl/task/VideoTask.java index 53260f66f..ae85f52f9 100644 --- a/src/main/java/com/zhgd/xmgl/task/VideoTask.java +++ b/src/main/java/com/zhgd/xmgl/task/VideoTask.java @@ -17,7 +17,7 @@ import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.scheduling.annotation.Scheduled; -import org.springframework.stereotype.Component; +import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import java.util.*; @@ -29,7 +29,7 @@ import java.util.*; * @create: 2021-11-11 18:48 **/ @Slf4j -@Component +@Controller @RequestMapping("/xmgl/task/") public class VideoTask { @Autowired From 06762a6e8abbd4aa651d09c9655a6ee91b19d86e Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Mon, 3 Nov 2025 10:34:58 +0800 Subject: [PATCH 17/21] =?UTF-8?q?=E4=BC=98=E9=80=89=E5=A4=9A=E4=B8=AA?= =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/zhgd/redis/config/RedisConfig.java | 4 +- .../java/com/zhgd/xmgl/call/Mcs8Call.java | 104 +++++++++++++++--- .../call/api/PoliceCameraManufacturer.java | 3 +- .../policecamera/entity/WorkTicket.java | 6 +- .../policecamera/entity/vo/WorkTicketVo.java | 5 + .../service/IPoliceCameraItemService.java | 2 + .../impl/PoliceCameraItemServiceImpl.java | 11 ++ .../ProjectPoliceCameraConfigServiceImpl.java | 6 + .../service/impl/WorkTicketServiceImpl.java | 15 +++ .../java/com/zhgd/xmgl/task/Mcs8Task.java | 4 +- 10 files changed, 140 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/zhgd/redis/config/RedisConfig.java b/src/main/java/com/zhgd/redis/config/RedisConfig.java index af0bb8ff2..667b283ab 100644 --- a/src/main/java/com/zhgd/redis/config/RedisConfig.java +++ b/src/main/java/com/zhgd/redis/config/RedisConfig.java @@ -47,8 +47,8 @@ public class RedisConfig { //.serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(new RedisObjectSerializer())); .serializeValuesWith(RedisSerializationContext.SerializationPair.fromSerializer(redisTemplate.getValueSerializer())) //.entryTtl(Duration.ofMinutes(30L)) - .entryTtl(Duration.ofHours(1)) - .disableCachingNullValues(); + .entryTtl(Duration.ofHours(1)); +// .disableCachingNullValues(); // 初始化RedisCacheManager RedisCacheManager redisCacheManager = new RedisCacheManager(redisCacheWriter, redisCacheConfiguration); return redisCacheManager; diff --git a/src/main/java/com/zhgd/xmgl/call/Mcs8Call.java b/src/main/java/com/zhgd/xmgl/call/Mcs8Call.java index b5f871a3d..52a9883dc 100644 --- a/src/main/java/com/zhgd/xmgl/call/Mcs8Call.java +++ b/src/main/java/com/zhgd/xmgl/call/Mcs8Call.java @@ -6,8 +6,10 @@ import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.zhgd.jeecg.common.execption.OpenAlertException; import com.zhgd.jeecg.common.util.pass.HttpUtils; +import com.zhgd.redis.lock.RedisRepository; import com.zhgd.xmgl.call.api.PoliceCameraManufacturer; import com.zhgd.xmgl.call.util.Mcs8Util; import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem; @@ -22,6 +24,7 @@ import com.zhgd.xmgl.modules.policecamera.service.IPoliceCameraItemService; import com.zhgd.xmgl.modules.policecamera.service.IWorkTicketHistoryService; import com.zhgd.xmgl.util.PathUtil; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -53,6 +56,9 @@ public class Mcs8Call implements PoliceCameraManufacturer { private IWorkTicketHistoryService workTicketHistoryService; @Value("${mcs8.download.http.type:pubUrl}") private String downloadType; + @Lazy + @Autowired + private RedisRepository redisRepository; public void setConfig(ProjectPoliceCameraConfig config) { this.config = config; @@ -92,7 +98,6 @@ public class Mcs8Call implements PoliceCameraManufacturer { } } - @Override public void pullFile(Date begin, Date end) { Map cameraItemMap = policeCameraItemService.list(null).stream().collect(Collectors.toMap(PoliceCameraItem::getDevSn, Function.identity(), (o1, o2) -> o1)); @@ -103,7 +108,9 @@ public class Mcs8Call implements PoliceCameraManufacturer { JSONObject jsonObject = Mcs8Util.getRecordFileList(config, page, pageSize, begin, end, true); bos = BeanUtil.copyToList(jsonObject.getJSONArray("data"), Mcs8FileBo.class); for (Mcs8FileBo bo : bos) { - downloadFileAndSave(bo, cameraItemMap); + if (!Objects.equals(bo.getFType(),3)) { + downloadFileAndSave(bo, cameraItemMap); + } } page++; } while (CollUtil.isNotEmpty(bos) && bos.size() == pageSize); @@ -163,34 +170,103 @@ public class Mcs8Call implements PoliceCameraManufacturer { return pubUrl; } - @Override - public void updateStatus() { + public void updateStatus(Long cacheSeconds) { if (configIsBlank()) { return; } - List itemList = policeCameraItemService.list(new LambdaQueryWrapper() - .eq(PoliceCameraItem::getProjectSn, config.getProjectSn())); + List itemList = policeCameraItemService.getListByProjectSn(config.getProjectSn()); Integer page = 1; int pageSize = 1000; JSONArray devList = new JSONArray(); JSONArray tempList = new JSONArray(); + + // 生成缓存key + String cacheKey = null; + if (cacheSeconds != null && cacheSeconds > 0) { + cacheKey = "mcs8:devList:full:" + Mcs8Util.getHost(config) + ":" + config.getPort() + ":" + config.getAccount() + ":" + config.getPassword(); + + // 尝试从缓存获取完整设备列表 + try { + String cachedData = (String) redisRepository.get(cacheKey); + if (StringUtils.isNotBlank(cachedData)) { + devList = JSONArray.parseArray(cachedData); + log.debug("从缓存获取完整设备列表,数量: {}", devList.size()); + + // 直接使用缓存数据更新设备状态 + updateDeviceStatus(itemList, devList); + return; + } + } catch (Exception e) { + log.warn("从缓存获取设备列表失败,继续从接口获取", e); + } + } + + // 缓存不存在或禁用缓存,从接口获取数据 do { tempList = Mcs8Util.getDevList(config, page, pageSize, true); devList.addAll(tempList); page++; } while (CollUtil.isNotEmpty(tempList) && tempList.size() == pageSize); - Map devSnMap = devList.stream().collect(Collectors.toMap(o -> ((JSONObject) o).getString("deviceId"), o -> (JSONObject) o, (o1, o2) -> o1)); - for (PoliceCameraItem item : itemList) { - JSONObject jsonObject = devSnMap.get(item.getDevSn()); - if (jsonObject != null) { - item.setDeviceState(jsonObject.getInteger("status") == 1 ? 1 : 2); - } else { - item.setDeviceState(2); + + // 如果启用缓存,将完整设备列表存入缓存 + if (cacheSeconds != null && cacheSeconds > 0 && cacheKey != null && CollUtil.isNotEmpty(devList)) { + try { + redisRepository.setExpire(cacheKey, devList.toJSONString(), cacheSeconds); + log.debug("设备列表已缓存,数量: {}, 缓存时间: {}s", devList.size(), cacheSeconds); + } catch (Exception e) { + log.warn("设备列表缓存失败", e); } - policeCameraItemService.updateById(item); } + // 更新设备状态 + updateDeviceStatus(itemList, devList); + } + + /** + * 从接口数据更新设备状态 + */ + private void updateDeviceStatus(List itemList, JSONArray devList) { + Map devSnMap = devList.stream() + .collect(Collectors.toMap( + o -> ((JSONObject) o).getString("deviceId"), + o -> (JSONObject) o, + (o1, o2) -> o1 + )); + + // 分组处理:在线设备和离线设备 + List onlineIds = new ArrayList<>(); + List offlineIds = new ArrayList<>(); + + for (PoliceCameraItem item : itemList) { + JSONObject jsonObject = devSnMap.get(item.getDevSn()); + Integer newState = (jsonObject != null && jsonObject.getInteger("status") == 1) ? 1 : 2; + Integer oldState = item.getDeviceState(); + + if (oldState == null || !oldState.equals(newState)) { + if (newState == 1) { + onlineIds.add(item.getItemId()); + } else { + offlineIds.add(item.getItemId()); + } + } + } + + // 批量更新在线设备 + if (CollUtil.isNotEmpty(onlineIds)) { + policeCameraItemService.update(new LambdaUpdateWrapper() + .set(PoliceCameraItem::getDeviceState, 1) + .in(PoliceCameraItem::getItemId, onlineIds) + ); + } + + // 批量更新离线设备 + if (CollUtil.isNotEmpty(offlineIds)) { + policeCameraItemService.update(new LambdaUpdateWrapper() + .set(PoliceCameraItem::getDeviceState, 2) + .in(PoliceCameraItem::getItemId, offlineIds) + ); + } } public boolean configIsBlank() { diff --git a/src/main/java/com/zhgd/xmgl/call/api/PoliceCameraManufacturer.java b/src/main/java/com/zhgd/xmgl/call/api/PoliceCameraManufacturer.java index f5d1aa9d1..6d87a294c 100644 --- a/src/main/java/com/zhgd/xmgl/call/api/PoliceCameraManufacturer.java +++ b/src/main/java/com/zhgd/xmgl/call/api/PoliceCameraManufacturer.java @@ -35,6 +35,7 @@ public interface PoliceCameraManufacturer { /** * 更新状态 + * @param cacheSeconds 缓存第三方设备在线接口时间s */ - void updateStatus(); + void updateStatus(Long cacheSeconds); } diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/WorkTicket.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/WorkTicket.java index 80d05b0df..be65ec9f1 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/WorkTicket.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/WorkTicket.java @@ -125,5 +125,9 @@ public class WorkTicket implements Serializable { */ @ApiModelProperty(value = "施工地点") private java.lang.String constructionAddr; - + /** + * 班组ids + */ + @ApiModelProperty(value = "班组ids") + private java.lang.String teamIds; } diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/WorkTicketVo.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/WorkTicketVo.java index 1b971e84e..79e536f9a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/WorkTicketVo.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/WorkTicketVo.java @@ -32,4 +32,9 @@ public class WorkTicketVo extends WorkTicket { */ @ApiModelProperty(value = "项目sn") private java.lang.String typeName; + /** + * 班组名称s + */ + @ApiModelProperty(value = "班组名称s") + private java.lang.String teamNames; } diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/IPoliceCameraItemService.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/IPoliceCameraItemService.java index 502e7f145..12e82928d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/IPoliceCameraItemService.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/IPoliceCameraItemService.java @@ -100,4 +100,6 @@ public interface IPoliceCameraItemService extends IService { Map getItemMapByProjectSn(String projectSn); VideoItemInfoVo getVideoItemInfo(Map map); + + List getListByProjectSn(String projectSn); } diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/PoliceCameraItemServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/PoliceCameraItemServiceImpl.java index f8cc27d2f..4789eb789 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/PoliceCameraItemServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/PoliceCameraItemServiceImpl.java @@ -42,6 +42,8 @@ import org.apache.commons.collections.MapUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -130,6 +132,7 @@ public class PoliceCameraItemServiceImpl extends ServiceImpl getListByProjectSn(String projectSn) { + return this.list(new LambdaQueryWrapper() + .eq(PoliceCameraItem::getProjectSn, projectSn)); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/ProjectPoliceCameraConfigServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/ProjectPoliceCameraConfigServiceImpl.java index 3f115906a..03d7eed96 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/ProjectPoliceCameraConfigServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/ProjectPoliceCameraConfigServiceImpl.java @@ -9,6 +9,8 @@ import com.zhgd.xmgl.modules.policecamera.mapper.ProjectPoliceCameraConfigMapper import com.zhgd.xmgl.modules.policecamera.service.IProjectPoliceCameraConfigService; import org.apache.commons.collections.MapUtils; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.cache.annotation.CacheEvict; +import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -31,6 +33,7 @@ public class ProjectPoliceCameraConfigServiceImpl extends ServiceImpl map) { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(ProjectPoliceCameraConfig::getProjectSn, MapUtils.getString(map, "projectSn")) @@ -54,6 +57,7 @@ public class ProjectPoliceCameraConfigServiceImpl extends ServiceImpl map) { ProjectPoliceCameraConfig projectPoliceCameraConfig = new ProjectPoliceCameraConfig(); projectPoliceCameraConfig.setProjectSn(MapUtils.getString(map, "projectSn")); @@ -79,6 +83,7 @@ public class ProjectPoliceCameraConfigServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(ProjectPoliceCameraConfig::getProjectSn, projectPoliceCameraConfig.getProjectSn()) @@ -93,6 +98,7 @@ public class ProjectPoliceCameraConfigServiceImpl extends ServiceImpl queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(ProjectPoliceCameraConfig::getProjectSn, projectSn); diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/WorkTicketServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/WorkTicketServiceImpl.java index c40ea99f0..39f8c2506 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/WorkTicketServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/WorkTicketServiceImpl.java @@ -25,6 +25,8 @@ import com.zhgd.xmgl.modules.project.service.IProjectConfigService; import com.zhgd.xmgl.modules.quality.entity.QualityRegion; import com.zhgd.xmgl.modules.quality.service.IQualityRegionService; import com.zhgd.xmgl.modules.worker.entity.EnterpriseInfo; +import com.zhgd.xmgl.modules.worker.entity.TeamInfo; +import com.zhgd.xmgl.modules.worker.service.ITeamInfoService; import com.zhgd.xmgl.modules.worker.service.impl.EnterpriseInfoServiceImpl; import com.zhgd.xmgl.modules.worker.service.impl.WorkerInfoServiceImpl; import com.zhgd.xmgl.util.*; @@ -36,6 +38,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.*; +import java.util.function.Function; import java.util.stream.Collectors; /** @@ -88,6 +91,9 @@ public class WorkTicketServiceImpl extends ServiceImpl queryPageList(HashMap param) { @@ -128,6 +134,8 @@ public class WorkTicketServiceImpl extends ServiceImpl teamInfoMap = teamInfoService.list(new LambdaQueryWrapper() + .eq(TeamInfo::getProjectSn, projectSn)).stream().collect(Collectors.toMap(TeamInfo::getId, Function.identity(), (o1, o2) -> o1)); for (WorkTicketVo ticketVo : list) { // 设置申请人名称 ticketVo.setApplicantNames(EntityUtils.convertIdsToNames( @@ -142,6 +150,13 @@ public class WorkTicketServiceImpl extends ServiceImpl projects = projectService.list(); @@ -72,7 +72,7 @@ public class Mcs8Task { try { PoliceCameraManufacturer manufacturer = policeCameraManufacturerFactory.getPoliceCameraManufacturer(project.getProjectSn()); if (manufacturer != null) { - manufacturer.updateStatus(); + manufacturer.updateStatus(3L); } } catch (Exception e) { log.error("定时更新执法仪设备状态err,{}", project.getProjectName(), e); From 2e680cbf1d421c80f1183e5a35978792350fb0c0 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 7 Nov 2025 11:26:43 +0800 Subject: [PATCH 18/21] =?UTF-8?q?=E6=89=A7=E6=B3=95=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E4=BB=AA=E8=AE=BE=E5=A4=87=E5=88=97=E8=A1=A8=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E7=A0=81=E6=B5=81=E7=B1=BB=E5=9E=8B=EF=BC=9A?= =?UTF-8?q?1=E3=80=81=E5=AD=90=E7=A0=81=E6=B5=81=EF=BC=8C2=E3=80=81?= =?UTF-8?q?=E4=B8=BB=E7=A0=81=E6=B5=81=EF=BC=8C=E9=BB=98=E8=AE=A4=E5=AD=90?= =?UTF-8?q?=E7=A0=81=E6=B5=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../xmgl/modules/policecamera/entity/PoliceCameraItem.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/PoliceCameraItem.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/PoliceCameraItem.java index 8864a7597..ff84bbc63 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/PoliceCameraItem.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/PoliceCameraItem.java @@ -148,5 +148,10 @@ public class PoliceCameraItem implements Serializable { */ @ApiModelProperty(value = "设备位置") private java.lang.String devLocation; + /** + * 默认码流类型:1、子码流,2、主码流,默认子码流 + */ + @ApiModelProperty(value = "默认码流类型:1、子码流,2、主码流,默认子码流") + private Integer defaultStreamType; } From 5341bb4d948c874c73868a3fcd8d31430da7ea8c Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 7 Nov 2025 11:27:11 +0800 Subject: [PATCH 19/21] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=A4=A9=E6=B0=94key?= =?UTF-8?q?=E5=92=8Csecret?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 8dab6c587..1a21a9e20 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -168,9 +168,9 @@ is-license=false #天气url tianqiUrl=http://v1.yiketianqi.com #天气appid -tianqiAppid=44351153 +tianqiAppid=57384868 #天气appsecret -tianqiAppsecret=iqJ5pLiS +tianqiAppsecret=eq9NLgRT spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 #邮箱配置 From 38342059c99c3ae73b8e61dbefec8777ce38df34 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 7 Nov 2025 16:12:23 +0800 Subject: [PATCH 20/21] =?UTF-8?q?=E7=BB=9F=E8=AE=A1=E6=89=A7=E6=B3=95?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=E4=BB=AA=E6=AF=8F=E6=97=A5=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E6=97=B6=E9=95=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../PoliceCameraItemController.java | 12 ++++++++++ .../entity/vo/CountWorkingHoursVo.java | 21 ++++++++++++++++++ .../mapper/PoliceCameraItemMapper.java | 3 +++ .../mapper/xml/PoliceCameraItemMapper.xml | 22 +++++++++++++++++++ .../service/IPoliceCameraItemService.java | 3 +++ .../impl/PoliceCameraItemServiceImpl.java | 12 ++++++++++ .../java/com/zhgd/xmgl/util/DateUtils.java | 2 +- 7 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/CountWorkingHoursVo.java diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/PoliceCameraItemController.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/PoliceCameraItemController.java index 055bb491d..59de20cab 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/PoliceCameraItemController.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/controller/PoliceCameraItemController.java @@ -17,6 +17,7 @@ import com.zhgd.xmgl.modules.basicdata.service.ISystemUserService; import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraGroup; import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem; import com.zhgd.xmgl.modules.policecamera.entity.ProjectPoliceCameraConfig; +import com.zhgd.xmgl.modules.policecamera.entity.vo.CountWorkingHoursVo; import com.zhgd.xmgl.modules.policecamera.entity.vo.GroupTreeWithDevVo; import com.zhgd.xmgl.modules.policecamera.entity.vo.PoliceCameraItemVo; import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo; @@ -416,4 +417,15 @@ public class PoliceCameraItemController { } } + @ApiOperation(value = "统计执法记录仪每日工作时长", notes = "统计执法记录仪每日工作时长", httpMethod = "POST") + @ApiImplicitParams({ + @ApiImplicitParam(name = "projectSn", value = "项目sn", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "itemId", value = "执法记录仪id", paramType = "body", required = false, dataType = "String"), + @ApiImplicitParam(name = "startDate", value = "开始日期(yyyy-MM-dd)", paramType = "body", required = true, dataType = "String"), + @ApiImplicitParam(name = "endDate", value = "结束日期(yyyy-MM-dd)", paramType = "body", required = true, dataType = "String"), + }) + @PostMapping("/countWorkingHours") + public Result> countWorkingHours(@RequestBody Map map) { + return Result.success(policeCameraItemService.countWorkingHours(map)); + } } diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/CountWorkingHoursVo.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/CountWorkingHoursVo.java new file mode 100644 index 000000000..9ba265455 --- /dev/null +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/entity/vo/CountWorkingHoursVo.java @@ -0,0 +1,21 @@ +package com.zhgd.xmgl.modules.policecamera.entity.vo; + +import com.zhgd.xmgl.util.DateUtils; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@Data +public class CountWorkingHoursVo implements DateUtils.DateAware { + @ApiModelProperty(value = "工作时长中文显示") + private String workingTimeName; + /** + *日期 + */ + @ApiModelProperty("日期") + private String date; + /** + * 文件时长 + */ + @ApiModelProperty(value = "文件时长") + private java.lang.Integer duration; +} diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/PoliceCameraItemMapper.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/PoliceCameraItemMapper.java index 0b3b3625d..25f85a37d 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/PoliceCameraItemMapper.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/PoliceCameraItemMapper.java @@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.zhgd.annotation.DataScope; import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem; +import com.zhgd.xmgl.modules.policecamera.entity.vo.CountWorkingHoursVo; import com.zhgd.xmgl.modules.policecamera.entity.vo.PoliceCameraItemVo; import com.zhgd.xmgl.modules.xz.entity.vo.CountStatusVo; import org.apache.ibatis.annotations.Mapper; @@ -85,4 +86,6 @@ public interface PoliceCameraItemMapper extends BaseMapper { * @return */ List getCameraItemIdListByTicketId(String ticketId); + + List countWorkingHours(Map map); } diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/PoliceCameraItemMapper.xml b/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/PoliceCameraItemMapper.xml index 18151ffb2..81029b51a 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/PoliceCameraItemMapper.xml +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/mapper/xml/PoliceCameraItemMapper.xml @@ -88,4 +88,26 @@ join work_ticket_camera_rel wtcr on wt.id = wtcr.work_ticket_id where wt.id = #{ticketId} + + diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/IPoliceCameraItemService.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/IPoliceCameraItemService.java index 12e82928d..82ef2906c 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/IPoliceCameraItemService.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/IPoliceCameraItemService.java @@ -3,6 +3,7 @@ package com.zhgd.xmgl.modules.policecamera.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem; +import com.zhgd.xmgl.modules.policecamera.entity.vo.CountWorkingHoursVo; import com.zhgd.xmgl.modules.policecamera.entity.vo.PoliceCameraItemVo; import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo; import com.zhgd.xmgl.modules.xz.entity.vo.CountStatusVo; @@ -102,4 +103,6 @@ public interface IPoliceCameraItemService extends IService { VideoItemInfoVo getVideoItemInfo(Map map); List getListByProjectSn(String projectSn); + + List countWorkingHours(Map map); } diff --git a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/PoliceCameraItemServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/PoliceCameraItemServiceImpl.java index 4789eb789..66a7e640e 100644 --- a/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/PoliceCameraItemServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/policecamera/service/impl/PoliceCameraItemServiceImpl.java @@ -22,6 +22,7 @@ import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraItem; import com.zhgd.xmgl.modules.policecamera.entity.PoliceCameraVideoConfig; import com.zhgd.xmgl.modules.policecamera.entity.ProjectPoliceCameraConfig; import com.zhgd.xmgl.modules.policecamera.entity.WorkTicketCameraRel; +import com.zhgd.xmgl.modules.policecamera.entity.vo.CountWorkingHoursVo; import com.zhgd.xmgl.modules.policecamera.entity.vo.PoliceCameraItemVo; import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo; import com.zhgd.xmgl.modules.policecamera.entity.vo.VideoItemInfoVo.VideoInfo; @@ -350,4 +351,15 @@ public class PoliceCameraItemServiceImpl extends ServiceImpl countWorkingHours(Map map) { + List hoursVos = baseMapper.countWorkingHours(map); + for (CountWorkingHoursVo hoursVo : hoursVos) { + hoursVo.setWorkingTimeName(TimeUtil.toHourMinSecond(hoursVo.getDuration())); + } + Map hoursVoMap = hoursVos.stream().collect(Collectors.toMap(CountWorkingHoursVo::getDate, Function.identity(), (o1, o2) -> o1)); + hoursVos = DateUtils.fillDateByStartEndDate(map, hoursVoMap, CountWorkingHoursVo::new); + return hoursVos; + } + } diff --git a/src/main/java/com/zhgd/xmgl/util/DateUtils.java b/src/main/java/com/zhgd/xmgl/util/DateUtils.java index d3d5ff872..c89170cf5 100644 --- a/src/main/java/com/zhgd/xmgl/util/DateUtils.java +++ b/src/main/java/com/zhgd/xmgl/util/DateUtils.java @@ -791,7 +791,7 @@ public class DateUtils { * @param paramMap * @param dateMap * @param instanceSupplier - * @param + * @param 类要实现DateAware * @return */ public static List fillDateByStartEndDate( From 5429de0196797a2274d6b0740d9bea97a8695026 Mon Sep 17 00:00:00 2001 From: guoshengxiong <1923636941@qq.com> Date: Fri, 7 Nov 2025 16:12:43 +0800 Subject: [PATCH 21/21] =?UTF-8?q?=E5=A2=9E=E5=8A=A0worker=5Fmonth=5Fattend?= =?UTF-8?q?ance=E7=BB=9F=E8=AE=A1=E8=80=83=E5=8B=A4=E6=97=B6=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E5=BF=BD=E7=95=A5=E5=91=98=E5=B7=A5=E6=89=93=E5=8D=A1?= =?UTF-8?q?=E6=97=B6=E7=9A=84=E2=80=9C=E8=BF=9B/=E5=87=BA=E2=80=9D?= =?UTF-8?q?=E6=96=B9=E5=90=91=E6=A0=87=E8=AF=86=EF=BC=8C1=E5=BF=BD?= =?UTF-8?q?=E7=95=A50=E4=B8=8D=E5=BF=BD=E7=95=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modules/project/entity/ProjectConfig.java | 5 +++++ ...rMonthAttendanceStatisticsServiceImpl.java | 20 ++++++++++++++----- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/src/main/java/com/zhgd/xmgl/modules/project/entity/ProjectConfig.java b/src/main/java/com/zhgd/xmgl/modules/project/entity/ProjectConfig.java index 295591fbb..48adc5aec 100644 --- a/src/main/java/com/zhgd/xmgl/modules/project/entity/ProjectConfig.java +++ b/src/main/java/com/zhgd/xmgl/modules/project/entity/ProjectConfig.java @@ -76,4 +76,9 @@ public class ProjectConfig implements Serializable { private java.lang.Integer workTicketBindCamera; @ApiModelProperty(value = "1开启人脸录入时的人脸检测识别功能0不开启") private java.lang.Integer enableWorkerFaceCheck; + /** + * worker_month_attendance统计考勤时是否忽略员工打卡时的“进/出”方向标识,1忽略0不忽略 + */ + @ApiModelProperty(value = "worker_month_attendance统计考勤时是否忽略员工打卡时的“进/出”方向标识,1忽略0不忽略") + private java.lang.Integer ignoreWorkerMonthAttendanceInOut; } diff --git a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerMonthAttendanceStatisticsServiceImpl.java b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerMonthAttendanceStatisticsServiceImpl.java index 56185a5f6..587e995aa 100644 --- a/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerMonthAttendanceStatisticsServiceImpl.java +++ b/src/main/java/com/zhgd/xmgl/modules/worker/service/impl/WorkerMonthAttendanceStatisticsServiceImpl.java @@ -2,6 +2,7 @@ package com.zhgd.xmgl.modules.worker.service.impl; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.ObjectUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -10,7 +11,9 @@ import com.zhgd.jeecg.common.mybatis.EntityMap; import com.zhgd.xmgl.modules.basicdata.service.impl.SystemUserServiceImpl; import com.zhgd.xmgl.modules.govtapi.GovtOpenApiService; import com.zhgd.xmgl.modules.project.entity.Project; +import com.zhgd.xmgl.modules.project.entity.ProjectConfig; import com.zhgd.xmgl.modules.project.mapper.ProjectMapper; +import com.zhgd.xmgl.modules.project.service.IProjectConfigService; import com.zhgd.xmgl.modules.worker.entity.WorkerAttendanceRule; import com.zhgd.xmgl.modules.worker.entity.WorkerInfo; import com.zhgd.xmgl.modules.worker.entity.WorkerMonthAttendanceDuration; @@ -21,7 +24,6 @@ import com.zhgd.xmgl.util.DateUtils; import com.zhgd.xmgl.util.EnvironmentUtil; import com.zhgd.xmgl.util.JxlExcelUtils; import com.zhgd.xmgl.util.ReflectUtils; -import lombok.extern.log4j.Log4j; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections.MapUtils; import org.apache.commons.lang.math.NumberUtils; @@ -529,6 +531,9 @@ public class WorkerMonthAttendanceStatisticsServiceImpl extends ServiceImpl getWorkerAttendanceType(String personSn, Long workerAttendanceRuleId, String passTime) { @@ -562,11 +567,14 @@ public class WorkerMonthAttendanceStatisticsServiceImpl extends ServiceImpl list = workerAttendanceMapper.selectOneWorkerAttendance(param); if (list != null && !list.isEmpty()) { + ProjectConfig config = projectConfigService.getOne(new LambdaQueryWrapper() + .eq(ProjectConfig::getProjectSn, list.get(0).get("projectSn"))); + boolean ignoreInOut = config != null && Objects.equals(config.getIgnoreWorkerMonthAttendanceInOut(), 1); String maxTime = null; for (int i = 0; i < list.size(); i++) { EntityMap map = list.get(i); //2:出 - if (map.get("passType") != null && map.get("createTime") != null && NumberUtils.toInt(map.get("passType").toString()) == 2) { + if (map.get("createTime") != null && (ignoreInOut || (map.get("passType") != null && NumberUtils.toInt(map.get("passType").toString()) == 2))) { maxTime = map.get("createTime").toString(); break; } @@ -575,9 +583,11 @@ public class WorkerMonthAttendanceStatisticsServiceImpl extends ServiceImpl= 0; i--) { Map map = list.get(i); //1:进 - if (map.get("passType") != null && map.get("createTime") != null && NumberUtils.toInt(map.get("passType").toString()) == 1) { - minTime = map.get("createTime").toString(); - break; + if (map.get("createTime") != null && (ignoreInOut || (map.get("passType") != null && NumberUtils.toInt(map.get("passType").toString()) == 1))) { + if (!Objects.equals(maxTime, map.get("createTime").toString())) { + minTime = map.get("createTime").toString(); + break; + } } } String startTimes = null;