11
tjx
10 小时以前 ce7738b672326ccbb36aca1a90c60b184be707f7
src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
@@ -9,6 +9,8 @@
import com.gs.dingtalk.service.SimpleExample;
import com.gs.dingtalk.service.VwCjScSjTsBbService;
import com.gs.dingtalk.service.WorkWXService;
import com.gs.dingtalk.service.QwCheckinDayDataService;
import com.gs.dingtalk.service.QwHardwareCheckinDataService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@@ -33,6 +35,12 @@
    @Autowired
    private QwCheckinDataService qwCheckinDataService;
    @Autowired
    private QwCheckinDayDataService qwCheckinDayDataService;
    @Autowired
    private QwHardwareCheckinDataService qwHardwareCheckinDataService;
    /**
     * 测试导出生产数据并发送钉钉消息
@@ -280,19 +288,16 @@
                    // 打印异常信息
                    if (data.getExceptionInfos() != null && !data.getExceptionInfos().isEmpty()) {
                        data.getExceptionInfos().forEach(ex -> {
                            String exType = switch (ex.getException()) {
                                case 1 -> "迟到";
                                case 2 -> "早退";
                                case 3 -> "缺卡";
                                case 4 -> "旷工";
                                case 5 -> "地点异常";
                                case 6 -> "设备异常";
                                default -> "未知";
                            };
                            String exType = getExceptionTypeName(ex.getException());
                            System.out.println("      异常: " + exType + ", 次数: " + ex.getCount() + ", 时长(秒): " + ex.getDuration());
                        });
                    }
                });
                // 保存到数据库
                System.out.println("  - 开始保存打卡日报数据到数据库...");
                int insertCount = qwCheckinDayDataService.saveDayDataBatch(dayDataList);
                System.out.println("✓ 保存完成,新增记录数: " + insertCount + ", 更新(已存在): " + (dayDataList.size() - insertCount));
            } else {
                System.out.println("✗ 获取的打卡日报数据为空");
            }
@@ -356,15 +361,7 @@
                    if (data.getExceptionInfos() != null && !data.getExceptionInfos().isEmpty()) {
                        System.out.println("  异常信息:");
                        data.getExceptionInfos().forEach(ex -> {
                            String exType = switch (ex.getException()) {
                                case 1 -> "迟到";
                                case 2 -> "早退";
                                case 3 -> "缺卡";
                                case 4 -> "旷工";
                                case 5 -> "地点异常";
                                case 6 -> "设备异常";
                                default -> "未知";
                            };
                            String exType = getExceptionTypeName(ex.getException());
                            System.out.println("    - " + exType + ": " + ex.getCount() + "次, 时长: " + formatSeconds(ex.getDuration()));
                        });
                    }
@@ -403,4 +400,129 @@
        return sb.toString();
    }
    /**
     * 获取异常类型名称
     * @param exceptionType 异常类型代码:1-迟到;2-早退;3-缺卡;4-旷工;5-地点异常;6-设备异常
     */
    private String getExceptionTypeName(Integer exceptionType) {
        if (exceptionType == null) {
            return "未知";
        }
        switch (exceptionType) {
            case 1:
                return "迟到";
            case 2:
                return "早退";
            case 3:
                return "缺卡";
            case 4:
                return "旷工";
            case 5:
                return "地点异常";
            case 6:
                return "设备异常";
            default:
                return "未知";
        }
    }
    /**
     * 测试获取设备打卡数据
     * 接口限制:时间跨度不超过一个月,用户列表不超过100个
     */
    @Test
    void testGetHardwareCheckinData() {
        System.out.println("=== 开始测试获取设备打卡数据 ===");
        try {
            long currentTime = System.currentTimeMillis() / 1000;
            long oneDaySeconds = 86400;
            // 获取昨天的设备打卡数据
            long yesterdayStart = ((currentTime / oneDaySeconds) - 1) * oneDaySeconds;
            long yesterdayEnd = yesterdayStart + oneDaySeconds - 1;
            System.out.println("  - 开始时间: " + new java.util.Date(yesterdayStart * 1000));
            System.out.println("  - 结束时间: " + new java.util.Date(yesterdayEnd * 1000));
            // 获取用户总数
            long totalUsers = qwStaffMapper.selectCount(new LambdaQueryWrapper<QwStaff>()
                    .isNotNull(QwStaff::getAccount)
                    .ne(QwStaff::getAccount, ""));
            System.out.println("  - QW_STAFF表用户总数: " + totalUsers);
            List<WorkWXService.HardwareCheckinData> dataList = workWXService.getHardwareCheckinDataByQwStaff(yesterdayStart, yesterdayEnd);
            if (dataList != null && !dataList.isEmpty()) {
                System.out.println("✓ 成功获取设备打卡数据");
                System.out.println("  - 设备打卡记录总数: " + dataList.size());
                System.out.println("  - 前10条数据:");
                dataList.stream().limit(10).forEach(data -> {
                    System.out.println("    * userid: " + data.getUserid() +
                            ", 打卡时间: " + new java.util.Date(data.getCheckinTime() * 1000) +
                            ", 设备SN: " + data.getDeviceSn() +
                            ", 设备名称: " + data.getDeviceName());
                });
                // 保存到数据库
                System.out.println("  - 开始保存设备打卡数据到数据库...");
                int insertCount = qwHardwareCheckinDataService.saveHardwareDataBatch(dataList);
                System.out.println("✓ 保存完成,新增记录数: " + insertCount + ", 更新(已存在): " + (dataList.size() - insertCount));
            } else {
                System.out.println("✗ 获取的设备打卡数据为空(可能无设备打卡记录或接口未开通)");
            }
        } catch (IOException e) {
            System.out.println("✗ 获取设备打卡数据失败: " + e.getMessage());
            e.printStackTrace();
        }
        System.out.println("=== 测试结束 ===");
    }
    /**
     * 测试同步昨天的设备打卡数据
     */
    @Test
    void testSyncYesterdayHardwareData() {
        System.out.println("=== 开始测试同步昨天设备打卡数据 ===");
        try {
            int insertCount = qwHardwareCheckinDataService.syncYesterdayHardwareData();
            System.out.println("✓ 同步完成,新增记录数: " + insertCount);
        } catch (IOException e) {
            System.out.println("✗ 同步设备打卡数据失败: " + e.getMessage());
            e.printStackTrace();
        }
        System.out.println("=== 测试结束 ===");
    }
    /**
     * 测试同步指定日期范围的设备打卡数据
     */
    @Test
    void testSyncHardwareDataByDateRange() {
        System.out.println("=== 开始测试同步指定日期范围的设备打卡数据 ===");
        try {
            long currentTime = System.currentTimeMillis() / 1000;
            long oneDaySeconds = 86400;
            // 同步最近7天的数据
            long endTime = ((currentTime / oneDaySeconds) - 1) * oneDaySeconds + oneDaySeconds - 1;  // 昨天23:59:59
            long startTime = endTime - 7 * oneDaySeconds + 1;  // 7天前00:00:00
            System.out.println("  - 开始时间: " + new java.util.Date(startTime * 1000));
            System.out.println("  - 结束时间: " + new java.util.Date(endTime * 1000));
            int insertCount = qwHardwareCheckinDataService.syncHardwareData(startTime, endTime);
            System.out.println("✓ 同步完成,新增记录数: " + insertCount);
        } catch (IOException e) {
            System.out.println("✗ 同步设备打卡数据失败: " + e.getMessage());
            e.printStackTrace();
        }
        System.out.println("=== 测试结束 ===");
    }
}