Browse Source

feat(order): 搭赠通案对接订单;核销性能优化;费用OA表单关联预算字段

master
Yen 3 weeks ago
parent
commit
5d3d028164
  1. 5
      cms-api/cms-admin-svc/pom.xml
  2. 30
      cms-common/src/main/java/com/qs/serve/common/utils/PrintUtil.java
  3. 3
      cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/OmsPromotionGiftGoods.java
  4. 7
      cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/bo/OmsPromotionGiftGoodsBo.java
  5. 26
      cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/vo/OmsPromotionGiftItemVo.java
  6. 4
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrderItemGift.java
  7. 2
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/impl/OmsSaleOrderServiceImpl.java
  8. 36
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/seeyon/service/SeeYonOperationService.java
  9. 1
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/sync/AsyncFactory.java
  10. 1
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostSubItem.java
  11. 46
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java
  12. 20
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/common/VerificationUtil.java
  13. 19
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java
  14. 106
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java
  15. 7
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

5
cms-api/cms-admin-svc/pom.xml

@ -17,6 +17,11 @@
</properties> </properties>
<dependencies> <dependencies>
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
<version>3.9.1</version>
</dependency>
<dependency> <dependency>
<groupId>com.qs</groupId> <groupId>com.qs</groupId>
<artifactId>cms-common</artifactId> <artifactId>cms-common</artifactId>

30
cms-common/src/main/java/com/qs/serve/common/utils/PrintUtil.java

@ -0,0 +1,30 @@
package com.qs.serve.common.utils;
import cn.hutool.core.date.StopWatch;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.TimeUnit;
/**
* @author YenHex
* @since 2024/6/21
*/
@Slf4j
public class PrintUtil {
public static void startLog(StopWatch stopWatch,String title){
stopWatch.start(title);
}
public static void stop(StopWatch stopWatch){
stop(stopWatch,false,null);
}
public static void stop(StopWatch stopWatch,boolean printFlag,String title){
stopWatch.stop();
if (printFlag){
log.error("\n{}:\n{}",title,stopWatch.prettyPrint(TimeUnit.MILLISECONDS));
}
}
}

3
cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/OmsPromotionGiftGoods.java

@ -39,18 +39,15 @@ public class OmsPromotionGiftGoods implements Serializable {
private Long giftItemId; private Long giftItemId;
/** 商品类型 */ /** 商品类型 */
@Length(max = 255,message = "商品类型长度不能超过255字")
private String goodsType; private String goodsType;
/** 商品id */ /** 商品id */
private Long goodsId; private Long goodsId;
/** 商品编码 */ /** 商品编码 */
@Length(max = 255,message = "商品编码长度不能超过255字")
private String goodsCode; private String goodsCode;
/** 商品名称 */ /** 商品名称 */
@Length(max = 255,message = "商品名称长度不能超过255字")
private String goodsName; private String goodsName;
/** 优先级(ASC) */ /** 优先级(ASC) */

7
cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/bo/OmsPromotionGiftGoodsBo.java

@ -36,12 +36,5 @@ public class OmsPromotionGiftGoodsBo implements Serializable {
@Length(max = 600,message = "备注长度不能超过600字") @Length(max = 600,message = "备注长度不能超过600字")
private String remark; private String remark;
// promotionGiftGoods.setGiftId(source.getGiftId());
// promotionGiftGoods.setGiftItemId(source.getGiftItemId());
// promotionGiftGoods.setGoodsCode(source.getGoodsCode());
// promotionGiftGoods.setGoodsName(source.getGoodsName());
} }

26
cms-modules/cms-order/cms-order-api/src/main/java/com/qs/serve/modules/oms/entity/vo/OmsPromotionGiftItemVo.java

