增加校验上下班是否打卡逻辑

This commit is contained in:
xx572959496 2024-12-05 19:26:57 +08:00
parent 1ea24acf24
commit f01ecb5e24
2 changed files with 64 additions and 8 deletions

View File

@ -6,15 +6,18 @@ import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.resource.ResourceUtil; import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.text.csv.CsvReader; import cn.hutool.core.text.csv.CsvReader;
import cn.hutool.core.text.csv.CsvUtil; import cn.hutool.core.text.csv.CsvUtil;
import cn.hutool.core.text.csv.CsvWriter;
import cn.hutool.core.thread.ThreadUtil; import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.RandomUtil; import cn.hutool.core.util.RandomUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject; import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil; import cn.hutool.json.JSONUtil;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import java.io.File;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.MessageDigest; import java.security.MessageDigest;
@ -61,21 +64,38 @@ public class CheckLogin {
int size = userList.size(); int size = userList.size();
log.info("共有 {} 个需打卡账号", size); log.info("共有 {} 个需打卡账号", size);
userList.forEach(forEachWithIndex((user, index) -> { userList.forEach(forEachWithIndex((user, index) -> {
boolean todaySign = user.isTodaySign(singMark);
if (todaySign) {
log.info("{} 账号已完成打卡", user.getUsername());
return;
}
boolean isSignSuccess = sign(user, singMark); boolean isSignSuccess = sign(user, singMark);
if (isSignSuccess) { if (isSignSuccess) {
log.info("{} 账号打卡成功", user.getUsername()); log.info("{} 账号打卡成功", user.getUsername());
} else { } else {
log.error("{} 账号打卡失败", user.getUsername()); log.error("{} 账号打卡失败", user.getUsername());
} }
String sign_time = DateUtil.date().toString();
if (isMorning) {
user.setIsStartWorkSign(sign_time);
} else {
if (StrUtil.isEmpty(user.getIsStartWorkSign())) {
user.setIsStartWorkSign("");
}
user.setIsEndWorkSign(sign_time);
}
if (index + 1 == size) { if (index + 1 == size) {
return; return;
} }
// 随机 1-5分钟之后执行下一个人的打卡 // 随机 1-3分钟之后执行下一个人的打卡
// 1 * 60 * 1000 // 1 * 60 * 1000
BigDecimal randomMinute = NumberUtil.round(RandomUtil.randomFloat(1, 6),2); BigDecimal randomMinute = NumberUtil.round(RandomUtil.randomFloat(1, 3),2);
log.info("{}分钟后 执行下个人的打卡任务", randomMinute); log.info("{}分钟后 执行下个人的打卡任务", randomMinute);
ThreadUtil.safeSleep(NumberUtil.mul(randomMinute, 60, 1000)); ThreadUtil.safeSleep(NumberUtil.mul(randomMinute, 60, 1000));
})); }));
CsvWriter writer = CsvUtil.getWriter(new File(filePath), StandardCharsets.UTF_8);
writer.writeBeans(userList);
} catch (Exception e) { } catch (Exception e) {
log.error(e); log.error(e);
} finally { } finally {
@ -98,27 +118,27 @@ public class CheckLogin {
.form("loginType", "normal") .form("loginType", "normal")
.form("code", "") .form("code", "")
.execute().body(); .execute().body();
log.info("认证系统返回报文\t {}", body); log.info("认证系统返回报文 {}", body);
JSONObject data = JSONUtil.parseObj(body).getJSONObject("data"); JSONObject data = JSONUtil.parseObj(body).getJSONObject("data");
if (data != null) { if (data != null) {
String token = data.getStr("token"); String token = data.getStr("token");
log.info("认证系统返回token\t {}", token); log.info("认证系统返回token {}", token);
String thirdBody = HttpRequest String thirdBody = HttpRequest
.get("http://oms.oa.unionpay.com/prod-api/checkTokenThenLogin?personType=0&token=" + token) .get("http://oms.oa.unionpay.com/prod-api/checkTokenThenLogin?personType=0&token=" + token)
.execute().body(); .execute().body();
JSONObject thirdBodyJson = JSONUtil.parseObj(thirdBody); JSONObject thirdBodyJson = JSONUtil.parseObj(thirdBody);
log.info("签到系统返回报文\t {}", thirdBodyJson); log.info("签到系统返回报文 {}", thirdBodyJson);
String thirdToken = thirdBodyJson.getStr("localToken"); String thirdToken = thirdBodyJson.getStr("localToken");
log.info("签到系统返回token\t {}", thirdToken); log.info("签到系统返回token {}", thirdToken);
String resultBody = HttpRequest.post("http://oms.oa.unionpay.com/prod-api/atds/ds/" + signMark) String resultBody = HttpRequest.post("http://oms.oa.unionpay.com/prod-api/atds/ds/" + signMark)
.header("Authorization", "Bearer " + thirdToken) .header("Authorization", "Bearer " + thirdToken)
.execute().body(); .execute().body();
log.info("签到接口返回报文\t {}", resultBody); log.info("签到接口返回报文 {}", resultBody);
JSONObject signJson = JSONUtil.parseObj(resultBody); JSONObject signJson = JSONUtil.parseObj(resultBody);
if ("200".equals(signJson.getStr("code"))) { if ("200".equals(signJson.getStr("code"))) {
String signDateTime = DateUtil.formatDateTime(signJson.getDate("data")); String signDateTime = DateUtil.formatDateTime(signJson.getDate("data"));
result = true; result = true;
log.info("{} 打卡时间\t {}", user.getUsername(), signDateTime); log.info("{} 打卡时间 {}", user.getUsername(), signDateTime);
} }
} }
} catch (Exception e) { } catch (Exception e) {

View File

@ -2,12 +2,18 @@ package com.dx.union;
import cn.hutool.core.annotation.Alias; import cn.hutool.core.annotation.Alias;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
public class User { public class User {
@Alias("用户名") @Alias("用户名")
private String username; private String username;
@Alias("密码") @Alias("密码")
private String password; private String password;
@Alias("上班卡")
private String isStartWorkSign;
@Alias("下班卡")
private String isEndWorkSign;
public String getUsername() { public String getUsername() {
return username; return username;
@ -25,11 +31,41 @@ public class User {
this.password = password; this.password = password;
} }
public String getIsStartWorkSign() {
return isStartWorkSign;
}
public void setIsStartWorkSign(String isStartWorkSign) {
this.isStartWorkSign = isStartWorkSign;
}
public String getIsEndWorkSign() {
return isEndWorkSign;
}
public void setIsEndWorkSign(String isEndWorkSign) {
this.isEndWorkSign = isEndWorkSign;
}
public boolean isTodaySign(int signMark) {
if (signMark == 0) {
// 校验上班的打卡逻辑
DateTime dateTime = DateUtil.parse(this.getIsStartWorkSign(), "yyyy-MM-dd");
return DateUtil.isSameDay(dateTime, DateUtil.date());
} else if (signMark == 1) {
DateTime dateTime = DateUtil.parse(this.getIsEndWorkSign(), "yyyy-MM-dd");
return DateUtil.isSameDay(dateTime, DateUtil.date());
}
return false;
}
@Override @Override
public String toString() { public String toString() {
return "User{" + return "User{" +
"username='" + username + '\'' + "username='" + username + '\'' +
", password='" + password + '\'' + ", password='" + password + '\'' +
", isStartWorkSign='" + isStartWorkSign + '\'' +
", isEndWorkSign='" + isEndWorkSign + '\'' +
'}'; '}';
} }
} }