diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java
index 166f35e567ff59e2ea041a37542330e256ff165a..618e4839952febb10327979f1dbcf81ed7f9938c 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/attendance/dingmsg/api/DingMessageController.java
@@ -1,7 +1,10 @@
 package com.mortals.xhx.module.attendance.dingmsg.api;
 
+import cn.hutool.core.date.DateUtil;
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
 import com.dingtalk.api.DefaultDingTalkClient;
 import com.dingtalk.api.DingTalkClient;
 import com.dingtalk.api.request.OapiGettokenRequest;
@@ -13,18 +16,29 @@ import com.mortals.xhx.common.pdu.ApiRespPdu;
 import com.mortals.xhx.module.attendance.dingmsg.DingCallbackCrypto;
 import com.mortals.xhx.module.attendance.dingmsg.dingmsgreq.DingResponsMeassageReq;
 import com.mortals.xhx.module.attendance.dingmsg.dingmsgreq.EncryptReq;
+import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity;
+import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery;
+import com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService;
 import com.mortals.xhx.module.dingding.personal.service.IDingPersonService;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.logging.Log;
+import org.apache.poi.ss.formula.functions.T;
+import org.checkerframework.checker.units.qual.A;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Value;
+import org.springframework.util.ObjectUtils;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.Map;
 
