|
|
|
@ -1,12 +1,16 @@ |
|
|
|
package com.dreamchaser.depository_manage; |
|
|
|
|
|
|
|
import com.dreamchaser.depository_manage.config.QyWxConfig; |
|
|
|
import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.AesException; |
|
|
|
import com.dreamchaser.depository_manage.config.QyWxJMJM.com.qq.weixin.mp.aes.WXBizMsgCrypt; |
|
|
|
import com.dreamchaser.depository_manage.pojo.ApplicationOutRecordP; |
|
|
|
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details; |
|
|
|
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_Details_Approver; |
|
|
|
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo_SpRecord; |
|
|
|
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.*; |
|
|
|
import com.dreamchaser.depository_manage.security.pool.HandlesOtherFunctionalThreadPool; |
|
|
|
import com.dreamchaser.depository_manage.security.pool.RedisPool; |
|
|
|
import com.dreamchaser.depository_manage.service.DepositoryRecordService; |
|
|
|
import com.dreamchaser.depository_manage.utils.Md5; |
|
|
|
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; |
|
|
|
import com.dreamchaser.depository_manage.utils.QyWxXMLUtils; |
|
|
|
import org.junit.Test; |
|
|
|
import org.junit.runner.RunWith; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
@ -15,6 +19,7 @@ import org.springframework.test.context.junit4.SpringRunner; |
|
|
|
|
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.List; |
|
|
|
import java.util.Map; |
|
|
|
|
|
|
|
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) |
|
|
|
@RunWith(SpringRunner.class) |
|
|
|
@ -26,77 +31,234 @@ public class SomeTest { |
|
|
|
@Autowired |
|
|
|
RedisPool redisPool; |
|
|
|
|
|
|
|
@Test |
|
|
|
public void someTest() { |
|
|
|
ApprovalInfo_SpRecord approvalInfo_spRecord = new ApprovalInfo_SpRecord(); |
|
|
|
List<ApprovalInfo_Details> details1 = new ArrayList<>(); |
|
|
|
ApprovalInfo_Details ad1 = new ApprovalInfo_Details(); |
|
|
|
ad1.setSpStatus("2"); |
|
|
|
ApprovalInfo_Details_Approver approver1 = new ApprovalInfo_Details_Approver(); |
|
|
|
approver1.setUserId("XinPing"); |
|
|
|
ad1.setApprover(approver1); |
|
|
|
String spNo = "202305310014"; |
|
|
|
int approval_count = 2; |
|
|
|
int flagForDepository = 1; |
|
|
|
boolean flagForFirst = true; |
|
|
|
details1.add(ad1); |
|
|
|
approvalInfo_spRecord.setDetails(details1); |
|
|
|
if (approvalInfo_spRecord != null) { |
|
|
|
// 获取第二个节点中审批人信息
|
|
|
|
List<ApprovalInfo_Details> details = approvalInfo_spRecord.getDetails(); |
|
|
|
// 定义当前是否为标签
|
|
|
|
boolean flagForLabel = true; // 默认为标签
|
|
|
|
|
|
|
|
|
|
|
|
// 如果节点数目不等于标签人员数
|
|
|
|
ApplicationOutRecordP applicationOutRecordPById = depositoryRecordService.findApplicationOutRecordPById(5); |
|
|
|
|
|
|
|
if (Integer.compare(applicationOutRecordPById.getFlagForOpenDepository(), 2) == 0) { |
|
|
|
// 如果是申请的开放仓库
|
|
|
|
|
|
|
|
// 获取当时发送审批时其他部门负责人Id
|
|
|
|
String otherDepartmentIdList = (String) redisPool.getRedisTemplateByDb(14).opsForHash().get("wms_QyWxMessage_" + spNo, "otherDepartmentIdList"); |
|
|
|
if (otherDepartmentIdList != null) { |
|
|
|
for (ApprovalInfo_Details ad : details |
|
|
|
) { |
|
|
|
// 获取当前节点审批人userId
|
|
|
|
String approver = ad.getApprover().getUserId(); |
|
|
|
flagForLabel = flagForLabel && otherDepartmentIdList.contains(approver); |
|
|
|
} |
|
|
|
public void callback(ApprovalInfo approvalInfo) { |
|
|
|
|
|
|
|
|
|
|
|
// 获取当前审批的编号
|
|
|
|
String spNo = approvalInfo.getSpNo(); |
|
|
|
|
|
|
|
// 获取当前审批关联的主订单
|
|
|
|
String mainId = (String) redisPool.getRedisTemplateByDb(14).opsForHash().get("wms_QyWxMessage_" + spNo, "mainId"); |
|
|
|
|
|
|
|
// 获取所有审批流程信息
|
|
|
|
List<ApprovalInfo_SpRecord> spRecord_list = approvalInfo.getSpRecord(); |
|
|
|
|
|
|
|
// 获取审批流程信息
|
|
|
|
ApprovalInfo_SpRecord as = null; |
|
|
|
// 获取审批节点详情
|
|
|
|
ApprovalInfo_Details approvalInfo_details = null; |
|
|
|
// 定义当前流程审批时间
|
|
|
|
String as_SpTime = ""; |
|
|
|
// 定义当前审批流程是是否要通过仓储中心
|
|
|
|
boolean flagForFirst = true; // 默认通过
|
|
|
|
|
|
|
|
// 设置当前审批是否为仓库管理员(1为部门负责人,2为仓储中心,3为仓库管理员)
|
|
|
|
int flagForDepository = 1; // 默认为部门负责人
|
|
|
|
|
|
|
|
// 定义已完成审批的节点数
|
|
|
|
int approval_count = 0; |
|
|
|
|
|
|
|
// 获取审批申请状态变化类型:1-提单;2-同意;3-驳回;4-转审;5-催办;6-撤销;8-通过后撤销;10-添加备注
|
|
|
|
String spStatus = approvalInfo.getStatuChangeEvent(); |
|
|
|
|
|
|
|
for (ApprovalInfo_SpRecord approvalInfo_SpRecord : spRecord_list) { |
|
|
|
|
|
|
|
// 获取当前审批节点详情。当节点为标签或上级时,一个节点可能有多个分支
|
|
|
|
List<ApprovalInfo_Details> details = approvalInfo_SpRecord.getDetails(); |
|
|
|
|
|
|
|
// 定义审批操作时间
|
|
|
|
String spTime = ""; |
|
|
|
// 定义审批操作状态
|
|
|
|
String ad_SpStatus = ""; |
|
|
|
// 定义审批详情
|
|
|
|
ApprovalInfo_Details ap_detail = null; |
|
|
|
|
|
|
|
for (ApprovalInfo_Details ad : details) { |
|
|
|
|
|
|
|
// 获取节点分支审批人审批操作时间,0为尚未操作
|
|
|
|
spTime = ad.getSpTime(); |
|
|
|
|
|
|
|
// 如果当前审批节点已经处理
|
|
|
|
if (!("0".equals(spTime))) { |
|
|
|
|
|
|
|
// 设置当前处理的详情
|
|
|
|
ap_detail = ad; |
|
|
|
// 设置当前审批的状态
|
|
|
|
ad_SpStatus = ad.getSpStatus(); |
|
|
|
// 已审批节点数+1
|
|
|
|
approval_count++; |
|
|
|
break; |
|
|
|
} |
|
|
|
} else { |
|
|
|
flagForLabel = false; |
|
|
|
} |
|
|
|
if (!"0".equals(spTime)) { |
|
|
|
// 如果已经操作
|
|
|
|
|
|
|
|
// 盘点当前审批状态是否为回调时操作状态
|
|
|
|
if (ad_SpStatus.equals(spStatus)) { |
|
|
|
// 将当前审批进行暂存
|
|
|
|
if (as == null) { |
|
|
|
// 如果是当前并没有获取到审批节点
|
|
|
|
as = approvalInfo_SpRecord; |
|
|
|
as_SpTime = spTime; |
|
|
|
approvalInfo_details = ap_detail; |
|
|
|
} else { |
|
|
|
// 如果已经获取到审批节点
|
|
|
|
|
|
|
|
// 获取当前审批节点处理时间
|
|
|
|
long aLong = Long.parseLong(spTime); |
|
|
|
|
|
|
|
if (!flagForLabel) { |
|
|
|
// 如果第二个节点不是标签节点
|
|
|
|
if (approval_count > 1) { |
|
|
|
// 如果完成审批的节点数大于1
|
|
|
|
flagForDepository = 3; |
|
|
|
// 获取之前节点的审批时间
|
|
|
|
long aLong1 = Long.parseLong(as_SpTime); |
|
|
|
|
|
|
|
// 如果已经完成该审批记录,则进行删除
|
|
|
|
// redisPool.getRedisTemplateByDb(14).delete("wms_QyWxMessage_" + spNo);
|
|
|
|
} else { |
|
|
|
// 如果当前是第一个节点
|
|
|
|
flagForFirst = false; |
|
|
|
if (aLong >= aLong1) { |
|
|
|
// 如果当前审批节点是最近处理
|
|
|
|
|
|
|
|
// 更新当前审批节点
|
|
|
|
as = approvalInfo_SpRecord; |
|
|
|
as_SpTime = spTime; |
|
|
|
approvalInfo_details = ap_detail; |
|
|
|
flagForFirst = false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
// 如果第二个节点是标签节点
|
|
|
|
if (approval_count > 2) { |
|
|
|
// 如果完成审批的节点数大于2
|
|
|
|
flagForDepository = 3; |
|
|
|
// 如果已经完成该审批记录,则进行删除
|
|
|
|
// redisPool.getRedisTemplateByDb(14).delete("wms_QyWxMessage_" + spNo);
|
|
|
|
} else { |
|
|
|
// 如果当前并不是标签节点后
|
|
|
|
flagForDepository = 2; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// 1-审批中;2-已同意;3-已驳回;4-已转审
|
|
|
|
if (!("1".equals(spStatus))) { |
|
|
|
|
|
|
|
// 如果当前审批已同意
|
|
|
|
if (QyWxConfig.out_approval_template_id.equals(approvalInfo.getTemplateId())) { |
|
|
|
// 如果是物料出库申请审批
|
|
|
|
|
|
|
|
// 获取第二个节点数据
|
|
|
|
|
|
|
|
ApprovalInfo_SpRecord approvalInfo_spRecord = null; |
|
|
|
if (spRecord_list.size() > 1) { |
|
|
|
approvalInfo_spRecord = spRecord_list.get(1); |
|
|
|
} |
|
|
|
if (approvalInfo_spRecord != null) { |
|
|
|
// 获取第二个节点中审批人信息
|
|
|
|
List<ApprovalInfo_Details> details = approvalInfo_spRecord.getDetails(); |
|
|
|
// 定义当前是否为标签
|
|
|
|
boolean flagForLabel = true; // 默认为标签
|
|
|
|
|
|
|
|
// 获取当前的主订单
|
|
|
|
ApplicationOutRecordP applicationOutRecordPById = depositoryRecordService.findApplicationOutRecordPById(Integer.parseInt(mainId)); |
|
|
|
|
|
|
|
if (Integer.compare(applicationOutRecordPById.getFlagForOpenDepository(), 2) == 0) { |
|
|
|
// 如果是申请的开放仓库
|
|
|
|
|
|
|
|
// 获取当时发送审批时其他部门负责人Id
|
|
|
|
String otherDepartmentIdList = (String) redisPool.getRedisTemplateByDb(14).opsForHash().get("wms_QyWxMessage_" + spNo, "otherDepartmentIdList"); |
|
|
|
if (otherDepartmentIdList != null) { |
|
|
|
for (ApprovalInfo_Details ad : details |
|
|
|
) { |
|
|
|
// 获取当前节点审批人userId
|
|
|
|
String approver = ad.getApprover().getUserId(); |
|
|
|
flagForLabel = flagForLabel && otherDepartmentIdList.contains(approver); |
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
flagForLabel = false; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if (!flagForLabel) { |
|
|
|
// 如果第二个节点不是标签节点
|
|
|
|
if (approval_count > 1) { |
|
|
|
// 如果完成审批的节点数大于1
|
|
|
|
flagForDepository = 3; |
|
|
|
|
|
|
|
// 如果已经完成该审批记录,则进行删除
|
|
|
|
redisPool.getRedisTemplateByDb(14).delete("wms_QyWxMessage_" + spNo); |
|
|
|
} else { |
|
|
|
// 如果当前是第一个节点
|
|
|
|
flagForFirst = false; |
|
|
|
} |
|
|
|
|
|
|
|
} else { |
|
|
|
// 如果第二个节点是标签节点
|
|
|
|
if (approval_count > 2) { |
|
|
|
// 如果完成审批的节点数大于2
|
|
|
|
flagForDepository = 3; |
|
|
|
// 如果已经完成该审批记录,则进行删除
|
|
|
|
redisPool.getRedisTemplateByDb(14).delete("wms_QyWxMessage_" + spNo); |
|
|
|
} else { |
|
|
|
// 如果当前并不是标签节点后
|
|
|
|
flagForDepository = 2; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// 开启一个线程用于进行下步操作
|
|
|
|
} |
|
|
|
System.out.println(flagForDepository); |
|
|
|
System.out.println(flagForFirst); |
|
|
|
|
|
|
|
System.out.println("flagForDepository: " + flagForDepository); |
|
|
|
System.out.println("flagForFirst: " + flagForFirst); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
@Test |
|
|
|
public void someTest() { |
|
|
|
|
|
|
|
ApprovalInfo approvalInfo = new ApprovalInfo(); |
|
|
|
approvalInfo.setTemplateId("3WKiKVCzyLv3Y1LaHZxp4DimQEpCdvYP52HsAUtF"); |
|
|
|
approvalInfo.setSpNo("202305310019"); |
|
|
|
|
|
|
|
|
|
|
|
List<ApprovalInfo_SpRecord> spRecord_list = new ArrayList<>(); |
|
|
|
ApprovalInfo_SpRecord asr1 = new ApprovalInfo_SpRecord(); |
|
|
|
asr1.setSpStatus("2"); |
|
|
|
List<ApprovalInfo_Details> approvalInfo_Details1 = new ArrayList<>(); |
|
|
|
ApprovalInfo_Details ad1 = new ApprovalInfo_Details(); |
|
|
|
ad1.setSpStatus("2"); |
|
|
|
ad1.setSpTime("1685517791000"); |
|
|
|
ApprovalInfo_Details_Approver approver1 = new ApprovalInfo_Details_Approver(); |
|
|
|
approver1.setUserId("PangFuZhen"); |
|
|
|
ad1.setApprover(approver1); |
|
|
|
approvalInfo_Details1.add(ad1); |
|
|
|
asr1.setDetails(approvalInfo_Details1); |
|
|
|
|
|
|
|
|
|
|
|
ApprovalInfo_SpRecord asr2 = new ApprovalInfo_SpRecord(); |
|
|
|
asr2.setSpStatus("2"); |
|
|
|
List<ApprovalInfo_Details> approvalInfo_Details2 = new ArrayList<>(); |
|
|
|
ApprovalInfo_Details ad2 = new ApprovalInfo_Details(); |
|
|
|
ad2.setSpStatus("2"); |
|
|
|
ad2.setSpTime("1685517793000"); |
|
|
|
ApprovalInfo_Details_Approver approver2 = new ApprovalInfo_Details_Approver(); |
|
|
|
approver2.setUserId("XinPing"); |
|
|
|
ad2.setApprover(approver2); |
|
|
|
approvalInfo_Details2.add(ad2); |
|
|
|
asr2.setDetails(approvalInfo_Details2); |
|
|
|
|
|
|
|
|
|
|
|
ApprovalInfo_SpRecord asr3 = new ApprovalInfo_SpRecord(); |
|
|
|
asr3.setSpStatus("2"); |
|
|
|
List<ApprovalInfo_Details> approvalInfo_Details3 = new ArrayList<>(); |
|
|
|
ApprovalInfo_Details ad3 = new ApprovalInfo_Details(); |
|
|
|
ad3.setSpStatus("2"); |
|
|
|
ad3.setSpTime("1685517794000"); |
|
|
|
ApprovalInfo_Details_Approver approver3 = new ApprovalInfo_Details_Approver(); |
|
|
|
approver3.setUserId("PangFuZhen"); |
|
|
|
ad3.setApprover(approver3); |
|
|
|
approvalInfo_Details3.add(ad3); |
|
|
|
asr3.setDetails(approvalInfo_Details3); |
|
|
|
|
|
|
|
|
|
|
|
spRecord_list.add(asr1); |
|
|
|
spRecord_list.add(asr2); |
|
|
|
// spRecord_list.add(asr3);
|
|
|
|
approvalInfo.setSpRecord(spRecord_list); |
|
|
|
|
|
|
|
approvalInfo.setStatuChangeEvent("2"); |
|
|
|
|
|
|
|
|
|
|
|
callback(approvalInfo); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|