From 2c3d8abefd778b7aa9b9ee69ff3fdb02b31f4865 Mon Sep 17 00:00:00 2001
From: tjx <t2856754968@163.com>
Date: 星期二, 23 十二月 2025 16:01:39 +0800
Subject: [PATCH] 111
---
src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java | 248 +++++++++++++++++++++++++++++++++++++------------
1 files changed, 186 insertions(+), 62 deletions(-)
diff --git a/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java b/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
index 61713ad..8e3997b 100644
--- a/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
+++ b/src/test/java/com/gs/dingtalk/DeviceReceivingApplicationTests.java
@@ -9,6 +9,7 @@
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 org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@@ -33,6 +34,9 @@
@Autowired
private QwCheckinDataService qwCheckinDataService;
+
+ @Autowired
+ private QwCheckinDayDataService qwCheckinDayDataService;
/**
* 娴嬭瘯瀵煎嚭鐢熶骇鏁版嵁骞跺彂閫侀拤閽夋秷鎭�
@@ -71,68 +75,6 @@
// 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;
@@ -298,4 +240,186 @@
System.out.println("=== 娴嬭瘯缁撴潫 ===");
}
+ /**
+ * 娴嬭瘯鑾峰彇鎵撳崱鏃ユ姤鏁版嵁
+ * 鎺ュ彛闄愬埗锛�100娆�/鍒嗛挓锛屾椂闂磋法搴︿笉瓒呰繃30澶�
+ */
+ @Test
+ void testGetCheckinDayData() {
+ System.out.println("=== 寮�濮嬫祴璇曡幏鍙栨墦鍗℃棩鎶ユ暟鎹� ===");
+
+ try {
+ long currentTime = System.currentTimeMillis() / 1000;
+ long oneDaySeconds = 86400;
+
+ // 鑾峰彇鏄ㄥぉ鐨勬棩鎶ユ暟鎹紙starttime鍜宔ndtime闇�瑕佹槸鍚屼竴澶╋級
+ long yesterdayStart = ((currentTime / oneDaySeconds) - 1) * oneDaySeconds;
+ long startTime = yesterdayStart;
+ long endTime = yesterdayStart; // 鏃ユ姤鎺ュ彛starttime鍜宔ndtime闇�鐩稿悓
+
+ System.out.println(" - 鏌ヨ鏃ユ湡: " + new java.util.Date(startTime * 1000));
+
+ // 鑾峰彇鐢ㄦ埛鎬绘暟
+ long totalUsers = qwStaffMapper.selectCount(new LambdaQueryWrapper<QwStaff>()
+ .isNotNull(QwStaff::getAccount)
+ .ne(QwStaff::getAccount, ""));
+ System.out.println(" - QW_STAFF琛ㄧ敤鎴锋�绘暟: " + totalUsers);
+
+ List<WorkWXService.CheckinDayData> dayDataList = workWXService.getCheckinDayDataByQwStaff(startTime, endTime);
+
+ if (dayDataList != null && !dayDataList.isEmpty()) {
+ System.out.println("鉁� 鎴愬姛鑾峰彇鎵撳崱鏃ユ姤鏁版嵁");
+ System.out.println(" - 鏃ユ姤璁板綍鎬绘暟: " + dayDataList.size());
+ System.out.println(" - 鍓�5鏉℃暟鎹�:");
+ dayDataList.stream().limit(5).forEach(data -> {
+ WorkWXService.BaseInfo baseInfo = data.getBaseInfo();
+ WorkWXService.SummaryInfo summaryInfo = data.getSummaryInfo();
+ System.out.println(" * 濮撳悕: " + (baseInfo != null ? baseInfo.getName() : "N/A") +
+ ", 璐﹀彿: " + (baseInfo != null ? baseInfo.getAcctid() : "N/A") +
+ ", 閮ㄩ棬: " + (baseInfo != null ? baseInfo.getDepartsName() : "N/A") +
+ ", 鎵撳崱娆℃暟: " + (summaryInfo != null ? summaryInfo.getCheckinCount() : 0) +
+ ", 瀹為檯宸ユ椂(绉�): " + (summaryInfo != null ? summaryInfo.getRegularWorkSec() : 0) +
+ ", 鏍囧噯宸ユ椂(绉�): " + (summaryInfo != null ? summaryInfo.getStandardWorkSec() : 0));
+
+ // 鎵撳嵃寮傚父淇℃伅
+ if (data.getExceptionInfos() != null && !data.getExceptionInfos().isEmpty()) {
+ data.getExceptionInfos().forEach(ex -> {
+ 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("鉁� 鑾峰彇鐨勬墦鍗℃棩鎶ユ暟鎹负绌�");
+ }
+ } catch (IOException e) {
+ System.out.println("鉁� 鑾峰彇鎵撳崱鏃ユ姤鏁版嵁澶辫触: " + e.getMessage());
+ e.printStackTrace();
+ }
+
+ System.out.println("=== 娴嬭瘯缁撴潫 ===");
+ }
+
+ /**
+ * 娴嬭瘯鑾峰彇鎸囧畾鍛樺伐鐨勬墦鍗℃棩鎶ユ暟鎹�
+ */
+ @Test
+ void testGetCheckinDayDataById() {
+ System.out.println("=== 寮�濮嬫祴璇曡幏鍙栨寚瀹氬憳宸ユ墦鍗℃棩鎶ユ暟鎹� ===");
+
+ 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 yesterdayStart = ((currentTime / oneDaySeconds) - 1) * oneDaySeconds;
+ long startTime = yesterdayStart;
+ long endTime = yesterdayStart;
+
+ System.out.println(" - 鏌ヨ鏃ユ湡: " + new java.util.Date(startTime * 1000));
+
+ List<String> useridList = new java.util.ArrayList<>();
+ useridList.add(qwStaff.getAccount());
+
+ List<WorkWXService.CheckinDayData> dayDataList = workWXService.getCheckinDayData(startTime, endTime, useridList);
+
+ if (dayDataList != null && !dayDataList.isEmpty()) {
+ System.out.println("鉁� 鎴愬姛鑾峰彇鎵撳崱鏃ユ姤鏁版嵁");
+ dayDataList.forEach(data -> {
+ WorkWXService.BaseInfo baseInfo = data.getBaseInfo();
+ WorkWXService.SummaryInfo summaryInfo = data.getSummaryInfo();
+
+ System.out.println(" 鍩虹淇℃伅:");
+ System.out.println(" - 濮撳悕: " + (baseInfo != null ? baseInfo.getName() : "N/A"));
+ System.out.println(" - 閮ㄩ棬: " + (baseInfo != null ? baseInfo.getDepartsName() : "N/A"));
+ System.out.println(" - 瑙勫垯: " + (baseInfo != null && baseInfo.getRuleInfo() != null ? baseInfo.getRuleInfo().getGroupname() : "N/A"));
+
+ System.out.println(" 姹囨�讳俊鎭�:");
+ System.out.println(" - 鎵撳崱娆℃暟: " + (summaryInfo != null ? summaryInfo.getCheckinCount() : 0));
+ System.out.println(" - 瀹為檯宸ユ椂: " + (summaryInfo != null ? formatSeconds(summaryInfo.getRegularWorkSec()) : "0"));
+ System.out.println(" - 鏍囧噯宸ユ椂: " + (summaryInfo != null ? formatSeconds(summaryInfo.getStandardWorkSec()) : "0"));
+
+ if (data.getExceptionInfos() != null && !data.getExceptionInfos().isEmpty()) {
+ System.out.println(" 寮傚父淇℃伅:");
+ data.getExceptionInfos().forEach(ex -> {
+ String exType = getExceptionTypeName(ex.getException());
+ System.out.println(" - " + exType + ": " + ex.getCount() + "娆�, 鏃堕暱: " + formatSeconds(ex.getDuration()));
+ });
+ }
+
+ if (data.getOtInfo() != null && data.getOtInfo().getOtStatus() != null && data.getOtInfo().getOtStatus() > 0) {
+ System.out.println(" 鍔犵彮淇℃伅:");
+ System.out.println(" - 鍔犵彮鏃堕暱: " + formatSeconds(data.getOtInfo().getOtDuration()));
+ }
+ });
+ } else {
+ System.out.println("鉁� 璇ュ憳宸ュ湪鎸囧畾鏃ユ湡鏃犳墦鍗℃棩鎶ユ暟鎹�");
+ }
+ } catch (IOException e) {
+ System.out.println("鉁� 鑾峰彇鎵撳崱鏃ユ姤鏁版嵁澶辫触: " + e.getMessage());
+ e.printStackTrace();
+ }
+
+ System.out.println("=== 娴嬭瘯缁撴潫 ===");
+ }
+
+ /**
+ * 鏍煎紡鍖栫鏁颁负鏃跺垎绉�
+ */
+ private String formatSeconds(Integer seconds) {
+ if (seconds == null || seconds == 0) {
+ return "0绉�";
+ }
+ int hours = seconds / 3600;
+ int minutes = (seconds % 3600) / 60;
+ int secs = seconds % 60;
+
+ StringBuilder sb = new StringBuilder();
+ if (hours > 0) sb.append(hours).append("灏忔椂");
+ if (minutes > 0) sb.append(minutes).append("鍒嗛挓");
+ if (secs > 0) sb.append(secs).append("绉�");
+ return sb.toString();
+ }
+
+ /**
+ * 鑾峰彇寮傚父绫诲瀷鍚嶇О
+ * @param exceptionType 寮傚父绫诲瀷浠g爜锛�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 "鏈煡";
+ }
+ }
+
}
--
Gitblit v1.9.3