From 28be3efaa57b5cebe9f12312636dd7801d55d46f Mon Sep 17 00:00:00 2001 From: zhengyf Date: Wed, 20 Nov 2024 17:23:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=BD=E7=9F=A5=EF=BC=9A=E9=92=89=E9=92=89?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E3=80=81=E6=8E=A8=E9=80=81=E6=97=A5=E5=BF=97?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CallBackServiceImpl.java | 172 ++++++++++----- .../lets/dingtalk/dao/IDingU8cBillDao.java | 4 +- .../dingtalk/dao/impl/DingU8cBillDaoImpl.java | 178 +++++++++------- .../dingtalk/entity/DingU8cBillEntity.java | 5 + .../dingtalk/entity/DingU8cBillEntity.xml | 47 +++++ .../push/serivce/impl/PushU8CServiceImpl.java | 32 +-- .../DingCallBackPluginInitializer.java | 196 +++++++++++++++++- .../sales/RefundOnlyPluginInitializer.java | 2 +- .../plugin/lets/plugin/base/BaseTest.java | 15 ++ .../lets/plugin/transfer/TransferTest.java | 4 +- 10 files changed, 511 insertions(+), 144 deletions(-) diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/callback/service/impl/CallBackServiceImpl.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/callback/service/impl/CallBackServiceImpl.java index b36e66b6..f0749fbb 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/callback/service/impl/CallBackServiceImpl.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/callback/service/impl/CallBackServiceImpl.java @@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject; import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponseBody; import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponse; import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody; +import com.dingtalk.api.response.OapiV2UserGetResponse; import com.hzya.frame.plugin.lets.constant.OverallConstant; import com.hzya.frame.plugin.lets.dingtalk.callback.service.CallBackService; import com.hzya.frame.plugin.lets.dingtalk.dao.IDingU8cBillDao; @@ -24,21 +25,47 @@ import com.hzya.frame.plugin.lets.util.QueryU8CEntityUtil; import com.hzya.frame.plugin.lets.util.pushData.Attribute; import com.hzya.frame.plugin.lets.util.pushData.PushU8CByApiCode; import com.hzya.frame.plugin.lets.util.pushData.ZTResult; +import org.apache.commons.httpclient.HttpClient; +import org.apache.commons.httpclient.methods.PostMethod; +import org.apache.commons.httpclient.methods.RequestEntity; +import org.apache.commons.httpclient.methods.StringRequestEntity; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.io.IOException; +import java.io.UnsupportedEncodingException; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; +/** + * 回调:审批通过的(U):记录: + * push_info:success + * ding_talk_process_id + * modify_time:new Date() + * ding_res: + * approve:Y + * initiate:U + * 回调:审批通过的(D):记录: + * 全记录 + * initiate:D + *

+ * 回调:审批失败的(U):记录: + * push_info:success + * ding_talk_process_id + * modify_time:new Date() + * ding_res: + * approve:Y + * initiate:U + */ @Service("callBackService") public class CallBackServiceImpl implements CallBackService { protected static Logger logger = LogManager.getLogger(CallBackServiceImpl.class); - public String dingId=""; + public String dingId = ""; @Autowired private IDingU8cBillDao dingU8cBillDao; @@ -79,7 +106,7 @@ public class CallBackServiceImpl implements CallBackService { String eventType = eventJson.getString("EventType"); //防止钉钉回调 - if(!eventJson.getString("processInstanceId").equals(dingId)) { + if (!eventJson.getString("processInstanceId").equals(dingId)) { dingId = eventJson.getString("processInstanceId"); // 4. 根据EventType分类处理 @@ -120,6 +147,17 @@ public class CallBackServiceImpl implements CallBackService { return tokenBody.getAccessToken(); } + /** + * 根据钉钉userId获取手机号 + * + * @return + */ + public String getMobileByUserId(String token, String userId) { + OapiV2UserGetResponse user = DingTalkUtils.getUserById(token, userId); + String mobile = user.getResult().getMobile(); + return mobile; + } + /** * 委外采购(付款单)->采购付款申请(新) * 回调,审核付款单 @@ -145,40 +183,30 @@ public class CallBackServiceImpl implements CallBackService { } else if (processInstanceResponseBodyResult.getStatus().equals("COMPLETED")) {//审批完成 logger.info("采购付款申请(新)--->审批完成"); } - //获取所有审批意见 - List operationRecords = processInstanceResponseBodyResult.getOperationRecords(); - - //审批意见过滤掉:START_PROCESS_INSTANCE:发起流程实例 - operationRecords = operationRecords.stream().filter(item -> !item.getType().equals("START_PROCESS_INSTANCE")).collect(Collectors.toList()); - System.out.println(operationRecords); String remark = ""; - //钉钉问题记录执行明细 - for (GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultOperationRecords operationRecord : operationRecords) { - //操作结果 - switch (operationRecord.getResult()) { - case "AGREE": - dingU8cBillEntity.setDing_res("同意"); - break; - case "REFUSE": - dingU8cBillEntity.setDing_res("拒绝"); - break; - case "NONE": - dingU8cBillEntity.setDing_res("未处理"); - break; + //任务列表,文档地址:https://open-dev.dingtalk.com/apiExplorer?spm=ding_open_doc.document.0.0.33293c33eWKtYM#/?devType=org&api=workflow_1.0%23GetProcessInstance + List tasks = processInstanceResponseBodyResult.getTasks(); + for (GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultTasks task : tasks) { + if ("COMPLETED".equals(task.getStatus())) {//完成状态 + //获取人员得手机号作为u8c得审核人编码 + String userId = task.getUserId(); + String mobile = getMobileByUserId(token, userId); + if ("AGREE".equals(task.getResult())) { + //同意 + //审批u8c单据 + approveArapDjzb(dingU8cBillEntity, remark); + dingU8cBillEntity.setApprove("Y"); + dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity); + } else if ("REFUSE".equals(task.getResult())) { + //拒绝 + //后续林姐姐给接口,拒绝之后清空process_id、approve:N + refuse(dingU8cBillEntity, mobile); + dingU8cBillEntity.setApprove("N"); + dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity); + } } - //处理意见 - remark = operationRecord.getRemark(); } - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); - - if("拒绝".equals(dingU8cBillEntity.getDing_res())||"未处理".equals(dingU8cBillEntity.getDing_res())){ - //后续林姐姐给接口 - return; - } - - //审批u8c单据 - approveArapDjzb(dingU8cBillEntity, remark); } catch (Exception e) { logger.error("代理采购(付款单)->采购付款申请(店群专用)回调报错:" + e); } @@ -236,9 +264,9 @@ public class CallBackServiceImpl implements CallBackService { //处理意见 remark = operationRecord.getRemark(); } - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); + dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity); - if("拒绝".equals(dingU8cBillEntity.getDing_res())||"未处理".equals(dingU8cBillEntity.getDing_res())){ + if ("拒绝".equals(dingU8cBillEntity.getDing_res()) || "未处理".equals(dingU8cBillEntity.getDing_res())) { //后续林姐姐给接口 return; } @@ -281,7 +309,7 @@ public class CallBackServiceImpl implements CallBackService { DingU8cBillEntity dingU8cBillEntity = queryU8CDing(processInstanceId); if (dingU8cBillEntity == null) { //新增u8c付款单、保存日志、上传附件 - addArapBill(processInstanceId,token); + addArapBill(processInstanceId, token); } else { //查询实例的具体信息 GetProcessInstanceResponse processInstanceDetails = DingTalkUtils.getProcessInstanceDetails(token, processInstanceId); @@ -319,9 +347,9 @@ public class CallBackServiceImpl implements CallBackService { //处理意见 remark = operationRecord.getRemark(); } - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); + dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity); - if("拒绝".equals(dingU8cBillEntity.getDing_res())||"未处理".equals(dingU8cBillEntity.getDing_res())){ + if ("拒绝".equals(dingU8cBillEntity.getDing_res()) || "未处理".equals(dingU8cBillEntity.getDing_res())) { //后续林姐姐给接口 return; } @@ -336,8 +364,9 @@ public class CallBackServiceImpl implements CallBackService { @Autowired private PushU8CByApiCode pushU8CByApiCode; + /** - * 审核付款单 + * 审核付款单,并保存日志 * * @param remark 处理意见 */ @@ -375,28 +404,30 @@ public class CallBackServiceImpl implements CallBackService { } //成功 dingU8cBillEntity.setApprove("Y"); - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); + dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity); } catch (Exception e) { logger.error("推送U8C--> 丽知:审核付款单审核 失败" + e); //失败 dingU8cBillEntity.setApprove("N"); dingU8cBillEntity.setPushInfo(e.getMessage()); - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); + dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity); } } + @Autowired private QueryU8CEntityUtil queryU8CEntityUtil; @Autowired private FileUtil fileUtil; @Autowired private PushU8CFileUtil pushU8CFileUtil; + /** * 付款单新增 * 1、付款单保存及审批 * 2、附件上传 */ - public void addArapBill(String processInstanceId,String token) throws Exception { + public void addArapBill(String processInstanceId, String token) throws Exception { //查询实例的具体信息 GetProcessInstanceResponse processInstanceDetails = DingTalkUtils.getProcessInstanceDetails(token, processInstanceId); GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResult processInstanceResponseBodyResult = processInstanceDetails.getBody().getResult(); @@ -414,7 +445,7 @@ public class CallBackServiceImpl implements CallBackService { String ly = ""; String je = ""; String bz = ""; - String fjJson=""; + String fjJson = ""; for (GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultFormComponentValues formComponentValue : formComponentValues) { if ("费用所属公司".equals(formComponentValue.getName())) { corpName = formComponentValue.getValue(); @@ -437,13 +468,13 @@ public class CallBackServiceImpl implements CallBackService { if ("备注".equals(formComponentValue.getName())) { bz = formComponentValue.getValue(); } - if("DDAttachment".equals(formComponentValue.getComponentType())){ + if ("DDAttachment".equals(formComponentValue.getComponentType())) { fjJson = formComponentValue.getValue(); } } - String mapStr=""; - String response=""; + String mapStr = ""; + String response = ""; try { ArapDjzbVO billvo = new ArapDjzbVO(); @@ -486,7 +517,7 @@ public class CallBackServiceImpl implements CallBackService { children.add(childrenvo); billvo.setParentvo(parentvo); billvo.setChildren(children); - mapStr="{\"billvo\":["+JSONUtil.toJsonStr(billvo)+"]}"; + mapStr = "{\"billvo\":[" + JSONUtil.toJsonStr(billvo) + "]}"; //推送u8c ZTResult ztResult = pushU8CByApiCode.pushByCode(OverallConstant.getOverAllValue("arapFkApproveCode"), mapStr); if ("false".equals(ztResult.getFlag())) { @@ -522,7 +553,7 @@ public class CallBackServiceImpl implements CallBackService { dingU8cBillEntity.setCreate_time(new Date());//创建时间 dingU8cBillEntity.setApprove(null);//Y审核 N不审核 dingU8cBillEntity.setInitiate("D");//D钉钉发起,U u8c发起 - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); + dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity); //上传附件,获取附件的表单,转base64,上传u8c List fileModuleVOList = JSONUtil.toList(fjJson, FileModuleVO.class); @@ -530,9 +561,9 @@ public class CallBackServiceImpl implements CallBackService { for (SysFileVO sysFileVO : sysFileVOS) { //上传u8c单据 - pushU8CFileUtil.pushFile(vbillId,sysFileVO); + pushU8CFileUtil.pushFile(vbillId, sysFileVO); } - }catch (Exception e){ + } catch (Exception e) { logger.error(e); //成功 DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(); @@ -547,7 +578,7 @@ public class CallBackServiceImpl implements CallBackService { dingU8cBillEntity.setCreate_time(new Date());//创建时间 dingU8cBillEntity.setApprove(null);//Y审核 N不审核 dingU8cBillEntity.setInitiate("D");//D钉钉发起,U u8c发起 - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); + dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity); } } @@ -567,4 +598,45 @@ public class CallBackServiceImpl implements CallBackService { return null; } + /** + * 钉钉拒绝审批,http请求 + */ + public void refuse(DingU8cBillEntity dingU8cBillEntity, String mobile) throws IOException { + // 服务器访问地址及端口,例如 http://ip:port + String serviceUrl = OverallConstant.getOverAllValue("u8cApiUrl"); + // 接口地址 + String serviceName = "/u8cloud/api/dev/define"; + + //请求头 + Map map = new HashMap(); + map.put("usercode", OverallConstant.getOverAllValue("u8cApiUsercodeCode")); // 用户 + map.put("password", OverallConstant.getOverAllValue("u8cApiPasswordCode")); // 密码,需要 MD5 加密后录入 + map.put("system", OverallConstant.getOverAllValue("u8cApiSystemCode")); // 系统编码 + map.put("custdevpclass", "nc.bs.ding.process.ProcessDingImpl"); //方法路径 + + //请求体 + Map fileMap = new HashMap<>(); + fileMap.put("instanceId", dingU8cBillEntity.getDingTalkProcessId()); + fileMap.put("userCode", mobile);//审批人 + fileMap.put("ckeckResult", "同意"); + fileMap.put("ckeckNote", "无"); + String jsonFileMap = JSONUtil.toJsonStr(fileMap); + String json = "{\"json\":" + jsonFileMap + "}"; + + + //请求 + HttpClient httpClient = new HttpClient(); + PostMethod httpPost = new PostMethod(serviceUrl + serviceName); + httpPost.setRequestHeader("content-type", "application/json;charset=utf-8"); + for (Map.Entry entry : map.entrySet()) { + httpPost.setRequestHeader(entry.getKey(), entry.getValue() + .toString()); + } + + RequestEntity entity = new StringRequestEntity(json, "application/json", "UTF-8"); + httpPost.setRequestEntity(entity); + httpClient.executeMethod(httpPost); + String responseBodyAsString = httpPost.getResponseBodyAsString(); + System.out.println(responseBodyAsString); + } } diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/dao/IDingU8cBillDao.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/dao/IDingU8cBillDao.java index e4705834..b80be72e 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/dao/IDingU8cBillDao.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/dao/IDingU8cBillDao.java @@ -10,7 +10,9 @@ import com.hzya.frame.basedao.dao.IBaseDao; * @since 2024-10-28 15:45:32 */ public interface IDingU8cBillDao extends IBaseDao { - public void saveOrUpDateV2(DingU8cBillEntity dingU8cBillEntity); + public void pushSaveOrUpdate(DingU8cBillEntity dingU8cBillEntity); + + public void callBackSaveOrUpdate(DingU8cBillEntity dingU8cBillEntity); } diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/dao/impl/DingU8cBillDaoImpl.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/dao/impl/DingU8cBillDaoImpl.java index fb36b415..290e7f2e 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/dao/impl/DingU8cBillDaoImpl.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/dao/impl/DingU8cBillDaoImpl.java @@ -1,7 +1,10 @@ package com.hzya.frame.plugin.lets.dingtalk.dao.impl; +import cn.hutool.core.lang.Assert; import com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity; import com.hzya.frame.plugin.lets.dingtalk.dao.IDingU8cBillDao; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.hzya.frame.basedao.dao.MybatisGenericDao; @@ -11,112 +14,141 @@ import java.util.List; /** * (DingU8cBill)表数据库访问层 - * ->Y - * ->N + * 推送状态 + * ->Y + * ->N * N->N * N->Y + * 回调状态 + * ->Y * Y->Y + * Y->N + * * @author makejava * @since 2024-10-28 15:45:32 */ @Repository("dingU8cBillDao") -public class DingU8cBillDaoImpl extends MybatisGenericDao implements IDingU8cBillDao{ - -// private IDingU8cBillDao dingU8cBillDao; -// @Override -// public void saveOrUpDateV2(DingU8cBillEntity dingU8cBillEntityNew) { -// DingU8cBillEntity dingU8cBill = new DingU8cBillEntity(); -// String u8cCodeCorp = dingU8cBillEntityNew.getU8cCodeCorp(); -// String u8cBillCode = dingU8cBillEntityNew.getU8cBillCode(); -// String u8cBillId = dingU8cBillEntityNew.getU8cBillId(); -// String dingTalkProcessId = dingU8cBillEntityNew.getDingTalkProcessId(); -// dingU8cBill.setU8cCodeCorp(u8cCodeCorp); -// dingU8cBill.setU8cBillCode(u8cBillCode); -// dingU8cBill.setU8cBillId(u8cBillId); -// dingU8cBill.setDingTalkProcessId(dingTalkProcessId); -// dingU8cBill.setSts("Y"); -// List query = this.query(dingU8cBill); -// if (query.size() == 0) { -// //->N -// //->Y -// this.save(dingU8cBillEntityNew); -// }else { -// DingU8cBillEntity dingU8cBillEntity = query.get(0); -// String pushStatus = dingU8cBillEntity.getPushStatus(); -// String pushStatusNew = dingU8cBillEntityNew.getPushStatus(); -// if("N".equals(pushStatus)&&"N".equals(pushStatusNew)){ -// //N->N -// dingU8cBill.setId(dingU8cBillEntity.getId()); -// dingU8cBill.setModify_time(new Date()); -// dingU8cBill.setPushStatus("N"); -// dingU8cBill.setPushInfo(dingU8cBillEntityNew.getPushInfo()); -// this.update(dingU8cBill); -// }else if("N".equals(pushStatus)&&"Y".equals(pushStatusNew)){ -// //N->Y -// dingU8cBill.setId(dingU8cBillEntity.getId()); -// dingU8cBill.setDingTalkProcessId(dingU8cBillEntityNew.getDingTalkProcessId()); -// dingU8cBill.setModify_time(new Date()); -// dingU8cBill.setPushStatus("Y"); -// dingU8cBill.setPushInfo(dingU8cBillEntityNew.getPushInfo()); -// this.update(dingU8cBill); -// }else if("Y".equals(pushStatus)&&"Y".equals(pushStatusNew)){ -// //Y->Y -// dingU8cBill.setId(dingU8cBillEntity.getId()); -// dingU8cBill.setModify_time(new Date()); -// dingU8cBill.setDing_res(dingU8cBillEntityNew.getDing_res()); -// dingU8cBill.setApprove(dingU8cBillEntityNew.getApprove()); -// this.update(dingU8cBill); -// } -// } -// } +public class DingU8cBillDaoImpl extends MybatisGenericDao implements IDingU8cBillDao { + Logger logger = LoggerFactory.getLogger(DingU8cBillDaoImpl.class); /** * 根据:公司、单据号、实例id、来源D|U - * @param dingU8cBillEntityNew + * ->Y + * ->N + * N->N + * N->Y */ @Override - public void saveOrUpDateV2(DingU8cBillEntity dingU8cBillEntityNew) { + public void pushSaveOrUpdate(DingU8cBillEntity dingU8cBillEntityNew) { DingU8cBillEntity dingU8cBill = new DingU8cBillEntity(); dingU8cBill.setU8cCodeCorp(dingU8cBillEntityNew.getU8cCodeCorp());//公司 dingU8cBill.setU8cBillCode(dingU8cBillEntityNew.getU8cBillCode());//单据号 - dingU8cBill.setDingTalkProcessId(dingU8cBillEntityNew.getDingTalkProcessId());//实例id - dingU8cBill.setInitiate(dingU8cBillEntityNew.getInitiate());//来源平台 +// dingU8cBill.setDingTalkProcessId(dingU8cBillEntityNew.getDingTalkProcessId());//实例id + dingU8cBill.setInitiate(dingU8cBillEntityNew.getInitiate());//来源平台,默认是U,如果发自钉钉会传D List query = this.query(dingU8cBill); - if(query.size()==0){ - //->N - //->Y - this.save(dingU8cBillEntityNew); - }else { + if (query.size() == 0) { + if("N".equals(dingU8cBillEntityNew.getPushStatus())){ + //->N + this.save(dingU8cBillEntityNew); + } else if ("Y".equals(dingU8cBillEntityNew.getPushStatus())) { + //->Y + dingU8cBillEntityNew.setPush_count(1L); + dingU8cBillEntityNew.setPush_process_ids(dingU8cBillEntityNew.getDingTalkProcessId()); + this.save(dingU8cBillEntityNew); + } + } else { DingU8cBillEntity dingU8cBillEntity = query.get(0); String pushStatus = dingU8cBillEntity.getPushStatus(); String pushStatusNew = dingU8cBillEntityNew.getPushStatus(); - if("N".equals(pushStatus)&&"N".equals(pushStatusNew)){ + if ("N".equals(pushStatus) && "N".equals(pushStatusNew)) { //N->N dingU8cBill.setId(dingU8cBillEntity.getId()); - dingU8cBill.setDingTalkProcessId(dingU8cBillEntityNew.getDingTalkProcessId()); dingU8cBill.setModify_time(new Date()); dingU8cBill.setPushStatus("N"); dingU8cBill.setPushInfo(dingU8cBillEntityNew.getPushInfo()); this.update(dingU8cBill); - } else if ("N".equals(pushStatus)&&"Y".equals(pushStatusNew)) { - //N->Y + } else if ("N".equals(pushStatus) && "Y".equals(pushStatusNew)) { + //N->Y,可能重复推送 dingU8cBill.setId(dingU8cBillEntity.getId()); dingU8cBill.setDingTalkProcessId(dingU8cBillEntityNew.getDingTalkProcessId()); dingU8cBill.setModify_time(new Date()); dingU8cBill.setPushStatus("Y"); dingU8cBill.setPushInfo(dingU8cBillEntityNew.getPushInfo()); - this.update(dingU8cBill); - } else if ("Y".equals(pushStatus)&&"Y".equals(pushStatusNew)) { - //Y->Y - dingU8cBill.setId(dingU8cBillEntity.getId()); - dingU8cBill.setDingTalkProcessId(dingU8cBillEntityNew.getDingTalkProcessId()); - dingU8cBill.setModify_time(new Date()); - dingU8cBill.setDing_res(dingU8cBillEntityNew.getDing_res()); - dingU8cBill.setApprove(dingU8cBillEntityNew.getApprove()); - dingU8cBill.setPushInfo(dingU8cBillEntityNew.getPushInfo()); + dingU8cBill.setPush_count(dingU8cBillEntity.getPush_count() == null ? 1L : dingU8cBillEntityNew.getPush_count() + 1); + dingU8cBill.setPush_process_ids(dingU8cBillEntity.getPush_process_ids() == null ? dingU8cBillEntityNew.getDingTalkProcessId() : dingU8cBillEntityNew.getPush_process_ids() + "," + dingU8cBillEntityNew.getDingTalkProcessId()); this.update(dingU8cBill); } +// else if ("Y".equals(pushStatus)&&"Y".equals(pushStatusNew)) { +// //Y->Y +// dingU8cBill.setId(dingU8cBillEntity.getId()); +// dingU8cBill.setDingTalkProcessId(dingU8cBillEntityNew.getDingTalkProcessId()); +// dingU8cBill.setModify_time(new Date()); +// dingU8cBill.setDing_res(dingU8cBillEntityNew.getDing_res()); +// dingU8cBill.setApprove(dingU8cBillEntityNew.getApprove()); +// dingU8cBill.setPushInfo(dingU8cBillEntityNew.getPushInfo()); +// dingU8cBill.setPush_count(dingU8cBillEntityNew.getPush_count()); +// dingU8cBill.setPush_process_ids(dingU8cBillEntityNew.getPush_process_ids()); +// this.update(dingU8cBill); +// } } } + + /** + * 钉钉回调 + * ->Y 钉钉发起单据,审批不通过的不接 + * Y->Y 钉钉审批通过 + * Y->N 钉钉审批拒绝 + */ + @Override + public void callBackSaveOrUpdate(DingU8cBillEntity dingU8cBillEntityNew) { + try { + DingU8cBillEntity dingU8cBill = new DingU8cBillEntity(); + dingU8cBill.setU8cCodeCorp(dingU8cBillEntityNew.getU8cCodeCorp());//公司 + dingU8cBill.setU8cBillCode(dingU8cBillEntityNew.getU8cBillCode());//单据号 + dingU8cBill.setDingTalkProcessId(dingU8cBillEntityNew.getDingTalkProcessId());//实例id +// dingU8cBill.setInitiate(dingU8cBillEntityNew.getInitiate());//来源平台,默认是U,如果发自钉钉会传D + List query = this.query(dingU8cBill); + if (query.size() == 0) { + //->Y 钉钉发起单据 + if ("D".equals(dingU8cBillEntityNew.getInitiate())) { + this.save(dingU8cBillEntityNew); + } + } else if (query.size() == 1) { + DingU8cBillEntity dingU8cBillEntity = query.get(0); + String pushStatus = dingU8cBillEntity.getPushStatus(); + String pushStatusNew = dingU8cBillEntityNew.getPushStatus(); + String approveNew = dingU8cBillEntityNew.getApprove(); + //Y->Y 钉钉审批通过 + //Y->N 钉钉审批拒绝 + if("Y".equals(pushStatus) && "Y".equals(approveNew)){ + //Y->Y 钉钉审批通过,推送成功,审批成功 + dingU8cBill.setId(dingU8cBillEntity.getId()); + dingU8cBill.setDing_res(dingU8cBillEntityNew.getDing_res()); + dingU8cBill.setApprove("Y"); + dingU8cBill.setModify_time(new Date()); + dingU8cBill.setPushInfo(dingU8cBillEntityNew.getPushInfo()); + this.update(dingU8cBill); + } else if ("Y".equals(pushStatus) && "N".equals(approveNew)) { + //Y->N 钉钉审批拒绝,推送成功,审批拒绝 + dingU8cBill.setId(dingU8cBillEntity.getId()); + dingU8cBill.setApprove("N"); + dingU8cBill.setPushStatus("N"); + dingU8cBill.setDing_res(null); + dingU8cBill.setDingTalkProcessId(null); + dingU8cBill.setPushInfo(dingU8cBillEntityNew.getPushInfo()); + this.update(dingU8cBill); + } + + } else { + Assert.state(false, "钉钉回调报错,根据公司:{}、单据号:{}、实例id:{},查询单据不唯一。请检查!", dingU8cBillEntityNew.getU8cCodeCorp(), dingU8cBillEntityNew.getU8cBillCode(), dingU8cBillEntityNew.getDingTalkProcessId()); + } + } catch (Exception e) { + logger.error("钉钉回调报错:{}", e); + } + + + return; + + } } diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/entity/DingU8cBillEntity.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/entity/DingU8cBillEntity.java index fc94f14c..2ec54901 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/entity/DingU8cBillEntity.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/entity/DingU8cBillEntity.java @@ -39,6 +39,11 @@ public class DingU8cBillEntity extends BaseEntity { /** D钉钉发起,U u8c发起 */ private String initiate="U"; + /** 发起次数 */ + private Long push_count; + /** 历史实例id */ + private String push_process_ids; + public DingU8cBillEntity(String u8cPkCorp, String u8cCodeCorp, String u8cBillType, String u8cBillCode, String u8cBillId, String pushStatus, String pushInfo, String dingTalkProcessId, String ding_res) { this.u8cPkCorp = u8cPkCorp; this.u8cCodeCorp = u8cCodeCorp; diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/entity/DingU8cBillEntity.xml b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/entity/DingU8cBillEntity.xml index 1b37a7e3..e671ffc6 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/entity/DingU8cBillEntity.xml +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/entity/DingU8cBillEntity.xml @@ -15,6 +15,8 @@ + + @@ -33,6 +35,8 @@ ,ding_res ,approve ,initiate + ,push_count + ,push_process_ids ,modify_time ,create_time ,sts @@ -55,6 +59,8 @@ and ding_res = #{ding_res} and approve = #{approve} and initiate = #{initiate} + and push_count = #{push_count} + and push_process_ids = #{push_process_ids} and modify_time = #{modify_time} and create_time = #{create_time} and sts = #{sts} @@ -77,6 +83,8 @@ and ding_res = #{ding_res} and approve = #{approve} and initiate = #{initiate} + and push_count = #{push_count} + and push_process_ids = #{push_process_ids} and modify_time = #{modify_time} and create_time = #{create_time} and sts = #{sts} @@ -102,6 +110,8 @@ and ding_res like concat('%',#{ding_res},'%') and approve like concat('%',#{approve},'%') and initiate like concat('%',#{initiate},'%') + and push_count like concat('%',#{push_count},'%') + and push_process_ids like concat('%',#{push_process_ids},'%') and modify_time like concat('%',#{modify_time},'%') and create_time like concat('%',#{create_time},'%') and sts like concat('%',#{sts},'%') @@ -127,6 +137,8 @@ or ding_res = #{ding_res} or approve = #{approve} or initiate = #{initiate} + or push_count = #{push_count} + or push_process_ids = #{push_process_ids} or modify_time = #{modify_time} or create_time = #{create_time} or sts = #{sts} @@ -150,6 +162,8 @@ ding_res , approve , initiate , + push_count , + push_process_ids , modify_time , create_time , sts , @@ -169,6 +183,8 @@ #{ding_res} , #{approve} , #{initiate} , + #{push_count} , + #{push_process_ids} , #{modify_time} , #{create_time} , #{sts} , @@ -191,12 +207,43 @@ update ding_u8c_bill set ding_res = #{ding_res}, approve = #{approve}, initiate = #{initiate}, + push_count = #{push_count}, + push_process_ids = #{push_process_ids}, modify_time = #{modify_time}, create_time = #{create_time}, sts = #{sts}, where id = #{id} + + + + update ding_u8c_bill set + + u8c_pk_corp = #{u8cPkCorp}, + u8c_code_corp = #{u8cCodeCorp}, + u8c_bill_type = #{u8cBillType}, + u8c_bill_code = #{u8cBillCode}, + u8c_bill_id = #{u8cBillId}, + push_status = #{pushStatus}, + push_status = null, + push_info = #{pushInfo}, + push_info = null, + ding_talk_process_id = #{dingTalkProcessId}, + ding_talk_process_id = null, + ding_res = #{ding_res}, + ding_res = null, + approve = #{approve}, + approve = null, + initiate = #{initiate}, + push_count = #{push_count}, + push_process_ids = #{push_process_ids}, + modify_time = #{modify_time}, + create_time = #{create_time}, + sts = #{sts}, + + where id = #{id} + update ding_u8c_bill set sts= 'N' ,modify_time = #{modify_time},modify_user_id = #{modify_user_id} diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/push/serivce/impl/PushU8CServiceImpl.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/push/serivce/impl/PushU8CServiceImpl.java index 40e6da9b..a9c502d8 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/push/serivce/impl/PushU8CServiceImpl.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/dingtalk/push/serivce/impl/PushU8CServiceImpl.java @@ -108,9 +108,9 @@ public class PushU8CServiceImpl implements PushU8CService { } catch (Exception e) { logger.error("委外采购(付款单)->采购付款申请(新)报错", e); - DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(djFileVO.getDjzbVO().getParentvo().getDwbm(), djFileVO.getDjzbVO().getParentvo().getDwbm_code(), djFileVO.getDjzbVO().getParentvo().getBusitypecode(), djFileVO.getDjzbVO().getParentvo().getDjbh(), djFileVO.getDjzbVO().getParentvo().getVouchid(), "N", e.getMessage(), null,null); - dingU8cBillEntity.setCreate_time(new Date()); - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); +// DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(djFileVO.getDjzbVO().getParentvo().getDwbm(), djFileVO.getDjzbVO().getParentvo().getDwbm_code(), djFileVO.getDjzbVO().getParentvo().getBusitypecode(), djFileVO.getDjzbVO().getParentvo().getDjbh(), djFileVO.getDjzbVO().getParentvo().getVouchid(), "N", e.getMessage(), null,null); +// dingU8cBillEntity.setCreate_time(new Date()); +// dingU8cBillDao.pushSaveOrUpdate(dingU8cBillEntity); Assert.state(false,e.getMessage()); } return instanceId; @@ -148,9 +148,9 @@ public class PushU8CServiceImpl implements PushU8CService { } catch (Exception e) { logger.error("代理采购(付款单)->采购付款申请(店群专用)报错", e); - DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(djFileVO.getDjzbVO().getParentvo().getDwbm(), djFileVO.getDjzbVO().getParentvo().getDwbm_code(), djFileVO.getDjzbVO().getParentvo().getBusitypecode(), djFileVO.getDjzbVO().getParentvo().getDjbh(), djFileVO.getDjzbVO().getParentvo().getVouchid(), "N", e.getMessage(), null,null); - dingU8cBillEntity.setCreate_time(new Date()); - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); +// DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(djFileVO.getDjzbVO().getParentvo().getDwbm(), djFileVO.getDjzbVO().getParentvo().getDwbm_code(), djFileVO.getDjzbVO().getParentvo().getBusitypecode(), djFileVO.getDjzbVO().getParentvo().getDjbh(), djFileVO.getDjzbVO().getParentvo().getVouchid(), "N", e.getMessage(), null,null); +// dingU8cBillEntity.setCreate_time(new Date()); +// dingU8cBillDao.pushSaveOrUpdate(dingU8cBillEntity); Assert.state(false,e.getMessage()); } return instanceId; @@ -186,9 +186,9 @@ public class PushU8CServiceImpl implements PushU8CService { } catch (Exception e) { logger.error("调拨单内部交易(付款单)->特殊业务处理(新)报错", e); - DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(djFileVO.getDjzbVO().getParentvo().getDwbm(), djFileVO.getDjzbVO().getParentvo().getDwbm_code(), djFileVO.getDjzbVO().getParentvo().getBusitypecode(), djFileVO.getDjzbVO().getParentvo().getDjbh(), djFileVO.getDjzbVO().getParentvo().getVouchid(), "N", e.getMessage(), null,null); - dingU8cBillEntity.setCreate_time(new Date()); - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); +// DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(djFileVO.getDjzbVO().getParentvo().getDwbm(), djFileVO.getDjzbVO().getParentvo().getDwbm_code(), djFileVO.getDjzbVO().getParentvo().getBusitypecode(), djFileVO.getDjzbVO().getParentvo().getDjbh(), djFileVO.getDjzbVO().getParentvo().getVouchid(), "N", e.getMessage(), null,null); +// dingU8cBillEntity.setCreate_time(new Date()); +// dingU8cBillDao.pushSaveOrUpdate(dingU8cBillEntity); Assert.state(false,e.getMessage()); } return instanceId; @@ -331,8 +331,9 @@ public class PushU8CServiceImpl implements PushU8CService { //记录成功记录 DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "Y", "success", instanceId,null); +// DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), null, null, null,null); dingU8cBillEntity.setCreate_time(new Date()); - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); + dingU8cBillDao.pushSaveOrUpdate(dingU8cBillEntity); return instanceId; } catch (Exception e) { @@ -340,7 +341,7 @@ public class PushU8CServiceImpl implements PushU8CService { //记录失败记录 DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "N", e.getMessage(), null,null); dingU8cBillEntity.setCreate_time(new Date()); - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); + dingU8cBillDao.pushSaveOrUpdate(dingU8cBillEntity); } return null; } @@ -388,8 +389,7 @@ public class PushU8CServiceImpl implements PushU8CService { //记录成功记录 DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "Y", "success", instanceId,null); dingU8cBillEntity.setCreate_time(new Date()); - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); - + dingU8cBillDao.pushSaveOrUpdate(dingU8cBillEntity); return instanceId; } catch (Exception e) { @@ -397,7 +397,7 @@ public class PushU8CServiceImpl implements PushU8CService { //记录失败记录 DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "N", e.getMessage(), null,null); dingU8cBillEntity.setCreate_time(new Date()); - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); + dingU8cBillDao.pushSaveOrUpdate(dingU8cBillEntity); } return instanceId; } @@ -440,14 +440,14 @@ public class PushU8CServiceImpl implements PushU8CService { //记录成功记录 DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "Y", "success", instanceId,null); dingU8cBillEntity.setCreate_time(new Date()); - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); + dingU8cBillDao.pushSaveOrUpdate(dingU8cBillEntity); } catch (Exception e) { logger.error(e.getMessage()); //记录失败记录 DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(parentvo.getDwbm(), parentvo.getDwbm_code(), parentvo.getBusitypecode(), parentvo.getDjbh(), parentvo.getVouchid(), "N", e.getMessage(), null,null); dingU8cBillEntity.setCreate_time(new Date()); - dingU8cBillDao.saveOrUpDateV2(dingU8cBillEntity); + dingU8cBillDao.pushSaveOrUpdate(dingU8cBillEntity); } return instanceId; diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/dingtalk/DingCallBackPluginInitializer.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/dingtalk/DingCallBackPluginInitializer.java index 7d8ffe9f..d93bfcda 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/dingtalk/DingCallBackPluginInitializer.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/dingtalk/DingCallBackPluginInitializer.java @@ -1,20 +1,52 @@ package com.hzya.frame.plugin.lets.plugin.dingtalk; +import cn.hutool.core.lang.Assert; import com.alibaba.fastjson.JSONObject; +import com.aliyun.dingtalkoauth2_1_0.models.GetAccessTokenResponseBody; +import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponse; +import com.aliyun.dingtalkworkflow_1_0.models.GetProcessInstanceResponseBody; import com.hzya.frame.base.PluginBaseEntity; +import com.hzya.frame.plugin.lets.constant.ProfilesActiveConstant; +import com.hzya.frame.plugin.lets.dingtalk.dao.IDingU8cBillDao; +import com.hzya.frame.plugin.lets.dingtalk.entity.DingU8cBillEntity; +import com.hzya.frame.plugin.lets.dingtalk.utils.DingTalkUtils; +import com.hzya.frame.plugin.lets.util.SaveOrUpdateBusinessLogUtil; +import com.hzya.frame.sysnew.integtationTaskLivingDetails.dao.IIntegrationTaskLivingDetailsDao; +import com.hzya.frame.sysnew.integtationTaskLivingDetails.entity.IntegrationTaskLivingDetailsEntity; +import com.hzya.frame.web.entity.BaseResult; import com.hzya.frame.web.entity.JsonResultEntity; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.locks.ReentrantLock; +import java.util.stream.Collectors; /** * 为避免回调超时,每天定时检查所有未审批完成的审批实例。 + * 只检测u8c推送钉钉的,不检测钉钉自己发起的审批实例 */ +@Service("DingCallBackService") public class DingCallBackPluginInitializer extends PluginBaseEntity { Logger logger = LoggerFactory.getLogger(DingCallBackPluginInitializer.class); private static final ReentrantLock LOCK = new ReentrantLock(true); + @Value("${DING.APPKEY}") + private String APPKEY; + @Value("${DING.AppSecret}") + private String AppSecret; + + @Autowired + private IIntegrationTaskLivingDetailsDao iIntegrationTaskLivingDetailsDao; + + @Autowired + private SaveOrUpdateBusinessLogUtil saveOrUpdateBusinessLogUtil; + @Autowired + private IDingU8cBillDao dingU8cBillDao; @Override public void initialize() { @@ -48,8 +80,170 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity { @Override public JsonResultEntity executeBusiness(JSONObject requestJson) throws Exception { - return null; + try { + logger.info("调用:" + getPluginName() + "-插件"); + String prod = "prod"; + String param = String.valueOf(requestJson.get("param")); + if (requestJson != null && ProfilesActiveConstant.TYPE_VBILLCODE.equals(requestJson.get("type")) && param != null && !"".equals(param)) { + //按单号 + start(param); + } else if (ProfilesActiveConstant.TYPE_DETAIL_ERROR.equals(requestJson.get("type"))) { + String integrationTaskLivingDetails = (String) requestJson.get("integration_task_living_details_id"); + IntegrationTaskLivingDetailsEntity integrationTaskLivingDetailsEntity = saveOrUpdateBusinessLogUtil.queryIntegrationTaskLivingDetailsEntity(integrationTaskLivingDetails); + start(integrationTaskLivingDetailsEntity.getRootAppPk()); + } else if (ProfilesActiveConstant.LETS_PROFILES_ACTIVE.equals(prod)) { + //默认 + start(); + } + } catch (Exception e) { + logger.error("executeBusiness方法抛出异常", e); + } + return BaseResult.getSuccessMessageEntity("插件执行成功"); } + /** + * 检测所有插件 + */ + public void start() { + try { + DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(); + dingU8cBillEntity.setSts("Y"); + dingU8cBillEntity.setInitiate("U"); + List query = dingU8cBillDao.query(dingU8cBillEntity); + if (query == null || query.size() == 0) { + return; + } + //过滤同意 且 实例id不为null + List filterData = filterPass(query); + if (filterData == null || filterData.size() == 0) { + return; + } +// List collect = filterData.stream().map(DingU8cBillEntity::getDingTalkProcessId).collect(Collectors.toList()); +// if (collect == null || collect.size() == 0) { +// return; +// } + implement(filterData); + } catch (Exception e) { + logger.error("丽知:钉钉审批实例自动检查start()报错,报错信息:{}", e); + } + } + + /** + * 检测是定插件 + * + * @param processInstanceId + */ + public void start(String processInstanceId) { + try { + DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(); + dingU8cBillEntity.setDingTalkProcessId(processInstanceId); + dingU8cBillEntity.setSts("Y"); + dingU8cBillEntity.setInitiate("U"); + List query = dingU8cBillDao.query(dingU8cBillEntity); + if (query == null || query.size() == 0) { + Assert.state(false,"根据审批实例id:{},无法查询到推送记录",processInstanceId); + } + //过滤同意 且 实例id不为null + List filterData = filterPass(query); + if (filterData == null || filterData.size() == 0) { + return; + } + implement(filterData); + } catch (Exception e) { + logger.error("丽知:钉钉审批实例自动检查start(String processInstanceId)报错,报错信息:{}", e); + } + + } + + /** + * 过滤审核通过的 + * + * @param query + * @return + */ + public List filterPass(List query) { + List filter = new ArrayList<>(); + for (DingU8cBillEntity dingU8cBillEntity : query) { + if ("Y".equals(dingU8cBillEntity.getApprove()) || (dingU8cBillEntity.getDingTalkProcessId() == null && "".equals(dingU8cBillEntity.getDingTalkProcessId().trim()))) { + continue; + } + filter.add(dingU8cBillEntity); + } + return filter; + + } + + /** + * 查询表单,看返回接口。 + * + * @param filterData + */ + public void implement(List filterData) throws Exception { + //获取token + String token = getDingTalkToken(); + for (DingU8cBillEntity dingU8cBillEntity : filterData) { + if(dingU8cBillEntity.getDingTalkProcessId()==null||"".equals(dingU8cBillEntity.getDingTalkProcessId().trim())){ + continue; + } + + //查询u8c付款单审核状态,审核的continue,没审核的查询钉钉表单上的状态 + + try { + //查询实例的具体信息 + GetProcessInstanceResponse processInstanceDetails = DingTalkUtils.getProcessInstanceDetails(token, dingU8cBillEntity.getDingTalkProcessId()); + GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResult processInstanceResponseBodyResult = processInstanceDetails.getBody().getResult(); + //获取所有审批意见 + List operationRecords = processInstanceResponseBodyResult.getOperationRecords(); + //审批意见过滤掉:START_PROCESS_INSTANCE:发起流程实例 + operationRecords = operationRecords.stream().filter(item -> !item.getType().equals("START_PROCESS_INSTANCE")).collect(Collectors.toList()); + + String remark = ""; + + //钉钉问题记录执行明细 + for (GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultOperationRecords operationRecord : operationRecords) { + //操作结果 + switch (operationRecord.getResult()) { + case "AGREE": + dingU8cBillEntity.setDing_res("同意"); + break; + case "REFUSE": + dingU8cBillEntity.setDing_res("拒绝"); + break; + case "NONE": + dingU8cBillEntity.setDing_res("未处理"); + break; + } + //处理意见 + remark = operationRecord.getRemark(); + } + + //审核 + + //拒审 + + + } catch (Exception e) { + logger.error("丽知:钉钉审批实例自动检查implement(List processInstanceIds)报错,报错信息:{}", e); + } + } + } + + /** + * 获取钉钉应用token + */ + public String getDingTalkToken() throws Exception { + GetAccessTokenResponseBody tokenBody = DingTalkUtils.getTokenBody(APPKEY, AppSecret); + return tokenBody.getAccessToken(); + } + + /** + * 审批拒绝后清除ding_talk_process_id、ding_res、approve、initiate、push_count++,push_process_ids + * @param dingU8cBillEntity + */ + public void updateDingU8C(DingU8cBillEntity dingU8cBillEntity){ + dingU8cBillEntity.setDingTalkProcessId(null); + dingU8cBillDao.update(dingU8cBillEntity); + } + } diff --git a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/RefundOnlyPluginInitializer.java b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/RefundOnlyPluginInitializer.java index fa26583d..237d2b2e 100644 --- a/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/RefundOnlyPluginInitializer.java +++ b/buildpackage/src/main/java/com/hzya/frame/plugin/lets/plugin/sales/RefundOnlyPluginInitializer.java @@ -409,7 +409,7 @@ public class RefundOnlyPluginInitializer extends PluginBaseEntity { //lrr 录入人 parentvo.setLrr(OverallConstant.getOverAllValue("u8cApiZdrCode")); //wldx 往来对象标识 (0 客户 2部门 3业务员) - parentvo.setWldx("2"); + parentvo.setWldx("0"); //hbbm 客商==店铺,根据店铺区分tob、toc,,,编码需要转换,转换称自定义项。 BdCubasdocEntity entity = queryU8CEntityUtil.getFuzzyQueryCustomers(split[1]); if(entity==null){ diff --git a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/base/BaseTest.java b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/base/BaseTest.java index 728683b6..7bd64f8c 100644 --- a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/base/BaseTest.java +++ b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/base/BaseTest.java @@ -1,6 +1,7 @@ package com.hzya.frame.plugin.lets.plugin.base; import com.hzya.frame.WebappApplication; +import com.hzya.frame.plugin.lets.plugin.dingtalk.DingCallBackPluginInitializer; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -21,6 +22,8 @@ public class BaseTest { private GoodsAutoAllotPluginInitializer goodsAutoAllotPluginInitializer; @Autowired private KitPluginInitializer kitPluginInitializer; + @Autowired + private DingCallBackPluginInitializer dingCallBackPluginInitializer; ////////////////////////////////////////////////////////////////////////////////////SKU @Test @@ -73,4 +76,16 @@ public class BaseTest { } + /////////////////////////////////////////////////////////////////////////////////////钉钉审批实例 + @Test + public void t40(){ + dingCallBackPluginInitializer.start("I96QXUaPRuulq3OUBa-N8Q05751730363617"); + } + + @Test + public void t41(){ + dingCallBackPluginInitializer.start(); + } + + } diff --git a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/transfer/TransferTest.java b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/transfer/TransferTest.java index ba6d75a5..dafb8949 100644 --- a/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/transfer/TransferTest.java +++ b/buildpackage/src/test/java/com/hzya/frame/plugin/lets/plugin/transfer/TransferTest.java @@ -81,7 +81,7 @@ public class TransferTest { @Test public void t31(){ // adjustInPluginInitializer.start("LETS-RE2024091100000001"); - adjustInPluginInitializer.start("LETS-RE2024102400000004"); + adjustInPluginInitializer.start("LETS-RE2024110500000028"); } @Test public void t32(){ @@ -133,7 +133,7 @@ public class TransferTest { public void t80(){ // refundOnlyPluginInitializer.start("LETS-RO2024091900000001"); // refundOnlyPluginInitializer.start("LETS-RO2023060900005007"); - refundOnlyPluginInitializer.start("LETS-RO2024101800001577"); + refundOnlyPluginInitializer.start("LETS-RO2024111900003595"); } @Test