|
@@ -4,6 +4,7 @@ import com.alibaba.excel.util.DateUtils;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSON;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
|
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
import com.baomidou.mybatisplus.core.injector.methods.SelectById;
|
|
import com.baomidou.mybatisplus.core.injector.methods.SelectById;
|
|
import com.management.platform.controller.WeiXinCorpController;
|
|
import com.management.platform.controller.WeiXinCorpController;
|
|
@@ -35,6 +36,7 @@ import javax.annotation.Resource;
|
|
import java.io.File;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
|
+import java.math.RoundingMode;
|
|
import java.security.SecureRandom;
|
|
import java.security.SecureRandom;
|
|
import java.sql.Timestamp;
|
|
import java.sql.Timestamp;
|
|
import java.text.DecimalFormat;
|
|
import java.text.DecimalFormat;
|
|
@@ -93,6 +95,8 @@ public class TimingTask {
|
|
private String path;
|
|
private String path;
|
|
@Resource
|
|
@Resource
|
|
private TimeTypeService timeTypeService;
|
|
private TimeTypeService timeTypeService;
|
|
|
|
+ @Resource
|
|
|
|
+ private LeaveSheetService leaveSheetService;
|
|
|
|
|
|
private static final List<Integer> VALID_TOKEN_CHARS = new ArrayList<>();
|
|
private static final List<Integer> VALID_TOKEN_CHARS = new ArrayList<>();
|
|
static {
|
|
static {
|
|
@@ -208,4 +212,116 @@ public class TimingTask {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * @Description:每天凌晨1:20同步前一天的企业微信审核通过的请假数据到车间管家
|
|
|
|
+ * @Param: []
|
|
|
|
+ * @return: void
|
|
|
|
+ * @Author: yurk
|
|
|
|
+ * @Date: 2024/6/14
|
|
|
|
+ */
|
|
|
|
+ @Scheduled(cron = "0 20 1 ? * *")
|
|
|
|
+ public void getLeaveSheetData() throws Exception {
|
|
|
|
+ if(isDev){
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+ DateTimeFormatter df=DateTimeFormatter.ofPattern("yyyy-MM-dd");
|
|
|
|
+ LocalDate start=LocalDate.now().minusDays(1);
|
|
|
|
+ LocalDate end=LocalDate.now();
|
|
|
|
+ List<WxCorpInfo> list = wxCorpInfoService.list(null);
|
|
|
|
+ JSONArray jsonArrayFilter = new JSONArray();
|
|
|
|
+ JSONObject filter1 = new JSONObject();
|
|
|
|
+ filter1.put("key","record_type");
|
|
|
|
+ filter1.put("value",1);
|
|
|
|
+ jsonArrayFilter.add(filter1);
|
|
|
|
+ JSONObject filter2 = new JSONObject();
|
|
|
|
+ filter2.put("key","sp_status");
|
|
|
|
+ filter2.put("value",2);
|
|
|
|
+ for (WxCorpInfo wxCorpInfo : list) {
|
|
|
|
+ JSONArray approvalInfo = wxCorpInfoService.getApprovalInfo(wxCorpInfo.getCompanyId(), df.format(start), df.format(end), "", jsonArrayFilter);
|
|
|
|
+ List<User> userList = userMapper.selectList(new LambdaQueryWrapper<User>().eq(User::getCompanyId, wxCorpInfo.getCompanyId()));
|
|
|
|
+ if(approvalInfo!=null){
|
|
|
|
+ List<LeaveSheet> leaveSheets = new ArrayList<>();
|
|
|
|
+ for (int i = 0; i < approvalInfo.size(); i++) {
|
|
|
|
+ JSONObject item = approvalInfo.getJSONObject(i);
|
|
|
|
+ JSONObject applyer = item.getJSONObject("applyer");
|
|
|
|
+ String userid = applyer.getString("userid");
|
|
|
|
+ Optional<User> first = userList.stream().filter(u -> u.getCorpwxUserid().equals(userid)).findFirst();
|
|
|
|
+ if(!first.isPresent()){
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ LeaveSheet leaveSheet=new LeaveSheet();
|
|
|
|
+ leaveSheet.setCompanyId(wxCorpInfo.getCompanyId());
|
|
|
|
+ leaveSheet.setStatus(0);
|
|
|
|
+ leaveSheet.setOwnerId(first.get().getId());
|
|
|
|
+ leaveSheet.setOwnerName(first.get().getName());
|
|
|
|
+ JSONObject apply_data = item.getJSONObject("apply_data");
|
|
|
|
+ JSONArray contents = apply_data.getJSONArray("contents");
|
|
|
|
+ for (int i1 = 0; i1 < contents.size(); i1++) {
|
|
|
|
+ JSONObject map = contents.getJSONObject(i1);
|
|
|
|
+ JSONArray title = map.getJSONArray("title");
|
|
|
|
+ JSONObject value = map.getJSONObject("value");
|
|
|
|
+ String control = map.getString("control");
|
|
|
|
+ if(control.equals("Vacation")){
|
|
|
|
+ JSONObject vacation = value.getJSONObject("vacation");
|
|
|
|
+ JSONObject selector = vacation.getJSONObject("selector");
|
|
|
|
+ //企业微信请假默认单选
|
|
|
|
+ JSONArray options = selector.getJSONArray("options");
|
|
|
|
+ JSONObject option = options.getJSONObject(0);
|
|
|
|
+ int leaveType;
|
|
|
|
+ switch (option.getJSONArray("value").getJSONObject(0).getString("text")){
|
|
|
|
+ case "事假":leaveType=0;
|
|
|
|
+ break;
|
|
|
|
+ case "病假":leaveType=1;
|
|
|
|
+ break;
|
|
|
|
+ case "年假":leaveType=2;
|
|
|
|
+ break;
|
|
|
|
+ case "产假":leaveType=3;
|
|
|
|
+ break;
|
|
|
|
+ case "婚假":leaveType=4;
|
|
|
|
+ break;
|
|
|
|
+ case "丧假":leaveType=5;
|
|
|
|
+ break;
|
|
|
|
+ case "调休":leaveType=6;
|
|
|
|
+ break;
|
|
|
|
+ case "陪产假":leaveType=7;
|
|
|
|
+ break;
|
|
|
|
+ default:leaveType=8;
|
|
|
|
+ }
|
|
|
|
+ leaveSheet.setLeaveType(leaveType);
|
|
|
|
+ JSONObject attendance = vacation.getJSONObject("attendance");
|
|
|
|
+ JSONObject date_range = attendance.getJSONObject("date_range");
|
|
|
|
+ leaveSheet.setTimeType(date_range.getString("type").equals("hour")?1:0);
|
|
|
|
+ long new_begin = date_range.getLongValue("new_begin");
|
|
|
|
+ long new_end = date_range.getLongValue("new_end");
|
|
|
|
+ LocalDate startDate = DateTimeUtil.getLocalDateFromUnix(new_begin);
|
|
|
|
+ LocalDate endDate = DateTimeUtil.getLocalDateFromUnix(new_end);
|
|
|
|
+ leaveSheet.setStartDate(startDate);
|
|
|
|
+ leaveSheet.setEndDate(endDate);
|
|
|
|
+ long new_duration = date_range.getLongValue("new_duration");
|
|
|
|
+ BigDecimal bigDecimal = new BigDecimal(new_duration);
|
|
|
|
+ bigDecimal=bigDecimal.divide(new BigDecimal(3600),1, RoundingMode.HALF_DOWN);
|
|
|
|
+ leaveSheet.setTimeHours(bigDecimal.floatValue());
|
|
|
|
+ bigDecimal=bigDecimal.divide(new BigDecimal(8),1,RoundingMode.HALF_DOWN);
|
|
|
|
+ leaveSheet.setTimeDays(bigDecimal.floatValue());
|
|
|
|
+ leaveSheet.setLeaveType(1);
|
|
|
|
+ }
|
|
|
|
+ if(control.equals("Text")){
|
|
|
|
+ if(title.getJSONObject(0).getString("text").equals("请假事由")){
|
|
|
|
+ leaveSheet.setRemark(value.getString("text"));
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ LeaveSheet one = leaveSheetService.getOne(new LambdaQueryWrapper<LeaveSheet>().eq(LeaveSheet::getStartDate, leaveSheet.getStartDate()).eq(LeaveSheet::getEndDate, leaveSheet.getEndDate()).eq(LeaveSheet::getOwnerId, leaveSheet.getOwnerId()));
|
|
|
|
+ if(one!=null){
|
|
|
|
+ leaveSheet.setId(one.getId());
|
|
|
|
+ }
|
|
|
|
+ leaveSheets.add(leaveSheet);
|
|
|
|
+ }
|
|
|
|
+ if(leaveSheets.size()>0){
|
|
|
|
+ leaveSheetService.saveOrUpdateBatch(leaveSheets);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|