From b4faeaadd0db6ef381be7303daa127451580927a Mon Sep 17 00:00:00 2001 From: zhengyf Date: Thu, 28 Nov 2024 17:43:31 +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=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/impl/CallBackServiceImpl.java | 15 ++++ .../dingtalk/dao/impl/DingU8cBillDaoImpl.java | 1 + .../dingtalk/entity/DingU8cBillEntity.java | 4 + .../dingtalk/entity/DingU8cBillEntity.xml | 5 ++ .../DingCallBackPluginInitializer.java | 79 +++++++++---------- .../lets/plugin/transfer/TransferTest.java | 26 +++++- 6 files changed, 89 insertions(+), 41 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 7ce63547..bfcd1b74 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 @@ -690,6 +690,21 @@ public class CallBackServiceImpl implements CallBackService { dingU8cBillEntity.setApprove(null);//Y审核 N不审核 dingU8cBillEntity.setInitiate("D");//D钉钉发起,U u8c发起 dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity); + + + LocalDate now = LocalDate.now(); + + //做一个钉钉的日志 + IntegrationTaskLivingDetailsEntity integrationTaskLivingDetailsEntity = new IntegrationTaskLivingDetailsEntity(); + integrationTaskLivingDetailsEntity.setNewState(ProfilesActiveConstant.LOG_STATUS_N); + integrationTaskLivingDetailsEntity.setRootAppNewData("付款单新增回调报错"); + integrationTaskLivingDetailsEntity.setNewTransmitInfo(e.getMessage()); + integrationTaskLivingDetailsEntity.setNewPushDate(new Date()); + integrationTaskLivingDetailsEntity.setBusinessDate(now.toString()); + integrationTaskLivingDetailsEntity.setRootAppPk(processInstanceId); + integrationTaskLivingDetailsEntity.setRootAppBill(processInstanceId); + integrationTaskLivingDetailsEntity.setPluginId("dingtalk.DingCallBackServicePluginInitializer"); + saveOrUpdateBusinessLogUtil.saveOrUpdate(integrationTaskLivingDetailsEntity); } } 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 91344151..a2d33ca1 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 @@ -68,6 +68,7 @@ public class DingU8cBillDaoImpl extends MybatisGenericDaoY,可能重复推送 dingU8cBill.setId(dingU8cBillEntity.getId()); dingU8cBill.setDing_talk_process_id(dingU8cBillEntityNew.getDing_talk_process_id()); 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 3f3f8036..0d26ba8d 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 @@ -44,6 +44,10 @@ public class DingU8cBillEntity extends BaseEntity { private Long push_count; /** 历史实例id */ private String push_process_ids; + /** 开始时间 */ + private String start_time; + /** 结束时间 */ + private String end_time; public DingU8cBillEntity(String u8c_pk_corp, String u8c_code_corp, String u8c_bill_type, String u8c_bill_code, String u8c_bill_id, String push_status, String push_info, String ding_talk_process_id, String ding_res) { this.u8c_pk_corp = u8c_pk_corp; 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 efadd840..b67d715a 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 @@ -66,6 +66,9 @@ and push_process_ids = #{push_process_ids} and modify_time = #{modify_time} and create_time = #{create_time} + + and create_time >= #{start_time} + and create_time <= #{end_time} and sts='Y' @@ -166,6 +169,7 @@ ding_talk_process_id , ding_res , approve , + approve , initiate , push_count , push_process_ids , @@ -188,6 +192,7 @@ #{ding_talk_process_id} , #{ding_res} , #{approve} , + null , #{initiate} , #{push_count} , #{push_process_ids} , 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 008d6bd3..52e85683 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 @@ -36,6 +36,7 @@ import org.springframework.stereotype.Service; import java.io.IOException; import java.time.LocalDate; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -45,7 +46,7 @@ import java.util.stream.Collectors; /** * 为避免回调超时,每天定时检查所有未审批完成的审批实例。 - * 只检测u8c推送钉钉的,不检测钉钉自己发起的审批实例 + * 只检测u8c成功推送钉钉的,不检测钉钉自己发起的审批实例 */ @Service("DingCallBackService") public class DingCallBackPluginInitializer extends PluginBaseEntity { @@ -121,12 +122,20 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity { /** * 检测所有插件 + * 只检测u8c成功推送钉钉的 ,不检测钉钉自己发起的审批实例 */ public void start() { try { + LocalDate now = LocalDate.now(); + // 减去3个月 + LocalDate nowBeforeThreeMonths = now.minus(3, ChronoUnit.MONTHS); + DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(); + dingU8cBillEntity.setStart_time(nowBeforeThreeMonths+" 00:00:00"); + dingU8cBillEntity.setEnd_time(now+" 23:59:59"); dingU8cBillEntity.setSts("Y"); dingU8cBillEntity.setInitiate("U"); + dingU8cBillEntity.setPush_status("Y"); List query = dingU8cBillDao.query(dingU8cBillEntity); if (query == null || query.size() == 0) { return; @@ -136,10 +145,6 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity { if (filterData == null || filterData.size() == 0) { return; } -// List collect = filterData.stream().map(DingU8cBillEntity::getDing_talk_process_id).collect(Collectors.toList()); -// if (collect == null || collect.size() == 0) { -// return; -// } implement(filterData); } catch (Exception e) { logger.error("丽知:钉钉审批实例自动检查start()报错,报错信息:{}", e); @@ -185,7 +190,9 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity { if ("Y".equals(dingU8cBillEntity.getApprove()) || (dingU8cBillEntity.getDing_talk_process_id() == null || "".equals(dingU8cBillEntity.getDing_talk_process_id().trim()))) { continue; } - filter.add(dingU8cBillEntity); + if(dingU8cBillEntity.getApprove()==null){ + filter.add(dingU8cBillEntity); + } } return filter; @@ -193,21 +200,13 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity { /** * 查询表单,看返回接口。 - * + * push_status:Y approve:(null) * @param filterData */ public void implement(List filterData) throws Exception { //获取token String token = getDingTalkToken(); for (DingU8cBillEntity dingU8cBillEntity : filterData) { - if(dingU8cBillEntity.getDing_talk_process_id()==null||"".equals(dingU8cBillEntity.getDing_talk_process_id().trim())){ - continue; - } - if("Y".equals(dingU8cBillEntity.getApprove())){ - continue; - } - - //查询u8c付款单审核状态,审核的continue,没审核的查询钉钉表单上的状态 try { //查询实例的具体信息 @@ -225,51 +224,51 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity { return; } - //查询u8c的单据状态//spzt:1审核 null 未审核 + //查询u8c的单据状态 String u8cPkCorp = dingU8cBillEntity.getU8c_pk_corp(); String u8cBillCode = dingU8cBillEntity.getU8c_bill_code(); ArapDjzbEntity arapDjzbEntity = queryArapDjzbEntity(u8cPkCorp, u8cBillCode); if(arapDjzbEntity==null){ - return; + Assert.state(false,"根据公司主键:{},单据号:{},未查询到u8c付款单,请检查。",u8cPkCorp,u8cBillCode); } - //任务列表,文档地址: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) { - userId=task.getUserId(); + //djzt单据状态 1保存 3完成 + if("3".equals(arapDjzbEntity.getDjzt())){ + continue; + } + //spzt审批状态 null未审批 1审批 + if("1".equals(arapDjzbEntity.getSpzt())){ + continue; } - mobile = getMobileByUserId(token, userId); result = processInstanceResponseBodyResult.getResult(); - if("agree".equals(result)){ - approveArapDjzb(dingU8cBillEntity,mobile); - }else if("refuse".equals(result)){ - refuse(dingU8cBillEntity,mobile); + if ("agree".equals(result)) { + //同意 + //审批u8c单据 + approveArapDjzb(dingU8cBillEntity); + }else if ("refuse".equals(result)) { + //拒绝 + dingU8cBillEntity.setApprove("N"); + dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity); + //后续林姐姐给接口,拒绝之后清空process_id、approve:N + refuse(dingU8cBillEntity); } } catch (Exception e) { logger.error("丽知:钉钉审批实例自动检查implement(List processInstanceIds)报错,报错信息:{}", e); + } } } - /** - * 审批拒绝后清除ding_talk_process_id、ding_res、approve、initiate、push_count++,push_process_ids - * @param dingU8cBillEntity - */ - public void updateDingU8C(DingU8cBillEntity dingU8cBillEntity){ - dingU8cBillEntity.setDing_talk_process_id(null); - dingU8cBillDao.update(dingU8cBillEntity); - } - @Autowired private PushU8CByApiCode pushU8CByApiCode; /** * 审核付款单 */ - public void approveArapDjzb(DingU8cBillEntity dingU8cBillEntity,String mobile) throws Exception { + public void approveArapDjzb(DingU8cBillEntity dingU8cBillEntity) throws Exception { LocalDate now = LocalDate.now(); @@ -278,7 +277,7 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity { bills.put("dwbm", dingU8cBillEntity.getU8c_code_corp()); bills.put("opinion", "同意"); // bills.put("operatorid", OverallConstant.getOverAllValue("u8cApiZdrCode")); - bills.put("operatorid", mobile); + bills.put("operatorid", "tbadmin"); bills.put("operatedate", now.toString()); String jsonStr = JSONUtil.toJsonStr(bills); jsonStr = "{\"bills\":[" + jsonStr + "]}"; @@ -318,7 +317,7 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity { /** * 钉钉拒绝审批,http请求 */ - public void refuse(DingU8cBillEntity dingU8cBillEntity, String mobile) throws IOException { + public void refuse(DingU8cBillEntity dingU8cBillEntity) throws IOException { // 服务器访问地址及端口,例如 http://ip:port String serviceUrl = OverallConstant.getOverAllValue("u8cApiUrl"); // 接口地址 @@ -329,12 +328,12 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity { 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.put("custdevpclass", "u8c.api.dev.dingTalk.RefuseApprove"); //方法路径 //请求体 Map fileMap = new HashMap<>(); fileMap.put("instanceId", dingU8cBillEntity.getDing_talk_process_id()); - fileMap.put("userCode", mobile);//审批人 + fileMap.put("userCode", "tbadmin");//审批人 fileMap.put("ckeckResult", "R"); fileMap.put("ckeckNote", "无"); String jsonFileMap = JSONUtil.toJsonStr(fileMap); 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 dafb8949..d05a5318 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 @@ -2,7 +2,10 @@ package com.hzya.frame.plugin.lets.plugin.transfer; import com.hzya.frame.WebappApplication; import com.hzya.frame.plugin.lets.plugin.adjust.*; +import com.hzya.frame.plugin.lets.plugin.dingtalk.DingCallBackPluginInitializer; import com.hzya.frame.plugin.lets.plugin.sales.RefundOnlyPluginInitializer; +import com.hzya.frame.plugin.lets.plugin.sales.RefundOnlyPluginInitializerToB; +import com.hzya.frame.plugin.lets.plugin.sales.RefundOnlyPluginInitializerToC; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -81,7 +84,7 @@ public class TransferTest { @Test public void t31(){ // adjustInPluginInitializer.start("LETS-RE2024091100000001"); - adjustInPluginInitializer.start("LETS-RE2024110500000028"); + adjustInPluginInitializer.start("LETS-RE2024101700000004"); } @Test public void t32(){ @@ -143,4 +146,25 @@ public class TransferTest { } ////////////////////////////////////////////////////////////////////////////////////仅退款 + ////////////////////////////////////////////////////////////////////////////////////仅退款TOB + @Autowired + private RefundOnlyPluginInitializerToB refundOnlyPluginInitializerToB; + ////////////////////////////////////////////////////////////////////////////////////仅退款TOB + + + ////////////////////////////////////////////////////////////////////////////////////仅退款TOC + @Autowired + private RefundOnlyPluginInitializerToC refundOnlyPluginInitializerToC; + ////////////////////////////////////////////////////////////////////////////////////仅退款TOC + + ////////////////////////////////////////////////////////////////////////////////////dingtalk + @Autowired + private DingCallBackPluginInitializer dingCallBackPluginInitializer; + + @Test + public void t1101(){ + dingCallBackPluginInitializer.start(); + } + + ////////////////////////////////////////////////////////////////////////////////////dingtalk }