@ -15,25 +15,21 @@ import java.util.List;
@Data @Data
public class OmsPromotionGiftItemVo { public class OmsPromotionGiftItemVo {
private Long id;
/** 通案id */ /** 通案id */
@NotNull(message = "通案id不能为空")
private Long giftId; private Long giftId;
private Long id;
/** 商品类型 */ /** 商品类型 */
@Length(max = 255,message = "商品类型长度不能超过255字")
private String goodsType; private String goodsType;
/** 商品id */ /** 商品id */
private Long goodsId; private Long goodsId;
/** 商品编码 */ /** 商品编码 */
@Length(max = 255,message = "商品编码长度不能超过255字")
private String goodsCode; private String goodsCode;
/** 商品名称 */ /** 商品名称 */
@Length(max = 255,message = "商品名称长度不能超过255字")
private String goodsName; private String goodsName;
/** 起订量 */ /** 起订量 */
@ -45,14 +41,6 @@ public class OmsPromotionGiftItemVo {
/** 赠品数量 */ /** 赠品数量 */
private Integer giftQty; private Integer giftQty;
private Integer goodsFlag;
/** 备注 */
@Length(max = 255,message = "备注长度不能超过255字")
private String remark;
List<OmsPromotionGiftGoods> goodsList;
/** 通案标题 */ /** 通案标题 */
private String giftTitle; private String giftTitle;
@ -62,4 +50,14 @@ public class OmsPromotionGiftItemVo {
/** 搭赠说明 */ /** 搭赠说明 */
private String explainText; private String explainText;
/** 备注 */
private String remark;
/**
* 指定赠送的商品列表
*/
List<OmsPromotionGiftGoods> goodsList;
private Integer goodsFlag;
} }

4
cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/entity/OmsSaleOrderItemGift.java

@ -181,8 +181,8 @@ public class OmsSaleOrderItemGift implements Serializable {
saleOrderItemGift.setMarketPrice(source.getMarketPrice()); saleOrderItemGift.setMarketPrice(source.getMarketPrice());
saleOrderItemGift.setWeight(source.getWeight()); saleOrderItemGift.setWeight(source.getWeight());
saleOrderItemGift.setVolume(source.getVolume()); saleOrderItemGift.setVolume(source.getVolume());
saleOrderItemGift.setPreProductionDate(source.getPreProductionDate()); //saleOrderItemGift.setPreProductionDate(source.getPreProductionDate());
saleOrderItemGift.setProductionRemark(source.getProductionRemark()); //saleOrderItemGift.setProductionRemark(source.getProductionRemark());
return saleOrderItemGift; return saleOrderItemGift;
} }

2
cms-modules/cms-system/src/main/java/com/qs/serve/modules/oms/service/impl/OmsSaleOrderServiceImpl.java

@ -1469,7 +1469,7 @@ public class OmsSaleOrderServiceImpl extends ServiceImpl<OmsSaleOrderMapper, Oms
.multiply(new BigDecimal(currentItem.getGiftQty())) .multiply(new BigDecimal(currentItem.getGiftQty()))
.divide(new BigDecimal(currentItem.getMeetQty()),0, RoundingMode.HALF_UP).intValue(); .divide(new BigDecimal(currentItem.getMeetQty()),0, RoundingMode.HALF_UP).intValue();
}else { }else {
Assert.throwEx("未能满足起订数量,不能选中:"+currentItem.getGiftTitle()); Assert.throwEx("未能满足起订数量,不能选中:"+currentItem.getGiftTitle()+";"+currentItem.getGoodsName());
} }
// // 加载默认赠送的商品 // // 加载默认赠送的商品
// if (CollUtil.isNotEmpty(currentItem.getGoodsList())){} // if (CollUtil.isNotEmpty(currentItem.getGoodsList())){}

36
cms-modules/cms-system/src/main/java/com/qs/serve/modules/seeyon/service/SeeYonOperationService.java