+import static cn.hutool.core.date.DatePattern.*;
+
 /**
  *
  * 鎺ユ敹閽夐拤鐨勫鎵规秷鎭帹閫�
@@ -38,6 +52,9 @@ public class DingMessageController {
 
     @Autowired
     private IDingPersonService dingPersonService;
+    @Autowired
+    private AttendanceLeaveRecordService attendanceLeaveRecordService;
+
 
     /**
      * appKey
@@ -67,7 +84,7 @@ public class DingMessageController {
                                             @RequestParam(value = "timestamp", required = false) String timeStamp,
                                             @RequestParam(value = "nonce", required = false) String nonce,
                                             @RequestBody(required = false) JSONObject json)  {
-        log.info("閽夐拤鎺ㄩ€佸弬鏁�" + msg_signature+"---"+timeStamp+"---"+nonce+"---"+json.toJSONString() );
+//        log.info("閽夐拤鎺ㄩ€佸弬鏁帮細" + msg_signature+"---"+timeStamp+"---"+nonce+"---"+json.toJSONString() );
         try {
             //  浠巋ttp璇锋眰涓幏鍙栧姞瑙e瘑鍙傛暟
             DingCallbackCrypto callbackCrypto = new DingCallbackCrypto(token, aesKey, appKey);
@@ -77,20 +94,153 @@ public class DingMessageController {
             // 鍙嶅簭鍒楀寲鍥炶皟浜嬩欢json鏁版嵁
             JSONObject eventJson = JSON.parseObject(decryptMsg);
             String eventType = eventJson.getString("EventType");
+            String processInstanceId = eventJson.getString("processInstanceId");
 
             // 鏍规嵁EventType鍒嗙被澶勭悊
-            if ("check_url".equals(eventType)) {
-                // 娴嬭瘯鍥炶皟url鐨勬纭€�
-                log.info("娴嬭瘯鍥炶皟url鐨勬纭€�");
-            }
-            else if("bpms_instance_change".equals(eventType)){  //璇峰亣绛夐渶瑕佸鎵圭殑娑堟伅
+            if("bpms_instance_change".equals(eventType)){  //璇峰亣绛夐渶瑕佸鎵圭殑娑堟伅
                 // 澶勭悊瀹℃壒瀹炰緥濮嬫湯锛堝鎵逛换鍔″紑濮嬨€佺粨鏉燂級
                 // 瀛樺叆鏁版嵁搴�
 //                log.info("鍙戠敓浜嗭細" + eventType + "浜嬩欢" );
-//                log.info("杩斿洖澶勭悊鍙傛暟锛�" + eventJson.toJSONString() );
-                if(eventJson.getString("processInstanceId") != null){
-                    Rest<String> rest = dingPersonService.getOaRecordsById(eventJson.getString("processInstanceId"));
-                    log.info("瀹℃壒璇︽儏锛�" + rest.getData());
+                if(processInstanceId != null){
+                    Rest<GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResult> rest = dingPersonService.getOaRecordsById(processInstanceId);
+                    if(rest.getCode() == Rest.SUCCESS){
+                        GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResult result = rest.getData();
+                        log.info("瀹℃壒璇︽儏锛�"+JSONObject.toJSONString(result) );
+                        AttendanceLeaveRecordEntity leaveRecordEntity = new AttendanceLeaveRecordEntity();
+                        leaveRecordEntity.initAttrValue();
+                        leaveRecordEntity.setRemark(processInstanceId);   //灏嗛拤閽夌殑浜嬬墿id浣滀负澶囨敞濉叆鏁版嵁搴�
+                        leaveRecordEntity.setLeavePersonId(Long.parseLong(result.getOriginatorUserId()));
+                        leaveRecordEntity.setLeavePerson(result.getTitle().substring(0,result.getTitle().indexOf("鎻愪氦")));
+                        leaveRecordEntity.setDeptId(Long.parseLong(result.getOriginatorDeptId()));
+                        leaveRecordEntity.setDeptName(result.getOriginatorDeptName());
+
+
+
+                        if(result.getTasks().size() >0 ){
+                            Date startTime = dateFormat(result.getTasks().get(0).getCreateTime());
+                            Date endTime = dateFormat(result.getTasks().get(0).getFinishTime());
+                            leaveRecordEntity.setStartTime(startTime);
+                            leaveRecordEntity.setEndTime(endTime);
+                            leaveRecordEntity.setDuration((int) ((endTime.getTime() - startTime.getTime())/1000));
+                        }
+
+                        if(result.getFormComponentValues().size() > 0 ){
+                            JSONArray jsonArray = JSONArray.parseArray(result.getFormComponentValues().get(0).getValue());
+                            if(jsonArray.size() > 0){
+                                Date startTime1 = dateFormat(jsonArray.get(0).toString());
+                                leaveRecordEntity.setStartTime(startTime1);
+                            }
+                            if(jsonArray.size() > 1){
+                                Date endTime1 = dateFormat(jsonArray.get(1).toString());
+                                leaveRecordEntity.setEndTime(endTime1);
+                            }
+                            if(jsonArray.size() > 2){
+                                leaveRecordEntity.setDuration((int) (Float.parseFloat(jsonArray.get(2).toString())*60*60));
+                            }
+                            if(jsonArray.size() > 4){
+                                switch (jsonArray.get(4).toString()){
+                                    case "璋冧紤":
+                                        leaveRecordEntity.setLeaveType(2);
+                                        break;
+                                    case "鐥呭亣":
+                                        leaveRecordEntity.setLeaveType(3);
+                                        break;
+                                    case "骞村亣":
+                                        leaveRecordEntity.setLeaveType(4);
+                                        break;
+                                    case "浜у亣":
+                                        leaveRecordEntity.setLeaveType(5);
+                                        break;
+                                    case "闄骇鍋�":
+                                        leaveRecordEntity.setLeaveType(6);
+                                        break;
+                                    case "濠氬亣":
+                                        leaveRecordEntity.setLeaveType(7);
+                                        break;
+                                    case "渚嬪亣":
+                                        leaveRecordEntity.setLeaveType(8);
+                                        break;
+                                    case "鍝轰钩鍋�":
+                                        leaveRecordEntity.setLeaveType(9);
+                                        break;
+                                    case "涓у亣":
+                                        leaveRecordEntity.setLeaveType(10);
+                                        break;
+                                    case "鍥炲崟浣�":
+                                        leaveRecordEntity.setLeaveType(11);
+                                        break;
+                                    case "鍥犲叕璇峰亣":
+                                        leaveRecordEntity.setLeaveType(12);
+                                        break;
+                                    case "澶栧嚭鍕橀獙":
+                                        leaveRecordEntity.setLeaveType(13);
+                                        break;
+                                    case "鍊肩彮琛ョ彮":
+                                        leaveRecordEntity.setLeaveType(14);
+                                        break;
+                                    case "浣撴":
+                                        leaveRecordEntity.setLeaveType(15);
+                                        break;
+                                    case "闅旂":
+                                        leaveRecordEntity.setLeaveType(16);
+                                        break;
+                                    case "鍥犲叕澶栧嚭":
+                                        leaveRecordEntity.setLeaveType(17);
+                                        break;
+                                    case "鍏紤":
+                                        leaveRecordEntity.setLeaveType(18);
+                                        break;
+                                    case "鑲插効鍋�":
+                                        leaveRecordEntity.setLeaveType(19);
+                                        break;
+                                    case "璋冨洖鍗曚綅":
+                                        leaveRecordEntity.setLeaveType(20);
+                                        break;
+                                    case "鎺翰鍋�":
+                                        leaveRecordEntity.setLeaveType(21);
+                                        break;
+                                    default:
+                                        leaveRecordEntity.setLeaveType(1);  //榛樿浜嬪亣
+                                        break;
+
+                                }
+
+                            }
+
+                        }
+
+                        if(result.getStatus().equals("NEW") || result.getStatus().equals("RUNNING")){
+                            leaveRecordEntity.setProcessStatus(1);
+                        }else if(result.getStatus().equals("COMPLETED") || result.getStatus().equals("CANCELED") || result.getStatus().equals("TERMINATED")){
+                            leaveRecordEntity.setProcessStatus(2);
+                        }
+
+                        if(result.getResult().equals("AGREE")){
+                            leaveRecordEntity.setAuditResult(1);
+                        }else {
+                            leaveRecordEntity.setAuditResult(2);
+                        }
+
+                        leaveRecordEntity.setAuditDesc(result.getOperationRecords().get(0).getRemark());
+
+                        AttendanceLeaveRecordEntity recordEntity = attendanceLeaveRecordService.selectOne(new AttendanceLeaveRecordQuery().remark(processInstanceId));
+                        if(ObjectUtils.isEmpty(recordEntity)){
+
+                            leaveRecordEntity.setCreateTime(new Date());
+                            leaveRecordEntity.setCreateUserId(1L);
+                            attendanceLeaveRecordService.save(leaveRecordEntity);
+                        }else{
+                             leaveRecordEntity.setId(recordEntity.getId());
+
+                             leaveRecordEntity.setUpdateUserId(1L);
+                             leaveRecordEntity.setUpdateTime(new Date());
+
+                             attendanceLeaveRecordService.update(leaveRecordEntity);
+                        }
+
+
+                    }
+
                 }
             }
             else {
@@ -109,4 +259,16 @@ public class DingMessageController {
 
     }
 
+    private Date dateFormat(String dateString){
+        SimpleDateFormat dateFormat_ = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
+
+        Date t;
+        try {
+            t = dateFormat_ .parse(dateString);
+            return t;
+        } catch (ParseException e) {
+            return new Date(System.currentTimeMillis());
+        }
+    }
+
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
index e83ea7fd0f3e8fd25202ace32f999772b9ecf4a5..e65e57553208f730262963043ff652a5d4179d06 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/IDingPersonService.java
@@ -1,6 +1,7 @@
 package com.mortals.xhx.module.dingding.personal.service;
 
 
+import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
 import com.mortals.framework.common.Rest;
 import com.mortals.xhx.module.dingding.IDingTalkService;
 import com.mortals.xhx.module.dingding.personal.model.req.workmsg.WorkMsgReq;
@@ -8,6 +9,7 @@ import com.mortals.xhx.module.hik.person.model.req.org.OrgListReq;
 import com.mortals.xhx.module.hik.person.model.req.person.PersonReq;
 import com.mortals.xhx.module.hik.person.model.rsp.org.OrgDataInfo;
 import com.mortals.xhx.module.hik.person.model.rsp.person.PersonDataInfo;
+import org.apache.poi.ss.formula.functions.T;
 
 /**
  * 閽夐拤浜轰簨鐩稿叧鏈嶅姟绫�
@@ -46,7 +48,7 @@ public interface IDingPersonService extends IDingTalkService {
      * @param processInstanceId 瀹℃壒瀹炰緥ID銆�
      * @return
      */
