|
@@ -0,0 +1,642 @@
|
|
|
+package com.pm.web.controller.estateManagement;
|
|
|
+
|
|
|
+import com.pm.common.config.PageData;
|
|
|
+import com.pm.common.core.controller.BaseController;
|
|
|
+import com.pm.interfaceInfo.service.InterfaceInfoService;
|
|
|
+import okhttp3.*;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.web.bind.annotation.GetMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestParam;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+
|
|
|
+import java.io.IOException;
|
|
|
+import java.net.URLEncoder;
|
|
|
+import java.nio.charset.StandardCharsets;
|
|
|
+import java.time.LocalDate;
|
|
|
+import java.time.LocalTime;
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 物业管理
|
|
|
+ */
|
|
|
+@RestController
|
|
|
+@RequestMapping("/estateManagement/info")
|
|
|
+public class EstateManagementController extends BaseController {
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询url 访问接口
|
|
|
+ */
|
|
|
+ @Autowired
|
|
|
+ private InterfaceInfoService interfaceInfoService;
|
|
|
+
|
|
|
+ // 生成模拟数据 业主档案
|
|
|
+ private List<Map<String, Object>> generateOwnerData() {
|
|
|
+ return Arrays.asList(
|
|
|
+ Map.of("ownerId", "OWN2024001", "name", "林建国", "buildingNo", "8栋", "roomNo", "101", "phone", "13800138000", "moveInDate", "2020-05-18", "emergencyContact", "林小伟", "parkingSpace", "A-01", "petInfo", "金毛犬,体重30kg"),
|
|
|
+ Map.of("ownerId", "OWN2024002", "name", "刘文静", "buildingNo", "3栋", "roomNo", "202", "phone", "13500135000", "moveInDate", "2021-03-22", "emergencyContact", "张明", "parkingSpace", "B-12", "petInfo", "无"),
|
|
|
+ Map.of("ownerId", "OWN2024003", "name", "王浩宇", "buildingNo", "5栋", "roomNo", "303", "phone", "13900139000", "moveInDate", "2019-12-05", "emergencyContact", "陈燕", "parkingSpace", "C-05", "petInfo", "布偶猫,已绝育"),
|
|
|
+ Map.of("ownerId", "OWN2024004", "name", "赵敏", "buildingNo", "2栋", "roomNo", "404", "phone", "13600136000", "moveInDate", "2022-08-10", "emergencyContact", "赵亮", "parkingSpace", "D-18", "petInfo", "无"),
|
|
|
+ Map.of("ownerId", "OWN2024005", "name", "陈思远", "buildingNo", "9栋", "roomNo", "505", "phone", "13700137000", "moveInDate", "2020-07-25", "emergencyContact", "李娜", "parkingSpace", "E-09", "petInfo", "鹦鹉,笼养"),
|
|
|
+ Map.of("ownerId", "OWN2024006", "name", "周雨欣", "buildingNo", "6栋", "roomNo", "606", "phone", "13400134000", "moveInDate", "2023-01-15", "emergencyContact", "周建国", "parkingSpace", "F-20", "petInfo", "无"),
|
|
|
+ Map.of("ownerId", "OWN2024007", "name", "吴俊杰", "buildingNo", "1栋", "roomNo", "707", "phone", "13300133000", "moveInDate", "2018-09-08", "emergencyContact", "吴敏", "parkingSpace", "G-03", "petInfo", "柴犬,疫苗齐全"),
|
|
|
+ Map.of("ownerId", "OWN2024008", "name", "郑梦琪", "buildingNo", "4栋", "roomNo", "808", "phone", "13200132000", "moveInDate", "2021-11-30", "emergencyContact", "郑海涛", "parkingSpace", "H-15", "petInfo", "无"),
|
|
|
+ Map.of("ownerId", "OWN2024009", "name", "王伟", "buildingNo", "7栋", "roomNo", "909", "phone", "13100131000", "moveInDate", "2020-04-12", "emergencyContact", "张婷", "parkingSpace", "I-07", "petInfo", "金鱼,5条"),
|
|
|
+ Map.of("ownerId", "OWN2024010", "name", "李佳怡", "buildingNo", "10栋", "roomNo", "1010", "phone", "18800188000", "moveInDate", "2022-06-01", "emergencyContact", "李建军", "parkingSpace", "J-22", "petInfo", "无"),
|
|
|
+ Map.of("ownerId", "OWN2024011", "name", "张雪", "buildingNo", "3栋", "roomNo", "1111", "phone", "18500185000", "moveInDate", "2023-03-18", "emergencyContact", "张强", "parkingSpace", "B-08", "petInfo", "乌龟,两只"),
|
|
|
+ Map.of("ownerId", "OWN2024012", "name", "陈明", "buildingNo", "5栋", "roomNo", "1212", "phone", "18600186000", "moveInDate", "2019-07-20", "emergencyContact", "陈璐", "parkingSpace", "C-14", "petInfo", "无"),
|
|
|
+ Map.of("ownerId", "OWN2024013", "name", "周思远", "buildingNo", "8栋", "roomNo", "1313", "phone", "18700187000", "moveInDate", "2021-02-28", "emergencyContact", "周洋", "parkingSpace", "A-16", "petInfo", "兔子,白色"),
|
|
|
+ Map.of("ownerId", "OWN2024014", "name", "吴雨", "buildingNo", "6栋", "roomNo", "1414", "phone", "18900189000", "moveInDate", "2020-10-05", "emergencyContact", "吴静", "parkingSpace", "F-04", "petInfo", "无毛猫,需特殊照顾"),
|
|
|
+ Map.of("ownerId", "OWN2024015", "name", "郑浩然", "buildingNo", "2栋", "roomNo", "1515", "phone", "18000180000", "moveInDate", "2022-12-31", "emergencyContact", "郑云", "parkingSpace", "D-24", "petInfo", "无")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成模拟数据 物业费用信息
|
|
|
+ private List<Map<String, Object>> generateFeeData() {
|
|
|
+ return Arrays.asList(
|
|
|
+ Map.of("billId", "FEE2024001", "ownerId", "OWN2024001", "feeType", "物业费", "dueAmount", 800.00, "paidAmount", 800.00, "arrearsStatus", "已结清", "dueDate", "2024-05-31"),
|
|
|
+ Map.of("billId", "FEE2024002", "ownerId", "OWN2024002", "feeType", "水费", "dueAmount", 56.80, "paidAmount", 0.00, "arrearsStatus", "未缴纳", "dueDate", "2024-05-20"),
|
|
|
+ Map.of("billId", "FEE2024003", "ownerId", "OWN2024003", "feeType", "电费", "dueAmount", 123.50, "paidAmount", 123.50, "arrearsStatus", "已结清", "dueDate", "2024-05-15"),
|
|
|
+ Map.of("billId", "FEE2024004", "ownerId", "OWN2024004", "feeType", "物业费", "dueAmount", 750.00, "paidAmount", 300.00, "arrearsStatus", "部分缴纳", "dueDate", "2024-06-30"),
|
|
|
+ Map.of("billId", "FEE2024005", "ownerId", "OWN2024005", "feeType", "水费", "dueAmount", 48.20, "paidAmount", 48.20, "arrearsStatus", "已结清", "dueDate", "2024-05-25"),
|
|
|
+ Map.of("billId", "FEE2024006", "ownerId", "OWN2024006", "feeType", "电费", "dueAmount", 98.70, "paidAmount", 0.00, "arrearsStatus", "未缴纳", "dueDate", "2024-05-10"),
|
|
|
+ Map.of("billId", "FEE2024007", "ownerId", "OWN2024007", "feeType", "物业费", "dueAmount", 900.00, "paidAmount", 900.00, "arrearsStatus", "已结清", "dueDate", "2024-05-31"),
|
|
|
+ Map.of("billId", "FEE2024008", "ownerId", "OWN2024008", "feeType", "水费", "dueAmount", 62.30, "paidAmount", 0.00, "arrearsStatus", "未缴纳", "dueDate", "2024-05-20"),
|
|
|
+ Map.of("billId", "FEE2024009", "ownerId", "OWN2024009", "feeType", "电费", "dueAmount", 156.90, "paidAmount", 156.90, "arrearsStatus", "已结清", "dueDate", "2024-05-15"),
|
|
|
+ Map.of("billId", "FEE2024010", "ownerId", "OWN2024010", "feeType", "物业费", "dueAmount", 850.00, "paidAmount", 500.00, "arrearsStatus", "部分缴纳", "dueDate", "2024-06-30"),
|
|
|
+ Map.of("billId", "FEE2024011", "ownerId", "OWN2024011", "feeType", "水费", "dueAmount", 52.50, "paidAmount", 52.50, "arrearsStatus", "已结清", "dueDate", "2024-05-25"),
|
|
|
+ Map.of("billId", "FEE2024012", "ownerId", "OWN2024012", "feeType", "电费", "dueAmount", 89.40, "paidAmount", 0.00, "arrearsStatus", "未缴纳", "dueDate", "2024-05-10"),
|
|
|
+ Map.of("billId", "FEE2024013", "ownerId", "OWN2024013", "feeType", "物业费", "dueAmount", 780.00, "paidAmount", 780.00, "arrearsStatus", "已结清", "dueDate", "2024-05-31"),
|
|
|
+ Map.of("billId", "FEE2024014", "ownerId", "OWN2024014", "feeType", "水费", "dueAmount", 59.10, "paidAmount", 0.00, "arrearsStatus", "未缴纳", "dueDate", "2024-05-20"),
|
|
|
+ Map.of("billId", "FEE2024015", "ownerId", "OWN2024015", "feeType", "电费", "dueAmount", 112.20, "paidAmount", 112.20, "arrearsStatus", "已结清", "dueDate", "2024-05-15")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成模拟数据 设施设备信息
|
|
|
+ private List<Map<String, Object>> generateFacilityData() {
|
|
|
+ return Arrays.asList(
|
|
|
+ Map.of("deviceId", "DEV2024001", "name", "乘客电梯", "deviceType", "电梯", "location", "1栋1单元", "brandModel", "通力KONE 3000", "maintenanceCycle", "15天", "status", "正常", "lastMaintenanceDate", "2024-05-20"),
|
|
|
+ Map.of("deviceId", "DEV2024002", "name", "消防水泵", "deviceType", "水泵", "location", "地下车库B区", "brandModel", "上海东方泵业 D120-50", "maintenanceCycle", "30天", "status", "正常", "lastMaintenanceDate", "2024-05-10"),
|
|
|
+ Map.of("deviceId", "DEV2024003", "name", "配电箱", "deviceType", "配电箱", "location", "3栋负一层", "brandModel", "施耐德 Electric iPM", "maintenanceCycle", "90天", "status", "正常", "lastMaintenanceDate", "2024-04-30"),
|
|
|
+ Map.of("deviceId", "DEV2024004", "name", "中央空调主机", "deviceType", "空调", "location", "设备机房", "brandModel", "大金 VRV-X7", "maintenanceCycle", "60天", "status", "待维保", "lastMaintenanceDate", "2024-03-25"),
|
|
|
+ Map.of("deviceId", "DEV2024005", "name", "自动扶梯", "deviceType", "电梯", "location", "商业中心1楼", "brandModel", "迅达 Schindler 9300AE", "maintenanceCycle", "15天", "status", "正常", "lastMaintenanceDate", "2024-05-18"),
|
|
|
+ Map.of("deviceId", "DEV2024006", "name", "生活水泵", "deviceType", "水泵", "location", "水泵房", "brandModel", "格兰富 CR32-4", "maintenanceCycle", "30天", "status", "正常", "lastMaintenanceDate", "2024-05-05"),
|
|
|
+ Map.of("deviceId", "DEV2024007", "name", "消防控制柜", "deviceType", "消防设备", "location", "1栋消防控制室", "brandModel", "北大青鸟 JBF-11S", "maintenanceCycle", "60天", "status", "正常", "lastMaintenanceDate", "2024-04-20"),
|
|
|
+ Map.of("deviceId", "DEV2024008", "name", "电梯", "deviceType", "电梯", "location", "2栋2单元", "brandModel", "日立 HGP-825-C090", "maintenanceCycle", "15天", "status", "维修中", "lastMaintenanceDate", "2024-05-15"),
|
|
|
+ Map.of("deviceId", "DEV2024009", "name", "配电箱", "deviceType", "配电箱", "location", "5栋首层", "brandModel", "ABB MNS", "maintenanceCycle", "90天", "status", "正常", "lastMaintenanceDate", "2024-04-10"),
|
|
|
+ Map.of("deviceId", "DEV2024010", "name", "景观喷泉泵", "deviceType", "水泵", "location", "中心花园", "brandModel", "威乐 WILO-SL 202", "maintenanceCycle", "45天", "status", "正常", "lastMaintenanceDate", "2024-05-01"),
|
|
|
+ Map.of("deviceId", "DEV2024011", "name", "电梯", "deviceType", "电梯", "location", "3栋3单元", "brandModel", "通力KONE MonoSpace", "maintenanceCycle", "15天", "status", "正常", "lastMaintenanceDate", "2024-05-22"),
|
|
|
+ Map.of("deviceId", "DEV2024012", "name", "消防栓泵", "deviceType", "水泵", "location", "地下车库A区", "brandModel", "凯泉 KQL200/315-45/4", "maintenanceCycle", "30天", "status", "正常", "lastMaintenanceDate", "2024-05-08"),
|
|
|
+ Map.of("deviceId", "DEV2024013", "name", "监控主机", "deviceType", "监控设备", "location", "物业监控室", "brandModel", "海康威视 DS-8664N-I8", "maintenanceCycle", "60天", "status", "正常", "lastMaintenanceDate", "2024-04-15"),
|
|
|
+ Map.of("deviceId", "DEV2024014", "name", "电梯", "deviceType", "电梯", "location", "4栋1单元", "brandModel", "奥的斯 Gen2", "maintenanceCycle", "15天", "status", "待维保", "lastMaintenanceDate", "2024-03-28"),
|
|
|
+ Map.of("deviceId", "DEV2024015", "name", "配电箱", "deviceType", "配电箱", "location", "6栋负一层", "brandModel", "西门子 SIVACON 8PS", "maintenanceCycle", "90天", "status", "正常", "lastMaintenanceDate", "2024-04-05")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成模拟数据 安防监控中心
|
|
|
+ private List<Map<String, Object>> generateSecurityData() {
|
|
|
+ return Arrays.asList(
|
|
|
+ Map.of("cameraId", "CAM2024001", "location", "园区南门", "status", "在线", "storagePath", "/video/2024/CAM2024001", "lastTriggerTime", "2024-05-30 14:23:15", "alarmType", "人脸识别"),
|
|
|
+ Map.of("cameraId", "CAM2024002", "location", "1栋电梯厅", "status", "故障", "storagePath", "/video/2024/CAM2024002", "lastTriggerTime", "2024-05-29 09:40:22", "alarmType", "越界报警"),
|
|
|
+ Map.of("cameraId", "CAM2024003", "location", "地下车库B区", "status", "在线", "storagePath", "/video/2024/CAM2024003", "lastTriggerTime", "2024-05-30 10:15:33", "alarmType", "人脸识别"),
|
|
|
+ Map.of("cameraId", "CAM2024004", "location", "中心花园", "status", "在线", "storagePath", "/video/2024/CAM2024004", "lastTriggerTime", "2024-05-28 14:57:01", "alarmType", "越界报警"),
|
|
|
+ Map.of("cameraId", "CAM2024005", "location", "商业中心1楼", "status", "在线", "storagePath", "/video/2024/CAM2024005", "lastTriggerTime", "2024-05-30 11:05:44", "alarmType", "人脸识别"),
|
|
|
+ Map.of("cameraId", "CAM2024006", "location", "3栋走廊", "status", "故障", "storagePath", "/video/2024/CAM2024006", "lastTriggerTime", "2024-05-30 08:30:19", "alarmType", "越界报警"),
|
|
|
+ Map.of("cameraId", "CAM2024007", "location", "消防通道", "status", "在线", "storagePath", "/video/2024/CAM2024007", "lastTriggerTime", "2024-05-30 10:44:37", "alarmType", "人脸识别"),
|
|
|
+ Map.of("cameraId", "CAM2024008", "location", "停车场入口", "status", "在线", "storagePath", "/video/2024/CAM2024008", "lastTriggerTime", "2024-05-27 16:20:58", "alarmType", "越界报警"),
|
|
|
+ Map.of("cameraId", "CAM2024009", "location", "2栋电梯厅", "status", "在线", "storagePath", "/video/2024/CAM2024009", "lastTriggerTime", "2024-05-30 09:51:26", "alarmType", "人脸识别"),
|
|
|
+ Map.of("cameraId", "CAM2024010", "location", "设备机房", "status", "故障", "storagePath", "/video/2024/CAM2024010", "lastTriggerTime", "2024-05-29 22:10:05", "alarmType", "越界报警"),
|
|
|
+ Map.of("cameraId", "CAM2024011", "location", "园区东门", "status", "在线", "storagePath", "/video/2024/CAM2024011", "lastTriggerTime", "2024-05-30 07:45:11", "alarmType", "人脸识别"),
|
|
|
+ Map.of("cameraId", "CAM2024012", "location", "行政楼大厅", "status", "在线", "storagePath", "/video/2024/CAM2024012", "lastTriggerTime", "2024-05-30 10:30:48", "alarmType", "越界报警"),
|
|
|
+ Map.of("cameraId", "CAM2024013", "location", "食堂后厨", "status", "在线", "storagePath", "/video/2024/CAM2024013", "lastTriggerTime", "2024-05-26 11:15:39", "alarmType", "人脸识别"),
|
|
|
+ Map.of("cameraId", "CAM2024014", "location", "4栋楼梯间", "status", "在线", "storagePath", "/video/2024/CAM2024014", "lastTriggerTime", "2024-05-30 08:17:54", "alarmType", "越界报警"),
|
|
|
+ Map.of("cameraId", "CAM2024015", "location", "监控室", "status", "在线", "storagePath", "/video/2024/CAM2024015", "lastTriggerTime", "2024-05-30 11:22:06", "alarmType", "人脸识别")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ // 生成模拟数据 工单管理
|
|
|
+ private List<Map<String, Object>> generateWorkOrderData() {
|
|
|
+ return Arrays.asList(
|
|
|
+ Map.of("orderId", "WO2024001", "submitter", "林建国", "type", "维修", "urgency", "紧急", "handler", "张三", "status", "处理中", "duration", "2.5小时"),
|
|
|
+ Map.of("orderId", "WO2024002", "submitter", "刘文静", "type", "清洁", "urgency", "普通", "handler", "李四", "status", "待接单", "duration", "-"),
|
|
|
+ Map.of("orderId", "WO2024003", "submitter", "王浩宇", "type", "投诉", "urgency", "普通", "handler", "-", "status", "待接单", "duration", "-"),
|
|
|
+ Map.of("orderId", "WO2024004", "submitter", "赵敏", "type", "维修", "urgency", "紧急", "handler", "王五", "status", "完成", "duration", "4小时"),
|
|
|
+ Map.of("orderId", "WO2024005", "submitter", "陈思远", "type", "清洁", "urgency", "普通", "handler", "赵六", "status", "处理中", "duration", "1.5小时"),
|
|
|
+ Map.of("orderId", "WO2024006", "submitter", "周雨欣", "type", "投诉", "urgency", "紧急", "handler", "陈七", "status", "完成", "duration", "3小时"),
|
|
|
+ Map.of("orderId", "WO2024007", "submitter", "吴俊杰", "type", "维修", "urgency", "普通", "handler", "周八", "status", "待接单", "duration", "-"),
|
|
|
+ Map.of("orderId", "WO2024008", "submitter", "郑梦琪", "type", "清洁", "urgency", "普通", "handler", "吴九", "status", "处理中", "duration", "2小时"),
|
|
|
+ Map.of("orderId", "WO2024009", "submitter", "王伟", "type", "投诉", "urgency", "紧急", "handler", "郑十", "status", "完成", "duration", "2.5小时"),
|
|
|
+ Map.of("orderId", "WO2024010", "submitter", "李佳怡", "type", "维修", "urgency", "普通", "handler", "王十一", "status", "待接单", "duration", "-"),
|
|
|
+ Map.of("orderId", "WO2024011", "submitter", "张雪", "type", "清洁", "urgency", "普通", "handler", "李十二", "status", "完成", "duration", "1小时"),
|
|
|
+ Map.of("orderId", "WO2024012", "submitter", "陈明", "type", "投诉", "urgency", "紧急", "handler", "张十三", "status", "处理中", "duration", "3.5小时"),
|
|
|
+ Map.of("orderId", "WO2024013", "submitter", "周思远", "type", "维修", "urgency", "紧急", "handler", "陈十四", "status", "完成", "duration", "5小时"),
|
|
|
+ Map.of("orderId", "WO2024014", "submitter", "吴雨", "type", "清洁", "urgency", "普通", "handler", "周十五", "status", "待接单", "duration", "-"),
|
|
|
+ Map.of("orderId", "WO2024015", "submitter", "郑浩然", "type", "投诉", "urgency", "普通", "handler", "吴十六", "status", "处理中", "duration", "2小时")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ // 能源监测台
|
|
|
+ private List<Map<String, Object>> generateEnergyData() {
|
|
|
+ return Arrays.asList(
|
|
|
+ Map.of("meterId", "EM2024001", "buildingNo", "1栋", "lastMonthReading", 1250.0, "currentMonthReading", 1380.0, "warningValue", 1500.0, "yoyChange", "+10.4%"),
|
|
|
+ Map.of("meterId", "EM2024002", "buildingNo", "2栋", "lastMonthReading", 860.0, "currentMonthReading", 920.0, "warningValue", 1000.0, "yoyChange", "+6.9%"),
|
|
|
+ Map.of("meterId", "EM2024003", "buildingNo", "3栋", "lastMonthReading", 2300.0, "currentMonthReading", 2550.0, "warningValue", 2800.0, "yoyChange", "+10.9%"),
|
|
|
+ Map.of("meterId", "EM2024004", "buildingNo", "4栋", "lastMonthReading", 1500.0, "currentMonthReading", 1680.0, "warningValue", 1800.0, "yoyChange", "+12.0%"),
|
|
|
+ Map.of("meterId", "EM2024005", "buildingNo", "5栋", "lastMonthReading", 950.0, "currentMonthReading", 1020.0, "warningValue", 1100.0, "yoyChange", "+7.4%"),
|
|
|
+ Map.of("meterId", "EM2024006", "buildingNo", "6栋", "lastMonthReading", 3200.0, "currentMonthReading", 3500.0, "warningValue", 3800.0, "yoyChange", "+9.4%"),
|
|
|
+ Map.of("meterId", "EM2024007", "buildingNo", "7栋", "lastMonthReading", 1800.0, "currentMonthReading", 1950.0, "warningValue", 2100.0, "yoyChange", "+8.3%"),
|
|
|
+ Map.of("meterId", "EM2024008", "buildingNo", "8栋", "lastMonthReading", 2100.0, "currentMonthReading", 2320.0, "warningValue", 2500.0, "yoyChange", "+10.5%"),
|
|
|
+ Map.of("meterId", "EM2024009", "buildingNo", "9栋", "lastMonthReading", 1450.0, "currentMonthReading", 1580.0, "warningValue", 1700.0, "yoyChange", "+8.9%"),
|
|
|
+ Map.of("meterId", "EM2024010", "buildingNo", "10栋", "lastMonthReading", 2800.0, "currentMonthReading", 3050.0, "warningValue", 3300.0, "yoyChange", "+8.9%"),
|
|
|
+ Map.of("meterId", "EM2024011", "buildingNo", "11栋", "lastMonthReading", 1650.0, "currentMonthReading", 1780.0, "warningValue", 1950.0, "yoyChange", "+7.9%"),
|
|
|
+ Map.of("meterId", "EM2024012", "buildingNo", "12栋", "lastMonthReading", 3100.0, "currentMonthReading", 3420.0, "warningValue", 3700.0, "yoyChange", "+10.3%"),
|
|
|
+ Map.of("meterId", "EM2024013", "buildingNo", "13栋", "lastMonthReading", 1900.0, "currentMonthReading", 2050.0, "warningValue", 2200.0, "yoyChange", "+7.9%"),
|
|
|
+ Map.of("meterId", "EM2024014", "buildingNo", "14栋", "lastMonthReading", 2400.0, "currentMonthReading", 2650.0, "warningValue", 2900.0, "yoyChange", "+10.4%"),
|
|
|
+ Map.of("meterId", "EM2024015", "buildingNo", "15栋", "lastMonthReading", 1750.0, "currentMonthReading", 1890.0, "warningValue", 2050.0, "yoyChange", "+8.0%")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ //租赁资产管家
|
|
|
+ private List<Map<String, Object>> generateRentalData() {
|
|
|
+ return Arrays.asList(
|
|
|
+ Map.of("propertyId", "PROP2024001", "area", 89.5, "layout", "两室一厅", "monthlyRent", 3200.0, "tenant", "张明", "contractStart", "2024-01-15", "contractEnd", "2025-01-14", "depositStatus", "已收", "history", "2023年租给李华"),
|
|
|
+ Map.of("propertyId", "PROP2024002", "area", 120.3, "layout", "三室两厅", "monthlyRent", 4500.0, "tenant", "王芳", "contractStart", "2024-03-20", "contractEnd", "2025-03-19", "depositStatus", "已收", "history", "2022年租给赵强"),
|
|
|
+ Map.of("propertyId", "PROP2024003", "area", 65.2, "layout", "一室一厅", "monthlyRent", 2500.0, "tenant", "李强", "contractStart", "2024-02-05", "contractEnd", "2025-02-04", "depositStatus", "已收", "history", "2023年租给刘洋"),
|
|
|
+ Map.of("propertyId", "PROP2024004", "area", 140.8, "layout", "四室两厅", "monthlyRent", 6800.0, "tenant", "赵敏", "contractStart", "2024-01-10", "contractEnd", "2025-01-09", "depositStatus", "已收", "history", "2022年租给陈明"),
|
|
|
+ Map.of("propertyId", "PROP2024005", "area", 95.7, "layout", "两室两厅", "monthlyRent", 3800.0, "tenant", "陈丽", "contractStart", "2024-04-01", "contractEnd", "2025-03-31", "depositStatus", "已收", "history", "2023年租给周佳"),
|
|
|
+ Map.of("propertyId", "PROP2024006", "area", 75.3, "layout", "一室一厅", "monthlyRent", 2800.0, "tenant", "周明", "contractStart", "2024-03-15", "contractEnd", "2025-03-14", "depositStatus", "已收", "history", "2022年租给吴昊"),
|
|
|
+ Map.of("propertyId", "PROP2024007", "area", 110.2, "layout", "三室一厅", "monthlyRent", 4200.0, "tenant", "吴佳", "contractStart", "2024-02-20", "contractEnd", "2025-02-19", "depositStatus", "已收", "history", "2023年租给郑华"),
|
|
|
+ Map.of("propertyId", "PROP2024008", "area", 80.5, "layout", "两室一厅", "monthlyRent", 3300.0, "tenant", "郑丽", "contractStart", "2024-01-25", "contractEnd", "2025-01-24", "depositStatus", "已收", "history", "2022年租给王磊"),
|
|
|
+ Map.of("propertyId", "PROP2024009", "area", 135.6, "layout", "四室两厅", "monthlyRent", 6500.0, "tenant", "王强", "contractStart", "2024-03-05", "contractEnd", "2025-03-04", "depositStatus", "已收", "history", "2023年租给赵丽"),
|
|
|
+ Map.of("propertyId", "PROP2024010", "area", 90.2, "layout", "两室两厅", "monthlyRent", 3600.0, "tenant", "赵丽", "contractStart", "2024-02-10", "contractEnd", "2025-02-09", "depositStatus", "已收", "history", "2022年租给陈晨"),
|
|
|
+ Map.of("propertyId", "PROP2024011", "area", 70.8, "layout", "一室一厅", "monthlyRent", "2600.0", "tenant", "陈晨", "contractStart", "2024-04-15", "contractEnd", "2025-04-14", "depositStatus", "已收", "history", "2023年租给周明"),
|
|
|
+ Map.of("propertyId", "PROP2024012", "area", 125.4, "layout", "三室两厅", "monthlyRent", 4800.0, "tenant", "周佳", "contractStart", "2024-03-20", "contractEnd", "2025-03-19", "depositStatus", "已收", "history", "2022年租给吴佳"),
|
|
|
+ Map.of("propertyId", "PROP2024013", "area", 85.3, "layout", "两室一厅", "monthlyRent", 3400.0, "tenant", "吴昊", "contractStart", "2024-01-30", "contractEnd", "2025-01-29", "depositStatus", "已收", "history", "2023年租给郑丽"),
|
|
|
+ Map.of("propertyId", "PROP2024014", "area", 115.7, "layout", "三室一厅", "monthlyRent", 4400.0, "tenant", "郑华", "contractStart", "2024-02-15", "contractEnd", "2025-02-14", "depositStatus", "已收", "history", "2022年租给王强"),
|
|
|
+ Map.of("propertyId", "PROP2024015", "area", 98.6, "layout", "两室两厅", "monthlyRent", 3900.0, "tenant", "王磊", "contractStart", "2024-03-01", "contractEnd", "2025-02-28", "depositStatus", "已收", "history", "2023年租给赵丽")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ //服务工单分析
|
|
|
+ private List<Map<String, Object>> generateWorkOrderAnalysisData() {
|
|
|
+ return Arrays.asList(
|
|
|
+ // 2024年数据
|
|
|
+ Map.of("month", "2024-01", "completionRate", 92.5, "avgResponseTime", 2.8, "reworkRate", 3.2, "satisfactionScore", 4.5, "topIssue", "设备故障"),
|
|
|
+ Map.of("month", "2024-02", "completionRate", 92.5, "avgResponseTime", 2.8, "reworkRate", 3.2, "satisfactionScore", 4.5, "topIssue", "设备故障"),
|
|
|
+ Map.of("month", "2024-03", "completionRate", 92.5, "avgResponseTime", 2.8, "reworkRate", 3.2, "satisfactionScore", 4.5, "topIssue", "设备故障"),
|
|
|
+ Map.of("month", "2024-04", "completionRate", 92.5, "avgResponseTime", 2.8, "reworkRate", 3.2, "satisfactionScore", 4.5, "topIssue", "设备故障"),
|
|
|
+ Map.of("month", "2024-05", "completionRate", 92.5, "avgResponseTime", 2.8, "reworkRate", 3.2, "satisfactionScore", 4.5, "topIssue", "设备故障"),
|
|
|
+ Map.of("month", "2024-06", "completionRate", 92.5, "avgResponseTime", 2.8, "reworkRate", 3.2, "satisfactionScore", 4.5, "topIssue", "设备故障"),
|
|
|
+ Map.of("month", "2024-07", "completionRate", 92.5, "avgResponseTime", 2.8, "reworkRate", 3.2, "satisfactionScore", 4.5, "topIssue", "设备故障"),
|
|
|
+ Map.of("month", "2024-08", "completionRate", 92.5, "avgResponseTime", 2.8, "reworkRate", 3.2, "satisfactionScore", 4.5, "topIssue", "设备故障"),
|
|
|
+ Map.of("month", "2024-09", "completionRate", 94.3, "avgResponseTime", 2.4, "reworkRate", 2.9, "satisfactionScore", 4.6, "topIssue", "公共区域卫生"),
|
|
|
+ Map.of("month", "2024-10", "completionRate", 91.8, "avgResponseTime", 3.1, "reworkRate", 3.5, "satisfactionScore", 4.3, "topIssue", "停车管理"),
|
|
|
+ Map.of("month", "2024-11", "completionRate", 95.7, "avgResponseTime", 2.2, "reworkRate", 2.3, "satisfactionScore", 4.7, "topIssue", "电梯维护"),
|
|
|
+ Map.of("month", "2024-12", "completionRate", 93.9, "avgResponseTime", 2.6, "reworkRate", 3.0, "satisfactionScore", 4.5, "topIssue", "公共设施维修"),
|
|
|
+ // 2025年数据
|
|
|
+ Map.of("month", "2025-01", "completionRate", 92.8, "avgResponseTime", 2.7, "reworkRate", 3.1, "satisfactionScore", 4.4, "topIssue", "设备故障"),
|
|
|
+ Map.of("month", "2025-02", "completionRate", 96.1, "avgResponseTime", 2.0, "reworkRate", 2.2, "satisfactionScore", 4.8, "topIssue", "公共区域卫生"),
|
|
|
+ Map.of("month", "2025-03", "completionRate", 94.7, "avgResponseTime", 2.3, "reworkRate", 2.8, "satisfactionScore", 4.6, "topIssue", "停车管理"),
|
|
|
+ Map.of("month", "2025-04", "completionRate", 93.2, "avgResponseTime", 2.5, "reworkRate", 2.9, "satisfactionScore", 4.5, "topIssue", "电梯维护"),
|
|
|
+ Map.of("month", "2025-05", "completionRate", 95.4, "avgResponseTime", 2.1, "reworkRate", 2.4, "satisfactionScore", 4.7, "topIssue", "公共设施维修"),
|
|
|
+ Map.of("month", "2025-06", "completionRate", 92.6, "avgResponseTime", 2.8, "reworkRate", 3.2, "satisfactionScore", 4.4, "topIssue", "设备故障"),
|
|
|
+ Map.of("month", "2025-07", "completionRate", 94.9, "avgResponseTime", 2.3, "reworkRate", 2.7, "satisfactionScore", 4.6, "topIssue", "公共区域卫生"),
|
|
|
+ Map.of("month", "2025-08", "completionRate", 93.5, "avgResponseTime", 2.6, "reworkRate", 3.0, "satisfactionScore", 4.5, "topIssue", "停车管理"),
|
|
|
+ Map.of("month", "2025-09", "completionRate", 95.8, "avgResponseTime", 2.0, "reworkRate", 2.2, "satisfactionScore", 4.8, "topIssue", "电梯维护"),
|
|
|
+ Map.of("month", "2025-10", "completionRate", 94.2, "avgResponseTime", 2.4, "reworkRate", 2.8, "satisfactionScore", 4.6, "topIssue", "公共设施维修")
|
|
|
+ );
|
|
|
+ }
|
|
|
+
|
|
|
+ // 查询业主档案(支持分页和条件查询)
|
|
|
+ @GetMapping("/estateManagementList")
|
|
|
+ public Map<String, Object> getDoorDevices() throws Exception {
|
|
|
+ List<Map<String, Object>> data = generateOwnerData();
|
|
|
+ PageData pd = this.getPageData();
|
|
|
+ String roomNo = pd.getString("roomNo");
|
|
|
+ String name = pd.getString("name");
|
|
|
+ // 条件过滤
|
|
|
+ if (roomNo != null && !roomNo.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("roomNo").toString().contains(roomNo))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if (name != null && !name.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("name").toString().contains(name))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页逻辑
|
|
|
+ int total = data.size();
|
|
|
+ int fromIndex = (pd.getInteger("pageNum") - 1) * pd.getInteger("pageSize");
|
|
|
+ int toIndex = Math.min(fromIndex + pd.getInteger("pageSize"), total);
|
|
|
+ List<Map<String, Object>> pageData = data.subList(fromIndex, toIndex);
|
|
|
+
|
|
|
+ // 返回结果
|
|
|
+ Map<String, Object> response = Map.of(
|
|
|
+ "msg", "操作成功",
|
|
|
+ "code", 200,
|
|
|
+ "data", Map.of("list", pageData,"total", total)
|
|
|
+ );
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 生成模拟的业主档案数据
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @GetMapping("/estateManagementFeeDataList")
|
|
|
+ public Map<String, Object> getFeeData() throws Exception {
|
|
|
+ List<Map<String, Object>> data = generateFeeData();
|
|
|
+ PageData pd = this.getPageData();
|
|
|
+ String billId = pd.getString("billId");
|
|
|
+ String feeType = pd.getString("feeType");
|
|
|
+ // 条件过滤
|
|
|
+ if (billId != null && !billId.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("billId").toString().contains(billId))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if (feeType != null && !feeType.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("feeType").toString().equalsIgnoreCase(feeType))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页逻辑
|
|
|
+ int total = data.size();
|
|
|
+ int fromIndex = (pd.getInteger("pageNum") - 1) * pd.getInteger("pageSize");
|
|
|
+ int toIndex = Math.min(fromIndex + pd.getInteger("pageSize"), total);
|
|
|
+ List<Map<String, Object>> pageData = data.subList(fromIndex, toIndex);
|
|
|
+
|
|
|
+ // 返回结果
|
|
|
+ Map<String, Object> response = Map.of(
|
|
|
+ "msg", "操作成功",
|
|
|
+ "code", 200,
|
|
|
+ "data", Map.of("list", pageData,"total", total)
|
|
|
+ );
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 设施设备台账
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @GetMapping("/estateManagementFacilityDataList")
|
|
|
+ public Map<String, Object> getFacilityData() throws Exception {
|
|
|
+ List<Map<String, Object>> data = generateFacilityData();
|
|
|
+ PageData pd = this.getPageData();
|
|
|
+ String deviceId = pd.getString("deviceId");
|
|
|
+ String deviceType = pd.getString("deviceType");
|
|
|
+ // 条件过滤
|
|
|
+ if (deviceId != null && !deviceId.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("deviceId").toString().contains(deviceId))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if (deviceType != null && !deviceType.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("deviceType").toString().equalsIgnoreCase(deviceType))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页逻辑
|
|
|
+ int total = data.size();
|
|
|
+ int fromIndex = (pd.getInteger("pageNum") - 1) * pd.getInteger("pageSize");
|
|
|
+ int toIndex = Math.min(fromIndex + pd.getInteger("pageSize"), total);
|
|
|
+ List<Map<String, Object>> pageData = data.subList(fromIndex, toIndex);
|
|
|
+
|
|
|
+ // 返回结果
|
|
|
+ Map<String, Object> response = Map.of(
|
|
|
+ "msg", "操作成功",
|
|
|
+ "code", 200,
|
|
|
+ "data", Map.of("list", pageData,"total", total)
|
|
|
+ );
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 安防监控中心
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @GetMapping("/estateManagementSecurityDataList")
|
|
|
+ public Map<String, Object> getSecurityData() throws Exception {
|
|
|
+ List<Map<String, Object>> data = generateSecurityData();
|
|
|
+ PageData pd = this.getPageData();
|
|
|
+ String cameraId = pd.getString("cameraId");
|
|
|
+ String location = pd.getString("location");
|
|
|
+ // 条件过滤
|
|
|
+ if (cameraId != null && !cameraId.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("cameraId").toString().contains(cameraId))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if (location != null && !location.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("location").toString().contains(location))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页逻辑
|
|
|
+ int total = data.size();
|
|
|
+ int fromIndex = (pd.getInteger("pageNum") - 1) * pd.getInteger("pageSize");
|
|
|
+ int toIndex = Math.min(fromIndex + pd.getInteger("pageSize"), total);
|
|
|
+ List<Map<String, Object>> pageData = data.subList(fromIndex, toIndex);
|
|
|
+
|
|
|
+ // 返回结果
|
|
|
+ Map<String, Object> response = Map.of(
|
|
|
+ "msg", "操作成功",
|
|
|
+ "code", 200,
|
|
|
+ "data", Map.of("list", pageData,"total", total)
|
|
|
+ );
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 工单调度平台
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @GetMapping("/estateManagementWorkOrderDataList")
|
|
|
+ public Map<String, Object> getWorkOrderData() throws Exception {
|
|
|
+ List<Map<String, Object>> data = generateWorkOrderData();
|
|
|
+ PageData pd = this.getPageData();
|
|
|
+ String orderId = pd.getString("orderId");
|
|
|
+ String type = pd.getString("type");
|
|
|
+ // 条件过滤
|
|
|
+ if (orderId != null && !orderId.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("orderId").toString().contains(orderId))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if (type != null && !type.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("type").toString().contains(type))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页逻辑
|
|
|
+ int total = data.size();
|
|
|
+ int fromIndex = (pd.getInteger("pageNum") - 1) * pd.getInteger("pageSize");
|
|
|
+ int toIndex = Math.min(fromIndex + pd.getInteger("pageSize"), total);
|
|
|
+ List<Map<String, Object>> pageData = data.subList(fromIndex, toIndex);
|
|
|
+
|
|
|
+ // 返回结果
|
|
|
+ Map<String, Object> response = Map.of(
|
|
|
+ "msg", "操作成功",
|
|
|
+ "code", 200,
|
|
|
+ "data", Map.of("list", pageData,"total", total)
|
|
|
+ );
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 工单调度平台
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @GetMapping("/estateManagementEnergyDataList")
|
|
|
+ public Map<String, Object> getEnergyData() throws Exception {
|
|
|
+ List<Map<String, Object>> data = generateEnergyData ();
|
|
|
+ PageData pd = this.getPageData();
|
|
|
+ String meterId = pd.getString("meterId");
|
|
|
+ String buildingNo = pd.getString("buildingNo");
|
|
|
+ // 条件过滤
|
|
|
+ if (meterId != null && !meterId.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("meterId").toString().contains(meterId))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if (buildingNo != null && !buildingNo.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("buildingNo").toString().contains(buildingNo))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页逻辑
|
|
|
+ int total = data.size();
|
|
|
+ int fromIndex = (pd.getInteger("pageNum") - 1) * pd.getInteger("pageSize");
|
|
|
+ int toIndex = Math.min(fromIndex + pd.getInteger("pageSize"), total);
|
|
|
+ List<Map<String, Object>> pageData = data.subList(fromIndex, toIndex);
|
|
|
+
|
|
|
+ // 返回结果
|
|
|
+ Map<String, Object> response = Map.of(
|
|
|
+ "msg", "操作成功",
|
|
|
+ "code", 200,
|
|
|
+ "data", Map.of("list", pageData,"total", total)
|
|
|
+ );
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 租赁资产管家
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @GetMapping("/estateManagementRentalDataList")
|
|
|
+ public Map<String, Object> getRentalData() throws Exception {
|
|
|
+ List<Map<String, Object>> data = generateRentalData();
|
|
|
+ PageData pd = this.getPageData();
|
|
|
+ String propertyId = pd.getString("propertyId");
|
|
|
+ String layout = pd.getString("layout");
|
|
|
+ // 条件过滤
|
|
|
+ if (propertyId != null && !propertyId.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("propertyId").toString().contains(propertyId))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if (layout != null && !layout.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("layout").toString().contains(layout))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页逻辑
|
|
|
+ int total = data.size();
|
|
|
+ int fromIndex = (pd.getInteger("pageNum") - 1) * pd.getInteger("pageSize");
|
|
|
+ int toIndex = Math.min(fromIndex + pd.getInteger("pageSize"), total);
|
|
|
+ List<Map<String, Object>> pageData = data.subList(fromIndex, toIndex);
|
|
|
+
|
|
|
+ // 返回结果
|
|
|
+ Map<String, Object> response = Map.of(
|
|
|
+ "msg", "操作成功",
|
|
|
+ "code", 200,
|
|
|
+ "data", Map.of("list", pageData,"total", total)
|
|
|
+ );
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 租赁资产管家
|
|
|
+ * @return
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ @GetMapping("/estateManagementWorkOrderAnalysisDataList")
|
|
|
+ public Map<String, Object> getWorkOrderAnalysisData() throws Exception {
|
|
|
+ List<Map<String, Object>> data = generateWorkOrderAnalysisData();
|
|
|
+ PageData pd = this.getPageData();
|
|
|
+ String timeRange = pd.getString("timeRange");
|
|
|
+ String topIssue = pd.getString("topIssue");
|
|
|
+
|
|
|
+ // 解析时间范围参数(独立字段示例)
|
|
|
+ String startMonth = pd.getString("timeRange[0]"); // 开始月份
|
|
|
+ String endMonth = pd.getString("timeRange[1]"); // 结束月份
|
|
|
+ // 时间范围过滤
|
|
|
+ if (startMonth != null && endMonth != null && !startMonth.isEmpty() && !endMonth.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> isWithinTimeRange((String) item.get("month"), startMonth, endMonth))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if (topIssue != null && !topIssue.isEmpty()) {
|
|
|
+ data = data.stream()
|
|
|
+ .filter(item -> item.get("topIssue").toString().contains(topIssue))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 分页逻辑
|
|
|
+ int total = data.size();
|
|
|
+ int fromIndex = (pd.getInteger("pageNum") - 1) * pd.getInteger("pageSize");
|
|
|
+ int toIndex = Math.min(fromIndex + pd.getInteger("pageSize"), total);
|
|
|
+ List<Map<String, Object>> pageData = data.subList(fromIndex, toIndex);
|
|
|
+
|
|
|
+ // 返回结果
|
|
|
+ Map<String, Object> response = Map.of(
|
|
|
+ "msg", "操作成功",
|
|
|
+ "code", 200,
|
|
|
+ "data", Map.of("list", pageData,"total", total)
|
|
|
+ );
|
|
|
+ return response;
|
|
|
+ }
|
|
|
+ /**
|
|
|
+ * 时间范围过滤方法(判断月份是否在[start, end]区间内)
|
|
|
+ */
|
|
|
+ private boolean isWithinTimeRange(String targetMonth, String startMonth, String endMonth) {
|
|
|
+ // 转换为年月数值(如:2024-01 -> 202401)
|
|
|
+ int target = Integer.parseInt(targetMonth.replace("-", ""));
|
|
|
+ int start = Integer.parseInt(startMonth.replace("-", ""));
|
|
|
+ int end = Integer.parseInt(endMonth.replace("-", ""));
|
|
|
+ return target >= start && target <= end;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询业主档案列表
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @GetMapping("/list")
|
|
|
+ public String list()
|
|
|
+ {
|
|
|
+ PageData pd = this.getPageData();
|
|
|
+ Response response = null;
|
|
|
+ try{
|
|
|
+ String name = "";
|
|
|
+ String appoint_time = "";
|
|
|
+ if (pd.containsKey("search")){
|
|
|
+ name = pd.getString("search");
|
|
|
+ }
|
|
|
+ if (pd.containsKey("appoint_time")){
|
|
|
+ appoint_time = pd.getString("appoint_time");
|
|
|
+ }
|
|
|
+ String info = "{\n" +
|
|
|
+ " \"date\": \""+pd.getString("date")+"\",\n" +
|
|
|
+ " \"search\": \""+name+"\",\n" +
|
|
|
+ " \"locationId\": [],\n" +
|
|
|
+ " \"capacity\": [],\n" +
|
|
|
+ " \"deviceType\": [],\n" +
|
|
|
+ " \"roomType\": [\n" +
|
|
|
+ " -1\n" +
|
|
|
+ " ],\n" +
|
|
|
+ " \"appoint_time\": \""+appoint_time+"\",\n" +
|
|
|
+ " \"status\": 1,\n" +
|
|
|
+ " \"page\": "+pd.getInteger("pageNum")+",\n" +
|
|
|
+ " \"page_size\": "+pd.getInteger("pageSize")+"\n" +
|
|
|
+ "}";
|
|
|
+ PageData interface_info = interfaceInfoService.selectInterfaceInfoByName(pd.getString("interfaceName"));
|
|
|
+
|
|
|
+ pd.put("url",interface_info.get("url"));
|
|
|
+ OkHttpClient client = new OkHttpClient().newBuilder()
|
|
|
+ .build();
|
|
|
+ MediaType mediaType = MediaType.parse("application/json");
|
|
|
+ RequestBody body = RequestBody.create(mediaType, info);
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url(interface_info.getString("url"))
|
|
|
+ .method("POST", body)
|
|
|
+ .addHeader("Content-Type", "application/json")
|
|
|
+ .build();
|
|
|
+ response = client.newCall(request).execute();
|
|
|
+ } catch (Exception e){
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ try {
|
|
|
+ return response.body().string();
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 查询历史记录
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @GetMapping("/listHistory")
|
|
|
+ public String listHistory() throws Exception {
|
|
|
+ PageData pd = this.getPageData();
|
|
|
+ // 获取接口地址
|
|
|
+ PageData interface_info = interfaceInfoService.selectInterfaceInfoByName(pd.getString("interfaceName"));
|
|
|
+ String url = interface_info.getString("url");
|
|
|
+
|
|
|
+ // 构造请求参数
|
|
|
+ Map<String, String> params = new HashMap<>();
|
|
|
+ params.put("date", pd.getString("date"));
|
|
|
+ params.put("search", pd.getString("search"));
|
|
|
+ //params.put("appoint_time", );
|
|
|
+ params.put("status", String.valueOf(pd.getInteger("status")));
|
|
|
+ params.put("page", String.valueOf(pd.getInteger("pageNum")));
|
|
|
+ params.put("pageSize", String.valueOf(pd.getInteger("pageSize")));
|
|
|
+ params.put("locationId", ""); // 空数组
|
|
|
+ params.put("capacity", ""); // 空数组
|
|
|
+ params.put("deviceType", ""); // 空数组
|
|
|
+ params.put("roomType", "-1");
|
|
|
+ params.put("is_external", String.valueOf(pd.getInteger("is_external")));
|
|
|
+
|
|
|
+ // 构造完整的 URL
|
|
|
+ StringBuilder urlBuilder = new StringBuilder(url);
|
|
|
+ boolean firstParam = true;
|
|
|
+ for (Map.Entry<String, String> entry : params.entrySet()) {
|
|
|
+ if (entry.getValue() != null && !entry.getValue().isEmpty()) {
|
|
|
+ if (firstParam) {
|
|
|
+ urlBuilder.append("?");
|
|
|
+ firstParam = false;
|
|
|
+ } else {
|
|
|
+ urlBuilder.append("&");
|
|
|
+ }
|
|
|
+ urlBuilder.append(URLEncoder.encode(entry.getKey(), StandardCharsets.UTF_8))
|
|
|
+ .append("=")
|
|
|
+ .append(URLEncoder.encode(entry.getValue(), StandardCharsets.UTF_8));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 使用 OkHttpClient 发送 GET 请求
|
|
|
+ OkHttpClient client = new OkHttpClient().newBuilder()
|
|
|
+ .build();
|
|
|
+
|
|
|
+ Request request = new Request.Builder()
|
|
|
+ .url(urlBuilder.toString())
|
|
|
+ .method("GET", null)
|
|
|
+ .build();
|
|
|
+
|
|
|
+ try (Response response = client.newCall(request).execute()) {
|
|
|
+ if (!response.isSuccessful()) {
|
|
|
+ throw new RuntimeException("External API call failed with status code: " + response.code());
|
|
|
+ }
|
|
|
+ return response.body().string();
|
|
|
+ } catch (IOException e) {
|
|
|
+ throw new RuntimeException("Error calling external API", e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|