From 71972694f7d5f23cf42226366a9ddaad4b72b89f Mon Sep 17 00:00:00 2001 From: xiangpei <xiangpei@timesnew.cn> Date: 星期五, 20 九月 2024 09:33:06 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- ycl-server/src/main/java/com/ycl/api/DH/lib/LibraryLoad.java | 2 ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java | 10 ycl-pojo/src/main/java/com/ycl/platform/domain/excel/VideoTotalExp.java | 35 ++ ycl-server/src/main/java/com/ycl/task/ContractTask.java | 42 ++ ycl-pojo/src/main/java/com/ycl/platform/domain/form/VideoExportForm.java | 15 + ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java | 11 ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java | 3 ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java | 4 ycl-server/src/main/java/com/ycl/task/CarTask.java | 2 ycl-server/src/main/resources/application-dev.yml | 15 ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java | 62 ++++ ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java | 274 +++++++++++++++++++++ ycl-server/src/main/java/com/ycl/task/FaceTask.java | 2 ycl-server/src/main/java/com/ycl/utils/DateUtils.java | 9 ycl-server/src/main/java/com/ycl/task/OsdTask.java | 28 + ycl-server/src/main/java/com/ycl/task/VideoTask.java | 2 ycl-server/src/main/java/com/ycl/task/MonitorTask.java | 33 ++ ycl-pojo/src/main/java/com/ycl/platform/domain/excel/VideoDailyExp.java | 149 +++++++++++ ycl-server/src/main/java/com/ycl/platform/controller/TMonitorController.java | 46 ++ ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml | 14 20 files changed, 697 insertions(+), 61 deletions(-) diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/VideoDailyExp.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/VideoDailyExp.java new file mode 100644 index 0000000..cc1bb92 --- /dev/null +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/VideoDailyExp.java @@ -0,0 +1,149 @@ +package com.ycl.platform.domain.excel; + +import annotation.Excel; +import lombok.Data; + +@Data +public class VideoDailyExp { + /** 璁惧缂栧彿 */ + @Excel(name = "璁惧缂栧彿",width = 20) + private String serialNumber; + + /** 璁惧鍚嶇О */ + @Excel(name = "璁惧鍚嶇О",width = 20) + private String deviceName; + + /** 鏍囩 */ + @Excel(name = "鏍囩") + private String tag; + + /** 鍖哄煙 */ + @Excel(name = "鍖哄煙") + private String area; + + /** 鏃ユ湡 */ + @Excel(name = "1",width = 10) + private String day1; + + /** 鏃ユ湡 */ + @Excel(name = "2",width = 10) + private String day2; + + /** 鏃ユ湡 */ + @Excel(name = "3",width = 10) + private String day3; + + /** 鏃ユ湡 */ + @Excel(name = "4",width = 10) + private String day4; + + /** 鏃ユ湡 */ + @Excel(name = "5",width = 10) + private String day5; + + /** 鏃ユ湡 */ + @Excel(name = "6",width = 10) + private String day6; + + /** 鏃ユ湡 */ + @Excel(name = "7",width = 10) + private String day7; + + /** 鏃ユ湡 */ + @Excel(name = "8",width = 10) + private String day8; + + /** 鏃ユ湡 */ + @Excel(name = "9",width = 10) + private String day9; + + /** 鏃ユ湡 */ + @Excel(name = "10",width = 10) + private String day10; + + /** 鏃ユ湡 */ + @Excel(name = "11",width = 10) + private String day11; + + /** 鏃ユ湡 */ + @Excel(name = "12",width = 10) + private String day12; + + /** 鏃ユ湡 */ + @Excel(name = "13",width = 10) + private String day13; + + /** 鏃ユ湡 */ + @Excel(name = "14",width = 10) + private String day14; + + /** 鏃ユ湡 */ + @Excel(name = "15",width = 10) + private String day15; + + /** 鏃ユ湡 */ + @Excel(name = "16",width = 10) + private String day16; + + /** 鏃ユ湡 */ + @Excel(name = "17",width = 10) + private String day17; + + /** 鏃ユ湡 */ + @Excel(name = "18",width = 10) + private String day18; + + /** 鏃ユ湡 */ + @Excel(name = "19",width = 10) + private String day19; + + /** 鏃ユ湡 */ + @Excel(name = "20",width = 10) + private String day20; + + /** 鏃ユ湡 */ + @Excel(name = "21",width = 10) + private String day21; + + /** 鏃ユ湡 */ + @Excel(name = "22",width = 10) + private String day22; + + /** 鏃ユ湡 */ + @Excel(name = "23",width = 10) + private String day23; + + /** 鏃ユ湡 */ + @Excel(name = "24",width = 10) + private String day24; + + /** 鏃ユ湡 */ + @Excel(name = "25",width = 10) + private String day25; + + /** 鏃ユ湡 */ + @Excel(name = "26",width = 10) + private String day26; + + /** 鏃ユ湡 */ + @Excel(name = "27",width = 10) + private String day27; + + /** 鏃ユ湡 */ + @Excel(name = "28",width = 10) + private String day28; + + /** 鏃ユ湡 */ + @Excel(name = "29",width = 10) + private String day29; + + /** 鏃ユ湡 */ + @Excel(name = "30",width = 10) + private String day30; + + /** 鏃ユ湡 */ + @Excel(name = "31",width = 10) + private String day31; + + +} diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/VideoTotalExp.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/VideoTotalExp.java new file mode 100644 index 0000000..5cb5218 --- /dev/null +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/VideoTotalExp.java @@ -0,0 +1,35 @@ +package com.ycl.platform.domain.excel; + +import annotation.Excel; +import lombok.Data; + +@Data +public class VideoTotalExp { + /** 鏃ユ湡 */ + @Excel(name = "鏃ユ湡") + private String date; + + /** 鏄熸湡 */ + @Excel(name = "鏄熸湡") + private String week; + + /** 鎬婚噺 */ + @Excel(name = "鎬婚噺") + private Integer total; + + /** 鍦ㄧ嚎 */ + @Excel(name = "鍦ㄧ嚎") + private Integer online; + + /** 绂荤嚎 */ + @Excel(name = "绂荤嚎") + private Integer offline; + + /** 鏃犲瓨鍌� */ + @Excel(name = "鏃犲瓨鍌�") + private Integer noStore; + + /** 閮ㄥ垎瀛樺偍 */ + @Excel(name = "閮ㄥ垎瀛樺偍") + private Integer partStore; +} diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/form/VideoExportForm.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/VideoExportForm.java new file mode 100644 index 0000000..f7f10cb --- /dev/null +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/VideoExportForm.java @@ -0,0 +1,15 @@ +package com.ycl.platform.domain.form; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import lombok.Data; + +import java.util.List; + +@Data +public class VideoExportForm { + @NotBlank(message = "鏈堜唤涓嶈兘涓虹┖") + private String month; + @NotEmpty(message = "閮ㄩ棬涓嶈兘涓虹┖") + private List<Integer> deptIds; +} diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java index a11d4ff..022fd14 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/BaseResult.java @@ -9,7 +9,6 @@ import java.util.Date; -//deptId涓嶅仛璁板綍锛屽鏋滄洿鎹㈠尯鍩燂紝鍥芥爣鐮佸墠8浣嶄細鏀癸紝绛変簬涓�涓柊璁惧涓嶄細褰卞搷鍘嗗彶鏁版嵁 @Data public class BaseResult { @Id @@ -19,12 +18,10 @@ */ @CreatedDate private LocalDate mongoCreateTime; - /** * 鍥芥爣鐮� */ private String no; - /** * 鐪佸巺 */ diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java index 073a849..329fa99 100644 --- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java +++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/SYS/TMonitorResult.java @@ -3,14 +3,22 @@ import com.ycl.platform.domain.result.BaseResult; import lombok.Data; +import org.springframework.data.mongodb.core.mapping.Document; /** * 鐐逛綅鍦ㄧ嚎鐜� */ @Data +@Document(collection = "t_monitor_online") public class TMonitorResult extends BaseResult { - /** 閮ㄩ棬id */ + /** + * 閮ㄩ棬id + */ private Integer deptId; /** 鍦ㄧ嚎 */ private Boolean online; + /** 璁惧绫诲瀷 */ + private String monitorType; + /** 璁惧鍚� */ + private String name; } diff --git a/ycl-server/src/main/java/com/ycl/api/DH/lib/LibraryLoad.java b/ycl-server/src/main/java/com/ycl/api/DH/lib/LibraryLoad.java index 18de255..0073026 100644 --- a/ycl-server/src/main/java/com/ycl/api/DH/lib/LibraryLoad.java +++ b/ycl-server/src/main/java/com/ycl/api/DH/lib/LibraryLoad.java @@ -26,7 +26,7 @@ /** 褰撳墠璇诲彇鐨勭洰褰� */ private static String currentFold; /** 鍔ㄦ�佸簱闇�瑕佸啓鍏ョ殑鐩綍 */ - private static String EXTRACT_PATH = System.getProperty("java.io.tmpdir"); + private static String EXTRACT_PATH = "/deviceSDK/linux64"; private static boolean written = false; diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/TMonitorController.java b/ycl-server/src/main/java/com/ycl/platform/controller/TMonitorController.java index b79c732..32d1f22 100644 --- a/ycl-server/src/main/java/com/ycl/platform/controller/TMonitorController.java +++ b/ycl-server/src/main/java/com/ycl/platform/controller/TMonitorController.java @@ -2,6 +2,7 @@ import annotation.Log; import com.ycl.platform.domain.entity.TMonitor; +import com.ycl.platform.domain.form.VideoExportForm; import com.ycl.platform.domain.vo.TMonitorVO; import com.ycl.platform.service.ITMonitorService; import com.ycl.system.AjaxResult; @@ -12,8 +13,10 @@ import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import java.io.IOException; import java.util.List; /** @@ -42,18 +45,41 @@ } /** - * 瀵煎嚭璁惧璧勪骇鍒楄〃 + * 瀵煎嚭 */ - @PreAuthorize("@ss.hasPermi('system:monitor:export')") - @Log(title = "璁惧璧勪骇", businessType = BusinessType.EXPORT) - @PostMapping("/export") - public void export(HttpServletResponse response, TMonitorVO tMonitor) - { - List<TMonitorVO> list = tMonitorService.selectTMonitorList(tMonitor); - ExcelUtil<TMonitorVO> util = new ExcelUtil<TMonitorVO>(TMonitorVO.class); - util.exportExcel(response, list, "璁惧璧勪骇鏁版嵁"); + @PreAuthorize("@ss.hasPermi('system:monitor:export')") + @Log(title = "瀵煎嚭瑙嗛鎬婚噺鏁版嵁", businessType = BusinessType.EXPORT) + @PostMapping("/export/video/total") + public void exportVideoTotal(HttpServletResponse response, @Validated VideoExportForm exportForm) throws IOException { + tMonitorService.exportVideoTotal(response,exportForm); } - + /** + * 瀵煎嚭 + */ + @PreAuthorize("@ss.hasPermi('system:monitor:export')") + @Log(title = "瀵煎嚭姣忔棩鍦ㄧ嚎鎯呭喌", businessType = BusinessType.EXPORT) + @PostMapping("/export/video/online") + public void exportVideoOnline(HttpServletResponse response, @Validated VideoExportForm exportForm) throws IOException, NoSuchFieldException, IllegalAccessException { + tMonitorService.exportVideoOnline(response,exportForm); + } + /** + * 瀵煎嚭 + */ + @PreAuthorize("@ss.hasPermi('system:monitor:export')") + @Log(title = "瀵煎嚭姣忔棩褰曞儚鎯呭喌", businessType = BusinessType.EXPORT) + @PostMapping("/export/video/record") + public void exportVideoRecord(HttpServletResponse response, @Validated VideoExportForm exportForm) throws IOException, NoSuchFieldException, IllegalAccessException { + tMonitorService.exportVideoRecord(response,exportForm); + } + /** + * 瀵煎嚭 + */ + @PreAuthorize("@ss.hasPermi('system:monitor:export')") + @Log(title = "瀵煎嚭姣忔棩绂荤嚎鏃堕暱", businessType = BusinessType.EXPORT) + @PostMapping("/export/video/loseTime") + public void exportVideoOffTime(HttpServletResponse response, @Validated VideoExportForm exportForm) throws IOException, NoSuchFieldException, IllegalAccessException { + tMonitorService.exportVideoLoseTime(response,exportForm); + } /** * 鑾峰彇璁惧璧勪骇璇︾粏淇℃伅 */ diff --git a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java index 225637e..d3d00c5 100644 --- a/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java +++ b/ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java @@ -13,6 +13,7 @@ import com.ycl.platform.domain.vo.screen.MonitorTotalVO; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; +import org.springframework.security.core.parameters.P; import java.util.List; import java.util.Map; @@ -49,6 +50,7 @@ * @return 璁惧璧勪骇闆嗗悎 */ public List<TMonitorVO> selectMonitorVOList(); + /** * 鏂板璁惧璧勪骇 * @@ -171,5 +173,5 @@ * @param tMonitor 璁惧璧勪骇 * @return 璁惧璧勪骇闆嗗悎 */ - public List<TMonitorResult> selectMonitorResult(Short cameraFunType); + public List<TMonitorResult> selectMonitorResult(@Param("cameraFunType") Short cameraFunType,@Param("deptIds") List<Integer> deptIds); } diff --git a/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java b/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java index f016ce2..2a4178a 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/ITMonitorService.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.ycl.platform.domain.entity.TMonitor; +import com.ycl.platform.domain.form.VideoExportForm; import com.ycl.platform.domain.query.DashboardQuery; import com.ycl.platform.domain.query.DataCenterQuery; import com.ycl.platform.domain.query.HomeQuery; @@ -9,7 +10,9 @@ import com.ycl.platform.domain.vo.screen.MonitorRateVO; import com.ycl.platform.domain.vo.screen.MonitorTotalVO; import com.ycl.system.Result; +import jakarta.servlet.http.HttpServletResponse; +import java.io.IOException; import java.util.List; import java.util.Map; @@ -109,4 +112,12 @@ * @return */ Result assetManagement(DataCenterQuery query); + + void exportVideoTotal(HttpServletResponse response, VideoExportForm exportForm) throws IOException; + + void exportVideoOnline(HttpServletResponse response, VideoExportForm exportForm) throws IOException, NoSuchFieldException, IllegalAccessException; + + void exportVideoRecord(HttpServletResponse response, VideoExportForm exportForm) throws IOException, NoSuchFieldException, IllegalAccessException; + + void exportVideoLoseTime(HttpServletResponse response, VideoExportForm exportForm) throws NoSuchFieldException, IllegalAccessException, IOException; } diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java index ce7c654..00739dc 100644 --- a/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java +++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java @@ -4,13 +4,18 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ycl.platform.domain.entity.TMonitor; +import com.ycl.platform.domain.excel.VideoDailyExp; +import com.ycl.platform.domain.excel.VideoTotalExp; +import com.ycl.platform.domain.form.VideoExportForm; import com.ycl.platform.domain.query.DashboardQuery; import com.ycl.platform.domain.query.DataCenterQuery; import com.ycl.platform.domain.query.HomeQuery; +import com.ycl.platform.domain.result.BaseResult; import com.ycl.platform.domain.result.HK.FaceDeviceInspectionResult; import com.ycl.platform.domain.result.HK.FaceDeviceSamplingResult; import com.ycl.platform.domain.result.HK.VehicleDeviceInspectionResult; import com.ycl.platform.domain.result.HK.VehicleDeviceSamplingResult; +import com.ycl.platform.domain.result.SYS.TMonitorResult; import com.ycl.platform.domain.result.UY.MonitorQualifyResult; import com.ycl.platform.domain.result.UY.OsdCheckResult; import com.ycl.platform.domain.result.UY.RecordMetaDSumResult; @@ -26,7 +31,10 @@ import com.ycl.system.service.ISysConfigService; import com.ycl.utils.DateUtils; import com.ycl.utils.StringUtils; +import constant.ApiConstants; +import constant.CheckConstants; import enumeration.general.AreaDeptEnum; +import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.ObjectUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; @@ -34,8 +42,16 @@ import org.springframework.data.mongodb.core.query.Query; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; +import pojo.ExcelExp; +import utils.poi.ExcelUtilManySheet; +import java.io.IOException; +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.text.DecimalFormat; import java.time.LocalDate; +import java.time.YearMonth; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -364,4 +380,262 @@ baseMapper.assetManagement(page, query); return Result.ok().data(page.getRecords()).total(page.getTotal()); } + + /** + * 瀵煎嚭鎬婚噺鏁版嵁 + */ + @Override + public void exportVideoTotal(HttpServletResponse response, VideoExportForm exportForm) throws IOException { + List<ExcelExp> mysheet = new ArrayList<>(); + List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Video, exportForm.getDeptIds()); + List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); + Query query = getQuery(deviceIds, exportForm.getMonth()); + //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁 + List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class); + //鏈堜唤姣忔棩褰曞儚鏁版嵁 + List<RecordMetaDSumResult> recordResult = mongoTemplate.find(query, RecordMetaDSumResult.class); + DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); + String[] weeks = {"鏄熸湡涓�", "鏄熸湡浜�", "鏄熸湡涓�", "鏄熸湡鍥�", "鏄熸湡浜�", "鏄熸湡鍏�", "鏄熸湡鏃�"}; + // 鍒涘缓涓�涓狹ap鏉ュ瓨鍌ㄦ瘡澶╃殑绱姞鏁版嵁 + Map<String, VideoTotalExp> totalMap = new HashMap<>(); + //涓�涓儴闂ㄤ竴涓猻heet + for (Integer deptId : exportForm.getDeptIds()) { + //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹� + List<String> ids = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).map(BaseResult::getNo).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(ids)) continue; + //绛涢�夐儴闂ㄦ暟鎹� + List<TMonitorResult> onlineList = onlineResult.stream().filter(tMonitorResult -> ids.contains(tMonitorResult.getNo())).collect(Collectors.toList()); + List<RecordMetaDSumResult> recordList = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList()); + List<VideoTotalExp> videoTotalExps = new ArrayList<>(); + for (int i = 0; i < 31; i++) { + String date = exportForm.getMonth(); + date += "-" + (i < 9 ? "0" + (i + 1) : (i + 1)); + //鎬婚噺 + VideoTotalExp totalExp = totalMap.computeIfAbsent(date, k -> new VideoTotalExp()); + LocalDate parseTime = LocalDate.parse(date, formatter); + //鑾峰彇鏄熸湡鍑� + String week = weeks[parseTime.getDayOfWeek().getValue() - 1]; + VideoTotalExp videoExp = new VideoTotalExp(); + videoExp.setDate(date); + videoExp.setWeek(week); + //璁剧疆鐐逛綅鍦ㄧ嚎鎬婚噺 + List<TMonitorResult> onlines = onlineList.stream().filter(tMonitorResult -> tMonitorResult.getMongoCreateTime().minusDays(1).equals(parseTime)).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(onlines)) { + videoExp.setTotal(onlines.size()); + videoExp.setOnline(Integer.valueOf(onlines.stream() + .filter(TMonitorResult::getOnline) + .count() + "")); + videoExp.setOffline(videoExp.getTotal() - videoExp.getOnline()); + } + //璁剧疆瀛樺偍鎯呭喌 + List<RecordMetaDSumResult> records = recordList.stream().filter(record -> record.getMongoCreateTime().minusDays(1).equals(parseTime)).collect(Collectors.toList()); + if (!CollectionUtils.isEmpty(records)) { + videoExp.setNoStore(Integer.valueOf(records.stream() + .filter(record -> ApiConstants.UY_RecordStatus_Abnormal.equals(record.getRecordStatus())) + .count() + "")); + videoExp.setPartStore(Integer.valueOf(records.stream() + .filter(record -> ApiConstants.UY_RecordStatus_Interval.equals(record.getRecordStatus())) + .count() + "")); + } + videoTotalExps.add(videoExp); + //绱姞浣滀负鍏ㄩ噺琛� + totalExp.setDate(date); + totalExp.setWeek(week); + totalExp.setTotal((totalExp.getTotal() == null ? 0 : totalExp.getTotal()) + (videoExp.getTotal() == null ? 0 : videoExp.getTotal())); + totalExp.setOnline((totalExp.getOnline() == null ? 0 : totalExp.getOnline()) + (videoExp.getOnline() == null ? 0 : videoExp.getOnline())); + totalExp.setOffline((totalExp.getOffline() == null ? 0 : totalExp.getOffline()) + (videoExp.getOffline() == null ? 0 : videoExp.getOffline())); + totalExp.setNoStore((totalExp.getNoStore() == null ? 0 : totalExp.getNoStore()) + (videoExp.getNoStore() == null ? 0 : videoExp.getNoStore())); + totalExp.setPartStore((totalExp.getPartStore() == null ? 0 : totalExp.getPartStore()) + (videoExp.getPartStore() == null ? 0 : videoExp.getPartStore())); + totalMap.put(date, totalExp); + } + AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); + ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoTotalExps, VideoTotalExp.class); + mysheet.add(excelExp); + } + //娣诲姞鍏ㄩ噺琛� + List<VideoTotalExp> totalExps = new ArrayList<>(totalMap.values()); + totalExps = totalExps.stream().sorted(Comparator.comparing(VideoTotalExp::getDate)).collect(Collectors.toList()); + ExcelExp excelExp = new ExcelExp("鍏ㄩ噺", totalExps, VideoTotalExp.class); + mysheet.add(excelExp); + //瀵煎嚭 + ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet); + util.exportExcelManySheet(response, mysheet); + } + + + /** + * 瀵煎嚭姣忔棩鍦ㄧ嚎鏁版嵁 + */ + @Override + public void exportVideoOnline(HttpServletResponse response, VideoExportForm exportForm) throws IOException, NoSuchFieldException, IllegalAccessException { + List<ExcelExp> mysheet = new ArrayList<>(); + List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Video, exportForm.getDeptIds()); + List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); + Query query = getQuery(deviceIds, exportForm.getMonth()); + //鏈堜唤姣忔棩鍦ㄧ嚎鏁版嵁 + List<TMonitorResult> onlineResult = mongoTemplate.find(query, TMonitorResult.class); + for (Integer deptId : exportForm.getDeptIds()) { + List<VideoDailyExp> videoDailyExps = new ArrayList<>(); + //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹� + List<TMonitorResult> monitors = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(monitors)) continue; + List<String> ids = monitors.stream().map(BaseResult::getNo).collect(Collectors.toList()); + //绛涢�塵ongo鍖哄幙鏁版嵁 + List<TMonitorResult> onlines = onlineResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList()); + AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); + for (TMonitorResult result : monitors) { + VideoDailyExp videoDailyExp = new VideoDailyExp(); + videoDailyExp.setSerialNumber(result.getNo()); + videoDailyExp.setDeviceName(result.getName()); + videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); + videoDailyExp.setTag("" + (result.getProvinceTag() ? "鐪佸巺" : "") + (result.getImportantTag() ? "銆侀噸鐐圭偣浣�" : "") + (result.getImportantCommandImageTag() ? "銆侀噸鐐规寚鎸ュ浘鍍�" : "") + (result.getDeptTag() ? "銆侀儴绾�" : "")); + setOnlineDaily(videoDailyExp, result, onlines); + videoDailyExps.add(videoDailyExp); + } + ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class); + mysheet.add(excelExp); + } + ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet); + util.exportExcelManySheet(response, mysheet); + } + + + /** + * 瀵煎嚭姣忔棩褰曞儚鎯呭喌鏁版嵁 + */ + @Override + public void exportVideoRecord(HttpServletResponse response, VideoExportForm exportForm) throws IOException, NoSuchFieldException, IllegalAccessException { + List<ExcelExp> mysheet = new ArrayList<>(); + List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Video, exportForm.getDeptIds()); + List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); + Query query = getQuery(deviceIds, exportForm.getMonth()); + //鏈堜唤姣忔棩褰曞儚绾挎暟鎹� + List<RecordMetaDSumResult> recordResult = mongoTemplate.find(query, RecordMetaDSumResult.class); + for (Integer deptId : exportForm.getDeptIds()) { + List<VideoDailyExp> videoDailyExps = new ArrayList<>(); + //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹� + List<TMonitorResult> monitors = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(monitors)) continue; + List<String> ids = monitors.stream().map(BaseResult::getNo).collect(Collectors.toList()); + //绛涢�塵ongo鍖哄幙鏁版嵁 + List<RecordMetaDSumResult> records = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList()); + AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); + for (TMonitorResult result : monitors) { + VideoDailyExp videoDailyExp = new VideoDailyExp(); + videoDailyExp.setSerialNumber(result.getNo()); + videoDailyExp.setDeviceName(result.getName()); + videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); + videoDailyExp.setTag("" + (result.getProvinceTag() ? "鐪佸巺" : "") + (result.getImportantTag() ? "銆侀噸鐐圭偣浣�" : "") + (result.getImportantCommandImageTag() ? "銆侀噸鐐规寚鎸ュ浘鍍�" : "") + (result.getDeptTag() ? "銆侀儴绾�" : "")); + setRecordDaily(videoDailyExp, result, records); + videoDailyExps.add(videoDailyExp); + } + ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class); + mysheet.add(excelExp); + } + ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet); + util.exportExcelManySheet(response, mysheet); + } + + /** + * 瀵煎嚭姣忔棩褰曞儚缂哄け鏃堕暱 + */ + @Override + public void exportVideoLoseTime(HttpServletResponse response, VideoExportForm exportForm) throws NoSuchFieldException, IllegalAccessException, IOException { + List<ExcelExp> mysheet = new ArrayList<>(); + List<TMonitorResult> tMonitorResults = tMonitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Video, exportForm.getDeptIds()); + List<String> deviceIds = tMonitorResults.stream().map(BaseResult::getNo).collect(Collectors.toList()); + Query query = getQuery(deviceIds, exportForm.getMonth()); + //鏈堜唤姣忔棩褰曞儚绾挎暟鎹� + List<RecordMetaDSumResult> recordResult = mongoTemplate.find(query, RecordMetaDSumResult.class); + for (Integer deptId : exportForm.getDeptIds()) { + List<VideoDailyExp> videoDailyExps = new ArrayList<>(); + //浠庢暟鎹簱闆嗗悎绛涢�夐儴闂ㄦ暟鎹� + List<TMonitorResult> monitors = tMonitorResults.stream().filter(tMonitorResult -> deptId.equals(tMonitorResult.getDeptId())).collect(Collectors.toList()); + if (CollectionUtils.isEmpty(monitors)) continue; + List<String> ids = monitors.stream().map(BaseResult::getNo).collect(Collectors.toList()); + //绛涢�塵ongo鍖哄幙鏁版嵁 + List<RecordMetaDSumResult> records = recordResult.stream().filter(result -> ids.contains(result.getNo())).collect(Collectors.toList()); + AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId); + for (TMonitorResult result : monitors) { + VideoDailyExp videoDailyExp = new VideoDailyExp(); + videoDailyExp.setSerialNumber(result.getNo()); + videoDailyExp.setDeviceName(result.getName()); + videoDailyExp.setArea(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName()); + videoDailyExp.setTag("" + (result.getProvinceTag() ? "鐪佸巺" : "") + (result.getImportantTag() ? "銆侀噸鐐圭偣浣�" : "") + (result.getImportantCommandImageTag() ? "銆侀噸鐐规寚鎸ュ浘鍍�" : "") + (result.getDeptTag() ? "銆侀儴绾�" : "")); + setLoseDaily(videoDailyExp, result, records); + videoDailyExps.add(videoDailyExp); + } + ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(), videoDailyExps, VideoDailyExp.class); + mysheet.add(excelExp); + } + ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mysheet); + util.exportExcelManySheet(response, mysheet); + } + + + private Query getQuery(List<String> deviceIds, String month) { + // 灏嗗勾鏈堝瓧绗︿覆瑙f瀽涓篩earMonth瀵硅薄 + YearMonth yearMonth = YearMonth.parse(month); + // 鑾峰彇褰撴湀鐨勭涓�澶� + LocalDate start = yearMonth.atDay(1); + // 鑾峰彇涓嬩釜鏈堢殑绗竴澶╋紙閫氳繃鍔犱笂1涓湀骞惰缃棩涓�1锛� + YearMonth nextMonth = yearMonth.plusMonths(1); + LocalDate end = nextMonth.atDay(1); + //鑾峰彇杩欎釜鏈堜唤鐨勯儴闂ㄦ暟鎹� + Query query = new Query(Criteria.where("mongoCreateTime").gte(start).lt(end)); + query.addCriteria(Criteria.where("no").in(deviceIds)); + return query; + } + + //璁剧疆姣忔棩鍦ㄧ嚎鏁版嵁 + private void setOnlineDaily(VideoDailyExp videoDailyExp, TMonitorResult result, List<TMonitorResult> onlines) throws NoSuchFieldException, IllegalAccessException { + //涓�涓澶囧綋鏈堝湪绾挎儏鍐� + List<TMonitorResult> onlineResult = onlines.stream().filter(online -> online.getNo().equals(result.getNo())).collect(Collectors.toList()); + for (TMonitorResult monitorResult : onlineResult) { + int dayOfMonth = monitorResult.getMongoCreateTime().getDayOfMonth(); + String online = ""; + online += monitorResult.getOnline() ? "鍦ㄧ嚎" : "绂荤嚎"; + //鍙嶅皠璧嬪�硷紝瀛楁缁熶竴瀹氫箟涓篸ay+1锛�2锛�3... + Field field = videoDailyExp.getClass().getDeclaredField("day" + dayOfMonth); + field.setAccessible(true); + field.set(videoDailyExp, online); + } + } + + //璁剧疆姣忔棩褰曞儚鏁版嵁 + private void setRecordDaily(VideoDailyExp videoDailyExp, TMonitorResult result, List<RecordMetaDSumResult> records) throws NoSuchFieldException, IllegalAccessException { + //涓�涓澶囧綋鏈堝湪绾挎儏鍐� + List<RecordMetaDSumResult> recordResults = records.stream().filter(online -> online.getNo().equals(result.getNo())).collect(Collectors.toList()); + for (RecordMetaDSumResult recordResult : recordResults) { + int dayOfMonth = recordResult.getMongoCreateTime().getDayOfMonth(); + Integer status = recordResult.getRecordStatus(); + String text = ""; + if (ApiConstants.UY_RecordStatus_Interval.equals(status)) { + text += "闂存瓏"; + } else if (ApiConstants.UY_RecordStatus_Abnormal.equals(status)) { + text += "缂哄け"; + } else if (ApiConstants.UY_RecordStatus_Integrity.equals(status)) { + text += "瀹屾暣"; + } + //鍙嶅皠璧嬪�硷紝瀛楁缁熶竴瀹氫箟涓篸ay+1锛�2锛�3... + Field field = videoDailyExp.getClass().getDeclaredField("day" + dayOfMonth); + field.setAccessible(true); + field.set(videoDailyExp, text); + } + } + + //璁剧疆姣忔棩褰曞儚缂哄け鏃堕暱鏁版嵁 + private void setLoseDaily(VideoDailyExp videoDailyExp, TMonitorResult result, List<RecordMetaDSumResult> records) throws NoSuchFieldException, IllegalAccessException { + //涓�涓澶囧綋鏈堝湪绾挎儏鍐� + List<RecordMetaDSumResult> recordResults = records.stream().filter(online -> online.getNo().equals(result.getNo())).collect(Collectors.toList()); + for (RecordMetaDSumResult recordResult : recordResults) { + int dayOfMonth = recordResult.getMongoCreateTime().getDayOfMonth(); + //鍙嶅皠璧嬪�硷紝瀛楁缁熶竴瀹氫箟涓篸ay+1锛�2锛�3... + Field field = videoDailyExp.getClass().getDeclaredField("day" + dayOfMonth); + field.setAccessible(true); + //闃叉杞崲涓虹瀛﹁鏁版硶 + BigDecimal bigDecimal = BigDecimal.valueOf(recordResult.getMissDuration() == null ? 0 : recordResult.getMissDuration()); + field.set(videoDailyExp,bigDecimal.toString()); + } + } } diff --git a/ycl-server/src/main/java/com/ycl/task/CarTask.java b/ycl-server/src/main/java/com/ycl/task/CarTask.java index ea1e6fe..c245663 100644 --- a/ycl-server/src/main/java/com/ycl/task/CarTask.java +++ b/ycl-server/src/main/java/com/ycl/task/CarTask.java @@ -43,7 +43,7 @@ private YwPointMapper pointMapper; public void siteOnlineTask() { log.info("寮�濮嬭绠楃偣浣嶅湪绾跨巼"); - List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Car); + List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Car,null); CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Car_SiteOnline); calculator.calculate(tMonitorResults); log.info("缁撴潫璁$畻瑙嗗浘搴撳鎺ョǔ瀹氭��"); diff --git a/ycl-server/src/main/java/com/ycl/task/ContractTask.java b/ycl-server/src/main/java/com/ycl/task/ContractTask.java index 411fb32..26c75e0 100644 --- a/ycl-server/src/main/java/com/ycl/task/ContractTask.java +++ b/ycl-server/src/main/java/com/ycl/task/ContractTask.java @@ -15,7 +15,9 @@ import com.ycl.platform.domain.vo.WorkOrderVO; import com.ycl.platform.mapper.*; import com.ycl.platform.service.IContractScoreService; +import com.ycl.system.mapper.SysConfigMapper; import com.ycl.utils.DateUtils; +import com.ycl.utils.StringUtils; import constant.ApiConstants; import enumeration.ContractRule; import enumeration.ErrorType; @@ -56,7 +58,8 @@ private IContractScoreService contractScoreService; @Autowired private WorkOrderMapper workOrderMapper; - + @Autowired + private SysConfigMapper sysConfigMapper; private static final Integer Online = 1; private static final Integer Offline = -1; private static final String AuditStatus_Pass = "1"; @@ -88,7 +91,7 @@ ) )); Map<String, Integer> onlineStatusMap = new HashMap<>(); - //鏌ongo鑾峰彇璁惧鍦ㄧ嚎鎯呭喌 + //TODO 鍦ㄧ嚎鐜囦慨鏀癸紝鏌ongo鑾峰彇璁惧鍦ㄧ嚎鎯呭喌 Date date = DateUtils.getDay(2024, 7, 13); //杞﹁締銆佷汉鑴� Query query = new Query(); @@ -220,7 +223,7 @@ for (WorkOrderVO workOrder : workOrders) { //妫�娴嬫槸鍚︽姤澶囪繃 if (!CollectionUtils.isEmpty(reportNumbers)) { - if(reportNumbers.contains(workOrder.getSerialNumber())) continue; + if (reportNumbers.contains(workOrder.getSerialNumber())) continue; } String errorType = workOrder.getErrorType(); //瀛樺偍鏁呴殰 褰曞儚鎴栧浘鐗囪闂紓甯� @@ -323,8 +326,16 @@ */ public void randomDeductPic() { Random random = new Random(); + Integer num = randomSize; //缁欏畾闅忔満鑼冨洿 - int number = random.nextInt(randomSize); + String count = sysConfigMapper.checkConfigKeyUnique("check.contract.sample").getConfigValue(); + if (!StringUtils.isEmpty(count)) { + Integer temp = Integer.valueOf(count); + if (temp > 0) { + num = temp; + } + } + int number = random.nextInt(num); if (number == 0) { log.info("寮�濮嬫娊鏌ュ浘鐗囧畬鏁寸姸鎬�"); //鍑嗗鎵归噺鎵撳垎鐨勯泦鍚� @@ -346,7 +357,7 @@ queryWrapper.in("serial_number", serialNumbers); //鑾峰彇鍏徃鎵�杩愮淮鐨勮澶囬泦鍚堬紝key涓簎nitId value涓鸿澶囧浗鏍囩爜闆嗗悎 Map<Long, List<String>> unitMonitorMap = ywPointMapper.selectList(queryWrapper).stream() - .collect(Collectors.groupingBy(YwPoint::getUnitId, + .filter(ywPoint -> ywPoint.getUnitId()!=null).collect(Collectors.groupingBy(YwPoint::getUnitId, Collectors.mapping( YwPoint::getSerialNumber, Collectors.toList()))); @@ -361,7 +372,7 @@ for (PicAccessResult picAccessResult : picAccessResults) { //鍒ゆ柇鏄惁鎶ュ杩� if (!CollectionUtils.isEmpty(reportNumbers)) { - if(reportNumbers.contains(picAccessResult.getExternalIndexCode())) continue; + if (reportNumbers.contains(picAccessResult.getExternalIndexCode())) continue; } //鍒ゆ柇鏄惁鏄鍏徃杩愮淮 if (monitorList.contains(picAccessResult.getExternalIndexCode())) { @@ -395,7 +406,16 @@ public void randomDeductVideo() { Random random = new Random(); //缁欏畾闅忔満鑼冨洿 - int number = random.nextInt(randomSize); + Integer num = randomSize; + //缁欏畾闅忔満鑼冨洿 + String count = sysConfigMapper.checkConfigKeyUnique("check.contract.sample").getConfigValue(); + if (!StringUtils.isEmpty(count)) { + Integer temp = Integer.valueOf(count); + if (temp > 0) { + num = temp; + } + } + int number = random.nextInt(num); if (number == 0) { log.info("寮�濮嬫娊鏌ュ綍鍍忓畬鏁寸姸鎬�"); //鍑嗗鎵归噺鎵撳垎鐨勯泦鍚� @@ -417,7 +437,7 @@ queryWrapper.in("serial_number", serialNumbers); //鑾峰彇鍏徃鎵�杩愮淮鐨勮澶囬泦鍚堬紝key涓簎nitId value涓鸿澶囧浗鏍囩爜闆嗗悎 Map<Long, List<String>> unitMonitorMap = ywPointMapper.selectList(queryWrapper).stream() - .collect(Collectors.groupingBy(YwPoint::getUnitId, + .filter(ywPoint -> ywPoint.getUnitId()!=null).collect(Collectors.groupingBy(YwPoint::getUnitId, Collectors.mapping( YwPoint::getSerialNumber, Collectors.toList()))); @@ -430,7 +450,7 @@ for (RecordMetaDSumResult result : recordMetaDSumResults) { //鍒ゆ柇鏄惁鎶ュ杩� if (!CollectionUtils.isEmpty(reportNumbers)) { - if(reportNumbers.contains(result.getDeviceId())) continue; + if (reportNumbers.contains(result.getDeviceId())) continue; } //鍒ゆ柇鏄惁鏄鍏徃杩愮淮 if (monitorList.contains(result.getDeviceId())) { @@ -440,7 +460,7 @@ Double max = calculateRuleVO.getMax(); Double min = calculateRuleVO.getMin(); //鍒ゆ柇鑼冨洿鍦ㄥ摢涓尯闂� 鍗曚綅鏄皬鏃惰浆鎹负鍒嗛挓 - if (checkRange(min, max, BigDecimal.valueOf(result.getMissDuration()*60))) { + if (checkRange(min, max, BigDecimal.valueOf(result.getMissDuration() * 60))) { if (calculateRuleVO.getNum() == null) { calculateRuleVO.setNum(1); } else { @@ -452,7 +472,7 @@ } } for (CalculateRuleVO calculateRuleVO : ruleList) { - if (calculateRuleVO.getNum()!=null && calculateRuleVO.getNum() > 0) { + if (calculateRuleVO.getNum() != null && calculateRuleVO.getNum() > 0) { //闇�瑕佹墸闄ょ殑鍒嗘暟锛屾瑙勫垯鍙湁涓�鏉′笉闇�瑕佸垽鏂寖鍥� double deductScore = calculateRuleVO.getCalcFraction() * calculateRuleVO.getNum(); ContractScore contractScore = getContractScore(calculateRuleVO, deductScore, calculateRuleVO.getNum() + "", Remark + calculateRuleVO.getNum() + "璺澶囪繚鍙嶈鍒�"); diff --git a/ycl-server/src/main/java/com/ycl/task/FaceTask.java b/ycl-server/src/main/java/com/ycl/task/FaceTask.java index 9692be4..4db5a56 100644 --- a/ycl-server/src/main/java/com/ycl/task/FaceTask.java +++ b/ycl-server/src/main/java/com/ycl/task/FaceTask.java @@ -39,7 +39,7 @@ public void siteOnlineTask() { log.info("寮�濮嬭绠楃偣浣嶅湪绾跨巼"); - List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Face); + List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Face,null); CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Face_SiteOnline); calculator.calculate(tMonitorResults); log.info("缁撴潫璁$畻瑙嗗浘搴撳鎺ョǔ瀹氭��"); diff --git a/ycl-server/src/main/java/com/ycl/task/MonitorTask.java b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java index 53e9bb3..c22d088 100644 --- a/ycl-server/src/main/java/com/ycl/task/MonitorTask.java +++ b/ycl-server/src/main/java/com/ycl/task/MonitorTask.java @@ -4,8 +4,11 @@ import com.alibaba.druid.support.json.JSONUtils; import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.mongodb.client.result.DeleteResult; import com.ycl.platform.domain.entity.TMonitor; import com.ycl.platform.domain.entity.YwPoint; +import com.ycl.platform.domain.result.HK.VehicleDeviceInspectionResult; +import com.ycl.platform.domain.result.SYS.TMonitorResult; import com.ycl.platform.domain.result.UY.MonitorQualifyResult; import com.ycl.platform.domain.result.UY.OneMachineFileResult; import com.ycl.platform.domain.result.UY.OsdCheckResult; @@ -18,6 +21,7 @@ import com.ycl.system.service.ISysDictDataService; import com.ycl.utils.DateUtils; import com.ycl.utils.StringUtils; +import constant.CheckConstants; import constant.RedisConstant; import enumeration.general.AreaDeptEnum; import enumeration.general.PointStatus; @@ -57,6 +61,21 @@ @Autowired private RedisTemplate redisTemplate; + //鍚屾鐐逛綅鍦ㄧ嚎鐜囧埌mongo + //TODO锛氬姞瀹氭椂浠诲姟12.杩囧紑濮� + public void siteOnline() { + log.info("寮�濮嬪悓姝ョ偣浣嶅湪绾跨巼鍒癿ongo"); + List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(null,null); + if (!CollectionUtils.isEmpty(tMonitorResults)) { + //濡傛灉瀛樺湪涔嬪墠鐨勬暟鎹厛鍒犻櫎 + Query query = new Query(Criteria.where("mongoCreateTime").gte(DateUtils.getDayStart(new Date())).lt(DateUtils.getDayEnd(new Date()))); + DeleteResult result = mongoTemplate.remove(query, TMonitorResult.class); + //瀛樻斁鍦╩ongo涓� + mongoTemplate.insertAll(tMonitorResults); + log.info("缁撴潫鍚屾鐐逛綅鍦ㄧ嚎鐜囧埌mongo"); + } + } + //鍚屾mongodb涓�鏈轰竴妗e埌鏁版嵁搴� @Transactional(rollbackFor = Exception.class) public void synchronize() { @@ -88,7 +107,7 @@ //鍏ㄥ勾鐣欏瓨 for (MonitorQualifyResult result : oneMachineFileResults) { - TMonitor monitor = getMonitor(result, monitorVOMap,osdMap); + TMonitor monitor = getMonitor(result, monitorVOMap, osdMap); YwPoint point = getPoint(result, pointMap, importantSite); monitorList.add(monitor); ywPointList.add(point); @@ -100,12 +119,12 @@ //娣诲姞鑰佹暟鎹� List<String> numbers = CollectionUtils.isEmpty(monitorList) ? new ArrayList<>() : monitorList.stream().map(TMonitor::getSerialNumber).collect(Collectors.toList()); monitorVOMap.forEach((key, value) -> { - if (!numbers.contains(key)){ + if (!numbers.contains(key)) { TMonitor monitor = new TMonitor(); - BeanUtils.copyProperties(value,monitor); + BeanUtils.copyProperties(value, monitor); //濉ˉ鍝佺墝 OsdCheckResult osdCheckResult = osdMap.get(key); - if(osdCheckResult!=null) { + if (osdCheckResult != null) { monitor.setDeviceType(osdCheckResult.getDeviceBrand()); } monitorList.add(monitor); @@ -113,7 +132,7 @@ }); List<String> points = CollectionUtils.isEmpty(ywPointList) ? new ArrayList<>() : ywPointList.stream().map(YwPoint::getSerialNumber).collect(Collectors.toList()); pointMap.forEach((key, value) -> { - if (!points.contains(key)){ + if (!points.contains(key)) { ywPointList.add(value); } }); @@ -167,13 +186,13 @@ return ywPoint; } - private TMonitor getMonitor(MonitorQualifyResult result, Map<String, TMonitorVO> monitorVOMap, Map<String, OsdCheckResult> osdMap) { + private TMonitor getMonitor(MonitorQualifyResult result, Map<String, TMonitorVO> monitorVOMap, Map<String, OsdCheckResult> osdMap) { TMonitor monitor = new TMonitor(); if (monitorVOMap.containsKey(result.getSerialNumber().getValue())) { monitor.setId(monitorVOMap.get(result.getSerialNumber().getValue()).getId()); //鏇存柊鍝佺墝 OsdCheckResult osdCheckResult = osdMap.get(result.getSerialNumber().getValue()); - if(osdCheckResult!=null) { + if (osdCheckResult != null) { monitor.setDeviceType(osdCheckResult.getDeviceBrand()); } } diff --git a/ycl-server/src/main/java/com/ycl/task/OsdTask.java b/ycl-server/src/main/java/com/ycl/task/OsdTask.java index a50e42a..76e3edd 100644 --- a/ycl-server/src/main/java/com/ycl/task/OsdTask.java +++ b/ycl-server/src/main/java/com/ycl/task/OsdTask.java @@ -47,6 +47,18 @@ private UYErrorTypeCheckService uyErrorTypeCheckService; @Autowired private YwPointService pointService; + @Value("${HK.userName}") + public String HKUserName; + @Value("${HK.password}") + public String HKPassword; + @Value("${DH.userName}") + public String DHUserName; + @Value("${DH.password}") + public String DHPassword; + @Value("${YS.userName}") + public String YSUserName; + @Value("${YS.password}") + public String YSPassword; /** * 閫氳繃鏌ongoDB姣忔棩涓�鏈轰竴妗f暟鎹幏鍙栬澶噄p * 閫氳繃璁惧ip銆佸搧鐗岃皟鐢ㄤ笉鍚宎pi鑾峰彇osd淇℃伅 @@ -75,7 +87,7 @@ List<Future<OSDResult>> futureList = new ArrayList<>(48); List<OSDResult> osdResultList = new ArrayList<>(); for (TMonitor monitor : monitors) { - OSDCheckThread thread = new OSDCheckThread(monitor); + OSDCheckThread thread = new OSDCheckThread(monitor,HKUserName,HKPassword,DHUserName,DHPassword,YSUserName,YSPassword); Future<OSDResult> future = executorService.submit(thread); futureList.add(future); } @@ -88,12 +100,14 @@ List<OsdCheckResult> checkResults = new ArrayList<>(); Map<String, TMonitor> monitorMap = monitors.stream().collect(Collectors.toMap(TMonitor::getSerialNumber, Function.identity())); for (OSDResult osdResult : osdResultList) { - TMonitor monitor = monitorMap.get(osdResult.getSerialNumber()); - //灏佽OsdCheckResult - OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor); - checkCorrect(osdResult, monitor, osdCheckResult); - log.info("鏍¢獙缁撴灉锛歿}",osdCheckResult); - checkResults.add(osdCheckResult); + if(osdResult!=null) { + TMonitor monitor = monitorMap.get(osdResult.getSerialNumber()); + //灏佽OsdCheckResult + OsdCheckResult osdCheckResult = getOsdCheckResult(osdResult, monitor); + checkCorrect(osdResult, monitor, osdCheckResult); + log.info("鏍¢獙缁撴灉锛歿}", osdCheckResult); + checkResults.add(osdCheckResult); + } } log.info("缁撴灉鏁版嵁澶у皬:{}", checkResults.size()); //缁撴灉瀛樺叆mongo diff --git a/ycl-server/src/main/java/com/ycl/task/VideoTask.java b/ycl-server/src/main/java/com/ycl/task/VideoTask.java index 5271dd1..edbee39 100644 --- a/ycl-server/src/main/java/com/ycl/task/VideoTask.java +++ b/ycl-server/src/main/java/com/ycl/task/VideoTask.java @@ -57,7 +57,7 @@ public void siteOnlineTask() { log.info("寮�濮嬭绠楃偣浣嶅湪绾跨巼"); - List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Video); + List<TMonitorResult> tMonitorResults = monitorMapper.selectMonitorResult(CheckConstants.Rule_Category_Video,null); CalculationStrategy calculator = IndexCalculationFactory.getCalculator(CalculationStrategyConstants.Video_SiteOnline); calculator.calculate(tMonitorResults); log.info("缁撴潫璁$畻鐐逛綅鍦ㄧ嚎鐜�"); diff --git a/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java b/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java index ab6dbe5..f07f09f 100644 --- a/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java +++ b/ycl-server/src/main/java/com/ycl/thread/OSDCheckThread.java @@ -13,21 +13,21 @@ @Slf4j public class OSDCheckThread implements Callable<OSDResult> { private TMonitor monitor; - @Value("${HK.userName}") public String HKUserName; - @Value("${HK.password}") public String HKPassword; - @Value("${DH.userName}") public String DHUserName; - @Value("${DH.password}") public String DHPassword; - @Value("${YS.userName}") public String YSUserName; - @Value("${YS.password}") public String YSPassword; - public OSDCheckThread(TMonitor monitor) { + public OSDCheckThread(TMonitor monitor, String HKUserName, String HKPassword, String DHUserName, String DHPassword, String YSUserName, String YSPassword) { this.monitor = monitor; + this.HKUserName = HKUserName; + this.HKPassword = HKPassword; + this.DHUserName = DHUserName; + this.DHPassword = DHPassword; + this.YSUserName = YSUserName; + this.YSPassword = YSPassword; } public TMonitor getMonitor() { @@ -38,6 +38,54 @@ this.monitor = monitor; } + public String getHKUserName() { + return HKUserName; + } + + public void setHKUserName(String HKUserName) { + this.HKUserName = HKUserName; + } + + public String getHKPassword() { + return HKPassword; + } + + public void setHKPassword(String HKPassword) { + this.HKPassword = HKPassword; + } + + public String getDHUserName() { + return DHUserName; + } + + public void setDHUserName(String DHUserName) { + this.DHUserName = DHUserName; + } + + public String getDHPassword() { + return DHPassword; + } + + public void setDHPassword(String DHPassword) { + this.DHPassword = DHPassword; + } + + public String getYSUserName() { + return YSUserName; + } + + public void setYSUserName(String YSUserName) { + this.YSUserName = YSUserName; + } + + public String getYSPassword() { + return YSPassword; + } + + public void setYSPassword(String YSPassword) { + this.YSPassword = YSPassword; + } + @Override public OSDResult call() throws Exception { if (DeviceType.HK.getType().equals(monitor.getDeviceType())) { diff --git a/ycl-server/src/main/java/com/ycl/utils/DateUtils.java b/ycl-server/src/main/java/com/ycl/utils/DateUtils.java index b685b27..d1e6846 100644 --- a/ycl-server/src/main/java/com/ycl/utils/DateUtils.java +++ b/ycl-server/src/main/java/com/ycl/utils/DateUtils.java @@ -1,6 +1,7 @@ package com.ycl.utils; import org.apache.commons.lang3.time.DateFormatUtils; +import org.glassfish.jaxb.core.v2.TODO; import javax.annotation.Nullable; import java.lang.management.ManagementFactory; @@ -232,10 +233,13 @@ /** * 鑾峰彇鏌愭湀寮�濮嬫棩鏈� */ + //TODO:鏍¢獙閫昏緫鏄惁姝g‘ public static String getMouthStart(@Nullable Date date) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); - c.add(Calendar.MONTH, 0); + if (date != null) { + c.setTime(date); // 濡傛灉date涓嶄负null锛屽垯璁剧疆Calendar鐨勬棩鏈熶负date + } c.set(Calendar.DAY_OF_MONTH,1); return df.format(c.getTime()); } @@ -246,6 +250,9 @@ public static String getMouthEnd(@Nullable Date date) { SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd"); Calendar c = Calendar.getInstance(); + if (date != null) { + c.setTime(date); // 濡傛灉date涓嶄负null锛屽垯璁剧疆Calendar鐨勬棩鏈熶负date + } c.set(Calendar.DAY_OF_MONTH, c.getActualMaximum(Calendar.DAY_OF_MONTH)); return df.format(c.getTime()); } diff --git a/ycl-server/src/main/resources/application-dev.yml b/ycl-server/src/main/resources/application-dev.yml index 394ae16..c1636bd 100644 --- a/ycl-server/src/main/resources/application-dev.yml +++ b/ycl-server/src/main/resources/application-dev.yml @@ -37,9 +37,12 @@ spring: # 鏁版嵁婧愰厤缃� datasource: - url: jdbc:mysql://101.35.247.188:3306/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true +# url: jdbc:mysql://101.35.247.188:3306/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true +# username: root +# password: ycl@202466 + url: jdbc:mysql://localhost:3306/zgyw?useUnicode=true&characterEncoding=utf8&autoReconnect=true&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowMultiQueries=true&allowPublicKeyRetrieval=true username: root - password: ycl@202466 + password: 1234 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver @@ -77,12 +80,12 @@ spring.data: redis: # 鍦板潃 - host: 42.193.1.25 -# host: 127.0.0.1 +# host: 42.193.1.25 + host: 127.0.0.1 # 绔彛锛岄粯璁や负6379 port: 6379 - password: ycl2018 -# password: +# password: ycl2018 + password: 123456 # 鏁版嵁搴撶储寮� database: 0 # 瀵嗙爜(濡傛病鏈夊瘑鐮佽娉ㄩ噴鎺�) diff --git a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml index 1474516..fd81b85 100644 --- a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml +++ b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml @@ -99,7 +99,8 @@ <select id="selectTMonitorList" resultType="com.ycl.platform.domain.vo.TMonitorVO"> select m.id, m.serial_number, name, site_type, mac_addr, ip, camera_fun_type, longitude, latitude, camera_capture_area, p.online as onState, civil_code, d.dept_id, d.dept_name, d.area, p.province_tag, - IF(COUNT(w.id) OVER() > 0, '鏄�', '鍚�') AS error, u.unit_name,p.recovery_time,p.reason,p.start_time,p.end_time,w.work_order_no from t_monitor m + IF(COUNT(w.id) OVER() > 0, '鏄�', '鍚�') AS error, u.unit_name,p.recovery_time,p.reason,p.start_time,p.end_time,w.work_order_no + from t_monitor m left join t_yw_point p on m.serial_number = p.serial_number and p.deleted = 0 left join sys_dept d on p.dept_id = d.dept_id and d.del_flag = 0 left join ( @@ -113,6 +114,7 @@ <if test="serialNumber != null and serialNumber != ''">and m.serial_number = #{serialNumber}</if> <if test="name != null and name != ''"> and (name like concat('%', #{name}, '%') + or m.ip like concat('%', #{name}, '%') or m.serial_number like concat('%', #{name}, '%') or u.unit_name like concat('%', #{name}, '%')) </if> @@ -166,13 +168,19 @@ </select> <select id="selectMonitorResult" resultType="com.ycl.platform.domain.result.SYS.TMonitorResult"> - select m.id, m.serial_number as no,d.dept_id,p.province_tag,p.important_tag,p.important_command_image_tag,p.dept_tag,p.online + select m.id, m.serial_number as no,m.name,m.camera_fun_type as monitorType,d.dept_id,p.province_tag,p.important_tag,p.important_command_image_tag,p.dept_tag,p.online from t_monitor m left join t_yw_point p on m.serial_number = p.serial_number left join sys_dept d on p.dept_id = d.dept_id <where> <if test="cameraFunType!=null"> - m.camera_fun_type like concat('%',#{cameraFunType},'%') + and m.camera_fun_type like concat('%',#{cameraFunType},'%') + </if> + <if test="deptIds!=null and deptIds.size>0"> + and p.dept_id in + <foreach collection="deptIds" item="deptId" open="(" close=")" separator=","> + #{deptId} + </foreach> </if> </where> </select> -- Gitblit v1.8.0