-    Rest<String>  getOaRecordsById(String processInstanceId);
+    Rest<GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResult>  getOaRecordsById(String processInstanceId);
 
 
 }
diff --git a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
index 21c8f7dd65fe2c31cb294e633dfdae3d4a7878c6..c2eec35247561162e28cf20e722abe7ec3f98f4c 100644
--- a/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
+++ b/attendance-performance-manager/src/main/java/com/mortals/xhx/module/dingding/personal/service/impl/DingPersonServiceImpl.java
@@ -2,6 +2,7 @@ package com.mortals.xhx.module.dingding.personal.service.impl;
 
 import com.alibaba.fastjson.JSON;
 import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponse;
+import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
 import com.aliyun.tea.TeaException;
 import com.dingtalk.api.DingTalkClient;
 import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
@@ -17,6 +18,7 @@ import com.mortals.xhx.module.dingding.personal.service.IDingPersonService;
 import com.taobao.api.ApiException;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.logging.Log;
+import org.apache.poi.ss.formula.functions.T;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
 
@@ -122,7 +124,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
     }
 
     @Override
-    public Rest<String> getOaRecordsById(String processInstanceId) {
+    public Rest<GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResult> getOaRecordsById(String processInstanceId) {
         try {
             com.aliyun.dingtalkworkflow_1_0.Client client = createClient();
             com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders getProcessInstanceHeaders = new com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceHeaders();
@@ -131,8 +133,7 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
                     .setProcessInstanceId(processInstanceId);
 
             GetProcessInstanceResponse rsp = client.getProcessInstanceWithOptions(getProcessInstanceRequest, getProcessInstanceHeaders, new com.aliyun.teautil.models.RuntimeOptions());
-            log.info("鏍规嵁id鏌ヨ瀹℃壒璇︽儏:", rsp.getBody().getResult().toString());
-            return Rest.ok("鎴愬姛", rsp.getBody().getResult().toString());
+            return Rest.ok("鎴愬姛", rsp.getBody().getResult());
         } catch (Exception e) {
             log.info("鏍规嵁鐢ㄦ埛鏌ヨ瀹℃壒璇︽儏澶辫触", e);
             return Rest.fail(e.getMessage());