@ -1,6 +1,8 @@
package com.qs.serve.modules.seeyon.service; package com.qs.serve.modules.seeyon.service;
import cn.hutool.core.date.StopWatch;
import com.qs.serve.common.exception.Assert; import com.qs.serve.common.exception.Assert;
import com.qs.serve.common.utils.PrintUtil;
import com.qs.serve.common.utils.SpringUtils; import com.qs.serve.common.utils.SpringUtils;
import com.qs.serve.framework.base.model.PageVo; import com.qs.serve.framework.base.model.PageVo;
import com.qs.serve.framework.base.model.R; import com.qs.serve.framework.base.model.R;
@ -347,45 +349,73 @@ public interface SeeYonOperationService extends SeeYonBaseService{
* @return * @return
*/ */
default R<?> commitAffair(TbsAffairCommitBo affairCommit){ default R<?> commitAffair(TbsAffairCommitBo affairCommit){
String targetId = affairCommit.getTargetId();
if (targetId == null){
if (affairCommit.getCostApplyId()!=null){
targetId = affairCommit.getCostApplyId()+"";
}else if (affairCommit.getPolicyId() != null){
targetId = affairCommit.getPolicyId()+"";
}
}
String templateCode = getTemplateCode();
StopWatch stopWatch = new StopWatch(templateCode);
stopWatch.start("测试连接");
getRequestService().testConnection(); getRequestService().testConnection();
stopWatch.stop();
stopWatch.start("获取FormId");
String syFormId = this.getSyFormIdByTargetInfo(affairCommit); String syFormId = this.getSyFormIdByTargetInfo(affairCommit);
stopWatch.stop();
if(syFormId==null){ if(syFormId==null){
Assert.throwEx("["+affairCommit.getTargetId()+"]__syFormId is null"); Assert.throwEx("["+affairCommit.getTargetId()+"]__syFormId is null");
} }
stopWatch.start("前置校验参数");
boolean preCheckResult = this.preCheckCommitAffair(affairCommit); boolean preCheckResult = this.preCheckCommitAffair(affairCommit);
stopWatch.stop();
if(!preCheckResult){ if(!preCheckResult){
return R.error("提交失败,参数异常"); return R.error("提交失败,参数异常");
} }
R<String> result = getRequestService().commonCommit(affairCommit, getTemplateCode(),syFormId); stopWatch.start("提交审批结果到OA");
R<String> result = getRequestService().commonCommit(affairCommit, templateCode,syFormId);
stopWatch.stop();
boolean isBackCommit = affairCommit.getState()==2; boolean isBackCommit = affairCommit.getState()==2;
if(result.getStatus()==200){ if(result.getStatus()==200){
// 判断是否含有下个节点 // 判断是否含有下个节点
//String flag = result.getData(); //String flag = result.getData();
//取消异步防止导致各种异常 //取消异步防止导致各种异常
stopWatch.start("获取OA流程状态(睡眠3s)");
try { try {
Thread.sleep(3000); Thread.sleep(3000);
} catch (InterruptedException e) { } catch (InterruptedException e) {
e.printStackTrace(); e.printStackTrace();
} }
String flag = checkAffairSummery(affairCommit.getTargetId()); String flag = checkAffairSummery(affairCommit.getTargetId());
stopWatch.stop();
//封装提交审批的记录 //封装提交审批的记录
stopWatch.start("封装提交审批的记录");
this.buildAffairCommitData(affairCommit, flag); this.buildAffairCommitData(affairCommit, flag);
stopWatch.stop();
if(flag!=null && isBackCommit){ if(flag!=null && isBackCommit){
stopWatch.start("审批doBacked回调");
this.doBacked(affairCommit); this.doBacked(affairCommit);
PrintUtil.stop(stopWatch,true,"耗时统计,模板类型:"+templateCode+",ID:"+targetId);
return R.ok(); return R.ok();
} }
//审批中(next)、完成(finish)、拒绝(refused) //审批中(next)、完成(finish)、拒绝(refused)
if("finished".equals(flag)){ if("finished".equals(flag)){
stopWatch.start("审批doFinished回调");
this.doFinished(affairCommit); this.doFinished(affairCommit);
PrintUtil.stop(stopWatch,true,"耗时统计,模板类型:"+templateCode+",ID:"+targetId);
return R.ok(); return R.ok();
}else if ("refuse".equals(flag)||"backed".equals(flag)){ }else if ("refuse".equals(flag)||"backed".equals(flag)){
stopWatch.start("审批doRefuse回调");
this.doRefuse(affairCommit); this.doRefuse(affairCommit);
PrintUtil.stop(stopWatch,true,"耗时统计,模板类型:"+templateCode+",ID:"+targetId);
return R.ok(); return R.ok();
}else if ("next".equals(flag)){ }else if ("next".equals(flag)){
stopWatch.start("审批doNext回调");
this.doNext(affairCommit); this.doNext(affairCommit);
doCommitBacked(getTargetId(affairCommit)); doCommitBacked(getTargetId(affairCommit));
PrintUtil.stop(stopWatch,true,"耗时统计,模板类型:"+templateCode+",ID:"+targetId);
return R.ok(); return R.ok();
} }
}else if (result.getStatus()==500){ }else if (result.getStatus()==500){

1
cms-modules/cms-system/src/main/java/com/qs/serve/modules/sync/AsyncFactory.java

@ -280,7 +280,6 @@ public class AsyncFactory {
verificationOperationService.runCompensate(verificationId+""); verificationOperationService.runCompensate(verificationId+"");
} }
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }

1
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsCostSubItem.java

@ -108,6 +108,7 @@ public class TbsCostSubItem {
} }
private String chengBenZhongXin; private String chengBenZhongXin;
private String chengBenZhongXinId; private String chengBenZhongXinId;
private String budgetName;
private String centertype; private String centertype;
private String centerCode; private String centerCode;
private String centerId; private String centerId;

46
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java

@ -141,6 +141,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
private BmsSupplierTargetMapper bmsSupplierTargetMapper; private BmsSupplierTargetMapper bmsSupplierTargetMapper;
private TbsBudgetMatchApplication tbsBudgetMatchApplication; private TbsBudgetMatchApplication tbsBudgetMatchApplication;
private TbsBudgetLogMapper tbsBudgetLogMapper;
private BmsSubjectRegionService bmsSubjectRegionService; private BmsSubjectRegionService bmsSubjectRegionService;
private TbsCostCheckStateMapper costCheckStateMapper; private TbsCostCheckStateMapper costCheckStateMapper;
@ -378,7 +379,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
this.buildContractApplyData(id, tbsCostApply, activityList, payConditions, supplier, sysUser, data,contracts,costTodoList,new HashMap<>()); this.buildContractApplyData(id, tbsCostApply, activityList, payConditions, supplier, sysUser, data,contracts,costTodoList,new HashMap<>());
}else { }else {
//创建通用的费用申请Data //创建通用的费用申请Data
this.buildCommonApplyData(id, tbsCostApply, activityList, supplier,sysUser, data); this.buildCommonApplyData(id, tbsCostApply, activityList, supplier,sysUser, data,null);
} }
return data; return data;
} }
@ -442,7 +443,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
this.buildContractApplyData(id, tbsCostApply, activityList, payConditions, supplier, sysUser, data,contracts,costTodoList,newWayData); this.buildContractApplyData(id, tbsCostApply, activityList, payConditions, supplier, sysUser, data,contracts,costTodoList,newWayData);
}else { }else {
//创建通用的费用申请Data //创建通用的费用申请Data
this.buildCommonApplyData(id, tbsCostApply, activityList, supplier,sysUser, data); this.buildCommonApplyData(id, tbsCostApply, activityList, supplier,sysUser, data, null);
} }
//协议类走新流程 //协议类走新流程
String templateCode = tbsCostApply.getContractFlag().equals(1) String templateCode = tbsCostApply.getContractFlag().equals(1)
@ -823,7 +824,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
this.buildContractApplyData(id, tbsCostApply, activityList, payConditions, supplier, sysUser, data,contracts,costTodoList,newWayData); this.buildContractApplyData(id, tbsCostApply, activityList, payConditions, supplier, sysUser, data,contracts,costTodoList,newWayData);
}else { }else {
//创建通用的费用申请Data //创建通用的费用申请Data
this.buildCommonApplyData(id, tbsCostApply, activityList, supplier,sysUser, data); this.buildCommonApplyData(id, tbsCostApply, activityList, supplier,sysUser, data,result1);
} }
//协议类走新流程 //协议类走新流程
String templateCode = tbsCostApply.getContractFlag().equals(1) String templateCode = tbsCostApply.getContractFlag().equals(1)
@ -1566,7 +1567,8 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
return cusCenterRateList; return cusCenterRateList;
} }
private void buildCommonApplyData(String id, TbsCostApply tbsCostApply, List<TbsActivity> activityList, BmsSupplier supplier ,SysUser sysUser, Map<String, Object> data) { private void buildCommonApplyData(String id, TbsCostApply tbsCostApply, List<TbsActivity> activityList,
BmsSupplier supplier ,SysUser sysUser, Map<String, Object> data,TbsBudgetTableResultVo result) {
String actTitles = activityList.stream().map(TbsActivity::getActTitle).collect(Collectors.joining("; ")); String actTitles = activityList.stream().map(TbsActivity::getActTitle).collect(Collectors.joining("; "));
data.put("costApplyCode", tbsCostApply.getCode()); data.put("costApplyCode", tbsCostApply.getCode());
data.put("applyUserCode", sysUser.getCode()); data.put("applyUserCode", sysUser.getCode());
@ -1618,7 +1620,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
List<String> subjectNames = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectName).distinct().collect(Collectors.toList()); List<String> subjectNames = tbsActivitySubjects.stream().map(TbsActivitySubject::getSubjectName).distinct().collect(Collectors.toList());
List<Object> subList = new ArrayList<>(); List<Object> subList = new ArrayList<>();
//创建子表数据(任由异常 这里数据用来判断流程走向) //创建子表数据(任由异常 这里数据用来判断流程走向)
this.buildSubList(tbsActivityCenters, subjectNames, subList,supplier.getCode()); this.buildSubList(tbsActivityCenters, subjectNames, subList,supplier.getCode(),result);
//创建商品抬头列表 //创建商品抬头列表
List<TbsActivityGoods> tbsActivityGoods = tbsActivityGoodsService.listByCostApplyId(Long.parseLong(id)); List<TbsActivityGoods> tbsActivityGoods = tbsActivityGoodsService.listByCostApplyId(Long.parseLong(id));
@ -1669,10 +1671,29 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
* @param subjectNames * @param subjectNames
* @param subList * @param subList
*/ */
private void buildSubList(List<TbsActivityCenter> tbsActivityCenters, List<String> subjectNames, List<Object> subList,String supplierCode) { private void buildSubList(List<TbsActivityCenter> tbsActivityCenters, List<String> subjectNames, List<Object> subList,String supplierCode,TbsBudgetTableResultVo result) {
for (String subjectName : subjectNames) { for (String subjectName : subjectNames) {
subList.add(new TbsCostSubItem.Subject(subjectName)); subList.add(new TbsCostSubItem.Subject(subjectName));
} }
Map<String,Set<String>> centerBudgetMap = new HashMap<>();
try {
for (TbsActivityCenterGoods centerGoods : result.getActivityCenterGoodsList()) {
String key = centerGoods.getCenterType()+"-"+centerGoods.getCenterId();
Set<String> budgetCodeList = centerBudgetMap.get(key);
if (budgetCodeList==null){
budgetCodeList = new HashSet<>();
}
for (TbsScheduleItemBudget budget : centerGoods.getMatch2ScheduleItemBudgetList()) {
if (budget.getId()!=null&&budget.getId().equals(centerGoods.getScheduleItemBudgetId())){
budgetCodeList.add(budget.getBudgetName());
}
}
centerBudgetMap.put(key,budgetCodeList);
}
} catch (Exception e) {
e.printStackTrace();
}
//成本中心去重 //成本中心去重
Map<String,List<TbsActivityCenter>> centerMapList = tbsActivityCenters.stream().collect(Collectors.groupingBy(a->a.getCenterType()+"-"+a.getCenterId())); Map<String,List<TbsActivityCenter>> centerMapList = tbsActivityCenters.stream().collect(Collectors.groupingBy(a->a.getCenterType()+"-"+a.getCenterId()));
List<TbsActivityCenter> centerList = centerMapList.values().stream().map(a->a.get(0)).collect(Collectors.toList()); List<TbsActivityCenter> centerList = centerMapList.values().stream().map(a->a.get(0)).collect(Collectors.toList());
@ -1690,7 +1711,18 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
costCenter.setChengBenZhongXin(center.getCenterName()); costCenter.setChengBenZhongXin(center.getCenterName());
costCenter.setChengBenZhongXinId(center.getCenterType()+"-"+center.getId()); costCenter.setChengBenZhongXinId(center.getCenterType()+"-"+center.getId());
} }
subList.add(costCenter); Set<String> budgetNames = centerBudgetMap.get(costCenter.getChengBenZhongXinId());
if (CollUtil.isNotEmpty(budgetNames)){
log.warn("有预算日志");
for (String budgetName : budgetNames) {
TbsCostSubItem.CostCenterTranStr copy = CopierUtil.copy(costCenter,new TbsCostSubItem.CostCenterTranStr());
copy.setBudgetName(budgetName);
subList.add(copy);
}
}else {
log.warn("无预算日志");
subList.add(costCenter);
}
} }
} }

