Skip to content
This repository has been archived by the owner on Jun 16, 2022. It is now read-only.

Commit

Permalink
feat(attendance): add submit attendance
Browse files Browse the repository at this point in the history
  • Loading branch information
aowubulao committed Jan 8, 2021
1 parent 5e63102 commit e5f9051
Show file tree
Hide file tree
Showing 8 changed files with 87 additions and 33 deletions.
16 changes: 14 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

<groupId>com.neoniou</groupId>
<artifactId>auto-cpdaily-serverless</artifactId>
<version>1.2.3</version>
<version>1.3.0</version>

<parent>
<artifactId>spring-boot-starter-parent</artifactId>
Expand All @@ -17,6 +17,8 @@
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>

<dependencies>
Expand All @@ -27,7 +29,17 @@
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<artifactId>hutool-core</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-json</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-http</artifactId>
<version>5.1.2</version>
</dependency>
<dependency>
Expand Down
19 changes: 10 additions & 9 deletions src/main/java/daily/AutoDailyCp.java
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,7 @@ private static void startApplication() throws Exception {
return;
}

String replace = CpDaily.CP_EXTENSION.replace("r1", UUID.randomUUID().toString())
.replace("r2", info.getLongitude())
.replace("r3", info.getLatitude())
.replace("r4", info.getUsername());
String cpExtension = DesUtil.encode(replace);
String cpExtension = generateCpExtension();
String cookie = LoginRequest.login(info.getUsername(), info.getPassword());

