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());