20
cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/common/VerificationUtil.java

@ -1,22 +1,40 @@
package com.qs.serve.modules.vtb.common; package com.qs.serve.modules.vtb.common;
import cn.hutool.core.date.StopWatch;
import com.qs.serve.common.exception.Assert; import com.qs.serve.common.exception.Assert;
import com.qs.serve.modules.tbs.common.TbsCostApplyState; import com.qs.serve.modules.tbs.common.TbsCostApplyState;
import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.entity.TbsCostApply;
import lombok.extern.slf4j.Slf4j;
import java.util.concurrent.TimeUnit;
/** /**
* @author YenHex * @author YenHex
* @since 2024/6/21 * @since 2024/6/21
*/ */
@Slf4j
public class VerificationUtil { public class VerificationUtil {
private final static ThreadLocal<Integer> AUTO_FLAG = new ThreadLocal<>(); private final static ThreadLocal<Integer> AUTO_FLAG = new ThreadLocal<>();
public static void removeThreadLocal(){ public static void removeThreadLocal(){
AUTO_FLAG.remove(); AUTO_FLAG.remove();
} }
public static void startLog(StopWatch stopWatch,String title){
stopWatch.start(title);
}
public static void stop(StopWatch stopWatch){
stop(stopWatch,false,null);
}
public static void stop(StopWatch stopWatch,boolean printFlag,String code){
stopWatch.stop();
if (printFlag){
log.error("\n耗时统计,核销[{}]耗时记录:\n{}",code,stopWatch.prettyPrint(TimeUnit.MILLISECONDS));
}
}
public static Integer getAutoFlag(){ public static Integer getAutoFlag(){
Integer value = AUTO_FLAG.get(); Integer value = AUTO_FLAG.get();
if (value==null){ if (value==null){

19
cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java

@ -41,6 +41,7 @@ import com.qs.serve.modules.vtb.service.*;
import com.qs.serve.modules.vtb.service.impl.VtbVerificationOperationServiceImpl; import com.qs.serve.modules.vtb.service.impl.VtbVerificationOperationServiceImpl;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Async;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -343,16 +344,22 @@ public class VtbVerificationController {
seeYonService.testConnection(); seeYonService.testConnection();
R r = verificationApplication.commitAffair(affairCommit); R r = verificationApplication.commitAffair(affairCommit);
if(affairCommit.getState().equals(2)){ if(affairCommit.getState().equals(2)){
try { runCompensate(affairCommit);
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
vtbVerificationOperationService.runCompensate(affairCommit.getCostApplyId()+"");
} }
return r; return r;
} }
@Async
public void runCompensate(TbsAffairCommitBo affairCommit) {
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
AuthContextUtils.setTenant("001");
vtbVerificationOperationService.runCompensate(affairCommit.getCostApplyId()+"");
}
/** /**
* 加签 * 加签
* @param param * @param param

106
cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationApplication.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.vtb.service; package com.qs.serve.modules.vtb.service;
import cn.hutool.core.date.StopWatch;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.exception.Assert; import com.qs.serve.common.exception.Assert;
import com.qs.serve.common.utils.SpringUtils; import com.qs.serve.common.utils.SpringUtils;
@ -29,6 +30,7 @@ import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo;
import com.qs.serve.modules.tbs.service.TbsActivityPayConditionService; import com.qs.serve.modules.tbs.service.TbsActivityPayConditionService;
import com.qs.serve.modules.tbs.service.TbsActivityService; import com.qs.serve.modules.tbs.service.TbsActivityService;
import com.qs.serve.modules.tbs.service.TbsCostApplyService; import com.qs.serve.modules.tbs.service.TbsCostApplyService;
import com.qs.serve.modules.vtb.common.VerificationUtil;
import com.qs.serve.modules.vtb.common.VtbVerificationState; import com.qs.serve.modules.vtb.common.VtbVerificationState;
import com.qs.serve.modules.vtb.entity.*; import com.qs.serve.modules.vtb.entity.*;
import com.qs.serve.modules.vtb.mapper.VtbVerificationMapper; import com.qs.serve.modules.vtb.mapper.VtbVerificationMapper;
@ -36,6 +38,7 @@ import com.qs.serve.modules.vtb.service.impl.VtbVerificationOperationServiceImpl
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
@ -48,6 +51,7 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -77,10 +81,11 @@ public class VtbVerificationApplication {
private VtbVerificationOperationServiceImpl verificationOperationService; private VtbVerificationOperationServiceImpl verificationOperationService;
public R<?> commitAffair(@RequestBody @Valid TbsAffairCommitBo affairCommit){ public R<?> commitAffair(@RequestBody @Valid TbsAffairCommitBo affairCommit){
//临时测试 StopWatch stopWatch = new StopWatch();
boolean devFlag = false;
VtbVerification verification = vtbVerificationService.getById(affairCommit.getCostApplyId()); VtbVerification verification = vtbVerificationService.getById(affairCommit.getCostApplyId());
String verificationCode = verification.getVerificationCode();
//更新释放标识 //更新释放标识
VerificationUtil.startLog(stopWatch,"更新释放标识");
if(affairCommit.getReleaseFlag()!=null){ if(affairCommit.getReleaseFlag()!=null){
VtbVerification vtbVer = new VtbVerification(); VtbVerification vtbVer = new VtbVerification();
vtbVer.setId(verification.getId()); vtbVer.setId(verification.getId());
@ -90,6 +95,9 @@ public class VtbVerificationApplication {
//完成时会调用更新 //完成时会调用更新
verification.setRegReleaseFlag(affairCommit.getReleaseFlag()); verification.setRegReleaseFlag(affairCommit.getReleaseFlag());
} }
VerificationUtil.stop(stopWatch);
VerificationUtil.startLog(stopWatch,"检验核销单据状态变更");
if(!verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){ if(!verification.getVerificationState().equals(VtbVerificationState.Commiting.getCode())){
VtbVerificationOperationServiceImpl optSvc = SpringUtils.getBean(VtbVerificationOperationServiceImpl.class); VtbVerificationOperationServiceImpl optSvc = SpringUtils.getBean(VtbVerificationOperationServiceImpl.class);
optSvc.runCompensate(verification.getId()+""); optSvc.runCompensate(verification.getId()+"");
@ -98,27 +106,27 @@ public class VtbVerificationApplication {
Assert.throwEx("核销单据状态已变更,请刷新页面"); Assert.throwEx("核销单据状态已变更,请刷新页面");
} }
} }
VerificationUtil.stop(stopWatch);
List<VtbVerificationSubjectCenter> verificationSubjectCenterList = vtbVerificationSubjectCenterService.listByVerificationId(verification.getId()); List<VtbVerificationSubjectCenter> verificationSubjectCenterList = vtbVerificationSubjectCenterService.listByVerificationId(verification.getId());
List<VtbVerificationSubject> verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId()); List<VtbVerificationSubject> verificationSubjects = vtbVerificationSubjectService.listByVerificationId(verification.getId());
//检测参数的金额 //检测参数的金额
log.debug("checkParamAmount 检测参数的核销金额"); log.debug("checkParamAmount 检测参数的核销金额");
this.checkParamAmount(affairCommit, verificationSubjectCenterList, verificationSubjects); this.checkParamAmount(affairCommit, verificationSubjectCenterList, verificationSubjects);
boolean isBackCommit = affairCommit.getState()==2; boolean isBackCommit = affairCommit.getState()==2;
R<String> result;
if(!devFlag){ VerificationUtil.startLog(stopWatch,"提交到OA接口");
result = seeYonService.commonCommit(affairCommit, TbsSeeYonConst.CostCheckConf.Code(),verification.getSyFormId()); R<String> result = seeYonService.commonCommit(affairCommit, TbsSeeYonConst.CostCheckConf.Code(),verification.getSyFormId());
}else { VerificationUtil.stop(stopWatch,true,verificationCode);
result = R.ok();
}
//提交审批 //提交审批
log.warn("提交审批到致远,{}",JsonUtil.objectToJson(result)); log.warn("提交审批到致远,{}",JsonUtil.objectToJson(result));
if(result.getStatus()==200 ){ if(result.getStatus()==200 ){
VerificationUtil.startLog(stopWatch,"二次校验审批状态");
String templateCode = verificationOperationService.getTemplateCode(); String templateCode = verificationOperationService.getTemplateCode();
SyAffairStateResult stateResult = verificationOperationService.checkAffairState(verification.getId()+"",templateCode); SyAffairStateResult stateResult = verificationOperationService.checkAffairState(verification.getId()+"",templateCode);
VerificationUtil.stop(stopWatch);
SyAffairState affairState = stateResult.getState(); SyAffairState affairState = stateResult.getState();
String summeryResult = affairState.toString(); String summeryResult = affairState.toString();
if(affairState.equals(SyAffairState.backed)||affairState.equals(SyAffairState.refuse)){ if(affairState.equals(SyAffairState.backed)||affairState.equals(SyAffairState.refuse)){
@ -126,30 +134,16 @@ public class VtbVerificationApplication {
} }
//提交审批 //提交审批
log.warn("提交审批到致远,检查单据[{}]状态:{}",verification.getVerificationCode(),affairState); log.warn("提交审批到致远,检查单据[{}]状态:{}",verification.getVerificationCode(),affairState);
//要确保所有不为next才支持回调 //要确保所有不为next才支持回调
if(result.getData().equals("next")){ if(result.getData().equals("next")){
summeryResult = "next"; summeryResult = "next";
} }
VerificationUtil.startLog(stopWatch,"成功回调");
// 判断是否含有下个节点
try {
Thread.sleep(500);
} catch (InterruptedException e) {
e.printStackTrace();
}
R r = commitAffairSuccess(affairCommit, verification, isBackCommit, summeryResult); R r = commitAffairSuccess(affairCommit, verification, isBackCommit, summeryResult);
VerificationUtil.stop(stopWatch);
//解决同步冻结时有过期的活动 VerificationUtil.startLog(stopWatch,"异步更新冻结状态");
tbsActivityService.initReopenState(); asyncFlushBandingState();
LambdaQueryWrapper<TbsCostApply> lqwApply = new LambdaQueryWrapper<>(); VerificationUtil.stop(stopWatch,true,verificationCode);
lqwApply.select(TbsCostApply::getId);
lqwApply.eq(TbsCostApply::getChargeState, TbsCostApplyState.State_2_actioning.getCode());
List<TbsCostApply> costApplyList = tbsCostApplyService.list(lqwApply);
List<Long> costApplyIds = costApplyList.stream().map(TbsCostApply::getId).collect(Collectors.toList());
// 更新费用申请的活动的冻结状态
tbsActivityService.flushBandingState(costApplyIds);
return r; return r;
}else if (result.getStatus()==500){ }else if (result.getStatus()==500){
return result; return result;
@ -157,6 +151,20 @@ public class VtbVerificationApplication {
return R.ok(); return R.ok();
} }
@Async
public void asyncFlushBandingState() {
AuthContextUtils.setTenant("001");
//解决同步冻结时有过期的活动
tbsActivityService.initReopenState();
LambdaQueryWrapper<TbsCostApply> lqwApply = new LambdaQueryWrapper<>();
lqwApply.select(TbsCostApply::getId);
lqwApply.eq(TbsCostApply::getChargeState, TbsCostApplyState.State_2_actioning.getCode());
List<TbsCostApply> costApplyList = tbsCostApplyService.list(lqwApply);
List<Long> costApplyIds = costApplyList.stream().map(TbsCostApply::getId).collect(Collectors.toList());
// 更新费用申请的活动的冻结状态
tbsActivityService.flushBandingState(costApplyIds);
}
/** /**
* 检查参数的金额 * 检查参数的金额
* @param affairCommit * @param affairCommit
@ -218,7 +226,6 @@ public class VtbVerificationApplication {
try { try {
//保存记录 //保存记录
// 判断是否含有下个节点
DataAffairCommit dataAffairCommit = new DataAffairCommit(); DataAffairCommit dataAffairCommit = new DataAffairCommit();
dataAffairCommit.setTargetCode(TbsSeeYonConst.CostCheckConf.Code()); dataAffairCommit.setTargetCode(TbsSeeYonConst.CostCheckConf.Code());
dataAffairCommit.setTargetId(verification.getId()+""); dataAffairCommit.setTargetId(verification.getId()+"");
@ -285,35 +292,22 @@ public class VtbVerificationApplication {
Integer countSession = null; Integer countSession = null;
Integer countPerson = null; Integer countPerson = null;
List<TbsAffairCommitBo.AffairSubjectCenterItemLine> centerItemLineList = null; List<TbsAffairCommitBo.AffairSubjectCenterItemLine> centerItemLineList = null;
// if(isCenterCommit){ if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectCenterLines())){
if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectCenterLines())){ for (TbsAffairCommitBo.AffairSubjectCenterLine centerLine : affairCommit.getAffairSubjectCenterLines()) {
for (TbsAffairCommitBo.AffairSubjectCenterLine centerLine : affairCommit.getAffairSubjectCenterLines()) { if(currVs.getSubjectId().equals(centerLine.getSubjectId())){
if(currVs.getSubjectId().equals(centerLine.getSubjectId())){ changeAmount = BigDecimal.ZERO;
changeAmount = BigDecimal.ZERO; if(centerLine.getCenterItemLines()!=null){
if(centerLine.getCenterItemLines()!=null){ for (TbsAffairCommitBo.AffairSubjectCenterItemLine itemLine : centerLine.getCenterItemLines()) {
for (TbsAffairCommitBo.AffairSubjectCenterItemLine itemLine : centerLine.getCenterItemLines()) { changeAmount = changeAmount.add(itemLine.getAmount());
changeAmount = changeAmount.add(itemLine.getAmount());
}
} }
centerItemLineList = centerLine.getCenterItemLines();
countSession = centerLine.getCountSession();
countPerson = centerLine.getCountPerson();
break;
} }
centerItemLineList = centerLine.getCenterItemLines();
countSession = centerLine.getCountSession();
countPerson = centerLine.getCountPerson();
break;
} }
} }
// }else { }
// if(CollectionUtil.isNotEmpty(affairCommit.getAffairSubjectLines())){
// for (TbsAffairCommitBo.AffairSubjectLine affairSubjectLine : affairCommit.getAffairSubjectLines()) {
// if(currVs.getSubjectId().equals(affairSubjectLine.getSubjectId())){
// changeAmount = affairSubjectLine.getAmount();
// countSession = affairSubjectLine.getCountSession();
// countPerson = affairSubjectLine.getCountPerson();
// break;
// }
// }
// }
// }
//保存明细判断是否更变金额 //保存明细判断是否更变金额
VtbVerificationYardItem yardItem = CopierUtil.copy(currVs,new VtbVerificationYardItem()); VtbVerificationYardItem yardItem = CopierUtil.copy(currVs,new VtbVerificationYardItem());
yardItem.setYardId(yard.getId()); yardItem.setYardId(yard.getId());

7
cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

@ -968,7 +968,12 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
if(orgData!=null){ if(orgData!=null){
orgData.setVerificationState(VtbVerificationState.Close.getCode()); orgData.setVerificationState(VtbVerificationState.Close.getCode());
vtbFundFlowService.removeByVerificationId(verification.getId()); vtbFundFlowService.removeByVerificationId(verification.getId());
this.updateById(orgData);
VtbVerification updateOrgData = new VtbVerification();
updateOrgData.setId(orgData.getId());
updateOrgData.setVerificationState(VtbVerificationState.Close.getCode());
this.updateById(updateOrgData);
} }
// //记录核销状态到费用申请 // //记录核销状态到费用申请
// costApply.setLogCheckState(costApply.getCheckState()); // costApply.setLogCheckState(costApply.getCheckState());

Loading…
Cancel
Save