if (cookie == null) {
Expand All @@ -70,9 +66,7 @@ private static void startApplication() throws Exception {
int successNum = 0;

for (MessageBox message : messages) {
String extraFieldItemWid = signRequest.getExtraFieldItemWid(message.getSignInstanceWid(), message.getSignWid());

if (signRequest.submitForm(message.getSignInstanceWid(), extraFieldItemWid, cpExtension)) {
if (signRequest.submitMessage(message, cpExtension)) {
successNum++;
log.info("[{}]签到成功", message.getSignInstanceWid());
} else {
Expand All @@ -85,7 +79,14 @@ private static void startApplication() throws Exception {
}
}

private static class KeyValueClass {
private static String generateCpExtension() throws Exception {
String replace = CpDaily.CP_EXTENSION.replace("r1", UUID.randomUUID().toString())
.replace("r2", info.getLongitude())
.replace("r3", info.getLatitude())
.replace("r4", info.getUsername());
return DesUtil.encode(replace);
}

private static class KeyValueClass {
}
}
12 changes: 11 additions & 1 deletion src/main/java/daily/constant/CpDaily.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,15 @@ public interface CpDaily {

String CP_EXTENSION = "{\"systemName\":\"android\",\"systemVersion\":\"10\",\"model\":\"Mi 10\"" +
",\"deviceId\":\"r1\",\"appVersion\":" +
"\"8.0.8\",\"lon\":r2,\"lat\":r3,\"userId\":\"r4\"}";
"\"8.2.14\",\"lon\":r2,\"lat\":r3,\"userId\":\"r4\"}";

String SIGN_INFO = "{\"longitude\":r1,\"latitude\":r2,\"isMalposition\":1,\"abnormalReason\":\"\"," +
"\"signPhotoUrl\":\"\",\"isNeedExtra\":1,\"position\":\"local\"," +
"\"uaIsCpadaily\":true,\"signInstanceWid\":\"siWid\",\"" +
"extraFieldItems\":[{\"extraFieldItemValue\":\"正常,<37.2℃\",\"extraFieldItemWid\":itemId}]}";

String SUBMIT_INFO = "{\"signInstanceWid\":\"siWid\",\"longitude\":r1,\"latitude\":r2,\"isMalposition\":0" +
",\"abnormalReason\":\"\",\"signPhotoUrl\":\"" +
"https://wecres.cpdaily.com/counselor/1019318364515869/attachment/03b0532446d14be99f057ba744c7af95.png\",\"" +
"position\":\"local\",\"qrUuid\":\"\"}";
}
2 changes: 2 additions & 0 deletions src/main/java/daily/pojo/BaseInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ public class BaseInfo {

private String attendanceSubmitForm;

private Boolean activeAttendance;

private String apiVersion;

private String scKey;
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/daily/pojo/MessageBox.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
@Data
public class MessageBox {

private Integer type;

private String taskName;

private String rateTaskBeginTime;
Expand Down
2 changes: 2 additions & 0 deletions src/main/java/daily/request/InitialRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ private static boolean readDailyProps() {
AutoDailyCp.info.setLatitude(props.getProperty("latitude"));
AutoDailyCp.info.setPosition(props.getProperty("position"));
AutoDailyCp.info.setScKey(props.getProperty("scKey"));
AutoDailyCp.info.setActiveAttendance(true);
AutoDailyCp.info.setActiveAttendance(Boolean.getBoolean(props.getProperty("activeAttendance")));
return true;
} catch (IOException e) {
log.info("读取daily.properties错误: ", e);
Expand Down
4 changes: 3 additions & 1 deletion src/main/java/daily/request/ServerChanRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ public class ServerChanRequest {

private static final String URL;

private static final String KEY = "SCU";

static {
URL = "https://sc.ftqq.com/" + AutoDailyCp.info.getScKey() + ".send";
}

public static void sendMessage(String message, String description) {
if (!"".equals(AutoDailyCp.info.getScKey())) {
if (!AutoDailyCp.info.getScKey().contains(KEY)) {
HttpRequest.post(URL)
.form("text", message)
.form("desp", description)
Expand Down
63 changes: 43 additions & 20 deletions src/main/java/daily/request/SignRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ public class SignRequest {
private static final String DATAS = "datas";
private static final String SUCCESS = "SUCCESS";
private static final String MESSAGE = "message";
private static final String ATTENDANCE = "查寝";

public SignRequest(String longitude, String latitude, String position) {
this.longitude = longitude;
Expand All @@ -47,18 +48,19 @@ public void setCookie(String cookies) {
}

public List<MessageBox> getMessage() {
String responseBody = HttpRequest.post(AutoDailyCp.info.getSignGetMessage())
.header("Content-Type", "application/json")
.header("Cookie", cookie)
.body("{\"pageSize\": 10,\"pageNumber\": 1}")
.execute().body();

Object datas = JSONUtil.parseObj(JSONUtil.parseObj(responseBody).get(DATAS)).get(UNSIGNED_TASKS);
JSONArray jsonArray = JSONUtil.parseArray(datas);
JSONArray jsonArray = getResponseJson(AutoDailyCp.info.getSignGetMessage());
if (AutoDailyCp.info.getActiveAttendance()) {
jsonArray.addAll(getResponseJson(AutoDailyCp.info.getAttendanceGetMessage()));
}

List<MessageBox> messages = new ArrayList<>();
for (Object msg : jsonArray) {
MessageBox message = JSONUtil.toBean(msg.toString(), MessageBox.class);
if (msg.toString().contains(ATTENDANCE)) {
message.setType(1);
} else {
message.setType(0);
}
DateTime startTime = DateUtil.parse(generateTime(message.getRateTaskBeginTime()));
DateTime endTime = DateUtil.parse(generateTime(message.getRateTaskEndTime()));
if (message.getCurrentTime().after(startTime) && message.getCurrentTime().before(endTime)) {
Expand All @@ -69,23 +71,44 @@ public List<MessageBox> getMessage() {
return messages;
}

private static JSONArray getResponseJson(String api) {
String responseBody = HttpRequest.post(api)
.header("Content-Type", "application/json")
.header("Cookie", cookie)
.body("{\"pageSize\": 10,\"pageNumber\": 1}")
.execute().body();

return JSONUtil.parseObj(responseBody).getJSONObject(DATAS).getJSONArray(UNSIGNED_TASKS);
}

private String generateTime(String str) {
return DateUtil.parse(DateUtil.format(new Date(), "yyyy-MM-dd") + " " + str).toString();
}

public boolean submitForm(String signInstanceWid, String extraFieldItemWid, String cpExtension) {

String signInfo = "{\"longitude\":r1,\"latitude\":r2,\"isMalposition\":1,\"abnormalReason\":\"\"," +
"\"signPhotoUrl\":\"\",\"isNeedExtra\":1,\"position\":\"local\"," +
"\"uaIsCpadaily\":true,\"signInstanceWid\":\"siWid\",\"" +
"extraFieldItems\":[{\"extraFieldItemValue\":\"正常,<37.2℃\",\"extraFieldItemWid\":itemId}]}";
String body = signInfo.replace("siWid", signInstanceWid)
.replace("itemId", extraFieldItemWid)
.replace("r1", longitude)
.replace("r2", latitude)
.replace("local", position);
public boolean submitMessage(MessageBox message, String cpExtension) {
String body;
// 查寝
if (message.getType() == 1) {
body = CpDaily.SUBMIT_INFO.replace("siWid", message.getSignWid())
.replace("r1", longitude)
.replace("r2", latitude)
.replace("local", position);
} else {
body = CpDaily.SIGN_INFO.replace("siWid", message.getSignWid())
.replace("itemId", getExtraFieldItemWid(message.getSignInstanceWid(), message.getSignWid()))
.replace("r1", longitude)
.replace("r2", latitude)
.replace("local", position);
}
return submitForm (
body,
cpExtension,
message.getType() == 1 ? AutoDailyCp.info.getAttendanceSubmitForm() : AutoDailyCp.info.getSignSubmitForm()
);
}

HttpResponse response = HttpRequest.post(AutoDailyCp.info.getSignSubmitForm())
public boolean submitForm(String body, String cpExtension, String api) {
HttpResponse response = HttpRequest.post(api)
.header("Content-Type", Headers.CONTENT_TYPE)
.header("tenantId", CpDaily.TENANT_ID)
.header("Cpdaily-Extension", cpExtension)
Expand Down

0 comments on commit e5f9051

Please sign in to comment.