|
@@ -1,7 +1,7 @@
|
|
|
package com.malk.lanyun.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.date.DateTime;
|
|
|
import cn.hutool.core.date.DateUtil;
|
|
|
-import cn.hutool.core.map.MapUtil;
|
|
|
import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
@@ -13,6 +13,8 @@ import com.malk.server.aliwork.YDConf;
|
|
|
import com.malk.server.aliwork.YDParam;
|
|
|
import com.malk.service.aliwork.YDClient;
|
|
|
import com.malk.service.aliwork.YDService;
|
|
|
+import com.malk.service.dingtalk.DDClient;
|
|
|
+import com.malk.service.dingtalk.DDClient_Personnel;
|
|
|
import com.malk.utils.UtilDateTime;
|
|
|
import com.malk.utils.UtilExcel;
|
|
|
import com.malk.utils.UtilMap;
|
|
@@ -31,6 +33,7 @@ import java.sql.PreparedStatement;
|
|
|
import java.text.DecimalFormat;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.util.*;
|
|
|
+import java.util.logging.Level;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
import static java.lang.Integer.parseInt;
|
|
@@ -47,6 +50,12 @@ public class TimerServiceImpl implements TimerService {
|
|
|
private String password;
|
|
|
@Value("${spring.datasource.driver-class-name}")
|
|
|
private String driver;
|
|
|
+ @Value("${dingtalk.appKey}")
|
|
|
+ private String dingtalkAppKey;
|
|
|
+ @Value("${dingtalk.appSecret}")
|
|
|
+ private String dingtalkAppSecret;
|
|
|
+ @Value("${dingtalk.agentId}")
|
|
|
+ private Long agentId;
|
|
|
@Autowired
|
|
|
private JdbcTemplate jdbcTemplate;
|
|
|
@Autowired
|
|
@@ -55,6 +64,12 @@ public class TimerServiceImpl implements TimerService {
|
|
|
@Autowired
|
|
|
private YDClient ydClient;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private DDClient ddClient;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DDClient_Personnel ddClientPersonnel;
|
|
|
+
|
|
|
/**
|
|
|
* 月度定额更新
|
|
|
*/
|
|
@@ -846,4 +861,99 @@ public class TimerServiceImpl implements TimerService {
|
|
|
.build(), YDConf.FORM_OPERATION.update);
|
|
|
});
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void monthPersonnelMatters() {
|
|
|
+
|
|
|
+ Date date = DateUtil.date();
|
|
|
+ Date beginOfMonth = DateUtil.beginOfMonth(date);
|
|
|
+ String[] dateList = new String[2];
|
|
|
+ dateList[0] = String.valueOf(beginOfMonth.getTime());
|
|
|
+ dateList[1] = String.valueOf(date.getTime());
|
|
|
+ System.out.println(dateList);
|
|
|
+ //查询宜搭已存在的当月数据并删除
|
|
|
+ List<Map> materialList = ydService.queryFormData_all(YDParam.builder()
|
|
|
+ .appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
+ .formUuid("FORM-4F7FB29798F442E783B1C77AF1E7D644FBI7")
|
|
|
+ .searchFieldJson(JSON.toJSONString(UtilMap.map("dateField_lzhqum4c", (Object) dateList)))
|
|
|
+ .build());
|
|
|
+ if (ObjectUtil.isNotNull(materialList)&&materialList.size()>0){
|
|
|
+ materialList.forEach(e->{
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
+ .formInstanceId(e.get("formInstanceId").toString())
|
|
|
+ .build(), YDConf.FORM_OPERATION.delete);
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ //获取所有离职员工id
|
|
|
+ String dingtalkToken = ddClient.getAccessToken(dingtalkAppKey, dingtalkAppSecret);
|
|
|
+ List<String> leaveIdList = ddClientPersonnel.getLeaveEmployeeIdList(dingtalkToken);
|
|
|
+ //获取当前在职人员id
|
|
|
+ String status = "2,3,5,-1";
|
|
|
+ List<String> employeeIds = ddClientPersonnel.getWorkingEmployeeIds(ddClient.getAccessToken(), status);
|
|
|
+ //第一个元素为本月入职人数
|
|
|
+ final int[] month = {0,0};
|
|
|
+ List<String> filterList = new ArrayList<>();
|
|
|
+ Set<String> inJobIdSet = new HashSet<>();
|
|
|
+ List<String> inJobIds = new ArrayList<>();
|
|
|
+ inJobIds.addAll(employeeIds);
|
|
|
+ inJobIds.addAll(leaveIdList);
|
|
|
+ //现合同起始日
|
|
|
+ filterList.add("sys05-nowContractStartTime");
|
|
|
+ //现合同到期日
|
|
|
+ filterList.add("sys05-nowContractEndTime");
|
|
|
+ //入职时间
|
|
|
+ filterList.add("sys00-confirmJoinTime");
|
|
|
+ //获取待入职人员id列表
|
|
|
+// List<String> pendingIds = ddClientPersonnel.getPendingEmployeeIds(ddClient.getAccessToken());
|
|
|
+ //根据在职人员id和离职人员id列表获取花名册信息
|
|
|
+ List<Map> employeeInfos = ddClientPersonnel.getEmployeeInfos(ddClient.getAccessToken(), inJobIds, agentId, filterList);
|
|
|
+ System.out.println(employeeInfos);
|
|
|
+ employeeInfos.forEach(e->{
|
|
|
+ if (ObjectUtil.isNotNull(e.get("field_data_list"))){
|
|
|
+ List<Map> userData = (List<Map>) e.get("field_data_list");
|
|
|
+ userData.forEach(f->{
|
|
|
+ if ("sys00-confirmJoinTime".equals(f.get("field_code"))){
|
|
|
+ List<Map> dataValue = (List<Map>) f.get("field_value_list");
|
|
|
+ if (ObjectUtil.isNotNull(dataValue.get(0).get("value"))){
|
|
|
+ Date value = DateUtil.parse(dataValue.get(0).get("value").toString());
|
|
|
+// if (dataValue.get(0).get("value").toString().substring(0,7).equals("2024-09")){
|
|
|
+ if (DateUtil.compare(value,beginOfMonth)>=0 && DateUtil.compare(date,value)>=0){
|
|
|
+// month[0]++;
|
|
|
+ inJobIdSet.add(e.get("userid").toString());
|
|
|
+// }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ //根据员工id获取员工信息,过滤当前时间到本月初的人员
|
|
|
+ if (ObjectUtil.isNotNull(leaveIdList)&&leaveIdList.size()>0){
|
|
|
+ List<Map> leaveInfos = ddClientPersonnel.getLeaveEmployeeInfos(dingtalkToken, leaveIdList);
|
|
|
+ if (ObjectUtil.isNotNull(leaveInfos) && leaveInfos.size()>0){
|
|
|
+ leaveInfos.forEach(e->{
|
|
|
+ if (ObjectUtil.isNotNull(e.get("lastWorkDay"))){
|
|
|
+ long lastWorkTime = Long.parseLong(e.get("lastWorkDay").toString());
|
|
|
+ Date lastWorkDate = DateUtil.date(lastWorkTime);
|
|
|
+ if (ObjectUtil.isNotEmpty(lastWorkDate) && DateUtil.compare(lastWorkDate,beginOfMonth)>=0 && DateUtil.compare(date,lastWorkDate)>=0){
|
|
|
+ month[1] += 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ }
|
|
|
+//
|
|
|
+ ydClient.operateData(YDParam.builder()
|
|
|
+ .appType("APP_ERBDTFS82HOVBPL3NFH0")
|
|
|
+ .systemToken("RRB66F91T97H1WN89QZYC47PKLZO2ZQOUMOQLP")
|
|
|
+ .formUuid("FORM-4F7FB29798F442E783B1C77AF1E7D644FBI7")
|
|
|
+ //年月,离职人数,入职人数,在职人数
|
|
|
+ .formDataJson(JSON.toJSONString(UtilMap.map("dateField_lzhqum4c, numberField_lzhqum4e, numberField_lzhqum4f, numberField_lzhqum4d",beginOfMonth.getTime(),month[1],inJobIdSet.size(),employeeIds.size())))
|
|
|
+ .build(), YDConf.FORM_OPERATION.create);
|
|
|
+ }
|
|
|
}
|