暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

获取钉钉打卡数据

原创 bjgzxx 2024-02-07
101

package com.gg;

import com.alibaba.fastjson.JSONArray;
import com.dingtalk.api.DefaultDingTalkClient;
import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiAttendanceListRequest;
import com.dingtalk.api.request.OapiGettokenRequest;
import com.dingtalk.api.response.OapiAttendanceListResponse;
import com.dingtalk.api.response.OapiGettokenResponse;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.taobao.api.ApiException;


import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.*;


/**
* @Author BJG
* @Date 2024/2/3 15:47 (可以根据需要修改)
* @Version 1.0 (版本号)
* @Description:
*/
public class test {
// 应用的appKey
public static String appKey = "dfsfsdf";
// 应用的appSecret
public static String appSecret = "dsfgfsdfsdfdsf";

/**
* 通过调用接口获取access_token
* dingtalk
* @return
* String
* 2021-1-20
*/
public static String getAccessToken() {
DingTalkClient client = new DefaultDingTalkClient("https://oapi.dingtalk.com/gettoken");
OapiGettokenRequest request = new OapiGettokenRequest();
request.setAppkey(appKey);
request.setAppsecret(appSecret);
request.setHttpMethod("GET");
OapiGettokenResponse response = null;
try {
response = client.execute(request);
} catch (ApiException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return response.getAccessToken();
}

public static void main(String[] args) throws IOException {
String startDate="2024-02-05 00:00:00";
String endDate="2024-02-05 00:00:00";
List<String> userlist = new ArrayList<String>();
//List<String> userlist = Arrays.asList("0117796");
userlist.add("0117796");
userlist.add("3120512515937470");
userlist.add("01460414456421086242");
System.out.println(userlist.size());

String ss= response(startDate,endDate,userlist);
//JsonStrToObj();
jsonDispose(ss);
//JSONArray jsonArray = new JSONArray();
}
public static String response(String startDate,String endDate,List userlist)
{
// 获取access_token
String access_token = getAccessToken();
// 通过调用接口获取考勤打卡结果
DingTalkClient clientDingTalkClient = new DefaultDingTalkClient("https://oapi.dingtalk.com/attendance/list");
OapiAttendanceListRequest requestAttendanceListRequest = new OapiAttendanceListRequest();
// 查询考勤打卡记录的起始工作日
requestAttendanceListRequest.setWorkDateFrom(startDate);
// 查询考勤打卡记录的结束工作日
requestAttendanceListRequest.setWorkDateTo(endDate);
// 员工在企业内的userid列表,最多不能超过50个。
requestAttendanceListRequest.setUserIdList(userlist);
// 表示获取考勤数据的起始点
requestAttendanceListRequest.setOffset(0L);
// 表示获取考勤数据的条数,最大不能超过50条。
requestAttendanceListRequest.setLimit(50L);
OapiAttendanceListResponse response = null;
try {
response = clientDingTalkClient.execute(requestAttendanceListRequest,access_token);
} catch (ApiException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(response.getBody());
return response.getBody();
}

public static void JsonStrToObj()
{

ObjectMapper objectMapper = new ObjectMapper();
CheckInL checkIn =null;
try {
checkIn = objectMapper.readValue(jsonString, CheckInL.class);
System.out.println(checkIn.getId()); // 输出: John
//System.out.println(person.getAge()); // 输出: 30
//System.out.println(person.getCity()); // 输出: New York
} catch (IOException e) {
e.printStackTrace();
}
}
//
public static void jsonDispose(String jsonString) throws IOException {
ObjectMapper mapper = new ObjectMapper();
JsonNode rootNode = mapper.readTree(jsonString);
ArrayNode arrayNode = (ArrayNode) rootNode.get("recordresult");
insertData(arrayNode);

//System.out.println("recordresult: " + arrayNode.asText());
}

public static void insertData(ArrayNode arrayNode)
{
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password = "root";

String sql = "INSERT INTO kq (id, userCheckTime,baseCheckTime,userId,workDate,sourceType,insertdate) " +
"VALUES (?, ?, ?, ?, ?, ?, now())";
try {
// 加载MySQL驱动
Class.forName("com.mysql.cj.jdbc.Driver");

// 建立数据库连接
Connection connection = DriverManager.getConnection(url, user, password);

// 关闭自动提交,开启批处理
connection.setAutoCommit(false);

// 创建PreparedStatement对象
PreparedStatement preparedStatement = connection.prepareStatement(sql);

// 遍历数组中的每个元素
for (JsonNode elementNode : arrayNode) {
preparedStatement.setLong(1, elementNode.get("id").asLong());

String userCheckTime= dateToString(elementNode.get("userCheckTime").asLong());
preparedStatement.setString(2, userCheckTime);

String baseCheckTime=dateToString(elementNode.get("baseCheckTime").asLong());
preparedStatement.setString(3, baseCheckTime);

String userId=elementNode.get("userId").asText();
preparedStatement.setString(4, userId);

String workDate=dateToString(elementNode.get("workDate").asLong());
preparedStatement.setString(5, workDate);

String sourceType=elementNode.get("sourceType").asText();
preparedStatement.setString(6, sourceType);

preparedStatement.addBatch(); // 添加到批处理中

}



// 执行批量操作
int[] updateCounts = preparedStatement.executeBatch();

// 提交事务
connection.commit();

// 输出每条SQL语句影响的行数
/* for (int updateCount : updateCounts) {
System.out.println("Number of rows inserted: " + updateCount);
}*/

// 关闭连接
preparedStatement.close();
connection.close();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static String dateToString(long datetime)
{
// 假设我们有一个时间戳(以毫秒为单位)
// long timestamp = 1616499400000L; // 例如:2021-03-23T20:16:40.000Z 对应的时间戳

// 创建一个Date对象
Date date = new Date(datetime);

// 创建一个SimpleDateFormat对象,用于格式化日期
// 注意:这里使用GMT时区,你可以根据需要更改时区
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai"));

// 将Date对象格式化为字符串
String formattedDate = sdf.format(date);

// 输出格式化后的日期字符串
//System.out.println("Formatted Date: " + formattedDate);
return formattedDate;
}
}
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论