From 95e16a3a6877d104d61cb0f99321a31784fcceda Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期二, 23 十二月 2025 11:13:02 +0800
Subject: [PATCH] 111

---
 src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java |  287 +++++++++++++++++++++++++++++++++++++++++++++++++++++----
 1 files changed, 265 insertions(+), 22 deletions(-)

diff --git a/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java b/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
index f68756b..61713ad 100644
--- a/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
+++ b/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
@@ -1,58 +1,301 @@
 package com.gs.dingtalk;
 
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.gs.dingtalk.config.URLEncoder;
+import com.gs.dingtalk.entity.QwStaff;
+import com.gs.dingtalk.mapper.QwStaffMapper;
+import com.gs.dingtalk.service.QwCheckinDataService;
 import com.gs.dingtalk.service.SendDingtalkService;
 import com.gs.dingtalk.service.SimpleExample;
+import com.gs.dingtalk.service.VwCjScSjTsBbService;
+import com.gs.dingtalk.service.WorkWXService;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.List;
 
 @SpringBootTest
 class DeviceReceivingApplicationTests {
 
 
     @Autowired
-    private SimpleExample simpleExample;
+    private VwCjScSjTsBbService vwCjScSjTsBbService;
 
     @Autowired
-    private SendDingtalkService sendDingtalkService;
+    private WorkWXService workWXService;
 
+    @Autowired
+    private QwStaffMapper qwStaffMapper;
+
+    @Autowired
+    private QwCheckinDataService qwCheckinDataService;
+
+    /**
+     * 娴嬭瘯瀵煎嚭鐢熶骇鏁版嵁骞跺彂閫侀拤閽夋秷鎭�
+     * 鍔熻兘锛氭煡璇W_CJ_SC_SJ_TS_BB琛ㄦ暟鎹� -> 瀵煎嚭Excel -> 鍙戦�侀拤閽夋枃浠舵秷鎭�
+     */
     @Test
-    void contextLoads() {
-        //FFFFFFFE
-        long decimal = Long.parseLong("FFFFFFFE", 16);  // 灏�16杩涘埗瀛楃涓茶浆鎹负long绫诲瀷鐨�10杩涘埗鏁�
-        BigDecimal a = new BigDecimal(String.valueOf((int) decimal));
-        BigDecimal b = new BigDecimal("1000");
-        BigDecimal c = a.divide(b, 3, RoundingMode.HALF_UP);
-        System.out.println(c);
+    void testExportAndSendProductionData() throws Exception {
+        System.out.println("=== 寮�濮嬫祴璇曞鍑虹敓浜ф暟鎹苟鍙戦�侀拤閽� ===");
+
+        try {
+            boolean result = vwCjScSjTsBbService.exportAndSendToDingtalk();
+
+            if (result) {
+                System.out.println("鉁� 鐢熶骇鏁版嵁瀵煎嚭骞跺彂閫佹垚鍔�");
+                System.out.println("  - 鏁版嵁宸蹭粠 VW_CJ_SC_SJ_TS_BB 琛ㄦ煡璇�");
+                System.out.println("  - Excel 鏂囦欢宸茬敓鎴愬苟淇濆瓨鍒� D:\\BIFile\\");
+                System.out.println("  - 閽夐拤鏂囦欢娑堟伅宸插彂閫�");
+            } else {
+                System.out.println("鉁� 鐢熶骇鏁版嵁瀵煎嚭鎴栧彂閫佸け璐�");
+            }
+        } catch (Exception e) {
+            System.out.println("鉁� 瀵煎嚭骞跺彂閫佹椂鍙戠敓寮傚父: " + e.getMessage());
+            e.printStackTrace();
+        }
+
+        System.out.println("=== 娴嬭瘯缁撴潫 ===");
     }
 
     @Test
-    void cont() {
-//        long resultCode = Long.parseLong("00000001");
-//        int result = (int) resultCode;
-//        System.out.println(result);
+    void testGetCheckinDataByQwStaff() {
+        System.out.println("=== 寮�濮嬫祴璇曢�氳繃QW_STAFF琛ㄨ幏鍙栨墦鍗℃暟鎹� ===");
 
-        String encode = URLEncoder.encode("");
-        System.out.println(encode);
+        // 浼佷笟寰俊鎵撳崱鎺ュ彛闄愬埗锛�
+        // 1. 鑾峰彇璁板綍鏃堕棿璺ㄥ害涓嶈秴杩�30澶�
+        // 2. 鐢ㄦ埛鍒楄〃涓嶈秴杩�100涓�傝嫢鐢ㄦ埛瓒呰繃100涓紝璇峰垎鎵硅幏鍙栵紙宸插湪Service灞傚疄鐜拌嚜鍔ㄥ垎鎵癸級
+        // 3. 鎺ュ彛杩斿洖鏈�澶�3000鏉℃墦鍗℃暟鎹�
+        // 4. 鏍囧噯鎵撳崱鏃堕棿鍙浜庡浐瀹氭帓鐝拰鑷畾涔夋帓鐝袱绉嶇被鍨嬫湁鏁�
+        // 5. 鎺ュ彛璋冪敤棰戠巼闄愬埗涓�600娆�/鍒嗛挓锛堝凡鍦⊿ervice灞傚疄鐜版壒娆¢棿寤惰繜锛�
+
+        //鎺ュ彛杩斿洖鐨勫師濮嬫暟鎹�
+        //{
+        //   "errcode":0,
+        //   "errmsg":"ok",
+        //   "checkindata": [{
+        //		"userid" : "james",
+        //		"groupname" : "鎵撳崱涓�缁�",
+        //		"checkin_type" : "涓婄彮鎵撳崱",
+        //		"exception_type" : "鍦扮偣寮傚父",
+        //		"checkin_time" : 1492617610,
+        //		"location_title" : "渚濇緶搴�",
+        //		"location_detail" : "鍥涘窛鐪佹垚閮藉競姝︿警鍖虹泭宸炲ぇ閬撲腑娈�784鍙烽檮杩�",
+        //		"wifiname" : "鍔炲叕涓�鍖�",
+        //		"notes" : "璺笂鍫佃溅锛岃繜鍒颁簡5鍒嗛挓",
+        //		"wifimac" : "3c:46:d8:0c:7a:70",
+        //		"mediaids":["WWCISP_G8PYgRaOVHjXWUWFqchpBqqqUpGj0OyR9z6WTwhnMZGCPHxyviVstiv_2fTG8YOJq8L8zJT2T2OvTebANV-2MQ"],
+        //		"sch_checkin_time" : 1492617610,
+        //		"groupid" : 1,
+        //		"schedule_id" : 0,
+        //		"timeline_id" : 2
+        //	},{
+        //		"userid" : "paul",
+        //		"groupname" : "鎵撳崱浜岀粍",
+        //		"checkin_type" : "澶栧嚭鎵撳崱",
+        //		"exception_type" : "鏃堕棿寮傚父",
+        //		"checkin_time" : 1492617620,
+        //		"location_title" : "閲嶅簡鍑哄彛鍔犲伐鍖�",
+        //		"location_detail" : "閲嶅簡甯傛笣鍖楀尯閲戞笣澶ч亾101鍙烽噾娓濆ぇ閬�",
+        //		"wifiname" : "鍔炲叕瀹や簩鍖�",
+        //		"notes" : "",
+        //		"wifimac" : "3c:46:d8:0c:7a:71",
+        //		"mediaids":["WWCISP_G8PYgRaOVHjXWUWFqchpBqqqUpGj0OyR9z6WTwhnMZGCPHxyviVstiv_2fTG8YOJq8L8zJT2T2OvTebANV-2MQ"],
+        //		"lat": 30547645,
+        //        "lng": 104063236,
+        //		"deviceid":"E5FA89F6-3926-4972-BE4F-4A7ACF4701E2",
+        //		"sch_checkin_time" : 1492617610,
+        //		"groupid" : 2,
+        //		"schedule_id" : 3,
+        //		"timeline_id" : 1
+        //	}]
+        //}
+
+        //checkindata鐨勫瓧娈佃鏄�
+        //userid	鐢ㄦ埛id
+        //groupname	鎵撳崱瑙勫垯鍚嶇О
+        //checkin_type	鎵撳崱绫诲瀷銆傚瓧绗︿覆锛岀洰鍓嶆湁锛氫笂鐝墦鍗★紝涓嬬彮鎵撳崱锛屽鍑烘墦鍗★紝浠呰褰曟墦鍗℃椂闂村拰浣嶇疆
+        //exception_type	寮傚父绫诲瀷锛屽瓧绗︿覆锛屽寘鎷細鏃堕棿寮傚父锛屽湴鐐瑰紓甯革紝鏈墦鍗★紝wifi寮傚父锛岄潪甯哥敤璁惧銆傚鏋滄湁澶氫釜寮傚父锛屼互鍒嗗彿闂撮殧
+        //checkin_time	鎵撳崱鏃堕棿銆俇nix鏃堕棿鎴�
+        //location_title	鎵撳崱鍦扮偣title
+        //location_detail	鎵撳崱鍦扮偣璇︽儏
+        //wifiname	鎵撳崱wifi鍚嶇О
+        //notes	鎵撳崱澶囨敞
+        //wifimac	鎵撳崱鐨凪AC鍦板潃/bssid
+        //mediaids	鎵撳崱鐨勯檮浠秏edia_id锛屽彲浣跨敤media/get鑾峰彇闄勪欢
+        //lat	浣嶇疆鎵撳崱鍦扮偣绾害锛屾槸瀹為檯绾害鐨�1000000鍊嶏紝涓庤吘璁湴鍥句竴鑷撮噰鐢℅CJ-02鍧愭爣绯荤粺鏍囧噯
+        //lng	浣嶇疆鎵撳崱鍦扮偣缁忓害锛屾槸瀹為檯缁忓害鐨�1000000鍊嶏紝涓庤吘璁湴鍥句竴鑷撮噰鐢℅CJ-02鍧愭爣绯荤粺鏍囧噯
+        //deviceid	鎵撳崱璁惧id
+        //sch_checkin_time	鏍囧噯鎵撳崱鏃堕棿锛屾寚姝ゆ鎵撳崱鏃堕棿瀵瑰簲鐨勬爣鍑嗕笂鐝椂闂存垨鏍囧噯涓嬬彮鏃堕棿
+        //groupid	瑙勫垯id锛岃〃绀烘墦鍗¤褰曟墍灞炶鍒欑殑id
+        //schedule_id	鐝id锛岃〃绀烘墦鍗¤褰曟墍灞炶鍒欎腑锛屾墍灞炵彮娆$殑id
+        //timeline_id	鏃舵id锛岃〃绀烘墦鍗¤褰曟墍灞炶鍒欎腑锛屾煇涓�鐝涓殑鏌愪竴鏃舵鐨刬d锛屽涓婁笅鐝椂闂翠负9:00-12:00銆�13:00-18:00鐨勭彮娆′腑锛�9:00-12:00涓哄叾涓竴缁勬椂娈�
+
+        try {
+            long currentTime = System.currentTimeMillis() / 1000;
+            long oneDaySeconds = 86400;
+            long thirtyDaysSeconds = 30 * oneDaySeconds;
+
+            long endTime = (currentTime / oneDaySeconds) * oneDaySeconds - 1;
+            long startTime = endTime - oneDaySeconds + 1;
+
+            // 楠岃瘉鏃堕棿璺ㄥ害涓嶈秴杩�30澶�
+            long timeSpan = endTime - startTime;
+            if (timeSpan > thirtyDaysSeconds) {
+                System.out.println("鉁� 鏃堕棿璺ㄥ害瓒呰繃30澶╅檺鍒�: " + (timeSpan / oneDaySeconds) + "澶�");
+                return;
+            }
+
+            System.out.println("  - 寮�濮嬫椂闂�: " + new java.util.Date(startTime * 1000));
+            System.out.println("  - 缁撴潫鏃堕棿: " + new java.util.Date(endTime * 1000));
+            System.out.println("  - 鏃堕棿璺ㄥ害: " + (timeSpan / oneDaySeconds) + "澶� (闄愬埗: 鈮�30澶�)");
+
+            // 鑾峰彇鐢ㄦ埛鎬绘暟
+            long totalUsers = qwStaffMapper.selectCount(new LambdaQueryWrapper<QwStaff>()
+                    .isNotNull(QwStaff::getAccount)
+                    .ne(QwStaff::getAccount, ""));
+            System.out.println("  - QW_STAFF琛ㄧ敤鎴锋�绘暟: " + totalUsers);
+            if (totalUsers > 100) {
+                int batchCount = (int) ((totalUsers + 99) / 100);
+                System.out.println("  - 灏嗚嚜鍔ㄥ垎鎵瑰鐞�: " + batchCount + "鎵� (姣忔壒鈮�100鐢ㄦ埛)");
+            }
+
+            List<WorkWXService.CheckinData> checkinDataList = workWXService.getCheckinDataByQwStaff(startTime, endTime);
+
+            if (checkinDataList != null && !checkinDataList.isEmpty()) {
+                System.out.println("鉁� 鎴愬姛鑾峰彇鎵撳崱鏁版嵁");
+                System.out.println("  - 鎵撳崱璁板綍鎬绘暟: " + checkinDataList.size());
+                System.out.println("  - 鍓�5鏉℃暟鎹�:");
+                checkinDataList.stream().limit(5).forEach(data -> {
+                    System.out.println("    * userid: " + data.getUserid() +
+                            ", 鎵撳崱鏃堕棿: " + new java.util.Date(data.getCheckinTime() * 1000) +
+                            ", 鎵撳崱绫诲瀷: " + data.getCheckinType() +
+                            ", 寮傚父绫诲瀷: " + data.getExceptionType() +
+                            ", 鍦扮偣: " + data.getLocationDetail());
+                });
+
+                // 淇濆瓨鍒版暟鎹簱
+                System.out.println("  - 寮�濮嬩繚瀛樺埌鏁版嵁搴�...");
+                int insertCount = qwCheckinDataService.saveCheckinDataBatch(checkinDataList);
+                System.out.println("鉁� 淇濆瓨瀹屾垚锛屾柊澧炶褰曟暟: " + insertCount + ", 璺宠繃(宸插瓨鍦�): " + (checkinDataList.size() - insertCount));
+            } else {
+                System.out.println("鉁� 鑾峰彇鐨勬墦鍗℃暟鎹负绌猴紙鍙兘QW_STAFF琛ㄦ棤鏁版嵁鎴栨椂闂磋寖鍥村唴鏃犳墦鍗¤褰曪級");
+            }
+        } catch (IOException e) {
+            System.out.println("鉁� 鑾峰彇鎵撳崱鏁版嵁澶辫触: " + e.getMessage());
+            e.printStackTrace();
+        }
+
+        System.out.println("=== 娴嬭瘯缁撴潫 ===");
     }
 
     @Test
-    void getPhone() throws Exception {
-        sendDingtalkService.getDingTalkUserId();
+    void testGetCheckinDataById() {
+        System.out.println("=== 寮�濮嬫祴璇曢�氳繃QW_STAFF琛ㄨ幏鍙栨墦鍗℃暟鎹� ===");
+        QwStaff qwStaff = qwStaffMapper.selectById(3);
+
+        if (qwStaff == null || qwStaff.getAccount() == null || qwStaff.getAccount().isEmpty()) {
+            System.out.println("鉁� 鏈壘鍒癐D涓�3鐨勫憳宸ユ垨鍛樺伐account涓虹┖");
+            return;
+        }
+
+        System.out.println("  - 鍛樺伐濮撳悕: " + qwStaff.getName());
+        System.out.println("  - 鍛樺伐璐﹀彿: " + qwStaff.getAccount());
+
+        try {
+            long currentTime = System.currentTimeMillis() / 1000;
+            long oneDaySeconds = 86400;
+            long thirtyDaysSeconds = 30 * oneDaySeconds;
+
+            // 鏄ㄥぉ缁撴潫鏃堕棿锛�23:59:59锛�
+            long yesterdayEnd = ((currentTime / oneDaySeconds) - 1) * oneDaySeconds + oneDaySeconds - 1;
+            // 20澶╁墠寮�濮嬫椂闂达紙00:00:00锛�
+            long twentyDaysAgoStart = yesterdayEnd - 20 * oneDaySeconds + 1;
+
+            long endTime = yesterdayEnd;
+            long startTime = twentyDaysAgoStart;
+
+            // 楠岃瘉鏃堕棿璺ㄥ害涓嶈秴杩�30澶�
+            long timeSpan = endTime - startTime;
+            if (timeSpan > thirtyDaysSeconds) {
+                System.out.println("鉁� 鏃堕棿璺ㄥ害瓒呰繃30澶╅檺鍒�: " + (timeSpan / oneDaySeconds) + "澶�");
+                return;
+            }
+
+            System.out.println("  - 寮�濮嬫椂闂�: " + new java.util.Date(startTime * 1000) + " (20澶╁墠)");
+            System.out.println("  - 缁撴潫鏃堕棿: " + new java.util.Date(endTime * 1000) + " (鏄ㄥぉ)");
+            System.out.println("  - 鏃堕棿璺ㄥ害: " + (timeSpan / oneDaySeconds) + "澶�");
+
+            List<String> useridList = new java.util.ArrayList<>();
+            useridList.add(qwStaff.getAccount());
+
+            List<WorkWXService.CheckinData> checkinDataList = workWXService.getCheckinData(startTime, endTime, useridList);
+
+            if (checkinDataList != null && !checkinDataList.isEmpty()) {
+                System.out.println("鉁� 鎴愬姛鑾峰彇鎵撳崱鏁版嵁");
+                System.out.println("  - 鎵撳崱璁板綍鎬绘暟: " + checkinDataList.size());
+                checkinDataList.forEach(data -> {
+                    System.out.println("    * 鎵撳崱鏃堕棿: " + new java.util.Date(data.getCheckinTime() * 1000) +
+                            ", 鎵撳崱绫诲瀷: " + data.getCheckinType() +
+                            ", 寮傚父绫诲瀷: " + data.getExceptionType() +
+                            ", 鍦扮偣: " + data.getLocationDetail());
+                });
+            } else {
+                System.out.println("鉁� 璇ュ憳宸ュ湪鏃堕棿鑼冨洿鍐呮棤鎵撳崱璁板綍");
+            }
+        } catch (IOException e) {
+            System.out.println("鉁� 鑾峰彇鎵撳崱鏁版嵁澶辫触: " + e.getMessage());
+            e.printStackTrace();
+        }
+
+        System.out.println("=== 娴嬭瘯缁撴潫 ===");
     }
 
     @Test
-    void sendDingTalk() throws Exception {
-        sendDingtalkService.sendDingTalkFiveMinute();
+    void testGetWorkWXUserList() {
+        System.out.println("=== 寮�濮嬫祴璇曡幏鍙栦紒涓氬井淇$敤鎴峰垪琛� ===");
+
+        try {
+            List<WorkWXService.WorkWXUser> userList = workWXService.getUserList();
+
+            if (userList != null && !userList.isEmpty()) {
+                System.out.println("鉁� 鎴愬姛鑾峰彇浼佷笟寰俊鐢ㄦ埛鍒楄〃");
+                System.out.println("  - 鐢ㄦ埛鎬绘暟: " + userList.size());
+                System.out.println("  - 鍓�10鏉℃暟鎹�:");
+                userList.stream().limit(10).forEach(user -> {
+                    System.out.println("    * userid: " + user.getUserid() +
+                            ", 濮撳悕: " + user.getName() +
+                            ", 閮ㄩ棬: " + user.getDepartment());
+                });
+            } else {
+                System.out.println("鉁� 鑾峰彇鐨勭敤鎴峰垪琛ㄤ负绌�");
+            }
+        } catch (IOException e) {
+            System.out.println("鉁� 鑾峰彇鐢ㄦ埛鍒楄〃澶辫触: " + e.getMessage());
+            e.printStackTrace();
+        }
+
+        System.out.println("=== 娴嬭瘯缁撴潫 ===");
     }
 
-    //chatSendMessage
     @Test
-    void chatSendMessage() throws Exception {
-        sendDingtalkService.chatSendMessage();
+    void testSyncUsersToQwStaff() {
+        System.out.println("=== 寮�濮嬫祴璇曞悓姝ヤ紒涓氬井淇$敤鎴峰埌QW_STAFF琛� ===");
+
+        try {
+            int insertCount = workWXService.syncUsersToQwStaff();
+
+            System.out.println("鉁� 鍚屾瀹屾垚");
+            System.out.println("  - 鏂板鐢ㄦ埛鏁�: " + insertCount);
+        } catch (IOException e) {
+            System.out.println("鉁� 鍚屾鐢ㄦ埛澶辫触: " + e.getMessage());
+            e.printStackTrace();
+        }
+
+        System.out.println("=== 娴嬭瘯缁撴潫 ===");
     }
+
 }

--
Gitblit v1.9.3