xuj %!s(int64=4) %!d(string=hai) anos
pai
achega
7864bb0ed9

+ 4 - 1
settings.xml

@@ -41,7 +41,7 @@
                     <id>snapshots</id>
                     <url>https://maven.aliyun.com/nexus/content/groups/public</url>
                     <releases>
-                        <enabled>true</enabled>
+                        <enabled>false</enabled>
                     </releases>
                     <snapshots>
                         <enabled>true</enabled>
@@ -116,5 +116,8 @@
 
     <activeProfiles>
         <activeProfile>nexus</activeProfile>
+
     </activeProfiles>
+
+
 </settings>

+ 10 - 0
src/main/java/com/galaxis/manatee/constant/DingTalkConstant.java

@@ -36,6 +36,11 @@ public class DingTalkConstant {
      */
     public static String PROCESS_CODE_MATERIAL_RESEND;
 
+    /**
+     * 请假信息
+     */
+    public static String PROCESS_CODE_ASKFORLEAVE;
+
     @Value(value = "${dingTalk.appKey}")
     public void setDingTalkAppKey(String dingTalkAppKey) {
         DingTalkConstant.DING_TALK_APP_KEY = dingTalkAppKey;
@@ -55,4 +60,9 @@ public class DingTalkConstant {
     public void setMaterialResend(String materialResend) {
         DingTalkConstant.PROCESS_CODE_MATERIAL_RESEND = materialResend;
     }
+
+    @Value(value = "${dingTalk.processCode.askForLeave}")
+    public  void setProcessCodeAskforleave(String askForLeave) {
+        DingTalkConstant.PROCESS_CODE_ASKFORLEAVE = askForLeave;
+    }
 }

+ 15 - 0
src/main/java/com/galaxis/manatee/dao/ChuanyunAskForLeaveDao.java

@@ -0,0 +1,15 @@
+package com.galaxis.manatee.dao;
+
+import com.galaxis.capsule.util.GalaxisRepository;
+import com.galaxis.manatee.entity.chuanyun.data.object.ChuanyunAskForLeaveDo;
+import org.springframework.stereotype.Repository;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: xuj
+ * Date: 2020/7/24
+ */
+@Repository
+public interface ChuanyunAskForLeaveDao extends GalaxisRepository<ChuanyunAskForLeaveDo,String> {
+
+}

+ 128 - 0
src/main/java/com/galaxis/manatee/entity/chuanyun/data/object/ChuanyunAskForLeaveDo.java

@@ -0,0 +1,128 @@
+package com.galaxis.manatee.entity.chuanyun.data.object;
+
+import com.dingtalk.api.response.OapiProcessinstanceGetResponse;
+import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.databind.annotation.JsonNaming;
+import com.galaxis.capsule.dto.MaterialDTO;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeanUtils;
+
+import javax.persistence.Entity;
+import java.nio.file.LinkOption;
+import java.time.LocalDateTime;
+import java.util.Date;
+import java.util.UUID;
+
+/**
+ * Created by IntelliJ IDEA.
+ * User: xuj
+ * Date: 2020/7/23
+ */
+@Slf4j
+@EqualsAndHashCode(callSuper = true)
+@Data
+@Entity(name = "CHUANYUN_ASKFORLEAVE")
+@JsonIgnoreProperties(ignoreUnknown = true)
+public class ChuanyunAskForLeaveDo extends BasicDO {
+
+    /**
+     * 标题
+     */
+    @JsonProperty("title")
+    private String title;
+
+    /**
+     * 抄送人
+     */
+    @JsonProperty("cc_userids")
+    private String ccUserids;
+
+    /**
+     * 操作
+     */
+    @JsonProperty("biz_action")
+    private String bizAction;
+
+    /**
+     * 创建时间
+     */
+    @JsonProperty("create_time")
+    private Date createTime;
+
+    /**
+     * 结束时间
+     */
+    @JsonProperty("finish_time")
+    private Date finishTime;
+
+
+    @JsonProperty("main_process_instance_id")
+    private String mainProcessInstanceId;
+
+    /**
+     * 发起人
+     */
+    @JsonProperty("originator_userid")
+    private String originatorUserid;
+
+    /**
+     * 发起部门
+     */
+    @JsonProperty("originator_dept_id")
+    private String originatorDeptId;
+
+    /**
+     * 抄送人
+     */
+    @JsonProperty("cc_userids")
+    private String ccUserId;
+
+    /**
+     * 审批结果: 同意 和 不同意
+     */
+    @JsonProperty("result")
+    private String approvalResult;
+
+    /**
+     * 审批实例业务编号
+     */
+    @JsonProperty("business_id")
+    private String businessId;
+
+    /**
+     * 发起部门
+     */
+    @JsonProperty("originator_dept_name")
+    private String originatorDeptName;
+
+    /**
+     * 请假类型
+     */
+    @JsonProperty("leave_type")
+    private String leaveType;
+
+    /**
+     * 请假事由
+     */
+    @JsonProperty("leave_reason")
+    private String leaveReason;
+
+    @JsonProperty("result")
+    private String result;
+
+    /**
+     * 根据ProcessInstanceTopVo获得chuanyunAskForLeaveDo
+     * @param processInstanceTopVo   传输数据
+     * @return  保存数据
+     */
+    public static ChuanyunAskForLeaveDo fromAskForLeaveDTO(OapiProcessinstanceGetResponse.ProcessInstanceTopVo processInstanceTopVo){
+        ChuanyunAskForLeaveDo chuanyunAskForLeaveDo =new ChuanyunAskForLeaveDo();
+        BeanUtils.copyProperties(processInstanceTopVo, chuanyunAskForLeaveDo);
+        chuanyunAskForLeaveDo.setObjectId(UUID.randomUUID().toString());
+        return chuanyunAskForLeaveDo;
+    }
+
+}

+ 65 - 5
src/main/java/com/galaxis/manatee/service/DingTalkScheduledTask.java

@@ -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 {

+ 5 - 1
src/main/resources/application.yml

@@ -25,6 +25,8 @@ dingTalk:
     businessTrip: PROC-EF6Y0XWVO2-GBP690HMRWVELM4WJ0WT1-HFP53YII-RR1
     #物料补发
     materialResend: PROC-FF6YHERSO2-J9GFWKONMK1QXZH153MV1-4G2HF7VI-2P
+    #请假信息
+    askForLeave: PROC-EF6Y0XWVO2-GBP690HMRWVELM4WJ0WT1-DEP53YII-PR1
 
 #阿里云
 aliyun:
@@ -45,10 +47,12 @@ spring:
     username: ${USER_NAME}
     password: ${PASSWORD}
   jpa:
+    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
     hibernate:
       ddl-auto: update
 claw:
   url: ${CLAW_URL}
 logging:
   file:
-    path: ${LOG_FILE_URL}
+    path: ${LOG_FILE_URL}
+