Browse Source

修改审批后回调的逻辑,

lwx_dev
erdanergou 3 years ago
parent
commit
bb9129043f
  1. 54
      src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java
  2. 3
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  3. 7
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  4. 387
      src/test/java/com/dreamchaser/depository_manage/OtherTest.java
  5. 102
      src/test/java/com/dreamchaser/depository_manage/SomeTest.java

54
src/main/java/com/dreamchaser/depository_manage/controller/QyWxOperationController.java

@ -277,7 +277,7 @@ public class QyWxOperationController {
// 如果数据库中存在该用户
// 获取当前用户所在主部门
int maindeparment = userByPort.getMaindeparment();
if(maindeparment == 309){
if (maindeparment == 309) {
userByPort.setMaindeparment(userByPort.getAdminorg());
}
// 设置放入时间
@ -612,48 +612,36 @@ public class QyWxOperationController {
// 获取第二个节点数据
ApprovalInfo_SpRecord approvalInfo_spRecord = null;
if(spRecord_list.size() > 1){
if (spRecord_list.size() > 1) {
approvalInfo_spRecord = spRecord_list.get(1);
}
if (approvalInfo_spRecord != null) {
// 获取第二个节点中审批人信息
List<ApprovalInfo_Details> details = approvalInfo_spRecord.getDetails();
// 获取仓储中心负责人标签下的成员
List<String> qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(crypt);
// 定义当前是否为标签
boolean flagForLabel = true; // 默认为标签
if (details.size() != qyWxLabelUserList.size()) {
// 如果节点数目不等于标签人员数
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;
}
// 获取当前的主订单
ApplicationOutRecordP applicationOutRecordPById = depositoryRecordService.findApplicationOutRecordPById(Integer.parseInt(mainId));
}
else {
for (ApprovalInfo_Details ad : details
) {
// 获取当前节点审批人userId
String approver = ad.getApprover().getUserId();
flagForLabel = flagForLabel && qyWxLabelUserList.contains(approver);
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) {
@ -688,9 +676,7 @@ public class QyWxOperationController {
int finalFlagForDepository = flagForDepository;
HandlesOtherFunctionalThreadPool.execute(() -> depositoryRecordService.reviewByQyWxApprovalOut(mainId, finalApprovalInfo_details, crypt, spStatus, approvalInfo.getSpNo(), finalFlagForFirst, finalFlagForDepository));
}
else if (QyWxConfig.stockTaking_approval_template_id.equals(approvalInfo.getTemplateId())) {
} else if (QyWxConfig.stockTaking_approval_template_id.equals(approvalInfo.getTemplateId())) {
// 如果是库存盘点审批
// 开启一个线程用于进行处理
ApprovalInfo_Details finalApprovalInfo_details = approvalInfo_details;

3
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java

@ -2520,7 +2520,8 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 将当前redis中存储的spno删除
redisPool.getRedisTemplateByDb(14).delete("wms_QyWxMessage_" + spNo);
}
} else {
}
else {
// 如果是部门负责人
String departmentheadTime = recordP.getDepartmentheadTime();

7
src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java

@ -1770,7 +1770,6 @@ public class QyWxOperationService {
approvalTemplate.setNotify_type(2);
if (!flag) {
// 如果是中心仓下的仓库
// 获取仓储中心负责人标签的用户userId
@ -1782,7 +1781,13 @@ public class QyWxOperationService {
approval_template_approver_list.add(approval_template_approver_Label);
// 如果是通过开放仓库申请的
if (Integer.compare(2, flagForOpenDepository) == 0) {
otherDepartmentIdList = qyWxLabelUserList;
}
} else {
// 如果不是中心仓下的仓库
if (Integer.compare(2, flagForOpenDepository) == 0) {
// 如果该仓库是通过开放仓库获取到的

387
src/test/java/com/dreamchaser/depository_manage/OtherTest.java

@ -1,387 +0,0 @@
package com.dreamchaser.depository_manage;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.entity.UserByPort;
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.callBackXml_button_templatecard.TemplateCard;
import com.dreamchaser.depository_manage.security.pool.HandlesOtherFunctionalThreadPool;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.*;
import javafx.scene.control.TableRow;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.formula.functions.T;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.cglib.beans.BeanMap;
import org.springframework.test.context.junit4.SpringRunner;
import java.lang.reflect.Field;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@SpringBootTest
@RunWith(SpringRunner.class)
public class OtherTest {
@Autowired
DepositoryRecordService depositoryRecordService;
@Autowired
StockTakingService stockTakingService;
@Autowired
DepositoryMapper depositoryMapper;
@Autowired
DepositoryService depositoryService;
@Autowired
QyWxOperationService qyWxOperationService;
@Autowired
MaterialTypeService materialTypeService;
@Autowired
RedisPool redisPool;
public static Map<String, String> objectToMap(Object object) {
Map<String, String> dataMap = new HashMap<>();
Class<?> clazz = object.getClass();
for (Field field : clazz.getDeclaredFields()) {
try {
field.setAccessible(true);
Object o = field.get(object);
if (o != null) {
dataMap.put(field.getName(), o.toString());
} else {
dataMap.put(field.getName(), "");
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
return dataMap;
}
public UserByPort getLoginUserInformation(String userKey) {
// 拼接存储key
String userLoginkey = PublicConfig.LoginRedisPrefix + userKey;
// 获取当前登录用户的工号
String usernumber = (String) redisPool.getRedisTemplateByDb(5).opsForHash().get(userLoginkey, "usernumber");
String userInfoKey = PublicConfig.userInfoRedisPrefix + usernumber;
// 获取当前存储的所有key值
Iterator<Object> iterator = redisPool.getRedisTemplateByDb(5).opsForHash().keys(userInfoKey).iterator();
// 定义map
Map<String, Object> map = new HashMap<>();
// 遍历获取存储的redis中的值
while (iterator.hasNext()) {
Object next = iterator.next();
Object o = redisPool.getRedisTemplateByDb(5).opsForHash().get(userInfoKey, next);
map.put((String) next, o);
}
return JSONObject.parseObject(JSONObject.toJSONString(map), UserByPort.class);
}
Depository findParentDepository(Depository depository, List<Depository> depositoryList) {
for (Depository d : depositoryList
) {
if (Integer.compare(depository.getParentId(), d.getId()) == 0) {
if (Integer.compare(0, d.getParentId()) == 0) {
return d;
} else {
return findParentDepository(d, depositoryList);
}
}
}
return null;
}
@Test
public void someTest(){
Map<String,Object> map = new HashMap<>();
map.put("a","");
Object a = map.get("a");
if(a == null || "".equals(a)){
System.out.println("a1");
}else{
System.out.println(ObjectFormatUtil.toInteger(a));
}
}
@Test
public void main() {
ExecutorService exs = new ThreadPoolExecutor(10, 100, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<>(10),new ThreadPoolExecutor.DiscardPolicy());
for (int i = 0; i < 20; i++) {
int finalI = i;
exs.submit(()->{
Random random = new Random();
int threadSize = random.nextInt(9999);
try {
Thread.sleep(threadSize);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("开始执行第"+ finalI +"个任务");
});
}
for (int i = 0; i < 1000; i++) {
}
ThreadPoolExecutor threadPool = (ThreadPoolExecutor) exs;
exs.shutdown(); // 禁止提交新任务
// 设定最大重试次数
try {
// 等待 60 s
if (!exs.awaitTermination(60, TimeUnit.SECONDS)) {
// 调用 shutdownNow 取消正在执行的任务
exs.shutdownNow();
// 再次等待 60 s,如果还未结束,可以再次尝试,或者直接放弃
if (!exs.awaitTermination(60, TimeUnit.SECONDS))
System.err.println("线程池任务未正常执行结束");
}
} catch (InterruptedException ie) {
// 重新调用 shutdownNow
exs.shutdownNow();
}
exs.submit(()->{
System.out.println("全部结束后提交新任务");
});
}
@Test
public void StockTakingTest() {
ApprovalInfo_Details approvalInfo_details = new ApprovalInfo_Details();
ApprovalInfo_Details_Approver approver = new ApprovalInfo_Details_Approver();
approver.setUserId("PangFuZhen");
approvalInfo_details.setApprover(approver);
// 用于处理盘点记录
TemplateCard templateCard = new TemplateCard();
templateCard.setFromUserName("PangFuZhen");
templateCard.setEventKey("wms_completepass_StockTakingId4");
stockTakingService.completeStockTakingByQyWx(templateCard, "e3bfa398fe9d0e1ab78a00ff59eff788");
}
@Test
public void ApplicationInTest() {
ApprovalInfo_Details approvalInfo_details = new ApprovalInfo_Details();
ApprovalInfo_Details_Approver approver = new ApprovalInfo_Details_Approver();
approver.setUserId("PangFuZhen");
approvalInfo_details.setApprover(approver);
depositoryRecordService.reviewByQyWxApprovalIn("[142, 143]", approvalInfo_details, "d35f243c9791341c148f7826994829ec", "2", "202305050015");
}
@Test
public void ApplicationOutTest() {
ApprovalInfo_Details approvalInfo_details = new ApprovalInfo_Details();
ApprovalInfo_Details_Approver approver = new ApprovalInfo_Details_Approver();
approver.setUserId("PangFuZhen");
approvalInfo_details.setApprover(approver);
depositoryRecordService.reviewByQyWxApprovalOut("107", approvalInfo_details, "d35f243c9791341c148f7826994829ec", "2", "", true, 2);
}
@Test
public void Test(){
// 定义当前流程审批时间
String as_SpTime = "";
// 定义当前审批流程是是否要通过仓储中心
boolean flagForFirst = true; // 默认通过
// 设置当前审批是否为仓库管理员(1为部门负责人,2为仓储中心,3为仓库管理员)
int flagForDepository = 1; // 默认为部门负责人
// 定义已完成审批的节点数
int approval_count = 0;
// 获取审批流程信息
ApprovalInfo_SpRecord as = null;
// 获取审批节点详情
ApprovalInfo_Details approvalInfo_details = null;
// 获取审批申请状态变化类型:1-提单;2-同意;3-驳回;4-转审;5-催办;6-撤销;8-通过后撤销;10-添加备注
String spStatus = "2";
List<ApprovalInfo_SpRecord> spRecord_list = new ArrayList<>();
ApprovalInfo_SpRecord approvalInfo_spRecordd = new ApprovalInfo_SpRecord();
List<ApprovalInfo_Details> detailsList = new ArrayList<>();
ApprovalInfo_Details ads = new ApprovalInfo_Details();
ads.setSpTime("1685318533000");
ads.setSpStatus("2");
detailsList.add(ads);
approvalInfo_spRecordd.setDetails(detailsList);
spRecord_list.add(approvalInfo_spRecordd);
spRecord_list.add(approvalInfo_spRecordd);
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;
}
}
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);
// 获取之前节点的审批时间
long aLong1 = Long.parseLong(as_SpTime);
if (aLong >= aLong1) {
// 如果当前审批节点是最近处理
// 更新当前审批节点
as = approvalInfo_SpRecord;
as_SpTime = spTime;
approvalInfo_details = ap_detail;
flagForFirst = false;
}
}
}
}
}
if("2".equals(spStatus)){
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();
// 获取仓储中心负责人标签下的成员
List<String> qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList("01ef3eace6cd7d384581bb058c60f48b");
// 定义当前是否为标签
boolean flagForLabel = true; // 默认为标签
if (details.size() != qyWxLabelUserList.size()) {
// 如果节点数目不等于标签人员数
ApplicationOutRecordP applicationOutRecordPById = depositoryRecordService.findApplicationOutRecordPById(107);
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;
}
}
else {
for (ApprovalInfo_Details ad : details
) {
// 获取当前节点审批人userId
String approver = ad.getApprover().getUserId();
flagForLabel = flagForLabel && qyWxLabelUserList.contains(approver);
}
}
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(flagForFirst);
}
}

102
src/test/java/com/dreamchaser/depository_manage/SomeTest.java

@ -0,0 +1,102 @@
package com.dreamchaser.depository_manage;
import com.dreamchaser.depository_manage.config.QyWxConfig;
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.security.pool.RedisPool;
import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.ArrayList;
import java.util.List;
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
public class SomeTest {
@Autowired
DepositoryRecordService depositoryRecordService;
@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);
}
}
} 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);
}
}
Loading…
Cancel
Save