丽知:钉钉回调修改

This commit is contained in:
zhengyf 2024-11-28 17:43:31 +08:00
parent 472964e254
commit b4faeaadd0
6 changed files with 89 additions and 41 deletions

View File

@ -690,6 +690,21 @@ public class CallBackServiceImpl implements CallBackService {
dingU8cBillEntity.setApprove(null);//Y审核 N不审核 dingU8cBillEntity.setApprove(null);//Y审核 N不审核
dingU8cBillEntity.setInitiate("D");//D钉钉发起U u8c发起 dingU8cBillEntity.setInitiate("D");//D钉钉发起U u8c发起
dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity); 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);
} }
} }

View File

@ -68,6 +68,7 @@ public class DingU8cBillDaoImpl extends MybatisGenericDao<DingU8cBillEntity, Str
dingU8cBill.setPush_info(dingU8cBillEntityNew.getPush_info()); dingU8cBill.setPush_info(dingU8cBillEntityNew.getPush_info());
this.update(dingU8cBill); this.update(dingU8cBill);
} else if ("N".equals(pushStatus) && "Y".equals(pushStatusNew)) { } else if ("N".equals(pushStatus) && "Y".equals(pushStatusNew)) {
dingU8cBill.setApprove(null);
//N->Y,可能重复推送 //N->Y,可能重复推送
dingU8cBill.setId(dingU8cBillEntity.getId()); dingU8cBill.setId(dingU8cBillEntity.getId());
dingU8cBill.setDing_talk_process_id(dingU8cBillEntityNew.getDing_talk_process_id()); dingU8cBill.setDing_talk_process_id(dingU8cBillEntityNew.getDing_talk_process_id());

View File

@ -44,6 +44,10 @@ public class DingU8cBillEntity extends BaseEntity {
private Long push_count; private Long push_count;
/** 历史实例id */ /** 历史实例id */
private String push_process_ids; 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) { 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; this.u8c_pk_corp = u8c_pk_corp;

View File

@ -66,6 +66,9 @@
<if test="push_process_ids != null and push_process_ids != ''"> and push_process_ids = #{push_process_ids} </if> <if test="push_process_ids != null and push_process_ids != ''"> and push_process_ids = #{push_process_ids} </if>
<if test="modify_time != null"> and modify_time = #{modify_time} </if> <if test="modify_time != null"> and modify_time = #{modify_time} </if>
<if test="create_time != null"> and create_time = #{create_time} </if> <if test="create_time != null"> and create_time = #{create_time} </if>
<if test="start_time != null"> and create_time >= #{start_time} </if>
<if test="end_time != null"> and create_time &lt;= #{end_time} </if>
and sts='Y' and sts='Y'
</trim> </trim>
</select> </select>
@ -166,6 +169,7 @@
<if test="ding_talk_process_id != null and ding_talk_process_id != ''"> ding_talk_process_id , </if> <if test="ding_talk_process_id != null and ding_talk_process_id != ''"> ding_talk_process_id , </if>
<if test="ding_res != null and ding_res != ''"> ding_res , </if> <if test="ding_res != null and ding_res != ''"> ding_res , </if>
<if test="approve != null and approve != ''"> approve , </if> <if test="approve != null and approve != ''"> approve , </if>
<if test="approve == null and approve == ''"> approve , </if>
<if test="initiate != null and initiate != ''"> initiate , </if> <if test="initiate != null and initiate != ''"> initiate , </if>
<if test="push_count != null and push_count != ''"> push_count , </if> <if test="push_count != null and push_count != ''"> push_count , </if>
<if test="push_process_ids != null and push_process_ids != ''"> push_process_ids , </if> <if test="push_process_ids != null and push_process_ids != ''"> push_process_ids , </if>
@ -188,6 +192,7 @@
<if test="ding_talk_process_id != null and ding_talk_process_id != ''"> #{ding_talk_process_id} ,</if> <if test="ding_talk_process_id != null and ding_talk_process_id != ''"> #{ding_talk_process_id} ,</if>
<if test="ding_res != null and ding_res != ''"> #{ding_res} ,</if> <if test="ding_res != null and ding_res != ''"> #{ding_res} ,</if>
<if test="approve != null and approve != ''"> #{approve} ,</if> <if test="approve != null and approve != ''"> #{approve} ,</if>
<if test="approve == null and approve == ''"> null ,</if>
<if test="initiate != null and initiate != ''"> #{initiate} ,</if> <if test="initiate != null and initiate != ''"> #{initiate} ,</if>
<if test="push_count != null and push_count != ''"> #{push_count} ,</if> <if test="push_count != null and push_count != ''"> #{push_count} ,</if>
<if test="push_process_ids != null and push_process_ids != ''"> #{push_process_ids} ,</if> <if test="push_process_ids != null and push_process_ids != ''"> #{push_process_ids} ,</if>

View File

@ -36,6 +36,7 @@ import org.springframework.stereotype.Service;
import java.io.IOException; import java.io.IOException;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -45,7 +46,7 @@ import java.util.stream.Collectors;
/** /**
* 为避免回调超时每天定时检查所有未审批完成的审批实例 * 为避免回调超时每天定时检查所有未审批完成的审批实例
* 只检测u8c推送钉钉的不检测钉钉自己发起的审批实例 * 只检测u8c成功推送钉钉的不检测钉钉自己发起的审批实例
*/ */
@Service("DingCallBackService") @Service("DingCallBackService")
public class DingCallBackPluginInitializer extends PluginBaseEntity { public class DingCallBackPluginInitializer extends PluginBaseEntity {
@ -121,12 +122,20 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity {
/** /**
* 检测所有插件 * 检测所有插件
* 只检测u8c成功推送钉钉的 不检测钉钉自己发起的审批实例
*/ */
public void start() { public void start() {
try { try {
LocalDate now = LocalDate.now();
// 减去3个月
LocalDate nowBeforeThreeMonths = now.minus(3, ChronoUnit.MONTHS);
DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity(); DingU8cBillEntity dingU8cBillEntity = new DingU8cBillEntity();
dingU8cBillEntity.setStart_time(nowBeforeThreeMonths+" 00:00:00");
dingU8cBillEntity.setEnd_time(now+" 23:59:59");
dingU8cBillEntity.setSts("Y"); dingU8cBillEntity.setSts("Y");
dingU8cBillEntity.setInitiate("U"); dingU8cBillEntity.setInitiate("U");
dingU8cBillEntity.setPush_status("Y");
List<DingU8cBillEntity> query = dingU8cBillDao.query(dingU8cBillEntity); List<DingU8cBillEntity> query = dingU8cBillDao.query(dingU8cBillEntity);
if (query == null || query.size() == 0) { if (query == null || query.size() == 0) {
return; return;
@ -136,10 +145,6 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity {
if (filterData == null || filterData.size() == 0) { if (filterData == null || filterData.size() == 0) {
return; return;
} }
// List<String> collect = filterData.stream().map(DingU8cBillEntity::getDing_talk_process_id).collect(Collectors.toList());
// if (collect == null || collect.size() == 0) {
// return;
// }
implement(filterData); implement(filterData);
} catch (Exception e) { } catch (Exception e) {
logger.error("丽知钉钉审批实例自动检查start()报错,报错信息:{}", 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()))) { if ("Y".equals(dingU8cBillEntity.getApprove()) || (dingU8cBillEntity.getDing_talk_process_id() == null || "".equals(dingU8cBillEntity.getDing_talk_process_id().trim()))) {
continue; continue;
} }
filter.add(dingU8cBillEntity); if(dingU8cBillEntity.getApprove()==null){
filter.add(dingU8cBillEntity);
}
} }
return filter; return filter;
@ -193,21 +200,13 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity {
/** /**
* 查询表单看返回接口 * 查询表单看返回接口
* * push_status:Y approve:(null)
* @param filterData * @param filterData
*/ */
public void implement(List<DingU8cBillEntity> filterData) throws Exception { public void implement(List<DingU8cBillEntity> filterData) throws Exception {
//获取token //获取token
String token = getDingTalkToken(); String token = getDingTalkToken();
for (DingU8cBillEntity dingU8cBillEntity : filterData) { 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 { try {
//查询实例的具体信息 //查询实例的具体信息
@ -225,51 +224,51 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity {
return; return;
} }
//查询u8c的单据状态//spzt1审核 null 未审核 //查询u8c的单据状态
String u8cPkCorp = dingU8cBillEntity.getU8c_pk_corp(); String u8cPkCorp = dingU8cBillEntity.getU8c_pk_corp();
String u8cBillCode = dingU8cBillEntity.getU8c_bill_code(); String u8cBillCode = dingU8cBillEntity.getU8c_bill_code();
ArapDjzbEntity arapDjzbEntity = queryArapDjzbEntity(u8cPkCorp, u8cBillCode); ArapDjzbEntity arapDjzbEntity = queryArapDjzbEntity(u8cPkCorp, u8cBillCode);
if(arapDjzbEntity==null){ 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 //djzt单据状态 1保存 3完成
List<GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultTasks> tasks = processInstanceResponseBodyResult.getTasks(); if("3".equals(arapDjzbEntity.getDjzt())){
for (GetProcessInstanceResponseBody.GetProcessInstanceResponseBodyResultTasks task : tasks) { continue;
userId=task.getUserId(); }
//spzt审批状态 null未审批 1审批
if("1".equals(arapDjzbEntity.getSpzt())){
continue;
} }
mobile = getMobileByUserId(token, userId);
result = processInstanceResponseBodyResult.getResult(); result = processInstanceResponseBodyResult.getResult();
if("agree".equals(result)){ if ("agree".equals(result)) {
approveArapDjzb(dingU8cBillEntity,mobile); //同意
}else if("refuse".equals(result)){ //审批u8c单据
refuse(dingU8cBillEntity,mobile); approveArapDjzb(dingU8cBillEntity);
}else if ("refuse".equals(result)) {
//拒绝
dingU8cBillEntity.setApprove("N");
dingU8cBillDao.callBackSaveOrUpdate(dingU8cBillEntity);
//后续林姐姐给接口拒绝之后清空process_idapproveN
refuse(dingU8cBillEntity);
} }
} catch (Exception e) { } catch (Exception e) {
logger.error("丽知钉钉审批实例自动检查implement(List<String> processInstanceIds)报错,报错信息:{}", e); logger.error("丽知钉钉审批实例自动检查implement(List<String> processInstanceIds)报错,报错信息:{}", e);
} }
} }
} }
/**
* 审批拒绝后清除ding_talk_process_idding_resapproveinitiatepush_count++,push_process_ids
* @param dingU8cBillEntity
*/
public void updateDingU8C(DingU8cBillEntity dingU8cBillEntity){
dingU8cBillEntity.setDing_talk_process_id(null);
dingU8cBillDao.update(dingU8cBillEntity);
}
@Autowired @Autowired
private PushU8CByApiCode pushU8CByApiCode; private PushU8CByApiCode pushU8CByApiCode;
/** /**
* 审核付款单 * 审核付款单
*/ */
public void approveArapDjzb(DingU8cBillEntity dingU8cBillEntity,String mobile) throws Exception { public void approveArapDjzb(DingU8cBillEntity dingU8cBillEntity) throws Exception {
LocalDate now = LocalDate.now(); LocalDate now = LocalDate.now();
@ -278,7 +277,7 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity {
bills.put("dwbm", dingU8cBillEntity.getU8c_code_corp()); bills.put("dwbm", dingU8cBillEntity.getU8c_code_corp());
bills.put("opinion", "同意"); bills.put("opinion", "同意");
// bills.put("operatorid", OverallConstant.getOverAllValue("u8cApiZdrCode")); // bills.put("operatorid", OverallConstant.getOverAllValue("u8cApiZdrCode"));
bills.put("operatorid", mobile); bills.put("operatorid", "tbadmin");
bills.put("operatedate", now.toString()); bills.put("operatedate", now.toString());
String jsonStr = JSONUtil.toJsonStr(bills); String jsonStr = JSONUtil.toJsonStr(bills);
jsonStr = "{\"bills\":[" + jsonStr + "]}"; jsonStr = "{\"bills\":[" + jsonStr + "]}";
@ -318,7 +317,7 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity {
/** /**
* 钉钉拒绝审批http请求 * 钉钉拒绝审批http请求
*/ */
public void refuse(DingU8cBillEntity dingU8cBillEntity, String mobile) throws IOException { public void refuse(DingU8cBillEntity dingU8cBillEntity) throws IOException {
// 服务器访问地址及端口,例如 http://ip:port // 服务器访问地址及端口,例如 http://ip:port
String serviceUrl = OverallConstant.getOverAllValue("u8cApiUrl"); String serviceUrl = OverallConstant.getOverAllValue("u8cApiUrl");
// 接口地址 // 接口地址
@ -329,12 +328,12 @@ public class DingCallBackPluginInitializer extends PluginBaseEntity {
map.put("usercode", OverallConstant.getOverAllValue("u8cApiUsercodeCode")); // 用户 map.put("usercode", OverallConstant.getOverAllValue("u8cApiUsercodeCode")); // 用户
map.put("password", OverallConstant.getOverAllValue("u8cApiPasswordCode")); // 密码需要 MD5 加密后录入 map.put("password", OverallConstant.getOverAllValue("u8cApiPasswordCode")); // 密码需要 MD5 加密后录入
map.put("system", OverallConstant.getOverAllValue("u8cApiSystemCode")); // 系统编码 map.put("system", OverallConstant.getOverAllValue("u8cApiSystemCode")); // 系统编码
map.put("custdevpclass", "nc.bs.ding.process.ProcessDingImpl"); //方法路径 map.put("custdevpclass", "u8c.api.dev.dingTalk.RefuseApprove"); //方法路径
//请求体 //请求体
Map<String, String> fileMap = new HashMap<>(); Map<String, String> fileMap = new HashMap<>();
fileMap.put("instanceId", dingU8cBillEntity.getDing_talk_process_id()); fileMap.put("instanceId", dingU8cBillEntity.getDing_talk_process_id());
fileMap.put("userCode", mobile);//审批人 fileMap.put("userCode", "tbadmin");//审批人
fileMap.put("ckeckResult", "R"); fileMap.put("ckeckResult", "R");
fileMap.put("ckeckNote", ""); fileMap.put("ckeckNote", "");
String jsonFileMap = JSONUtil.toJsonStr(fileMap); String jsonFileMap = JSONUtil.toJsonStr(fileMap);

View File

@ -2,7 +2,10 @@ package com.hzya.frame.plugin.lets.plugin.transfer;
import com.hzya.frame.WebappApplication; import com.hzya.frame.WebappApplication;
import com.hzya.frame.plugin.lets.plugin.adjust.*; 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.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.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -81,7 +84,7 @@ public class TransferTest {
@Test @Test
public void t31(){ public void t31(){
// adjustInPluginInitializer.start("LETS-RE2024091100000001"); // adjustInPluginInitializer.start("LETS-RE2024091100000001");
adjustInPluginInitializer.start("LETS-RE2024110500000028"); adjustInPluginInitializer.start("LETS-RE2024101700000004");
} }
@Test @Test
public void t32(){ 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
} }