|
@@ -1,12 +1,16 @@
|
|
|
package com.galaxis.manatee.service;
|
|
|
|
|
|
+import com.dingtalk.api.DefaultDingTalkClient;
|
|
|
import com.dingtalk.api.DingTalkClient;
|
|
|
-import com.dingtalk.api.request.OapiProcessinstanceGetRequest;
|
|
|
-import com.dingtalk.api.request.OapiProcessinstanceListidsRequest;
|
|
|
+import com.dingtalk.api.request.*;
|
|
|
+import com.dingtalk.api.response.OapiAttendanceGetleavestatusResponse;
|
|
|
+import com.dingtalk.api.response.OapiGettokenResponse;
|
|
|
import com.dingtalk.api.response.OapiProcessinstanceGetResponse;
|
|
|
import com.dingtalk.api.response.OapiProcessinstanceListidsResponse;
|
|
|
import com.galaxis.manatee.constant.DingTalkConstant;
|
|
|
+import com.galaxis.manatee.dao.ChuanyunAskForLeaveDao;
|
|
|
import com.galaxis.manatee.dao.DingTalkProcessInstanceDao;
|
|
|
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunAskForLeaveDo;
|
|
|
import com.galaxis.manatee.entity.ding.DingTalkProcessInstance;
|
|
|
import com.taobao.api.ApiException;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
@@ -43,10 +47,17 @@ public class DingTalkScheduledTask {
|
|
|
*/
|
|
|
private final DingTalkProcessInstanceDao dingTalkProcessInstanceDao;
|
|
|
|
|
|
- public DingTalkScheduledTask(DingTalkClient processInstanceListIdsClient, DingTalkClient processInstanceClient, DingTalkProcessInstanceDao dingTalkProcessInstanceDao) {
|
|
|
+ /**
|
|
|
+ * 钉钉请假数据同步到氚云
|
|
|
+ */
|
|
|
+ private final ChuanyunAskForLeaveDao chuanyunAskForLeaveDao;
|
|
|
+
|
|
|
+ public DingTalkScheduledTask(DingTalkClient processInstanceListIdsClient, DingTalkClient processInstanceClient,
|
|
|
+ ChuanyunAskForLeaveDao chuanyunAskForLeaveDao,DingTalkProcessInstanceDao dingTalkProcessInstanceDao) {
|
|
|
this.processInstanceListIdsClient = processInstanceListIdsClient;
|
|
|
this.processInstanceClient = processInstanceClient;
|
|
|
this.dingTalkProcessInstanceDao = dingTalkProcessInstanceDao;
|
|
|
+ this.chuanyunAskForLeaveDao = chuanyunAskForLeaveDao;
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -62,16 +73,65 @@ public class DingTalkScheduledTask {
|
|
|
*/
|
|
|
@Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
|
|
|
void updateBusinessTripProcessInstanceIdList() throws ApiException {
|
|
|
-// updateProcessInstanceIdList(DingTalkConstant.PROCESS_CODE_BUSINESS_TRIP);
|
|
|
+ updateProcessInstanceIdList(DingTalkConstant.PROCESS_CODE_BUSINESS_TRIP);
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 每小时根据出差申请Id跟新出差申请信息。
|
|
|
* 出差申请信息暂时不进行更新
|
|
|
*/
|
|
|
@Scheduled(fixedDelay = 3600000L,initialDelay = 10000L)
|
|
|
void updateProcessInstanceList() throws ApiException {
|
|
|
-// updateProcessInstanceIdList(DingTalkConstant.PROCESS_CODE_MATERIAL_RESEND);
|
|
|
+ updateChuanyunAskForLeave(DingTalkConstant.PROCESS_CODE_ASKFORLEAVE);
|
|
|
+ }
|
|
|
+
|
|
|
+ private void updateChuanyunAskForLeave(String businessTripProcessCode) throws ApiException {
|
|
|
+ var flag=true;
|
|
|
+ //单个请求
|
|
|
+ var oApiProcessInstanceListIdsRequest=new OapiProcessinstanceListidsRequest();
|
|
|
+ oApiProcessInstanceListIdsRequest.setProcessCode(businessTripProcessCode);
|
|
|
+ oApiProcessInstanceListIdsRequest.setStartTime(LocalDateTime.of(2019,1,1,0,0).toInstant(ZoneOffset.UTC).toEpochMilli());
|
|
|
+ oApiProcessInstanceListIdsRequest.setEndTime(LocalDateTime.now().toInstant(ZoneOffset.UTC).toEpochMilli());
|
|
|
+ oApiProcessInstanceListIdsRequest.setCursor(0L);
|
|
|
+ oApiProcessInstanceListIdsRequest.setSize(20L);
|
|
|
+ while(flag){
|
|
|
+ LocalDateTime start=LocalDateTime.now();
|
|
|
+ OapiProcessinstanceListidsResponse oapiProcessinstanceListidsResponse=processInstanceListIdsClient.execute(oApiProcessInstanceListIdsRequest,DingTalkConstant.DING_TALK_TOKEN);
|
|
|
+ List<ChuanyunAskForLeaveDo> chuanyunAskForLeaveDoList=new ArrayList<>();
|
|
|
+ if(oapiProcessinstanceListidsResponse.getErrcode()!=0){
|
|
|
+ log.info(oapiProcessinstanceListidsResponse.getErrmsg());
|
|
|
+ try {
|
|
|
+ Thread.sleep(5000);
|
|
|
+ } catch (InterruptedException e) {
|
|
|
+ log.error(e.getMessage());
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //逐个请求
|
|
|
+ oapiProcessinstanceListidsResponse.getResult().getList().forEach(resultId->{
|
|
|
+ Optional<DingTalkProcessInstance> instance=dingTalkProcessInstanceDao.findById(resultId);
|
|
|
+ if(!instance.isPresent()){
|
|
|
+ OapiProcessinstanceGetRequest request=new OapiProcessinstanceGetRequest();
|
|
|
+ request.setProcessInstanceId(resultId);
|
|
|
+ try {
|
|
|
+ OapiProcessinstanceGetResponse oapiProcessinstanceGetResponse = processInstanceClient.execute(request, DingTalkConstant.DING_TALK_TOKEN);
|
|
|
+ chuanyunAskForLeaveDoList.add(ChuanyunAskForLeaveDo.fromAskForLeaveDTO(oapiProcessinstanceGetResponse.getProcessInstance()));
|
|
|
+ } catch (ApiException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ //保存id列表和实例列表
|
|
|
+ chuanyunAskForLeaveDao.saveAll(chuanyunAskForLeaveDoList);
|
|
|
+ log.info(businessTripProcessCode+"下一个cursor为"+oapiProcessinstanceListidsResponse.getResult().getNextCursor()+"保存成功"+"耗时"+ ChronoUnit.SECONDS.between(start,LocalDateTime.now())+"秒");
|
|
|
+ flag=null!=oapiProcessinstanceListidsResponse.getResult().getNextCursor();
|
|
|
+ if (flag){
|
|
|
+ oApiProcessInstanceListIdsRequest.setCursor(oapiProcessinstanceListidsResponse.getResult().getNextCursor());
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
private void updateProcessInstanceIdList(String businessTripProcessCode) throws ApiException {
|