Bläddra i källkod

fix(access-control): 修复权限时间范围计算并完善手动添加用户示例

- 修正当存在多个订单时,权限结束时间改为基于 endDate 参数计算
- 结束时间支持应用于最晚日期,增强时间段权限设置的准确性
- 更新 main 函数示例,支持批量设备序列号处理添加用户和人脸
- 增加控制台输出,详细展示每个设备的用户添加和人脸添加结果
- 优化示例代码结构,提高可读性及可维护性
SheepHy 12 timmar sedan
förälder
incheckning
52b7c6357b

+ 65 - 45
national-motion-module-system/national-motion-system-biz/src/main/java/org/jeecg/modules/hikiot/HikiotTool.java

@@ -249,12 +249,22 @@ public class HikiotTool {
             if(parts.length == 2 && parts[0].contains(":")) {
                 // 格式1: 场地预约type=0的当日时间段 "HH:mm:ss-HH:mm:ss"
                 // 示例: "18:00:00-22:00:00" 表示当天18:00到22:00
+                // 修复:当存在多个订单时,需要考虑endDate参数来扩展权限时间范围
                 try {
                     LocalTime customStartTime = LocalTime.parse(parts[0]);
                     LocalTime customEndTime = LocalTime.parse(parts[1]);
-                    // 开始时间和结束时间都应用到同一天(inputDate)
-                    startOfDay = now.with(customStartTime);  // 2025-11-05T18:00:00
-                    endOfDay = now.with(customEndTime);      // 2025-11-05T22:00:00
+                    // 开始时间应用到inputDate(最早日期)
+                    startOfDay = now.with(customStartTime);
+                    
+                    // 结束时间应用到endDate(最晚日期,如果提供了的话)
+                    if(null != endDate){
+                        LocalDateTime endDateTime = endDate.toInstant()
+                                .atZone(ZoneId.systemDefault())
+                                .toLocalDateTime();
+                        endOfDay = endDateTime.with(customEndTime);
+                    } else {
+                        endOfDay = now.with(customEndTime);
+                    }
                     
                     System.out.println("[HikiotTool.addUser] 格式1-应用时间段后 startOfDay: " + startOfDay);
                     System.out.println("[HikiotTool.addUser] 格式1-应用时间段后 endOfDay: " + endOfDay);
@@ -645,58 +655,68 @@ public class HikiotTool {
     }
 
     public static void main(String[] args) throws IOException, InterruptedException {
-        System.out.println("========== 场地订单门禁权限测试 ==========");
+        System.out.println("========== 手动添加用户到海康门禁系统 ==========");
+        
+        // 订单信息
+        String useDateStr = "2025-12-16";
+        String name = "李帅";
+        String employeeNo = "1998889706633400321";
+        String frameTimeStr = "18:00:00-22:00:00";
+        String faceUrl = "https://national-motion.oss-cn-beijing.aliyuncs.com/opt/upFiles/tmp_ce50fb4c32b66f855f4899a6e24bd21fd57f42955aaa3295_1765631550971.jpg";
+        
+        // 两个设备序列号
+        String[] deviceSerials = {"FZ0080597", "FZ0080608"};
+        
         System.out.println("订单信息:");
-        System.out.println("  订单ID: 1998692909877137409");
-        System.out.println("  用户名: 黎建均");
-        System.out.println("  使用日期: 2025-12-10");
-        System.out.println("  时间段: 17:00:00-18:00:00");
-        System.out.println("  过期时间: 2025-12-10 18:00:00");
-        System.out.println("  设备序列号: EZAHSYEHGM05477");
-        System.out.println("  员工编号: 1997909843353112577");
+        System.out.println("  用户名: " + name);
+        System.out.println("  员工编号: " + employeeNo);
+        System.out.println("  使用日期: " + useDateStr);
+        System.out.println("  时间段: " + frameTimeStr);
+        System.out.println("  人脸照片: " + faceUrl);
         System.out.println();
         
-        // 模拟从 useDateStr 解析日期
-        String useDateStr = "2025-12-10";
+        // 解析日期
         LocalDate useDate = LocalDate.parse(useDateStr);
-        System.out.println("1. 解析useDateStr: " + useDateStr + " -> " + useDate);
-        
-        // 将LocalDate转换为Date,使用正午12:00避免时区问题
         Date inputDate = Date.from(useDate.atTime(12, 0).atZone(ZoneId.systemDefault()).toInstant());
-        System.out.println("2. 转换为Date(使用12:00): " + inputDate);
-        System.out.println("   时区: " + ZoneId.systemDefault());
-        System.out.println();
-        
-        // 调用addUser方法
-        String deviceSerial = "FY2389310";
-        String name = "黎建均";
-        String employeeNo = "1997909843353112577";
-        String frameTimeStr = "18:00:00-22:00:00";
-        
-        System.out.println("3. 调用addUser方法");
-        System.out.println("   inputDate: " + inputDate);
-        System.out.println("   endDate: " + inputDate + " (同一天)");
-        System.out.println("   frameTimeStr: " + frameTimeStr);
+        System.out.println("解析日期: " + useDateStr + " -> " + inputDate);
         System.out.println();
         
-        try {
-            String result = addUser(inputDate, deviceSerial, name, employeeNo, inputDate, frameTimeStr);
-            System.out.println("4. addUser返回结果:");
-            System.out.println(result);
-            System.out.println();
+        // 遍历所有设备
+        for (String deviceSerial : deviceSerials) {
+            System.out.println("---------- 处理设备: " + deviceSerial + " ----------");
             
-            // 解析返回结果
-            JsonObject resultJson = JsonParser.parseString(result).getAsJsonObject();
-            if (resultJson.get("code").getAsInt() == 0) {
-                System.out.println("✅ 测试成功!门禁权限设置成功");
-            } else {
-                System.out.println("❌ 测试失败: " + resultJson.get("msg").getAsString());
+            try {
+                // 1. 添加用户
+                System.out.println("1. 调用addUser...");
+                String addUserResult = addUser(inputDate, deviceSerial, name, employeeNo, inputDate, frameTimeStr);
+                System.out.println("   addUser返回: " + addUserResult);
+                
+                JsonObject addUserJson = JsonParser.parseString(addUserResult).getAsJsonObject();
+                if (addUserJson.get("code").getAsInt() == 0) {
+                    System.out.println("   ✅ 用户添加成功");
+                } else {
+                    System.out.println("   ❌ 用户添加失败: " + addUserJson.get("msg").getAsString());
+                }
+                
+                // 2. 添加人脸
+                System.out.println("2. 调用addFace...");
+                String addFaceResult = addFace(deviceSerial, employeeNo, faceUrl);
+                System.out.println("   addFace返回: " + addFaceResult);
+                
+                JsonObject addFaceJson = JsonParser.parseString(addFaceResult).getAsJsonObject();
+                if (addFaceJson.get("code").getAsInt() == 0) {
+                    System.out.println("   ✅ 人脸添加成功");
+                } else {
+                    System.out.println("   ❌ 人脸添加失败: " + addFaceJson.get("msg").getAsString());
+                }
+                
+            } catch (Exception e) {
+                System.err.println("   ❌ 处理异常: " + e.getMessage());
+                e.printStackTrace();
             }
-        } catch (Exception e) {
-            System.err.println("❌ 测试异常: " + e.getMessage());
-            e.printStackTrace();
+            System.out.println();
         }
         
-        System.out.println("\n========== 测试结束 ==========");
+        System.out.println("========== 处理完成 ==========");
     }
 }