钉钉考勤

This commit is contained in:
张松
2025-12-03 10:09:00 +08:00
parent 2c2b3765ad
commit 60062a060d
2 changed files with 28 additions and 12 deletions

View File

@@ -5,6 +5,7 @@ import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.nacos.shaded.com.google.common.util.concurrent.RateLimiter;
import com.czg.account.entity.ShopConfig;
import com.czg.account.service.ShopConfigService;
import com.czg.market.service.AttendanceService;
@@ -52,17 +53,17 @@ public class AttendanceServiceImpl implements AttendanceService {
}
// 自定义规则1-5 → 数字, 6 → 六, 7 → 日
private static String formatWeek(String week) {
return switch (week) {
case "星期一" -> "1";
case "星期二" -> "2";
case "星期三" -> "3";
case "星期四" -> "4";
case "星期五" -> "5";
private static String formatWeek(DateTime dateTime) {
String chinese = DateUtil.dayOfWeekEnum(dateTime).toChinese();
String week = switch (chinese) {
case "星期六" -> "";
case "星期日" -> "";
default -> week;
default -> null;
};
if (week == null) {
week = String.valueOf(DateUtil.dayOfMonth(dateTime));
}
return week;
}
@Override
@@ -71,9 +72,12 @@ public class AttendanceServiceImpl implements AttendanceService {
ArrayList<Map<String, Object>> weekList = new ArrayList<>();
DateTime dateTime = StrUtil.isBlank(endTime) ? DateUtil.date() : DateUtil.parse(endTime);
for (int i = 7 * weekNum; i < 15 + 7 * weekNum; i++) {
DateTime date = DateUtil.offsetDay(dateTime, (15 - i + 1) * -1);
String week = formatWeek(DateUtil.dayOfWeekEnum(date).toChinese());
int start = DateUtil.dayOfMonth(StrUtil.isBlank(startTime) ? DateUtil.beginOfMonth(dateTime) : DateUtil.parse(startTime));
int end = DateUtil.dayOfMonth(dateTime);
for (int i = start; i <= end; i++) {
DateTime date = DateUtil.offsetDay(StrUtil.isBlank(startTime) ? DateUtil.beginOfMonth(dateTime) : DateUtil.parse(startTime), i - 1);
String week = formatWeek(date);
weekList.add(new HashMap<>(){{
put("week", week);
put("date", date);
@@ -96,8 +100,19 @@ public class AttendanceServiceImpl implements AttendanceService {
}};
}
ConcurrentLinkedDeque<String> statusList = new ConcurrentLinkedDeque<>();
RateLimiter rateLimiter = RateLimiter.create(15.0); // 每秒15次
weekList.parallelStream().forEach(week -> {
statusList.add(dingService.getAttendanceStatus(config.getDingAppKey(), config.getDingAppSecret(), shopId, (Date) week.get("date"), userId));
rateLimiter.acquire(); // 阻塞直到获取令牌(保证限流)
statusList.add(
dingService.getAttendanceStatus(
config.getDingAppKey(),
config.getDingAppSecret(),
shopId,
(Date) week.get("date"),
userId
)
);
});
return Map.of(

View File

@@ -167,6 +167,7 @@ public class DingService {
req.setUserid(userId);
req.setWorkDate(date);
OapiAttendanceGetupdatedataResponse rsp = client.execute(req, getToken(key, secret, shopId));
System.out.println(rsp.getBody());
JSONArray resultList = JSONObject.parseObject(rsp.getBody()).getJSONObject("result").getJSONArray("attendance_result_list");
if (resultList.isEmpty()) {
status = "休息日";