From cb415813de667096290d6bd0f924f5b523104117 Mon Sep 17 00:00:00 2001
From: zxl <763096477@qq.com>
Date: 星期一, 10 十一月 2025 17:41:04 +0800
Subject: [PATCH] 报备工单bug修改,定时任务在线问题修改新增导出扣分明细功能
---
ycl-pojo/src/main/java/com/ycl/platform/domain/excel/DailyMonitorDemeritRecordExp.java | 34 ++
ycl-server/src/main/java/com/ycl/platform/service/impl/IMonitorConstructionServiceImpl.java | 2
ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DailyMonitorDemeritRecord.java | 49 +++
ycl-server/src/main/java/com/ycl/platform/controller/MonitorConstructionController.java | 11
ycl-server/src/main/java/com/ycl/platform/service/impl/DailyMonitorDemeritRecordServiceImpl.java | 94 ++++++
ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java | 3
ycl-server/src/main/java/com/ycl/platform/service/IDailyMonitorDemeritRecordService.java | 14 +
ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java | 12
ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java | 2
ycl-server/src/main/java/com/ycl/platform/controller/DemeritRecordController.java | 14
ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml | 20
sql/zgyw0506.sql | 2
ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java | 5
ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java | 72 ++++
ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml | 48 ++
ycl-server/src/main/java/com/ycl/platform/service/IMonitorConstructionService.java | 1
ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml | 2
ycl-server/src/main/java/com/ycl/platform/mapper/TMonitorMapper.java | 2
ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java | 1
ycl-pojo/src/main/java/com/ycl/platform/domain/form/DailyMonitorDemeritRecordForm.java | 16 +
ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java | 179 +++++++-----
ycl-server/src/main/java/com/ycl/platform/service/impl/TMonitorServiceImpl.java | 30 +
ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java | 138 +++++++--
ycl-server/src/main/java/com/ycl/system/mapper/DailyMonitorDemeritRecordMapper.java | 21 +
ycl-server/src/main/java/com/ycl/task/UYTask.java | 44 ++
ycl-common/src/main/java/enumeration/ConstructionTypeEnum.java | 6
26 files changed, 661 insertions(+), 161 deletions(-)
diff --git a/sql/zgyw0506.sql b/sql/zgyw0506.sql
index 458a449..72b62b4 100644
--- a/sql/zgyw0506.sql
+++ b/sql/zgyw0506.sql
@@ -1386,7 +1386,7 @@
INSERT INTO `sys_oper_log` VALUES (133, '鍒犻櫎鑰冩牳妯℃澘', 3, 'com.ycl.platform.controller.CheckTemplateController.remove()', 'DELETE', 1, 'admin', '鐪佸巺', '/check/template/35', '127.0.0.1', '鍐呯綉IP', '{}', '{\"msg\":\"鎿嶄綔鎴愬姛\",\"code\":200}', 0, NULL, '2024-04-30 08:40:38', 151);
INSERT INTO `sys_oper_log` VALUES (134, '淇敼鑰冩牳妯℃澘', 2, 'com.ycl.platform.controller.CheckTemplateController.edit()', 'PUT', 1, 'admin', '鐪佸巺', '/check/template', '127.0.0.1', '鍐呯綉IP', '{\"adjustCoefficient\":\"8.0000\",\"adjustWay\":\"/\",\"createTime\":\"2024-04-19 11:45:15\",\"createUser\":1,\"createUserName\":\"admin\",\"deleted\":\"0\",\"deptId\":[101,102,201,202,203,210,211],\"description\":\"澶╃綉鑰冩牳姣忔湀搴曟渶鍚庡洓涓伐浣滄棩杩涜鏁存敼锛屽墠涓ゅ伐浣滄棩杩涜鐐逛綅鏇存柊锛屽悗涓ゅぉ杩涜璧勪骇搴撴洿鏂帮紝浠�1鍙峰紑濮嬭�冩牳銆俓\n杞﹁締杩愯鐜囷細锛堣鍥惧簱瀵规帴绋冲畾鎬�1+鐐逛綅鍦ㄧ嚎鐜嚸�1+鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼脳0.5+杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜嚸�0.5+杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�1+杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�1+杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�1+杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�1+杞﹁締鍗″彛璁惧url鍙敤鎬�0.5+杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�0.5锛�/8\",\"examineCategory\":2,\"examineTag\":1,\"frequency\":0,\"id\":29,\"pageNum\":1,\"pageSize\":10,\"status\":\"1\",\"templateName\":\"杞﹁締鑰冩牳妯℃澘\",\"updateTime\":\"2024-04-19 15:06:21\",\"updateUser\":1,\"updateUserName\":\"admin\"}', '{\"msg\":\"鎿嶄綔鎴愬姛\",\"code\":200}', 0, NULL, '2024-04-30 08:41:49', 433);
INSERT INTO `sys_oper_log` VALUES (135, '淇敼鑰冩牳妯℃澘', 2, 'com.ycl.platform.controller.CheckTemplateController.edit()', 'PUT', 1, 'admin', '鐪佸巺', '/check/template', '127.0.0.1', '鍐呯綉IP', '{\"adjustCoefficient\":\"8.0000\",\"adjustWay\":\"/\",\"createTime\":\"2024-04-19 11:45:15\",\"createUser\":1,\"createUserName\":\"admin\",\"deleted\":\"0\",\"deptId\":[101,102,201,202,203,210,211],\"description\":\"澶╃綉鑰冩牳姣忔湀搴曟渶鍚庡洓涓伐浣滄棩杩涜鏁存敼锛屽墠涓ゅ伐浣滄棩杩涜鐐逛綅鏇存柊锛屽悗涓ゅぉ杩涜璧勪骇搴撴洿鏂帮紝浠�1鍙峰紑濮嬭�冩牳銆俓\n杞﹁締杩愯鐜囷細锛堣鍥惧簱瀵规帴绋冲畾鎬�1+鐐逛綅鍦ㄧ嚎鐜嚸�1+鑱旂綉鍗″彛璁惧鐩綍涓�鑷寸巼脳0.5+杞﹁締鍗″彛淇℃伅閲囬泦鍑嗙‘鐜嚸�0.5+杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁瀹屾暣鎬�1+杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁鍑嗙‘鎬�1+杞﹁締鍗″彛璁惧鏃堕挓鍑嗙‘鎬�1+杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁涓婁紶鍙婃椂鎬�1+杞﹁締鍗″彛璁惧url鍙敤鎬�0.5+杞﹁締鍗″彛璁惧鎶撴媿鏁版嵁澶у浘鍙敤鎬�0.5锛�/8\",\"examineCategory\":2,\"examineTag\":1,\"frequency\":0,\"id\":29,\"pageNum\":1,\"pageSize\":10,\"status\":\"0\",\"templateName\":\"杞﹁締鑰冩牳妯℃澘\",\"updateTime\":\"2024-04-30 16:41:49\",\"updateUser\":1,\"updateUserName\":\"admin\"}', '{\"msg\":\"鎿嶄綔鎴愬姛\",\"code\":200}', 0, NULL, '2024-04-30 08:41:52', 348);
-INSERT INTO `sys_oper_log` VALUES (136, '淇敼鑰冩牳妯℃澘', 2, 'com.ycl.platform.controller.CheckTemplateController.edit()', 'PUT', 1, 'admin', '鐪佸巺', '/check/template', '127.0.0.1', '鍐呯綉IP', '{\"adjustCoefficient\":\"8.5000\",\"adjustWay\":\"/\",\"alarmScore\":\"5.0000\",\"createTime\":\"2024-04-22 11:06:43\",\"createUser\":1,\"createUserName\":\"admin\",\"deleted\":\"0\",\"deptId\":[101,102,201,202,203,210,211],\"description\":\"澶╃綉鑰冩牳姣忔湀搴曟渶鍚庡洓涓伐浣滄棩杩涜鏁存敼锛屽墠涓や釜宸ヤ綔鏃ヨ繘琛岀偣浣嶆洿鏂帮紝鍚庝袱涓伐浣滄棩杩涜璧勪骇搴撴洿鏂帮紝浠�1鍙峰紑濮嬭�冩牳銆俓\n姣忔湀杩愯鐜�=锛堝钩鍙板湪绾跨巼脳0.5+涓�鏈轰竴妗e悎鏍肩巼脳0.5+涓�鏈轰竴妗f敞鍐岀巼脳0.5+妗f鑰冩牳姣斆�0.5+鐐逛綅鍦ㄧ嚎鐜嚸�1+褰曞儚鍙敤鐜嚸�1+鏍囨敞姝g‘鐜嚸�0.5+鏍℃椂姝g‘鐜嚸�0.5+閲嶇偣鐐逛綅鍦ㄧ嚎鐜嚸�0.5+閲嶇偣鐐逛綅褰曞儚鍙敤鐜嚸�0.5+閲嶇偣鐐逛綅鏍囨敞姝g‘鐜嚸�0.5+閲嶇偣鐐逛綅鏍℃椂姝g‘鐜嚸�0.5+閲嶇偣鎸囨尌鍥惧儚鍦ㄧ嚎鐜嚸�1+瑙嗛鍥惧儚璧勬簮瀹夊叏绠$悊脳0.5锛�/8.5\",\"examineCategory\":1,\"examineTag\":1,\"frequency\":0,\"id\":31,\"pageNum\":1,\"pageSize\":10,\"ruleFormList\":[{\"ruleId\":1,\"weight\":1},{\"ruleId\":2,\"weight\":0.5},{\"ruleId\":3,\"weight\":0.5},{\"ruleId\":4,\"weight\":0.5},{\"ruleId\":5,\"weight\":0.5},{\"ruleId\":6,\"weight\":1},{\"ruleId\":7,\"weight\":0.5},{\"ruleId\":8,\"weight\":0.5},{\"ruleId\":9,\"weight\":0.5},{\"ruleId\":10,\"weight\":0.5},{\"ruleId\":11,\"weight\":0.5},{\"ruleId\":12,\"weight\":0.5},{\"ruleId\":13,\"weight\":1}],\"status\":\"0\",\"templateName\":\"瑙嗛鑰冩牳妯℃澘\",\"updateTime\":\"2024-04-30 14:10:52\",\"updateUser\":1,\"updateUserName\":\"admin\"}', '{\"msg\":\"鎿嶄綔鎴愬姛\",\"code\":200}', 0, NULL, '2024-04-30 09:00:49', 1289);
+INSERT INTO `sys_oper_log` VALUES (136, '淇敼鑰冩牳妯℃澘', 2, 'com.ycl.platform.controller.CheckTemplateController.edit()', 'PUT', 1, 'admin', '鐪佸巺', '/check/template', '127.0.0.1', '鍐呯綉IP', '{\"adjustCoefficient\":\"8.5000\",\"adjustWay\":\"/\",\"alarmScore\":\"5.0000\",\"createTime\":\"2024-04-22 11:06:43\",\"createUser\":1,\"createUserName\":\"admin\",\"deleted\":\"0\",\"deptId\":[101,102,201,202,203,210,211],\"description\":\"澶╃綉鑰冩牳姣忔湀搴曟渶鍚庡洓涓伐浣滄棩杩涜鏁存敼锛屽墠涓や釜宸ヤ綔鏃ヨ繘琛岀偣浣嶆洿鏂帮紝鍚庝袱涓伐浣滄棩杩涜璧勪骇搴撴洿鏂帮紝浠�1鍙峰紑濮嬭�冩牳銆俓\n=锛堝钩鍙板湪绾跨巼脳0.5+涓�鏈轰竴妗e悎鏍肩巼脳0.5+涓�鏈轰竴妗f敞鍐岀巼脳0.5+妗f鑰冩牳姣斆�0.5+鐐逛綅鍦ㄧ嚎鐜嚸�1+褰曞儚鍙敤鐜嚸�1+鏍囨敞姝g‘鐜嚸�0.5+鏍℃椂姝g‘鐜嚸�0.5+閲嶇偣鐐逛綅鍦ㄧ嚎鐜嚸�0.5+閲嶇偣鐐逛綅褰曞儚鍙敤鐜嚸�0.5+閲嶇偣鐐逛綅鏍囨敞姝g‘鐜嚸�0.5+閲嶇偣鐐逛綅鏍℃椂姝g‘鐜嚸�0.5+閲嶇偣鎸囨尌鍥惧儚鍦ㄧ嚎鐜嚸�1+瑙嗛鍥惧儚璧勬簮瀹夊叏绠$悊脳0.5锛�/8.5\",\"examineCategory\":1,\"examineTag\":1,\"frequency\":0,\"id\":31,\"pageNum\":1,\"pageSize\":10,\"ruleFormList\":[{\"ruleId\":1,\"weight\":1},{\"ruleId\":2,\"weight\":0.5},{\"ruleId\":3,\"weight\":0.5},{\"ruleId\":4,\"weight\":0.5},{\"ruleId\":5,\"weight\":0.5},{\"ruleId\":6,\"weight\":1},{\"ruleId\":7,\"weight\":0.5},{\"ruleId\":8,\"weight\":0.5},{\"ruleId\":9,\"weight\":0.5},{\"ruleId\":10,\"weight\":0.5},{\"ruleId\":11,\"weight\":0.5},{\"ruleId\":12,\"weight\":0.5},{\"ruleId\":13,\"weight\":1}],\"status\":\"0\",\"templateName\":\"瑙嗛鑰冩牳妯℃澘\",\"updateTime\":\"2024-04-30 14:10:52\",\"updateUser\":1,\"updateUserName\":\"admin\"}', '{\"msg\":\"鎿嶄綔鎴愬姛\",\"code\":200}', 0, NULL, '2024-04-30 09:00:49', 1289);
-- ----------------------------
-- Table structure for sys_post
diff --git a/ycl-common/src/main/java/enumeration/ConstructionTypeEnum.java b/ycl-common/src/main/java/enumeration/ConstructionTypeEnum.java
index 05d1db6..8cbd430 100644
--- a/ycl-common/src/main/java/enumeration/ConstructionTypeEnum.java
+++ b/ycl-common/src/main/java/enumeration/ConstructionTypeEnum.java
@@ -23,4 +23,10 @@
ConstructionTypeEnum(String desc) {
this.desc = desc;
}
+
+ public static ConstructionTypeEnum getEnumByName(String enumName) {
+ // 浣跨敤Enum鐨剉alueOf鏂规硶鏍规嵁鍚嶇О鑾峰彇鏋氫妇瀹炰緥
+ return ConstructionTypeEnum.valueOf(enumName);
+ }
+
}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DailyMonitorDemeritRecord.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DailyMonitorDemeritRecord.java
new file mode 100644
index 0000000..16f2faa
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/entity/DailyMonitorDemeritRecord.java
@@ -0,0 +1,49 @@
+package com.ycl.platform.domain.entity;
+
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ycl.platform.base.AbsEntity;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * zgyw
+ * 璁惧姣忔棩鎵e垎璁板綍瀹炰綋
+ * @author : zxl
+ * @date : 2025-11-04 15:13
+ **/
+@Data
+@TableName("t_daily_monitor_demerit_record")
+public class DailyMonitorDemeritRecord extends AbsEntity {
+
+ //璁惧缂栧彿
+ @TableField("serial_number")
+ private String serialNumber;
+
+ //鎵i櫎鍒嗘暟
+ @TableField("demerit")
+ private BigDecimal demerit;
+
+ //璁$畻鏃堕棿
+ @TableField("record_time")
+ private Date recordTime;
+
+ //鎶ュ鐘舵��
+ @TableField("is_report")
+ private Boolean isReport;
+
+ @TableField("dept_id")
+ private Integer deptId;
+
+ @TableField("construction_type")
+ private String constructionType;
+
+ @TableField("device_name")
+ private String deviceName;
+
+}
+
+
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/DailyMonitorDemeritRecordExp.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/DailyMonitorDemeritRecordExp.java
new file mode 100644
index 0000000..041d553
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/excel/DailyMonitorDemeritRecordExp.java
@@ -0,0 +1,34 @@
+package com.ycl.platform.domain.excel;
+
+
+import annotation.Excel;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+ * zgyw
+ *
+ * @author : zxl
+ * @date : 2025-11-05 10:31
+ **/
+@Data
+public class DailyMonitorDemeritRecordExp {
+ @Excel(name="鍖哄煙",width = 20)
+ private String dept;
+
+ @Excel(name="璁惧缂栧彿",width = 25)
+ private String serialNumber;
+ @Excel(name="璁惧鍚�",width = 25)
+ private String deviceName;
+
+ @Excel(name="鏄惁鎶ュ",width = 25)
+ private String isReport;
+ @Excel(name="鍒嗗缓绫诲瀷",width = 25)
+ private String constructionType;
+ @Excel(name="鎵e垎",width = 25)
+ private BigDecimal demerit;
+ @Excel(name="鏃ユ湡",width = 25)
+ private String recordTime;
+
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/form/DailyMonitorDemeritRecordForm.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/DailyMonitorDemeritRecordForm.java
new file mode 100644
index 0000000..c401859
--- /dev/null
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/form/DailyMonitorDemeritRecordForm.java
@@ -0,0 +1,16 @@
+package com.ycl.platform.domain.form;
+
+
+import com.ycl.platform.base.AbsForm;
+import lombok.Data;
+
+/**
+ * zgyw
+ *
+ * @author : zxl
+ * @date : 2025-11-04 17:57
+ **/
+@Data
+public class DailyMonitorDemeritRecordForm extends AbsForm {
+
+}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java
index 4f269a2..45c2169 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/query/HomeQuery.java
@@ -47,4 +47,9 @@
*/
private String area;
+ /**
+ * 寤鸿绫诲瀷
+ */
+ private String constructionType;
+
}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java
index 0b06b83..52da179 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/result/UY/RecordMetaDSumResult.java
@@ -112,4 +112,6 @@
}
return recordStatusText;
}
+
+ private String constructionType;
}
diff --git a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java
index a6c498e..3c6fb07 100644
--- a/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java
+++ b/ycl-pojo/src/main/java/com/ycl/platform/domain/vo/WorkOrderVO.java
@@ -139,6 +139,7 @@
private List<Date> auditTimeList;
private Date auditTime;
+ private Boolean hasReport;
public static WorkOrderVO getVoByEntity(@NonNull WorkOrder entity, WorkOrderVO vo) {
if(vo == null) {
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/DemeritRecordController.java b/ycl-server/src/main/java/com/ycl/platform/controller/DemeritRecordController.java
index 7066b70..46c1fd4 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/DemeritRecordController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/DemeritRecordController.java
@@ -2,12 +2,14 @@
import com.ycl.platform.domain.query.DemeritRecordQuery;
+import com.ycl.platform.service.IDailyMonitorDemeritRecordService;
import com.ycl.platform.service.IDemeritRecordService;
import com.ycl.system.Result;
+import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+
+import java.io.IOException;
/**
* zgyw
@@ -22,9 +24,13 @@
public class DemeritRecordController {
public final IDemeritRecordService demeritRecordService;
+ private final IDailyMonitorDemeritRecordService dailyMonitorDemeritRecordService;
@GetMapping("/getPage")
public Result getPage(DemeritRecordQuery query){
return demeritRecordService.getDemeritRecordPage(query);
}
-
+ @PostMapping("/exportInfo/{id}")
+ public void exportInfo(HttpServletResponse httpServletResponse, @PathVariable("id")Integer id) throws IOException {
+ dailyMonitorDemeritRecordService.getExportInfo(httpServletResponse,id);
+ }
}
diff --git a/ycl-server/src/main/java/com/ycl/platform/controller/MonitorConstructionController.java b/ycl-server/src/main/java/com/ycl/platform/controller/MonitorConstructionController.java
index 47ce7e3..6a62fc1 100644
--- a/ycl-server/src/main/java/com/ycl/platform/controller/MonitorConstructionController.java
+++ b/ycl-server/src/main/java/com/ycl/platform/controller/MonitorConstructionController.java
@@ -1,15 +1,16 @@
package com.ycl.platform.controller;
+import com.ycl.platform.domain.form.DailyMonitorDemeritRecordForm;
+import com.ycl.platform.service.IDailyMonitorDemeritRecordService;
import com.ycl.platform.service.IMonitorConstructionService;
import com.ycl.system.Result;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
/**
* zgyw
@@ -32,4 +33,6 @@
public void importTemplate(HttpServletResponse httpServletResponse) {
monitorConstructionService.getImportTemplate(httpServletResponse);
}
+
+
}
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 d4241bd..b59236e 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
@@ -188,6 +188,8 @@
void batchUpdateOnline(@Param("ipList")List<String> ipList,@Param("date") Date date,@Param("online")Integer online);
+ void batchUpdatePingOnline(@Param("ipList")List<String> ipList,@Param("date") Date date,@Param("online")Integer online);
+
List<TMonitor> selectCarOrFace();
List<TMonitorExp> exportTMonitorList(TMonitorVO tMonitor);
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/IDailyMonitorDemeritRecordService.java b/ycl-server/src/main/java/com/ycl/platform/service/IDailyMonitorDemeritRecordService.java
new file mode 100644
index 0000000..c6c23f5
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/platform/service/IDailyMonitorDemeritRecordService.java
@@ -0,0 +1,14 @@
+package com.ycl.platform.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ycl.platform.domain.entity.DailyMonitorDemeritRecord;
+import com.ycl.platform.domain.form.DailyMonitorDemeritRecordForm;
+import io.swagger.models.auth.In;
+import jakarta.servlet.http.HttpServletResponse;
+
+import java.io.IOException;
+
+public interface IDailyMonitorDemeritRecordService extends IService<DailyMonitorDemeritRecord> {
+
+ void getExportInfo(HttpServletResponse httpServletResponse, Integer id) throws IOException;
+}
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/IMonitorConstructionService.java b/ycl-server/src/main/java/com/ycl/platform/service/IMonitorConstructionService.java
index 640a0ab..7685901 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/IMonitorConstructionService.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/IMonitorConstructionService.java
@@ -26,4 +26,5 @@
void getImportTemplate(HttpServletResponse httpServletResponse);
List<MonitorConstruction> getSerialNumberListByConstructionType(String constructionType);
+
}
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DailyMonitorDemeritRecordServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DailyMonitorDemeritRecordServiceImpl.java
new file mode 100644
index 0000000..c3e93de
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DailyMonitorDemeritRecordServiceImpl.java
@@ -0,0 +1,94 @@
+package com.ycl.platform.service.impl;
+
+
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ycl.platform.domain.entity.DailyMonitorDemeritRecord;
+
+import com.ycl.platform.domain.entity.DemeritRecord;
+import com.ycl.platform.domain.entity.MonitorConstruction;
+import com.ycl.platform.domain.excel.DailyMonitorDemeritRecordExp;
+import com.ycl.platform.service.IDailyMonitorDemeritRecordService;
+import com.ycl.platform.service.IDemeritRecordService;
+import com.ycl.platform.service.IMonitorConstructionService;
+import com.ycl.system.mapper.DailyMonitorDemeritRecordMapper;
+import com.ycl.utils.DateUtils;
+import enumeration.ConstructionTypeEnum;
+import enumeration.general.AreaDeptEnum;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import pojo.ExcelExp;
+import utils.poi.ExcelUtilManySheet;
+
+import java.io.IOException;
+import java.time.LocalDateTime;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
+import java.util.*;
+
+/**
+ * zgyw
+ *
+ * @author : zxl
+ * @date : 2025-11-04 17:47
+ **/
+@Service
+@RequiredArgsConstructor
+public class DailyMonitorDemeritRecordServiceImpl extends ServiceImpl<DailyMonitorDemeritRecordMapper,DailyMonitorDemeritRecord>
+ implements IDailyMonitorDemeritRecordService {
+ private final DailyMonitorDemeritRecordMapper dailyMonitorDemeritRecordMapper;
+ private final IDemeritRecordService demeritRecordService;
+
+ @Override
+ public void getExportInfo(HttpServletResponse httpServletResponse, Integer id) throws IOException {
+ DemeritRecord demeritRecord = demeritRecordService.getBaseMapper().selectById(id);
+
+ if (demeritRecord != null) {
+
+ //鑾峰緱璇︽儏
+ Date recordTime = demeritRecord.getRecordTime();
+ LocalDateTime dateTime = LocalDateTime.ofInstant(recordTime.toInstant(), ZoneId.systemDefault());
+ DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+ String formatted = dateTime.format(formatter);
+
+ Integer deptId = demeritRecord.getDeptId();
+ ConstructionTypeEnum constructionTypeEnum = ConstructionTypeEnum.getEnumByName(demeritRecord.getConstructionType());
+
+ List<DailyMonitorDemeritRecord> list = new LambdaQueryChainWrapper<>(baseMapper)
+ .ge(DailyMonitorDemeritRecord::getRecordTime, DateUtils.getDayStart(recordTime))
+ .le(DailyMonitorDemeritRecord::getRecordTime, DateUtils.getDayEnd(recordTime))
+ .eq(DailyMonitorDemeritRecord::getDeptId, deptId)
+ .eq(DailyMonitorDemeritRecord::getConstructionType,constructionTypeEnum.getDesc())
+ .eq(DailyMonitorDemeritRecord::getDeleted, false)
+ .list();
+ AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromDept(deptId);
+ List<DailyMonitorDemeritRecordExp> exps = new ArrayList<>();
+ List<ExcelExp> mySheet = new ArrayList<>();
+ for (DailyMonitorDemeritRecord dm : list) {
+ DailyMonitorDemeritRecordExp dailyMonitorDemeritRecordExp = new DailyMonitorDemeritRecordExp();
+ dailyMonitorDemeritRecordExp.setSerialNumber(dm.getSerialNumber());
+ dailyMonitorDemeritRecordExp.setConstructionType(constructionTypeEnum.getDesc());
+
+ if (areaDeptEnum != null) {
+ dailyMonitorDemeritRecordExp.setDept(areaDeptEnum.getName());
+ }else{
+ dailyMonitorDemeritRecordExp.setDept("鏈煡鍖哄煙");
+ }
+
+ dailyMonitorDemeritRecordExp.setDemerit(dm.getDemerit());
+ dailyMonitorDemeritRecordExp.setIsReport(dm.getIsReport() ? "宸叉姤澶�" :"鏈姤澶�");
+ dailyMonitorDemeritRecordExp.setRecordTime(formatted);
+ dailyMonitorDemeritRecordExp.setDeviceName(dm.getDeviceName());
+ exps.add(dailyMonitorDemeritRecordExp);
+ }
+ ExcelExp excelExp = new ExcelExp(areaDeptEnum == null ? "鏈煡" : areaDeptEnum.getName(),exps,DailyMonitorDemeritRecordExp.class);
+ mySheet.add(excelExp);
+ ExcelUtilManySheet<List<ExcelExp>> util = new ExcelUtilManySheet<>(mySheet);
+ util.exportExcelManySheet(httpServletResponse, mySheet);
+ }
+
+
+
+ }
+}
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
index ff6e689..44192d5 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/DataCenterServiceImpl.java
@@ -1723,6 +1723,7 @@
*/
@Override
public Result videoOneMachineDocumentQualified(DataCenterQuery params) {
+ long startTime = System.currentTimeMillis();
List<String> likeFileds = Arrays.asList("ip.showValue", "name.showValue", "serialNumber.showValue");
SysDept sysDept = getSysDeptByLoginUser();
List<Criteria> andCriteria;
@@ -1781,99 +1782,131 @@
long total = mongoTemplate.count(query, MonitorQualifyResult.class);
MongoUtil.setPage(query, params, TIME_FIELD);
List<MonitorQualifyResult> resultList = mongoTemplate.find(query, MonitorQualifyResult.class);
+
List<MonitorQualifyResultVO> resultVOS = new ArrayList<>();
for (MonitorQualifyResult result : resultList) {
MonitorQualifyResultVO vo = MonitorQualifyResult.getVO(result);
resultVOS.add(vo);
}
- // 缁熻鏁伴噺
+ long endTime = System.currentTimeMillis();
+ // 缁熻鏁伴噺锛堟敼閫犲悗锛氫竴娆¤仛鍚堣繑鍥炴墍鏈夌粨鏋滐級
+ long startTime2 = System.currentTimeMillis();
MongoDatabase database = mongoTemplate.getDb();
MongoCollection<Document> collection = database.getCollection("uy_monitor_qualify");
- Document areDocument = null;
+
+// 1. 鏋勫缓鍏叡杩囨护鏉′欢锛坉eviceNo鍓嶇紑 + tag杩囨护锛�
+ List<Document> commonFilters = new ArrayList<>(2);
if (areaDeptEnum != null) {
String areaCodePrefix = areaDeptEnum.getCode();
- areDocument = new Document("deviceNo", new Document("$regex", "^" + areaCodePrefix));
+ commonFilters.add(new Document("deviceNo", new Document("$regex", "^" + areaCodePrefix)));
}
- //鎬绘暟
- List<Document> dList1 = new ArrayList<>(2);
- if (areDocument != null){
- dList1.add(areDocument);
- }
- setTag(params, dList1);
- Document totalFilter = new Document("$and", dList1);
- //list1
+ setTag(params, commonFilters); // 娣诲姞tag杩囨护鏉′欢
+ Document commonFilter = commonFilters.isEmpty() ? new Document() : new Document("$and", commonFilters);
- //鍚堟牸鏁�
- List<Document> dList2 = new ArrayList<>(2);
- if (areDocument != null){
- dList2.add(areDocument);
- }
- dList2.add(new Document("serialNumber.error", Boolean.FALSE));
- dList2.add(new Document("name.error", Boolean.FALSE));
- dList2.add(new Document("civilCode.error", Boolean.FALSE));
- dList2.add(new Document("integrated_device.error", Boolean.FALSE));
- dList2.add(new Document("jkdwlx.error", Boolean.FALSE));
- dList2.add(new Document("latitude.error", Boolean.FALSE));
- dList2.add(new Document("longitude.error", Boolean.FALSE));
- dList2.add(new Document("macdz.error", Boolean.FALSE));
- dList2.add(new Document("name.error", Boolean.FALSE));
- dList2.add(new Document("sbzt.error", Boolean.FALSE));
- dList2.add(new Document("sxjcjqy.error", Boolean.FALSE));
- dList2.add(new Document("sxjgnlx.error", Boolean.FALSE));
- setTag(params, dList2);
- Document qualifyFilter = new Document("$and", dList2);
- //涓嶅悎鏍兼暟
- List<Document> dList3 = new ArrayList<>(2);
- if (areDocument != null){
- dList3.add(areDocument);
- }
- setTag(params, dList3);
- List<Document> errorConditions = new ArrayList<>();
- errorConditions.add(new Document("serialNumber.error", new Document("$eq", Boolean.TRUE)));
- errorConditions.add(new Document("name.error", new Document("$eq", Boolean.TRUE)));
- errorConditions.add(new Document("civilCode.error", new Document("$eq", Boolean.TRUE)));
- errorConditions.add(new Document("integrated_device.error", new Document("$eq", Boolean.TRUE)));
- errorConditions.add(new Document("jkdwlx.error", new Document("$eq", Boolean.TRUE)));
- errorConditions.add(new Document("latitude.error", new Document("$eq", Boolean.TRUE)));
- errorConditions.add(new Document("longitude.error", new Document("$eq", Boolean.TRUE)));
- errorConditions.add(new Document("macdz.error", new Document("$eq", Boolean.TRUE)));
- errorConditions.add(new Document("name.error", new Document("$eq", Boolean.TRUE)));
- errorConditions.add(new Document("sbzt.error", new Document("$eq", Boolean.TRUE)));
- errorConditions.add(new Document("sxjcjqy.error", new Document("$eq", Boolean.TRUE)));
- errorConditions.add(new Document("sxjgnlx.error", new Document("$eq", Boolean.TRUE)));
- Document errorFilter = new Document("$or", errorConditions);
- dList3.add(errorFilter);
- Document unQualifyFilter = new Document("$and", dList3);
+// 2. 鏋勫缓鍚堟牸/涓嶅悎鏍肩殑error鏉′欢锛堝鐢ㄥ師閫昏緫锛屽幓閲峮ame.error锛�
+// 鍚堟牸鏉′欢锛氭墍鏈塭rror涓篺alse
+ List<Document> qualifyErrorConditions = new ArrayList<>();
+ qualifyErrorConditions.add(new Document("serialNumber.error", Boolean.FALSE));
+ qualifyErrorConditions.add(new Document("name.error", Boolean.FALSE));
+ qualifyErrorConditions.add(new Document("civilCode.error", Boolean.FALSE));
+ qualifyErrorConditions.add(new Document("integrated_device.error", Boolean.FALSE));
+ qualifyErrorConditions.add(new Document("jkdwlx.error", Boolean.FALSE));
+ qualifyErrorConditions.add(new Document("latitude.error", Boolean.FALSE));
+ qualifyErrorConditions.add(new Document("longitude.error", Boolean.FALSE));
+ qualifyErrorConditions.add(new Document("macdz.error", Boolean.FALSE));
+ qualifyErrorConditions.add(new Document("sbzt.error", Boolean.FALSE));
+ qualifyErrorConditions.add(new Document("sxjcjqy.error", Boolean.FALSE));
+ qualifyErrorConditions.add(new Document("sxjgnlx.error", Boolean.FALSE));
+ Document qualifyFilter = new Document("$and", qualifyErrorConditions);
- List<Document> lists = Arrays.asList(totalFilter, qualifyFilter, unQualifyFilter);
- List<String> rList = lists.stream().map(filter -> {
- // 鏋勫缓鑱氬悎绠¢亾
- List<Document> pipeline = Arrays.asList(
- new Document("$match", filter),
- // $group 鍘婚噸
- new Document("$group", new Document("_id", "$serialNumber.showValue")),
- new Document("$count", "uniqueDeviceIds")
- );
- // 鎵ц鑱氬悎鏌ヨ骞惰幏鍙栫粨鏋�
- AggregateIterable<Document> result = collection.aggregate(pipeline);
- Integer uniqueDeviceIdCount = 0;
- for (Document doc : result) {
- uniqueDeviceIdCount = doc.getInteger("uniqueDeviceIds");
- break; // 涓嶉渶瑕佺户缁亶鍘嗭紝鍥犱负 $count 鍙細浜х敓涓�涓粨鏋�
- }
- return uniqueDeviceIdCount + "";
- }).collect(Collectors.toList());
+// 涓嶅悎鏍兼潯浠讹細鑷冲皯涓�涓猠rror涓簍rue
+ List<Document> unQualifyErrorConditions = new ArrayList<>();
+ unQualifyErrorConditions.add(new Document("serialNumber.error", Boolean.TRUE));
+ unQualifyErrorConditions.add(new Document("name.error", Boolean.TRUE));
+ unQualifyErrorConditions.add(new Document("civilCode.error", Boolean.TRUE));
+ unQualifyErrorConditions.add(new Document("integrated_device.error", Boolean.TRUE));
+ unQualifyErrorConditions.add(new Document("jkdwlx.error", Boolean.TRUE));
+ unQualifyErrorConditions.add(new Document("latitude.error", Boolean.TRUE));
+ unQualifyErrorConditions.add(new Document("longitude.error", Boolean.TRUE));
+ unQualifyErrorConditions.add(new Document("macdz.error", Boolean.TRUE));
+ unQualifyErrorConditions.add(new Document("sbzt.error", Boolean.TRUE));
+ unQualifyErrorConditions.add(new Document("sxjcjqy.error", Boolean.TRUE));
+ unQualifyErrorConditions.add(new Document("sxjgnlx.error", Boolean.TRUE));
+ Document unQualifyFilter = new Document("$or", unQualifyErrorConditions);
+
+// 3. 鏋勫缓涓�娆¤仛鍚堢閬擄紙鐢�$facet鍚堝苟涓変釜缁熻缁村害锛�
+ List<Document> pipeline = new ArrayList<>();
+
+// 姝ラ1锛氬厛搴旂敤鍏叡杩囨护鏉′欢锛坉eviceNo + tag锛夛紝鍑忓皯鍚庣画澶勭悊鏁版嵁閲�
+ if (!commonFilters.isEmpty()) {
+ pipeline.add(new Document("$match", commonFilter));
+ }
+
+// 姝ラ2锛氱敤$facet鍒嗛潰鏌ヨ锛屽悓鏃惰绠楁�绘暟銆佸悎鏍兼暟銆佷笉鍚堟牸鏁�
+ pipeline.add(new Document("$facet", new Document()
+ // 鎬绘暟锛氭寜serialNumber.showValue鍘婚噸鍚庤鏁�
+ .append("total", Arrays.asList(
+ new Document("$group", new Document("_id", "$serialNumber.showValue")),
+ new Document("$count", "uniqueDeviceIds")
+ ))
+ // 鍚堟牸鏁帮細鍏堣繃婊ゅ悎鏍兼潯浠讹紝鍐嶅幓閲嶈鏁�
+ .append("qualify", Arrays.asList(
+ new Document("$match", qualifyFilter),
+ new Document("$group", new Document("_id", "$serialNumber.showValue")),
+ new Document("$count", "uniqueDeviceIds")
+ ))
+ // 涓嶅悎鏍兼暟锛氬厛杩囨护涓嶅悎鏍兼潯浠讹紝鍐嶅幓閲嶈鏁�
+ .append("unQualify", Arrays.asList(
+ new Document("$match", unQualifyFilter),
+ new Document("$group", new Document("_id", "$serialNumber.showValue")),
+ new Document("$count", "uniqueDeviceIds")
+ ))
+ ));
+// Document explainResult = collection.aggregate(pipeline).explain();
+//
+//// 鎵撳嵃鎵ц璁″垝锛堟棩蹇楁垨鎺у埗鍙拌緭鍑猴級
+// log.info("鑱氬悎鏌ヨ鎵ц璁″垝锛歿}", explainResult.toJson());
+// 4. 鎵ц鑱氬悎鏌ヨ锛堜粎涓�娆℃暟鎹簱浜や簰锛�
+ AggregateIterable<Document> facetResult = collection.aggregate(pipeline).allowDiskUse(true);
+ Document resultDoc = facetResult.iterator().next(); // $facet浠呰繑鍥炰竴涓枃妗�
+
+// 5. 瑙f瀽缁撴灉锛堝鐞嗙┖缁撴灉鍦烘櫙锛岄粯璁よ鏁颁负0锛�
+ int totalCount = parseFacetCount(resultDoc, "total");
+ int qualifyCount = parseFacetCount(resultDoc, "qualify");
+ int unQualifyCount = parseFacetCount(resultDoc, "unQualify");
+
+// 6. 缁勮rList锛堜繚鎸佸師鏍煎紡涓嶅彉锛屽悗缁�昏緫鏃犻渶淇敼锛�
+ List<String> rList = new ArrayList<>(Arrays.asList(
+ String.valueOf(totalCount),
+ String.valueOf(qualifyCount),
+ String.valueOf(unQualifyCount)
+ ));
+// 鍘熷悎鏍肩巼璁$畻閫昏緫涓嶅彉
BigDecimal onlineRate = BigDecimal.ZERO;
- if (!StringUtils.isEmpty(rList.get(0)) && !"0".equals(rList.get(0))) {
- onlineRate = new BigDecimal(rList.get(1)).divide(new BigDecimal(rList.get(0)), 3,RoundingMode.DOWN).multiply(new BigDecimal("100"));
+ if (totalCount != 0) {
+ onlineRate = new BigDecimal(qualifyCount)
+ .divide(new BigDecimal(totalCount), 3, RoundingMode.DOWN)
+ .multiply(new BigDecimal("100"));
}
+ rList.add(this.remove0(onlineRate));
+
+ long endTime2 = System.currentTimeMillis();
+ log.info("缁熻鑰楁椂锛歿} ms", (endTime2 - startTime2));
+
rList.add(this.remove0(onlineRate));
HashMap<String, Object> map = new HashMap<>();
map.put("count", rList);
map.put("list", resultVOS);
return Result.ok().data(map).total(total);
}
-
+ private int parseFacetCount(Document resultDoc, String facetName) {
+ List<Document> facetList = (List<Document>) resultDoc.get(facetName);
+ if (facetList == null || facetList.isEmpty()) {
+ return 0;
+ }
+ Document countDoc = facetList.get(0);
+ return countDoc.getInteger("uniqueDeviceIds", 0);
+ }
/**
* 瑙嗛锛氭。妗堣�冩牳姣�
* 妗f鐣欏瓨鎬婚噺锛歮ongo瀛樼殑鎵�鏈夊幓閲嶅悗鐨勬。妗�
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/IMonitorConstructionServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/IMonitorConstructionServiceImpl.java
index ecf4dcb..db62282 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/IMonitorConstructionServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/IMonitorConstructionServiceImpl.java
@@ -9,6 +9,7 @@
import com.ycl.platform.domain.dto.ReportImportDTO;
import com.ycl.platform.domain.entity.MonitorConstruction;
import com.ycl.platform.mapper.IMonitorConstructionMapper;
+import com.ycl.platform.service.IDailyMonitorDemeritRecordService;
import com.ycl.platform.service.IMonitorConstructionService;
import com.ycl.system.Result;
import com.ycl.utils.StringUtils;
@@ -41,6 +42,7 @@
public class IMonitorConstructionServiceImpl extends ServiceImpl<IMonitorConstructionMapper, MonitorConstruction>
implements IMonitorConstructionService {
private final IMonitorConstructionMapper monitorConstructionMapper;
+ private final IDailyMonitorDemeritRecordService dailyMonitorDemeritRecordService;
@Override
@Transactional(rollbackFor = Exception.class)
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java
index 0cd1b19..c3eff9b 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/ReportServiceImpl.java
@@ -1,5 +1,6 @@
package com.ycl.platform.service.impl;
+import com.alibaba.fastjson2.JSON;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
@@ -33,6 +34,7 @@
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -50,6 +52,7 @@
*/
@Service
@RequiredArgsConstructor
+@Slf4j
public class ReportServiceImpl extends ServiceImpl<ReportMapper, Report> implements ReportService {
private final YwUnitMapper unitMapper;
@@ -266,9 +269,15 @@
if (query.getEffectTimeEnd() != null) {
query.setEffectTimeEnd(DateUtils.getDayEnd(query.getEffectTimeEnd()));
}
-
+ long dbStartTime = System.currentTimeMillis();
baseMapper.page(page, query);
+ long dbCostTime = System.currentTimeMillis() - dbStartTime;
+ // 5. 鎵撳嵃鑰楁椂鏃ュ織锛堝惈璇锋眰鍙傛暟锛屾柟渚垮悗缁帓鏌ユ參鏌ヨ锛�
+ log.info("鎶ヨ〃鏁版嵁搴撴煡璇㈣�楁椂锛歿}ms锛屾煡璇㈠弬鏁帮細{}", dbCostTime, JSON.toJSONString(query));
+
+ long dictStartTime = System.currentTimeMillis();
List<SysDictData> errorTypeList = dictTypeService.selectDictDataByType("report_error_type");
+ long dictEndTime = System.currentTimeMillis() - dictStartTime;
Map<String, String> dictMap = errorTypeList.stream().collect(Collectors.toMap(SysDictData::getDictValue, SysDictData::getDictLabel));
page.getRecords().stream().forEach(item -> {
if (StringUtils.hasText(item.getErrorType())) {
@@ -283,6 +292,7 @@
item.setErrorType(sb.substring(0, sb.length() - 1));
}
});
+ log.info("缁勮淇℃伅鑰楁椂锛歿}ms", dictEndTime);
return Result.ok().data(page).total(page.getTotal());
}
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 d837e1a..d5a28ce 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
@@ -28,10 +28,7 @@
import com.ycl.platform.domain.vo.home.HomeVideoVO;
import com.ycl.platform.domain.vo.screen.MonitorRateVO;
import com.ycl.platform.domain.vo.screen.MonitorTotalVO;
-import com.ycl.platform.mapper.DynamicColumnMapper;
-import com.ycl.platform.mapper.TMonitorMapper;
-import com.ycl.platform.mapper.WorkOrderMapper;
-import com.ycl.platform.mapper.YwPointMapper;
+import com.ycl.platform.mapper.*;
import com.ycl.platform.service.IMonitorConstructionService;
import com.ycl.platform.service.ITMonitorService;
import com.ycl.system.Result;
@@ -1366,18 +1363,38 @@
calendar.set(Calendar.DAY_OF_MONTH, 1);
// 鑾峰彇鏈堜唤绗竴澶╃殑Date
Date startDate = calendar.getTime();
+ log.info("棣栭〉鏌ヨ寮�濮嬫棩鏈�:{}",startDate);
// 璁剧疆Calendar涓烘湀浠界殑鏈�鍚庝竴澶╋紙閫氳繃澧炲姞涓�涓湀浠界劧鍚庡噺鍘讳竴澶╋級
calendar.add(Calendar.MONTH, 1);
calendar.add(Calendar.DAY_OF_MONTH, -1);
// 鑾峰彇鏈堜唤鏈�鍚庝竴澶╃殑Date
Date endDate = calendar.getTime();
-
+ log.info("棣栭〉鏌ヨ缁撴潫鏃ユ湡:{}",endDate);
+ String constructionType = monitorQuery.getConstructionType();
+ List<String> deviceNoList = new ArrayList<>();
+ if (StringUtils.isNotBlank(constructionType)){
+ List<MonitorConstruction> serialNumberListByConstructionType = monitorConstructionService.getSerialNumberListByConstructionType(constructionType);
+ if (!CollectionUtils.isEmpty(serialNumberListByConstructionType)){
+ deviceNoList = serialNumberListByConstructionType.stream().map(MonitorConstruction::getSerialNumber).collect(Collectors.toList());
+ }
+ }
+ if (StringUtils.isNotBlank(constructionType) && deviceNoList.isEmpty()) {
+ // 褰揷onstructionType鏈夊�间絾鏃犲搴旇澶囨椂锛岃繑鍥炲寘鍚┖鍒楄〃鐨凪ap
+ Map<String, Object> emptyResult = new HashMap<>();
+ emptyResult.put("list", results); // results姝ゆ椂涓虹┖鍒楄〃
+ emptyResult.put("baseLine", 0); // 鍙牴鎹笟鍔¢粯璁ゅ熀鍑嗙嚎鍊艰皟鏁�
+ return emptyResult;
+ }
//mongo鏌ュ綍鍍忕姸鎬�
MongoDatabase database = mongoTemplate.getDb();
MongoCollection<Document> collection = database.getCollection("uy_record_meta_d_sum");
Integer examineTag = monitorQuery.getExamineTag();
String arealayerno = monitorQuery.getArea();
Document matchConditions = new Document("statTime", new Document("$gte", startDate).append("$lte", endDate));
+ if (!deviceNoList.isEmpty()) {
+ log.info("鎵撳嵃鍒嗗缓绫诲瀷no闆嗗悎:{}",deviceNoList);
+ matchConditions.append("no", new Document("$in", deviceNoList));
+ }
// 鏍规嵁examineTag鐨勫�煎姩鎬佹坊鍔犻澶栫殑鏉′欢
if (examineTag != null && examineTag.equals(1)) {
matchConditions.append("provinceTag", true);
@@ -1445,6 +1462,9 @@
List<Document> onlineMatch = new ArrayList<>();
onlineMatch.add(new Document("mongoCreateTime", new Document("$gte", startDate).append("$lte", endDate)));
onlineMatch.add(new Document("monitorType", new Document("$regex", "1")));
+ if (!deviceNoList.isEmpty()) {
+ onlineMatch.add(new Document("no", new Document("$in", deviceNoList)));
+ }
if (examineTag != null && examineTag.equals(1)) {
onlineMatch.add(new Document("provinceTag", true));
} else if (examineTag != null && examineTag.equals(2)) {
diff --git a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
index 99411d5..b076099 100644
--- a/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
+++ b/ycl-server/src/main/java/com/ycl/platform/service/impl/WorkOrderServiceImpl.java
@@ -874,6 +874,43 @@
}
});
}
+ //鍔犱笂鎶ュ淇℃伅
+ if (!CollectionUtils.isEmpty(page.getRecords())) {
+ List<String> serialNumberList = page.getRecords().stream()
+ .map(WorkOrderVO::getSerialNumber).collect(Collectors.toList());
+ List<Report> reports = new LambdaQueryChainWrapper<>(reportMapper)
+ .in(Report::getSerialNumber, serialNumberList)
+ .eq(Report::getStatus,1)
+ .eq(Report::getDeleted,Boolean.FALSE).list();
+ Map<String, List<Report>> reportMap = reports.stream()
+ .collect(Collectors.groupingBy(Report::getSerialNumber));
+
+ for (WorkOrderVO workOrder : page.getRecords()) {
+ workOrder.setHasReport(false);
+ List<Report> reportsByWorkOrder = reportMap.get(workOrder.getSerialNumber());
+ if (CollectionUtils.isEmpty(reportsByWorkOrder)) {
+ continue; // 鏃犳姤鍛婏紝鐩存帴璺宠繃
+ }
+ Date distributeTime = workOrder.getDistributeTime();
+ for (Report report : reportsByWorkOrder) {
+ Date beginTime = report.getBeginCreateTime();
+ Date endTime = report.getEndCreateTime();
+ // 绌烘寚閽堥槻鎶�
+ if (distributeTime == null || beginTime == null || endTime == null) {
+ continue;
+ }
+ // 鏃堕棿鍖洪棿鍒ゆ柇锛歞istributeTime 鍦� [beginTime, endTime] 鍐�
+ boolean isInRange = distributeTime.compareTo(beginTime) >= 0
+ && distributeTime.compareTo(endTime) <= 0;
+ if (isInRange) {
+ workOrder.setHasReport(true);
+ break; // 鎵惧埌涓�涓嵆閫�鍑哄惊鐜�
+ }
+ }
+ }
+ }
+
+
return Result.ok().data(page.getRecords()).total(page.getTotal());
}
@@ -1088,8 +1125,10 @@
@Override
public WorkOrderTotalVO workOrderTotal(DashboardQuery dashboardQuery) {
+ //todo澶у睆宸ュ崟鏈鐞嗗伐鍗曟暟閲忔湁鐐归棶棰�
return baseMapper.workOrderTotal(dashboardQuery);
}
+
@Override
public List<WorkOrderRegionVO> workOrderRegion(DashboardQuery dashboardQuery) {
@@ -1303,23 +1342,30 @@
}
// 鏄惁鎶ュ
- Date target = workOrder.getCreateTime();
- Report reports = new LambdaQueryChainWrapper<>(reportMapper)
- .eq(Report::getSerialNumber,workOrder.getWorkOrderNo())
+ List<Report> reports = new LambdaQueryChainWrapper<>(reportMapper)
+ .eq(Report::getSerialNumber,workOrder.getSerialNumber())
.eq(Report::getStatus,1)
.orderByDesc(Report::getCreateTime)
- .last("LIMIT 1")
- .one();
- boolean isInRange = false;
- if (reports != null){
- Date start = reports.getBeginCreateTime();
- Date end = reports.getEndCreateTime();
- isInRange = target.after(start) || target.equals(start) // target >= start
- && target.before(end) || target.equals(end);
+ .list();
+ log.info("鎶ュ璁板綍:{}",reports);
+ Date distributeTime = workOrder.getDistributeTime();
+ workOrder.setHasReport(false);
+ for (Report report : reports) {
+ Date beginTime = report.getBeginCreateTime();
+ Date endTime = report.getEndCreateTime();
+ // 绌烘寚閽堥槻鎶�
+ if (distributeTime == null || beginTime == null || endTime == null) {
+ continue;
+ }
+ // 鏃堕棿鍖洪棿鍒ゆ柇锛歞istributeTime 鍦� [beginTime, endTime] 鍐�
+ boolean isInRange = distributeTime.compareTo(beginTime) >= 0
+ && distributeTime.compareTo(endTime) <= 0;
+ if (isInRange) {
+ workOrder.setHasReport(true);
+ break; // 鎵惧埌涓�涓嵆閫�鍑哄惊鐜�
+ }
}
-
- workOrder.setHasReport(isInRange);
// 鏁呴殰绫诲瀷
List<SysDictData> errorList = workOrderErrorTypeService.getBaseMapper().getErrorList(workOrder.getWorkOrderNo());
List<String> errList = errorList.stream().map(SysDictData::getDictLabel).collect(Collectors.toList());
diff --git a/ycl-server/src/main/java/com/ycl/system/mapper/DailyMonitorDemeritRecordMapper.java b/ycl-server/src/main/java/com/ycl/system/mapper/DailyMonitorDemeritRecordMapper.java
new file mode 100644
index 0000000..2fb8ddf
--- /dev/null
+++ b/ycl-server/src/main/java/com/ycl/system/mapper/DailyMonitorDemeritRecordMapper.java
@@ -0,0 +1,21 @@
+package com.ycl.system.mapper;
+
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ycl.platform.domain.entity.DailyMonitorDemeritRecord;
+import com.ycl.platform.domain.form.DailyMonitorDemeritRecordForm;
+import com.ycl.system.Result;
+import jakarta.servlet.http.HttpServletResponse;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * zgyw
+ *
+ * @author : zxl
+ * @date : 2025-11-04 17:48
+ **/
+@Mapper
+public interface DailyMonitorDemeritRecordMapper extends BaseMapper<DailyMonitorDemeritRecord> {
+
+
+}
diff --git a/ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java b/ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java
index cd9d594..25803d6 100644
--- a/ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/DemeritRecordTask.java
@@ -4,6 +4,7 @@
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
import com.google.common.util.concurrent.AtomicDouble;
+import com.ycl.platform.domain.entity.DailyMonitorDemeritRecord;
import com.ycl.platform.domain.entity.DemeritRecord;
import com.ycl.platform.domain.entity.MonitorConstruction;
import com.ycl.platform.domain.entity.Report;
@@ -11,6 +12,7 @@
import com.ycl.platform.mapper.DemeritRecordMapper;
import com.ycl.platform.mapper.IMonitorConstructionMapper;
import com.ycl.platform.mapper.ReportMapper;
+import com.ycl.platform.service.IDailyMonitorDemeritRecordService;
import com.ycl.platform.service.IDemeritRecordService;
import com.ycl.utils.DateUtils;
import enumeration.ConstructionTypeEnum;
@@ -54,6 +56,8 @@
private final IMonitorConstructionMapper monitorConstructionMapper;
+ private final IDailyMonitorDemeritRecordService dailyMonitorDemeritRecordService;
+
private static final ExecutorService executorService = new ThreadPoolExecutor(16,
128,
5000,
@@ -63,6 +67,8 @@
);
private final IDemeritRecordService demeritRecordService;
+ private final IDailyMonitorDemeritRecordService iDailyMonitorDemeritRecordService;
+
private DemeritRecord buildDemeritRecord(String constructionType,BigDecimal demerit,Integer deptId,Date recordTime) {
DemeritRecord record = new DemeritRecord();
record.setConstructionType(constructionType);
@@ -71,7 +77,19 @@
record.setRecordTime(recordTime);
return record;
}
- private BigDecimal calculateTotalDeduction(List<RecordMetaDSumResult> records) {
+ private DailyMonitorDemeritRecord buildDailyMonitorDemeritRecord(Date recordTime,String deviceId,String constructionType,BigDecimal demerit,Integer deptId,Boolean isReport,String deviceName) {
+ DailyMonitorDemeritRecord demeritRecord = new DailyMonitorDemeritRecord();
+ demeritRecord.setRecordTime(recordTime);
+ demeritRecord.setDemerit(demerit);
+ demeritRecord.setConstructionType(constructionType);
+ demeritRecord.setSerialNumber(deviceId);
+ demeritRecord.setIsReport(isReport);
+ demeritRecord.setDeptId(deptId);
+ demeritRecord.setDeviceName(deviceName);
+ return demeritRecord;
+ }
+
+ private BigDecimal calculateTotalDeduction(List<RecordMetaDSumResult> records,Date recordTime,Integer deptId,List<DailyMonitorDemeritRecord> dailyMonitorDemeritRecords) {
BigDecimal total = BigDecimal.ZERO; // 鍗曠嚎绋嬪惊鐜紝鏃犻渶AtomicReference
for (RecordMetaDSumResult record : records) {
@@ -94,6 +112,8 @@
} else {
deduction = BigDecimal.ZERO;
}
+ dailyMonitorDemeritRecords.add(buildDailyMonitorDemeritRecord(recordTime,record.getDeviceId()
+ ,record.getConstructionType(),deduction,deptId,false,record.getDeviceName()));
// 绱姞鎬绘墸鍒嗭紙鏈�鍚庣粺涓�澶勭悊绮惧害锛岄伩鍏嶄腑闂村洓鑸嶄簲鍏ヨ宸級
total = total.add(deduction);
@@ -143,19 +163,34 @@
List<MonitorConstruction> monitorConstructionList = new LambdaQueryChainWrapper<>(monitorConstructionMapper)
.eq(MonitorConstruction::getDeleted, Boolean.FALSE)
.list();
- List<String> serialNumberList = monitorConstructionList.stream()
- .map(MonitorConstruction::getSerialNumber).collect(Collectors.toList());
- //杩囨护鑾峰緱鍖呭惈浜嗚繖浜涙爣绛剧殑璁惧褰曞儚鎯呭喌闆嗗悎
+
+ //鎸夌紪鍙峰垎缁勶紝鍊间负璁惧瀵瑰簲鏍囩
+ Map<String, String> serialTagMap = monitorConstructionList.stream()
+ .filter(mc -> mc.getSerialNumber() != null) // 杩囨护搴忓垪鍙蜂负绌虹殑鏃犳晥鏁版嵁
+ .collect(Collectors.toMap(
+ MonitorConstruction::getSerialNumber,
+ MonitorConstruction::getTag,
+ (oldVal, newVal) -> newVal
+ ));
+ //杩囨护鎺夋病鏈夋爣绛剧殑闆嗗悎 骞跺皢鏍囩璧嬪�肩粰褰曞儚鎯呭喌闆嗗悎
results = results.stream()
.filter(result -> {
String sn = result.getNo();
- // 浠讳竴瀛楁闈炵┖涓斿湪闆嗗悎涓嵆鍙�
- return (sn != null && serialNumberList.contains(sn));
+ // 杩囨护鏉′欢锛氬簭鍒楀彿闈炵┖ + 鍦ㄦ爣绛綧ap涓瓨鍦紙鍗虫湁瀵瑰簲鏍囩锛�
+ boolean isMatch = sn != null && serialTagMap.containsKey(sn);
+ if (isMatch) {
+ // 鍖归厤鎴愬姛锛屽皢鏍囩璧嬪�肩粰result锛堥渶纭繚RecordMetaDSumResult鏈塻etTag()鏂规硶锛�
+ String tag = serialTagMap.get(sn);
+ result.setConstructionType(tag); // 鍏抽敭锛氳祴鍊兼爣绛�
+ }
+ return isMatch; // 鍙繚鐣欐湁鏍囩鐨剅esult
})
.collect(Collectors.toList());
- log.info("鍓╀綑鑰冩牳璁惧杩囨护鍚庤澶囨暟{}",results.size());
+ log.info("鏈夋爣绛剧殑璁惧璁板綍闆嗗悎澶у皬:{}",results.size());//杩欐槸闇�瑕佽绠楁墸鍒嗙殑褰曞儚鏁版嵁
+
+
//杩囨护鎺夋姤澶囩殑璁惧
//鏌ヨ鍦ㄥ綋鍓嶆椂闂存湁鎶ュ鐨勬墍鏈夎澶囷紝
@@ -186,19 +221,14 @@
.map(Report::getSerialNumber).collect(Collectors.toList());
Set<String> deviceIdSet = new HashSet<>(deviceIds);
+
log.info("鎶ュ璁惧鏁皗}",deviceIdSet.size());
- results = results.stream()
- .filter(result -> {
- // 鑾峰彇褰撳墠瀵硅薄鐨刣eviceId
- String resultDeviceId = result.getDeviceId();
- // 杩囨护鏉′欢锛歞eviceId涓嶅湪闆嗗悎涓紙娉ㄦ剰澶勭悊null鍊硷紝閬垮厤NPE锛�
- return resultDeviceId != null && !deviceIdSet.contains(resultDeviceId);
- })
- .collect(Collectors.toList());
-
- log.info("鍓╀綑杩囨护鎶ュ鍚庤澶囨暟{}",results.size());
-
- // 鎸夊尯鍩熷垝鍒� 缁勮鎴恗ap
+ List<DailyMonitorDemeritRecord> dailyMonitorDemeritRecords = new ArrayList<>();
+ Date yesterdayBegin = DateUtils.getDayStart(yesterday);
+ // 閬嶅巻鍖哄垎瀵硅薄鐨勬姤澶囩姸鎬�
+ // 鍥犱负涓嬮潰浼氳繃婊よ鐩栨帀鑰冩牳璁惧锛岄渶瑕佸凡鎶ュ鐨勮澶囧綍鍍忔儏鍐典俊鎭紝
+ // 鎵�浠ユ澶勫簲璇ュ皢宸叉姤澶囩殑璁惧褰曞儚鎯呭喌淇℃伅娣诲姞鍒版瘡鏃ユ墸鍒嗚鎯呰褰曚腑骞跺垵濮嬪寲濂� 鍚庣画涓嶅湪澶勭悊鐩存帴娣诲姞鏁版嵁搴撲腑
+ // 灏嗗尯鍩熶俊鎭� 鏀惧叆闆嗗悎涓�
results.forEach(item -> {
String areaCode = item.getArealayername().substring(0, 6);
AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(areaCode);
@@ -206,9 +236,42 @@
item.setArealayerno(areaDeptEnum.getCode());
}
});
+ results.forEach(result ->{
+ String deviceId = result.getDeviceId();
+ if (StringUtils.isNotBlank(deviceId)) {
+ if (deviceIdSet.contains(deviceId)) {
+ //宸叉姤澶囪澶囪褰�
+ AreaDeptEnum areaDeptEnum = AreaDeptEnum.fromCode(result.getArealayerno());
+ if (areaDeptEnum == null) {
+ log.info("鍖哄煙鏁版嵁寮傚父锛屽紓甯稿尯鍩熼敭鍊硷細{}",result.getArealayerno());
+ return;
+ }
+ DailyMonitorDemeritRecord demeritRecord = buildDailyMonitorDemeritRecord(
+ yesterdayBegin,deviceId,
+ result.getConstructionType(),
+ BigDecimal.ZERO,
+ areaDeptEnum.getDeptId(),
+ true,
+ result.getDeviceName()
+ );
+ dailyMonitorDemeritRecords.add(demeritRecord);
+ }
+ }
+ });
+ // 杩囨护鑾峰緱鏈姤澶囬泦鍚�
+ results = results.stream()
+ .filter(result -> {
+ String resultDeviceId = result.getDeviceId();
+ return resultDeviceId != null && !deviceIdSet.contains(resultDeviceId);
+ })
+ .collect(Collectors.toList());
+
+ log.info("鍓╀綑杩囨护鎶ュ鍚庤澶囨暟{}",results.size());
+
+
//闇�瑕佹坊鍔犳暟鎹簱鐨勬暟鎹泦鍚�
List<DemeritRecord> demeritRecords = new ArrayList<>();
-
+ // 鎸夊尯鍩熷垝鍒� 缁勮鎴恗ap
Map<String,List<RecordMetaDSumResult>> groupByArealayerno = results.stream()
.collect(Collectors.groupingBy(RecordMetaDSumResult::getArealayerno));
@@ -290,17 +353,17 @@
.collect(Collectors.toList());
log.info("娌挎哗浜屾湡浜鸿劯{}", yan_tan_phase_two_face.size());
//涓�浜屾湡
- buildAndAddDemeritRecords(phase_one_two, ConstructionTypeEnum.PHASE_ONE_TWO.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ buildAndAddDemeritRecords(phase_one_two, ConstructionTypeEnum.PHASE_ONE_TWO.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
//涓夋湡
- buildAndAddDemeritRecords(phase_three, ConstructionTypeEnum.PHASE_THREE.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ buildAndAddDemeritRecords(phase_three, ConstructionTypeEnum.PHASE_THREE.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
//鍥涙湡
- buildAndAddDemeritRecords(phase_fourth, ConstructionTypeEnum.PHASE_FOURTH.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ buildAndAddDemeritRecords(phase_fourth, ConstructionTypeEnum.PHASE_FOURTH.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
//鍏ュ窛鍗虫
- buildAndAddDemeritRecords(check_enter_sichuan, ConstructionTypeEnum.CHECK_ENTER_SICHUAN.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ buildAndAddDemeritRecords(check_enter_sichuan, ConstructionTypeEnum.CHECK_ENTER_SICHUAN.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
//涓滈儴鏂板煄
- buildAndAddDemeritRecords(eastern_new_city, ConstructionTypeEnum.EASTERN_NEW_CITY.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ buildAndAddDemeritRecords(eastern_new_city, ConstructionTypeEnum.EASTERN_NEW_CITY.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
//娌挎哗浜屾湡浜鸿劯
- buildAndAddDemeritRecords(yan_tan_phase_two_face, ConstructionTypeEnum.YAN_TAN_PHASE_TWO_FACE.name(), areaDeptEnum.getDeptId(),yesterday,demeritRecords);
+ buildAndAddDemeritRecords(yan_tan_phase_two_face, ConstructionTypeEnum.YAN_TAN_PHASE_TWO_FACE.name(), areaDeptEnum.getDeptId(),yesterdayBegin,demeritRecords,dailyMonitorDemeritRecords);
}
}
@@ -308,32 +371,39 @@
//澶勭悊瀹屾暟鎹彃鍏ユ暟鎹簱涓�
//鍏堝垹闄ら渶瑕佹彃鍏ユ椂闂存槸鍚﹀瓨鍦ㄦ暟鎹�
- LambdaQueryWrapper<DemeritRecord> queryWrapper = new LambdaQueryWrapper<>();
- queryWrapper.ge(DemeritRecord::getCreateTime,DateUtils.getDayStart(today))
+ LambdaQueryWrapper<DemeritRecord> demeritRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ demeritRecordLambdaQueryWrapper.ge(DemeritRecord::getCreateTime,DateUtils.getDayStart(today))
.le(DemeritRecord::getCreateTime,DateUtils.getDayEnd(today));
- demeritRecordService.remove(queryWrapper);
+ demeritRecordService.remove(demeritRecordLambdaQueryWrapper);
demeritRecordService.saveBatch(demeritRecords);
-
log.info("缁撴潫璁$畻姣忔棩鎵e垎璁板綍鎯呭喌锛氭彃鍏ユ暟鎹噺{},鏁版嵁淇℃伅:{}",demeritRecords.size(),demeritRecords);
+ //濉厖璁惧褰曞儚鎯呭喌鎵e垎璇︽儏缁撴灉
+ LambdaQueryWrapper<DailyMonitorDemeritRecord> dailyMonitorDemeritRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+ dailyMonitorDemeritRecordLambdaQueryWrapper.ge(DailyMonitorDemeritRecord::getCreateTime,DateUtils.getDayStart(today))
+ .le(DailyMonitorDemeritRecord::getCreateTime,DateUtils.getDayEnd(today));
+ iDailyMonitorDemeritRecordService.remove(dailyMonitorDemeritRecordLambdaQueryWrapper);
+ iDailyMonitorDemeritRecordService.saveBatch(dailyMonitorDemeritRecords);
+ log.info("缁撴潫璁$畻姣忔棩鎵e垎璁板綍璇︽儏鎯呭喌锛氭彃鍏ユ暟鎹噺{},鏁版嵁淇℃伅:{}",dailyMonitorDemeritRecords.size(),dailyMonitorDemeritRecords);
}
public void buildAndAddDemeritRecords(List<RecordMetaDSumResult> constructionByRecordMetaList,
String constructionType,Integer areaDeptId,Date recordTime,
- List<DemeritRecord> demeritRecords) {
+ List<DemeritRecord> demeritRecords,
+ List<DailyMonitorDemeritRecord> dailyMonitorDemeritRecords) {
if (CollectionUtils.isNotEmpty(constructionByRecordMetaList)) {
- BigDecimal deduction = calculateTotalDeduction(constructionByRecordMetaList);
+ BigDecimal deduction = calculateTotalDeduction(constructionByRecordMetaList,recordTime,areaDeptId,dailyMonitorDemeritRecords);
DemeritRecord demeritRecord = buildDemeritRecord(
constructionType,
deduction,
areaDeptId,
- DateUtils.getDayStart(recordTime));
+ recordTime);
demeritRecords.add(demeritRecord);
}else{
DemeritRecord demeritRecord = buildDemeritRecord(
constructionType,
BigDecimal.ZERO,
areaDeptId,
- DateUtils.getDayStart(recordTime));
+ recordTime);
demeritRecords.add(demeritRecord);
}
}
diff --git a/ycl-server/src/main/java/com/ycl/task/UYTask.java b/ycl-server/src/main/java/com/ycl/task/UYTask.java
index fb1bf59..69a3dbf 100644
--- a/ycl-server/src/main/java/com/ycl/task/UYTask.java
+++ b/ycl-server/src/main/java/com/ycl/task/UYTask.java
@@ -182,8 +182,6 @@
* online瀛楁鏉ヨ嚜浜庝紭浜戯紝pingOnline涓轰富鍔╬ing妫�娴嬬殑銆傚瓨鍏ongo缁欐暟鎹腑蹇冩煡闃�
*/
public void pointOnline() throws ExecutionException, InterruptedException {
-
-
log.info("寮�濮嬫娴嬬偣浣嶅湪绾�");
Integer times = 2;
SysConfig config = new SysConfig();
@@ -194,7 +192,6 @@
} else {
log.error("璇烽厤缃绾挎鏁帮紝姝ゆ璁剧疆涓洪粯璁ゅ��2");
}
-
// 鍏堟煡鍑鸿澶嘔P闆嗗悎,鍓旈櫎鎺夊湪绾挎儏鍐垫槸鏈煡鐨�,骞朵笖鍙娴嬫鍦ㄨ�冩牳鐨勮澶囬伩鍏嶅浣欏伐鍗�
List<TMonitorResult> monitorList = monitorMapper.getDistinctIP();
@@ -254,6 +251,10 @@
//鏌ュ嚭鏁版嵁搴撶函杞﹁締鎴栫函浜鸿劯璁惧
// List<String> serialNumbers = monitorMapper.selectCarOrFace().stream().map(TMonitor::getSerialNumber).collect(Collectors.toList());
dataList.forEach(item->{
+ if ("DX_闀垮緛澶ч亾璐″叴璺矾鍙d笢鍗楁柟鍚慱鏋満_缁嗚妭".equals(item.getName())){
+ log.info("2.鏁版嵁娴佸叆:{}",item);
+ log.info("鎵撳嵃鐘舵�乸ingOnline锛歿}",item.getPingOnline());
+ }
if(item.getPingOnline()) {
onLineList.add(item.getIp());
} else if(!item.getPingOnline()) {
@@ -264,18 +265,16 @@
}
});
- if(!CollectionUtils.isEmpty(onLineList)){
- log.error("鍦ㄧ嚎鐐逛綅闆嗗悎:{}",onLineList);
- }
-
- log.error("unKnownList:{}",unKnownList);
+ log.error("閫氳繃pingOnline鏈煡鐐逛綅鐨勯泦鍚堝ぇ灏�:{}",unKnownList.size());
+ log.error("閫氳繃pingOnline淇敼绂荤嚎绾跨殑鐐逛綅闆嗗悎澶у皬:{}",offLineList.size());
+ log.error("閫氳繃pingOnline淇敼鍦ㄧ嚎鐨勭偣浣嶉泦鍚堝ぇ灏�:{}",onLineList.size());
if(!CollectionUtils.isEmpty(offLineList)) {
- log.error("淇敼绂荤嚎鐨勭偣浣嶉泦鍚�:{}",offLineList);
monitorMapper.batchUpdateOnline(offLineList, now, ApiConstants.UY_OnlineSite_Offline);
+ monitorMapper.batchUpdatePingOnline(offLineList, now, ApiConstants.UY_OnlineSite_Offline);
}
if(!CollectionUtils.isEmpty(onLineList)) {
- log.error("淇敼鍦ㄧ嚎鐨勭偣浣嶉泦鍚�:{}",onLineList);
monitorMapper.batchUpdateOnline(onLineList, now, ApiConstants.UY_OnlineSite_Online);
+ monitorMapper.batchUpdatePingOnline(onLineList, now, ApiConstants.UY_OnlineSite_Online);
}
//瀛樻斁鍒癿ongo
if (!CollectionUtils.isEmpty(dataList)) {
@@ -374,6 +373,31 @@
vo.setUpdateTime(now);
return vo;
}).collect(Collectors.toList());
+ log.info("鎵撳嵃鐐逛綅鍦ㄧ嚎(浼樹簯)闇�瑕佷慨鏀圭殑鐘舵��:{}",willUpdateList);
+ log.info("鎵撳嵃鐐逛綅鍦ㄧ嚎(浼樹簯)闇�瑕佷慨鏀圭殑澶у皬:{}",willUpdateList.size());
+ Map<Integer, Long> statusCountMap = willUpdateList.stream()
+ .collect(Collectors.groupingBy(
+ item -> {
+ int online = item.getOnline();
+ // 鑷畾涔夊垎缁勮鍒欙細-1銆�1 鍗曠嫭鍒嗙粍锛屽叾浠栧綊涓� 0锛堟垨鍏朵粬鏍囪瘑锛�
+ if (online == -1) {
+ return -1;
+ } else if (online == 1) {
+ return 1;
+ } else {
+ return 0; // 鐢� 0 浠h〃鍏朵粬鐘舵��
+ }
+ },
+ Collectors.counting() // 缁熻姣忎釜鍒嗙粍鐨勬暟閲�
+ ));
+
+ // 浠巑ap涓幏鍙栧悇鐘舵�佺殑鏁伴噺锛堥粯璁ゅ�间负0锛岄伩鍏嶇┖鎸囬拡锛�
+ long offlineCount = statusCountMap.getOrDefault(-1, 0L); // -1鐘舵�佺殑鏁伴噺
+ long onlineCount = statusCountMap.getOrDefault(1, 0L); // 1鐘舵�佺殑鏁伴噺
+ long otherCount = statusCountMap.getOrDefault(0, 0L); // 鍏朵粬鐘舵�佺殑鏁伴噺
+ log.info("鎵撳嵃鐐逛綅鍦ㄧ嚎(浼樹簯)闇�瑕佷慨鏀圭绾垮ぇ灏�:{}",offlineCount);
+ log.info("鎵撳嵃鐐逛綅鍦ㄧ嚎(浼樹簯)闇�瑕佷慨鏀瑰湪绾垮ぇ灏�:{}",onlineCount);
+ log.info("鎵撳嵃鐐逛綅鍦ㄧ嚎(浼樹簯)闇�瑕佷慨鏀瑰叾浠栫姸鎬佸ぇ灏�:{}",otherCount);
monitorMapper.updateOnlineFromUyOrHk(willUpdateList);
//绂荤嚎鐢熸垚宸ュ崟,涓�涓猧p鍙敓鎴愪竴涓伐鍗�
List<VideoOnlineResult> workOrders = new ArrayList<>(records.stream()
diff --git a/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java b/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java
index 7da632e..562f3c4 100644
--- a/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java
+++ b/ycl-server/src/main/java/com/ycl/thread/OnlineCheckThread.java
@@ -69,6 +69,9 @@
}else {
result.setPingOnlineStr("-1");
}
+ if ("DX_闀垮緛澶ч亾璐″叴璺矾鍙d笢鍗楁柟鍚慱鏋満_缁嗚妭".equals(result.getName())){
+ log.info("1.鎵撳嵃鏌ュ嚭璁惧淇℃伅:{}",result);
+ }
// 鐜板湪闇�瑕佹煡鍑虹姸鎬佷负鏈煡鐨勮澶�
if (result.getCreateWorkOrder()!=null && result.getCreateWorkOrder()) {
WorkOrder workOrder = new WorkOrder();
diff --git a/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
index 814d354..4007d34 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/ReportMapper.xml
@@ -32,9 +32,9 @@
GROUP_CONCAT(DISTINCT ret.error_type SEPARATOR ',') AS errorType
FROM
t_report r
- LEFT JOIN t_yw_unit u ON r.unit_id = u.id and u.deleted = 0
+ LEFT JOIN (SELECT id,unit_name FROM t_yw_unit WHERE deleted =0) u ON r.unit_id = u.id
LEFT JOIN t_yw_people p ON r.people_id = p.user_id and p.deleted = 0
- LEFT JOIN t_yw_point pt ON r.serial_number = pt.serial_number and pt.deleted = 0
+ LEFT JOIN (SELECT serial_number,point_name FROM t_yw_point WHERE deleted =0) pt ON r.serial_number = pt.serial_number
INNER JOIN t_report_error_type ret ON ret.report_id = r.id and ret.deleted = 0 <if test="query.errorTypeList != null and query.errorTypeList.size() > 0">
AND ret.error_type in <foreach collection="query.errorTypeList" open="(" separator="," close=")" item="errorType">#{errorType}</foreach>
</if>
@@ -62,13 +62,15 @@
AND r.end_create_time <= #{query.effectTimeEnd}
</if>
GROUP BY
- r.id, r.report_materials, r.create_time, r.report_type, r.report_content, r.status, r.serial_number,
- r.begin_create_time,
- r.end_create_time,
- r.import_batch_number,
- u.unit_name,
- p.yw_person_name,
- pt.point_name
+ r.id
+-- ,
+-- r.report_materials, r.create_time, r.report_type, r.report_content, r.status, r.serial_number,
+-- r.begin_create_time,
+-- r.end_create_time,
+-- r.import_batch_number,
+-- u.unit_name,
+-- p.yw_person_name,
+-- pt.point_name
ORDER BY r.update_time DESC
</select>
diff --git a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
index fa79b60..a89efce 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/TMonitorMapper.xml
@@ -97,6 +97,8 @@
#{number}
</foreach>
</select>
+
+
<!-- TODO:寮傚父鎭㈠鐩戞帶鍜屾槸鍚︿骇鐢熷伐鍗曞瓧娈�-->
<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,
@@ -256,6 +258,7 @@
</select>
+<!-- TODO -->
<select id="exportTMonitorList" resultType="com.ycl.platform.domain.excel.TMonitorExp">
select m.id, m.serial_number, name, ip, camera_fun_type,
CASE
@@ -288,6 +291,7 @@
<if test="onState != null and onState == -1">and (p.online = #{onState} or p.ping_online = #{onState})</if>
<if test="onState != null and onState == 0">and (p.online = #{onState} and p.ping_online = #{onState})</if>
<if test="civilCode != null and civilCode != ''">and civil_code = #{civilCode}</if>
+ <if test="address != null and address !=''">and d.dept_id = #{address}</if>
</where>
</select>
<select id="selectMonitorVOList" resultType="com.ycl.platform.domain.vo.TMonitorVO">
@@ -663,9 +667,18 @@
COUNT(p2.id) AS errorNum,
COUNT(p3.id) AS normalNum
FROM t_monitor
- LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number AND p1.examine_status = 1<if test="dataScope == 1"> AND p1.province_tag_video = 1 </if><if test="dataScope == 3"> AND p1.dept_tag = 1 </if><if test="deptId != null"> AND p1.dept_id = #{deptId} </if>
- LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND (p2.online = -1 OR p2.ping_online = -1) AND p1.id = p2.id <if test="dataScope == 1"> AND p2.province_tag_video = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if>
- LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number AND p3.examine_status = 1 AND (p3.online = 1 AND p3.ping_online = 1 ) AND p1.id = p3.id<if test="dataScope == 1"> AND p3.province_tag_video = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if><if test="deptId != null"> AND p3.dept_id = #{deptId} </if>
+ LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number AND p1.examine_status = 1
+ <if test="dataScope == 1"> AND p1.province_tag_video = 1 </if>
+ <if test="dataScope == 3"> AND p1.dept_tag = 1 </if>
+ <if test="deptId != null"> AND p1.dept_id = #{deptId} </if>
+ LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND (p2.online = -1 OR p2.ping_online = -1) AND p1.id = p2.id
+ <if test="dataScope == 1"> AND p2.province_tag_video = 1 </if>
+ <if test="dataScope == 3"> AND p2.dept_tag = 1 </if>
+ <if test="deptId != null"> AND p2.dept_id = #{deptId} </if>
+ LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number AND p3.examine_status = 1 AND (p3.online = 1 AND p3.ping_online = 1 ) AND p1.id = p3.id
+ <if test="dataScope == 1"> AND p3.province_tag_video = 1 </if>
+ <if test="dataScope == 3"> AND p3.dept_tag = 1 </if>
+ <if test="deptId != null"> AND p3.dept_id = #{deptId} </if>
WHERE INSTR(camera_fun_type, 1)
UNION ALL
SELECT
@@ -685,9 +698,18 @@
COUNT(p2.id) AS errorNum,
COUNT(p3.id) AS normalNum
FROM t_monitor
- LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number AND p1.examine_status = 1 <if test="dataScope == 1"> AND p1.province_tag_face = 1 </if><if test="dataScope == 3"> AND p1.dept_tag = 1 </if><if test="deptId != null"> AND p1.dept_id = #{deptId} </if>
- LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND (p2.online = -1 OR p2.ping_online = -1) AND p1.id = p2.id<if test="dataScope == 1"> AND p2.province_tag_face = 1 </if><if test="dataScope == 3"> AND p2.dept_tag = 1 </if><if test="deptId != null"> AND p2.dept_id = #{deptId} </if>
- LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number AND p3.examine_status = 1 AND (p3.online = 1 AND p3.ping_online = 1 ) AND p1.id = p3.id<if test="dataScope == 1"> AND p3.province_tag_face = 1 </if><if test="dataScope == 3"> AND p3.dept_tag = 1 </if><if test="deptId != null"> AND p3.dept_id = #{deptId} </if>
+ LEFT JOIN t_yw_point p1 ON t_monitor.serial_number = p1.serial_number AND p1.examine_status = 1
+ <if test="dataScope == 1"> AND p1.province_tag_face = 1 </if>
+ <if test="dataScope == 3"> AND p1.dept_tag = 1 </if>
+ <if test="deptId != null"> AND p1.dept_id = #{deptId} </if>
+ LEFT JOIN t_yw_point p2 ON t_monitor.serial_number = p2.serial_number AND p2.examine_status = 1 AND (p2.online = -1 OR p2.ping_online = -1) AND p1.id = p2.id
+ <if test="dataScope == 1"> AND p2.province_tag_face = 1 </if>
+ <if test="dataScope == 3"> AND p2.dept_tag = 1 </if>
+ <if test="deptId != null"> AND p2.dept_id = #{deptId} </if>
+ LEFT JOIN t_yw_point p3 ON t_monitor.serial_number = p3.serial_number AND p3.examine_status = 1 AND (p3.online = 1 AND p3.ping_online = 1 ) AND p1.id = p3.id
+ <if test="dataScope == 1"> AND p3.province_tag_face = 1 </if>
+ <if test="dataScope == 3"> AND p3.dept_tag = 1 </if>
+ <if test="deptId != null"> AND p3.dept_id = #{deptId} </if>
WHERE INSTR(camera_fun_type, 3)
</select>
<select id="monitorRate" resultType="com.ycl.platform.domain.vo.screen.MonitorRateVO">
@@ -840,7 +862,19 @@
AND t_monitor.serial_number = t_yw_point.serial_number )
</foreach>
</update>
-
+ <update id="batchUpdatePingOnline">
+ <foreach collection="ipList" item="ip" separator=";">
+ UPDATE
+ t_yw_point
+ SET
+ online = #{online},
+ update_time = #{date}
+ WHERE
+ EXISTS (SELECT 1 FROM t_monitor
+ WHERE ip = #{ip}
+ AND t_monitor.serial_number = t_yw_point.serial_number )
+ </foreach>
+ </update>
<update id="updateOnlineFromHk">
<foreach collection="onlineList" item="online" separator=";">
UPDATE
diff --git a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
index 2858c87..39f5363 100644
--- a/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
+++ b/ycl-server/src/main/resources/mapper/zgyw/WorkOrderMapper.xml
@@ -356,6 +356,8 @@
COUNT(IF(w.status != 'AUDITING_SUCCESS' and w.status != 'WAIT_DISTRIBUTE', 1, NULL)) AS todoNum,
COUNT(IF(w.status = 'AUDITING_SUCCESS', 1, NULL)) AS doneNum
FROM t_work_order w
+ INNER JOIN t_monitor tm ON w.serial_number = tm.serial_number
+ INNER JOIN t_yw_unit u ON w.unit_id = u.id AND u.deleted = 0
LEFT JOIN t_yw_point p ON w.serial_number = p.serial_number AND p.deleted = 0
WHERE w.deleted = 0
<if test="dataScope == 1"> AND (p.province_tag_video = 1 or p.province_tag_car = 1 or p.province_tag_face = 1)</if>
--
Gitblit v1.8.0