Commit 34dfca6b authored by 周亚武's avatar 周亚武

钉钉相关接口

parent cc1cdaf7
...@@ -20,6 +20,9 @@ import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity; ...@@ -20,6 +20,9 @@ import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordEntity;
import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery; import com.mortals.xhx.module.attendance.model.AttendanceLeaveRecordQuery;
import com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService; import com.mortals.xhx.module.attendance.service.AttendanceLeaveRecordService;
import com.mortals.xhx.module.dingding.personal.service.IDingPersonService; import com.mortals.xhx.module.dingding.personal.service.IDingPersonService;
import com.mortals.xhx.module.staff.model.StaffEntity;
import com.mortals.xhx.module.staff.model.StaffQuery;
import com.mortals.xhx.module.staff.service.StaffService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.logging.Log; import org.apache.commons.logging.Log;
import org.apache.poi.ss.formula.functions.T; import org.apache.poi.ss.formula.functions.T;
...@@ -54,7 +57,8 @@ public class DingMessageController { ...@@ -54,7 +57,8 @@ public class DingMessageController {
private IDingPersonService dingPersonService; private IDingPersonService dingPersonService;
@Autowired @Autowired
private AttendanceLeaveRecordService attendanceLeaveRecordService; private AttendanceLeaveRecordService attendanceLeaveRecordService;
@Autowired
private StaffService staffService;
/** /**
* appKey * appKey
...@@ -109,149 +113,169 @@ public class DingMessageController { ...@@ -109,149 +113,169 @@ public class DingMessageController {
AttendanceLeaveRecordEntity leaveRecordEntity = new AttendanceLeaveRecordEntity(); AttendanceLeaveRecordEntity leaveRecordEntity = new AttendanceLeaveRecordEntity();
leaveRecordEntity.initAttrValue(); leaveRecordEntity.initAttrValue();
leaveRecordEntity.setRemark(processInstanceId); //将钉钉的事物id作为备注填入数据库 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());
Rest<String> mobileRest = dingPersonService.getPersonById(result.getOriginatorUserId());
if(mobileRest.getCode() == Rest.SUCCESS) {
String mobile = mobileRest.getData();
StaffEntity staffEntity = staffService.selectOne(new StaffQuery().phoneNumber(mobile));
if(!ObjectUtils.isEmpty(staffEntity)){
leaveRecordEntity.setLeavePersonId(staffEntity.getId());
leaveRecordEntity.setLeavePerson(staffEntity.getName());
leaveRecordEntity.setDeptId(staffEntity.getDeptId());
leaveRecordEntity.setDeptName(staffEntity.getDeptName());
leaveRecordEntity.setPhoneNumber(staffEntity.getPhoneNumber());
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;
}
}
} else if (result.getFormComponentValues().size() > 1) { //请假理由
GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues resonEntity = result.getFormComponentValues().get(1);
if(resonEntity.getName().equals("请假事由")){
leaveRecordEntity.setReason(resonEntity.getValue());
}
}else if (result.getFormComponentValues().size() > 2) { //上传的附件
GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues picEntity = result.getFormComponentValues().get(2);
if(picEntity.getName().equals("图片") && picEntity.getValue() != null){
leaveRecordEntity.setReason(picEntity.getValue());
}
}
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 ){ if(result.getStatus().compareToIgnoreCase("NEW") == 0 || result.getStatus().compareToIgnoreCase("RUNNING") == 0){
JSONArray jsonArray = JSONArray.parseArray(result.getFormComponentValues().get(0).getValue()); leaveRecordEntity.setProcessStatus(1);
if(jsonArray.size() > 0){ }else if(result.getStatus().compareToIgnoreCase("COMPLETED") == 0 || result.getStatus().compareToIgnoreCase("CANCELED") == 0
Date startTime1 = dateFormat(jsonArray.get(0).toString()); || result.getStatus().compareToIgnoreCase("TERMINATED") == 0){
leaveRecordEntity.setStartTime(startTime1); leaveRecordEntity.setProcessStatus(2);
} }
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.getResult().compareToIgnoreCase("AGREE") == 0){
leaveRecordEntity.setAuditResult(1);
}else {
leaveRecordEntity.setAuditResult(2);
} }
} log.info("钉钉返回的result:"+result.getResult()+"\nauditresult:"+leaveRecordEntity.getAuditResult());
leaveRecordEntity.setAuditDesc(result.getOperationRecords().get(0).getRemark());
} else if (result.getFormComponentValues().size() > 1) { //请假理由 AttendanceLeaveRecordEntity recordEntity = attendanceLeaveRecordService.selectOne(new AttendanceLeaveRecordQuery().remark(processInstanceId));
GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues resonEntity = result.getFormComponentValues().get(1); if(ObjectUtils.isEmpty(recordEntity)){
if(resonEntity.getName().equals("请假事由")){
leaveRecordEntity.setReason(resonEntity.getValue());
}
}else if (result.getFormComponentValues().size() > 2) { //上传的附件
GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues picEntity = result.getFormComponentValues().get(2);
if(picEntity.getName().equals("图片") && picEntity.getValue() != null){
leaveRecordEntity.setReason(picEntity.getValue());
}
}
leaveRecordEntity.setCreateTime(new Date());
leaveRecordEntity.setCreateUserId(1L);
attendanceLeaveRecordService.save(leaveRecordEntity);
}else{
leaveRecordEntity.setId(recordEntity.getId());
if(result.getStatus().compareToIgnoreCase("NEW") == 0 || result.getStatus().compareToIgnoreCase("RUNNING") == 0){ leaveRecordEntity.setUpdateUserId(1L);
leaveRecordEntity.setProcessStatus(1); leaveRecordEntity.setUpdateTime(new Date());
}else if(result.getStatus().compareToIgnoreCase("COMPLETED") == 0 || result.getStatus().compareToIgnoreCase("CANCELED") == 0
|| result.getStatus().compareToIgnoreCase("TERMINATED") == 0){
leaveRecordEntity.setProcessStatus(2);
}
if(result.getResult().compareToIgnoreCase("AGREE") == 0){ attendanceLeaveRecordService.update(leaveRecordEntity);
leaveRecordEntity.setAuditResult(1); }
}else {
leaveRecordEntity.setAuditResult(2);
}
log.info("钉钉返回的result:"+result.getResult()+"\nauditresult:"+leaveRecordEntity.getAuditResult());
leaveRecordEntity.setAuditDesc(result.getOperationRecords().get(0).getRemark());
AttendanceLeaveRecordEntity recordEntity = attendanceLeaveRecordService.selectOne(new AttendanceLeaveRecordQuery().remark(processInstanceId));
if(ObjectUtils.isEmpty(recordEntity)){
leaveRecordEntity.setCreateTime(new Date()); }else {
leaveRecordEntity.setCreateUserId(1L); log.info("该号码("+mobile +")未在本系统绑定");
attendanceLeaveRecordService.save(leaveRecordEntity); }
}else{
leaveRecordEntity.setId(recordEntity.getId());
leaveRecordEntity.setUpdateUserId(1L);
leaveRecordEntity.setUpdateTime(new Date());
attendanceLeaveRecordService.update(leaveRecordEntity); }else {
log.info("根据id在钉钉平台查询电话失败"+mobileRest.getMsg());
} }
} }
} }
......
...@@ -2,6 +2,7 @@ package com.mortals.xhx.module.dingding.personal.service; ...@@ -2,6 +2,7 @@ package com.mortals.xhx.module.dingding.personal.service;
import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody; import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
import com.mortals.xhx.module.dingding.IDingTalkService; import com.mortals.xhx.module.dingding.IDingTalkService;
import com.mortals.xhx.module.dingding.personal.model.req.workmsg.WorkMsgReq; import com.mortals.xhx.module.dingding.personal.model.req.workmsg.WorkMsgReq;
...@@ -27,6 +28,14 @@ public interface IDingPersonService extends IDingTalkService { ...@@ -27,6 +28,14 @@ public interface IDingPersonService extends IDingTalkService {
*/ */
Rest<String> getPersonByMobile(String mobile); Rest<String> getPersonByMobile(String mobile);
/**
* 根据id获取用户电话
*
* @param id
* @return
*/
Rest<String> getPersonById(String id);
/** /**
* 根据code获取钉钉用户id * 根据code获取钉钉用户id
* *
......
...@@ -6,9 +6,11 @@ import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody; ...@@ -6,9 +6,11 @@ import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody;
import com.aliyun.tea.TeaException; import com.aliyun.tea.TeaException;
import com.dingtalk.api.DingTalkClient; import com.dingtalk.api.DingTalkClient;
import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request; import com.dingtalk.api.request.OapiMessageCorpconversationAsyncsendV2Request;
import com.dingtalk.api.request.OapiV2UserGetRequest;
import com.dingtalk.api.request.OapiV2UserGetbymobileRequest; import com.dingtalk.api.request.OapiV2UserGetbymobileRequest;
import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest; import com.dingtalk.api.request.OapiV2UserGetuserinfoRequest;
import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response; import com.dingtalk.api.response.OapiMessageCorpconversationAsyncsendV2Response;
import com.dingtalk.api.response.OapiV2UserGetResponse;
import com.dingtalk.api.response.OapiV2UserGetbymobileResponse; import com.dingtalk.api.response.OapiV2UserGetbymobileResponse;
import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse; import com.dingtalk.api.response.OapiV2UserGetuserinfoResponse;
import com.mortals.framework.common.Rest; import com.mortals.framework.common.Rest;
...@@ -50,6 +52,26 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID ...@@ -50,6 +52,26 @@ public class DingPersonServiceImpl extends AbstractDingTalkService implements ID
} }
} }
@Override
public Rest<String> getPersonById(String id) {
try {
DingTalkClient client = getDingTalkClient("/topapi/v2/user/get");
OapiV2UserGetRequest req = new OapiV2UserGetRequest();
req.setUserid(id); //用户id
log.info("getPersonByID:{}",id);
OapiV2UserGetResponse rsp = client.execute(req, getToken());
log.info("钉钉返回用户信息:{}", rsp.getBody());
if (rsp.getErrcode() == 0) {
return Rest.ok("成功", rsp.getResult().getMobile());
} else {
return Rest.fail(String.format("code:%s,msg:%s", rsp.getErrcode(), rsp.getErrmsg()));
}
} catch (ApiException e) {
log.info("根据手机号码查询人员异常", e);
return Rest.fail(e.getMessage());
}
}
@Override @Override
public Rest<String> getPersonByCode(String code) { public Rest<String> getPersonByCode(String code) {
try { try {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment