Browse Source

Merge remote-tracking branch 'origin/muti_db' into muti_db

checkBack
15989082884@163.com 1 year ago
parent
commit
ada5260015
  1. 14
      src/main/java/com/qs/serve/common/framework/mvc/HttpServletRequestFilter.java
  2. 35
      src/main/java/com/qs/serve/common/framework/redis/RedisService.java
  3. 12
      src/main/java/com/qs/serve/common/util/AuthContextUtils.java
  4. 20
      src/main/java/com/qs/serve/modules/bir/controller/BirActivityCenterGoodsController.java
  5. 13
      src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java
  6. 27
      src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java
  7. 92
      src/main/java/com/qs/serve/modules/bir/entity/BirBudgetTarget.java
  8. 71
      src/main/java/com/qs/serve/modules/bir/entity/so/BirBudgetTargetSo.java
  9. 61
      src/main/java/com/qs/serve/modules/bir/entity/vo/BirBudgetTargetVo.java
  10. 22
      src/main/java/com/qs/serve/modules/bir/mapper/BirBudgetTargetMapper.java
  11. 20
      src/main/java/com/qs/serve/modules/bir/service/BirBudgetTargetService.java
  12. 25
      src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java
  13. 7
      src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java
  14. 116
      src/main/java/com/qs/serve/modules/bir/service/impl/BirBudgetTargetServiceImpl.java
  15. 7
      src/main/java/com/qs/serve/modules/bms/controller/BmsChannelController.java
  16. 5
      src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java
  17. 34
      src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java
  18. 5
      src/main/java/com/qs/serve/modules/bms/controller/my/BmsSupplierContactsMyController.java
  19. 3
      src/main/java/com/qs/serve/modules/bms/entity/BmsSubject.java
  20. 22
      src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java
  21. 2
      src/main/java/com/qs/serve/modules/bms/entity/bo/BmsSupplierBo.java
  22. 4
      src/main/java/com/qs/serve/modules/bms/entity/vo/BmsSubjectTreeVo.java
  23. 9
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsChannelPointServiceImpl.java
  24. 4
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java
  25. 11
      src/main/java/com/qs/serve/modules/goods/controller/GoodsAccreditController.java
  26. 2
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java
  27. 25
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java
  28. 3
      src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java
  29. 2
      src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditService.java
  30. 167
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditServiceImpl.java
  31. 13
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java
  32. 17
      src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java
  33. 17
      src/main/java/com/qs/serve/modules/his/entity/HisUserSupplier.java
  34. 13
      src/main/java/com/qs/serve/modules/his/entity/HisUserSupplierTemp.java
  35. 5
      src/main/java/com/qs/serve/modules/his/mapper/HisUserSupplierMapper.java
  36. 2
      src/main/java/com/qs/serve/modules/his/service/HisUserSupplierService.java
  37. 36
      src/main/java/com/qs/serve/modules/his/service/impl/HisUserSupplierServiceImpl.java
  38. 16
      src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java
  39. 8
      src/main/java/com/qs/serve/modules/oms/entity/OmsOrderItem.java
  40. 3
      src/main/java/com/qs/serve/modules/oms/entity/bo/OmsOrderBo.java
  41. 3
      src/main/java/com/qs/serve/modules/oms/entity/bo/OmsOrderSkuBo.java
  42. 1
      src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java
  43. 96
      src/main/java/com/qs/serve/modules/pay/controller/PayPaymentController.java
  44. 2
      src/main/java/com/qs/serve/modules/pay/service/impl/PayPaymentServiceImpl.java
  45. 8
      src/main/java/com/qs/serve/modules/seeyon/service/SeeYonRequestService.java
  46. 14
      src/main/java/com/qs/serve/modules/seeyon/service/impl/SeeYonRequestServiceImpl.java
  47. 20
      src/main/java/com/qs/serve/modules/sys/service/impl/SysDeleteLogServiceImpl.java
  48. 1
      src/main/java/com/qs/serve/modules/sys/service/impl/SysPostServiceImpl.java
  49. 2
      src/main/java/com/qs/serve/modules/sys/service/impl/SysPostUserServiceImpl.java
  50. 1
      src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java
  51. 3
      src/main/java/com/qs/serve/modules/tbs/common/util/TbsBudgetLogBuildUtil.java
  52. 20
      src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java
  53. 23
      src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetLogController.java
  54. 9
      src/main/java/com/qs/serve/modules/tbs/controller/TbsCostContractController.java
  55. 22
      src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetCheckingWithAmount.java
  56. 21
      src/main/java/com/qs/serve/modules/tbs/entity/so/TbsScheduleItemSearch.java
  57. 24
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityChannelPointMapper.java
  58. 25
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityPayConditionMapper.java
  59. 21
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivitySubjectMapper.java
  60. 17
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLog2Mapper.java
  61. 3
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLogMapper.java
  62. 3
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsCostApplyRemoveMapper.java
  63. 1
      src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java
  64. 494
      src/main/java/com/qs/serve/modules/tbs/service/TbsActivityDebugApplicationService.java
  65. 206
      src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetReleaseApplicationService.java
  66. 66
      src/main/java/com/qs/serve/modules/tbs/service/TbsCostContractApplication.java
  67. 12
      src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleItemBudgetService.java
  68. 6
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java
  69. 3
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetApplyOperationServiceImpl.java
  70. 1
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchOperationServiceImpl.java
  71. 2
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java
  72. 2
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeOperationServiceImpl.java
  73. 11
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetManagerServiceImpl.java
  74. 8
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java
  75. 12
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java
  76. 3
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyPart1ServiceImpl.java
  77. 23
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java
  78. 45
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java
  79. 8
      src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java
  80. 11
      src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyController.java
  81. 38
      src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyItemController.java
  82. 24
      src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java
  83. 6
      src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyMapper.java
  84. 14
      src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyApplicationService.java
  85. 104
      src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java
  86. 2
      src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java
  87. 4
      src/main/java/com/qs/serve/modules/vtb/mapper/VtbFundFlowMapper.java
  88. 6
      src/main/java/com/qs/serve/modules/vtb/mapper/VtbVerificationMapper.java
  89. 13
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java
  90. 2
      src/main/java/com/qs/serve/task/TbsTask.java
  91. 2
      src/main/resources/application.yml
  92. 101
      src/main/resources/mapper/bir/BirBudgetTargetMapper.xml
  93. 12
      src/main/resources/mapper/bms/BmsSupplierMapper.xml
  94. 3
      src/main/resources/mapper/goods/GoodsSpuMapper.xml
  95. 32
      src/main/resources/mapper/his/HisUserSupplierMapper.xml
  96. 86
      src/main/resources/mapper/tbs/TbsBudget2Mapper.xml
  97. 15
      src/main/resources/mapper/tzc/TzcPolicyMapper.xml
  98. 20
      src/main/resources/mapper/vtb/VtbFundFlowMapper.xml
  99. 18
      src/main/resources/mapper/vtb/VtbVerfifcationMapper.xml

14
src/main/java/com/qs/serve/common/framework/mvc/HttpServletRequestFilter.java

@ -1,15 +1,18 @@
package com.qs.serve.common.framework.mvc; package com.qs.serve.common.framework.mvc;
import com.qs.serve.common.config.DevEnvironmentConfig; import com.qs.serve.common.config.DevEnvironmentConfig;
import com.qs.serve.common.framework.redis.RedisService;
import com.qs.serve.common.framework.security.model.LoginUser; import com.qs.serve.common.framework.security.model.LoginUser;
import com.qs.serve.common.util.AuthContextUtils; import com.qs.serve.common.util.AuthContextUtils;
import com.qs.serve.common.util.DateUtils; import com.qs.serve.common.util.DateUtils;
import com.qs.serve.common.util.ServletUtils; import com.qs.serve.common.util.ServletUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.core.annotation.Order; import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import javax.servlet.*; import javax.servlet.*;
import javax.servlet.annotation.WebFilter; import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
@ -36,6 +39,8 @@ import java.time.format.DateTimeFormatter;
@Order(10000) @Order(10000)
public class HttpServletRequestFilter implements Filter{ public class HttpServletRequestFilter implements Filter{
@Resource
RedisService redisService;
@Override @Override
public void init(FilterConfig filterConfig) throws ServletException { public void init(FilterConfig filterConfig) throws ServletException {
@ -92,12 +97,19 @@ public class HttpServletRequestFilter implements Filter{
} }
} catch (Exception e) {} } catch (Exception e) {}
if(diffTime< 1D){ if(diffTime< 1D){
log.debug(buffer.toString()); log.info(buffer.toString());
}else if (diffTime< 20D){ }else if (diffTime< 20D){
log.warn(buffer.toString()); log.warn(buffer.toString());
}else { }else {
log.error(buffer.toString()); log.error(buffer.toString());
} }
String themeKey = AuthContextUtils.getLockTheme();
if(StringUtils.hasText(themeKey)){
log.warn("释放资源key:{}",themeKey);
redisService.remove(themeKey);
}
//释放资源 防止线程池重复利用出现脏数据
AuthContextUtils.removeThreadLocal();
} }
@Override @Override

35
src/main/java/com/qs/serve/common/framework/redis/RedisService.java

@ -1,5 +1,7 @@
package com.qs.serve.common.framework.redis; package com.qs.serve.common.framework.redis;
import com.qs.serve.common.util.Assert;
import com.qs.serve.common.util.AuthContextUtils;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary; import org.springframework.context.annotation.Primary;
@ -34,6 +36,39 @@ public class RedisService {
private StringRedisTemplate stringRedisTemplate; private StringRedisTemplate stringRedisTemplate;
/**
* 加锁
* @param theme
* @param id
* @return 是否在锁
*/
public void throwResLock(String theme,String id){
String key = "LOCK_RES:"+theme+":"+id;
String value = this.getString(key);
System.out.println("throwResLock:"+value);
String newVal = "lock";
if(newVal.equals(value)){
Assert.throwEx("服务正在处理,请稍后再试");
}
this.set(key,newVal,10,TimeUnit.MINUTES);
String value2 = this.getString(key);
if(!newVal.equals(value2)){
Assert.throwEx("锁失效");
}
AuthContextUtils.setLockTheme(key);
}
/**
* 释放锁
* @param theme
* @param id
* @return 是否在锁
*/
public void removeResLock(String theme,String id){
String key = "LOCK_RES:"+theme+":"+id;
this.remove(key);
}
/** /**
* 写入缓存 * 写入缓存

12
src/main/java/com/qs/serve/common/util/AuthContextUtils.java

@ -26,6 +26,13 @@ public class AuthContextUtils {
private final static ThreadLocal<String> THREAD_TENANT = new ThreadLocal<>(); private final static ThreadLocal<String> THREAD_TENANT = new ThreadLocal<>();
private final static ThreadLocal<Long> THREAD_SUPPLIER = new ThreadLocal<>(); private final static ThreadLocal<Long> THREAD_SUPPLIER = new ThreadLocal<>();
private final static ThreadLocal<String> RES_THEME_LOCK = new ThreadLocal<>();
public static void removeThreadLocal(){
THREAD_TENANT.remove();
THREAD_SUPPLIER.remove();
RES_THEME_LOCK.remove();
}
public static String getAppId(){ public static String getAppId(){
return getAppId(true); return getAppId(true);
@ -69,6 +76,11 @@ public class AuthContextUtils {
public static String getTenant(){return THREAD_TENANT.get();} public static String getTenant(){return THREAD_TENANT.get();}
public static void setLockTheme(String value){RES_THEME_LOCK.set(value);}
public static String getLockTheme(){return RES_THEME_LOCK.get();}
public static void setSupplierId(String value){ public static void setSupplierId(String value){
if(value!=null){ if(value!=null){
try { try {

20
src/main/java/com/qs/serve/modules/bir/controller/BirActivityCenterGoodsController.java

@ -91,7 +91,7 @@ public class BirActivityCenterGoodsController {
@GetMapping("/toSyncBirToday") @GetMapping("/toSyncBirToday")
public R<?> toSyncBirEcro2(){ public R<?> toSyncBirEcro2(){
Long[] ids = new Long[]{0L}; Long[] ids = new Long[]{};
//List<Long> ids = tbsActivityMapper.selectReleaseCostIds(); //List<Long> ids = tbsActivityMapper.selectReleaseCostIds();
//Set<Long> ids = tbsActivityCenterGoodsMapper.selectUpdateCostApplyIds(); //Set<Long> ids = tbsActivityCenterGoodsMapper.selectUpdateCostApplyIds();
List<Long> errIds = new ArrayList<>(); List<Long> errIds = new ArrayList<>();
@ -155,12 +155,12 @@ public class BirActivityCenterGoodsController {
public R<?> syncBir(Integer idType){ public R<?> syncBir(Integer idType){
LambdaQueryWrapper<TbsCostApply> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TbsCostApply> lqw = new LambdaQueryWrapper<>();
lqw lqw
.select(TbsCostApply::getId).ne(TbsCostApply::getChargeState,0) .select(TbsCostApply::getId).in(TbsCostApply::getChargeState,1,2,3,7)
.eq(TbsCostApply::getCancelFlag,0) //.eq(TbsCostApply::getCancelFlag,0)
.gt(TbsCostApply::getTotalActivity,0) //.ne(TbsCostApply::getTotalActivity,0)
.ne(TbsCostApply::getTmpState,11) .ne(TbsCostApply::getTmpState,20)
.le(TbsCostApply::getCreateTime, LocalDate.of(2024,1,1).atStartOfDay()) .ge(TbsCostApply::getCreateTime, LocalDate.of(2023,9,1).atStartOfDay())
.ge(TbsCostApply::getCreateTime, LocalDate.of(2024,2,1).atStartOfDay()) ; .le(TbsCostApply::getCreateTime, LocalDate.of(2024,1,1).atStartOfDay()) ;
boolean ex = extracted(lqw); boolean ex = extracted(lqw);
while (!ex){ while (!ex){
ex = extracted(lqw); ex = extracted(lqw);
@ -173,11 +173,13 @@ public class BirActivityCenterGoodsController {
if(CollectionUtil.isEmpty(costIds)){ if(CollectionUtil.isEmpty(costIds)){
return true; return true;
} }
for (Long costId : costIds) { for (int i = 0; i < costIds.size(); i++) {
Long costId = costIds.get(i);
centerGoodsService.rebuildBir(Arrays.asList(costId)); centerGoodsService.rebuildBir(Arrays.asList(costId));
tbsCostApplyService.update(new LambdaUpdateWrapper<TbsCostApply>() tbsCostApplyService.update(new LambdaUpdateWrapper<TbsCostApply>()
.eq(TbsCostApply::getId,costId) .eq(TbsCostApply::getId,costId)
.set(TbsCostApply::getTmpState,11)); .set(TbsCostApply::getTmpState,20));
log.info("{}/{} {}",i,costIds.size(),costId);
} }
return costIds.size()<100; return costIds.size()<100;
} }

13
src/main/java/com/qs/serve/modules/bir/controller/BirBudgetScheduleController.java

@ -2,10 +2,12 @@ package com.qs.serve.modules.bir.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qs.serve.common.model.dto.PageVo;
import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.modules.tbs.entity.TbsSchedule; import com.qs.serve.modules.tbs.entity.TbsSchedule;
import com.qs.serve.modules.tbs.entity.TbsScheduleItem; import com.qs.serve.modules.tbs.entity.TbsScheduleItem;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCheckingWithAmount;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetWithAmount; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetWithAmount;
import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto; import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto;
import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemWithAmount; import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemWithAmount;
@ -49,6 +51,17 @@ public class BirBudgetScheduleController {
return R.ok(scheduleItemWithAmounts); return R.ok(scheduleItemWithAmounts);
} }
/**
* 查询预算审批中的使用情况
* @param query
* @return
*/
@PostMapping("/budgetCheckingList")
public R<PageVo<TbsBudgetCheckingWithAmount>> queryBudgetUsingList(@RequestBody TbsScheduleItemSearch query){
query.initCenterCombo();
return R.byPageHelperList(scheduleItemBudgetService.listBudgetCheckingAmount(query));
}
/** /**
* 查询周期使用情况 * 查询周期使用情况
* @param query * @param query

27
src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java

@ -1,15 +1,11 @@
package com.qs.serve.modules.bir.controller; package com.qs.serve.modules.bir.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qs.serve.common.model.annotation.RepeatSubmit; import com.qs.serve.common.model.annotation.RepeatSubmit;
import com.qs.serve.common.model.annotation.SysLog;
import com.qs.serve.common.model.dto.PageVo;
import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.*; import com.qs.serve.common.util.*;
import com.qs.serve.modules.bir.entity.BirBaseActivity; import com.qs.serve.modules.bir.entity.so.BirBudgetTargetSo;
import com.qs.serve.modules.bir.entity.vo.BirBudgetTargetVo;
import com.qs.serve.modules.bir.entity.so.BirCostRoiSo; import com.qs.serve.modules.bir.entity.so.BirCostRoiSo;
import com.qs.serve.modules.bir.entity.vo.*; import com.qs.serve.modules.bir.entity.vo.*;
import com.qs.serve.modules.bir.service.*; import com.qs.serve.modules.bir.service.*;
@ -18,7 +14,6 @@ import com.qs.serve.modules.sys.service.SysDictDataService;
import com.qs.serve.modules.tbs.common.TbsCenterType; import com.qs.serve.modules.tbs.common.TbsCenterType;
import com.qs.serve.modules.tbs.entity.TbsActivity; import com.qs.serve.modules.tbs.entity.TbsActivity;
import com.qs.serve.modules.tbs.entity.TbsActivityCenter; import com.qs.serve.modules.tbs.entity.TbsActivityCenter;
import com.qs.serve.modules.tbs.entity.TbsCostApply;
import com.qs.serve.modules.tbs.entity.dto.TbsCostSubItem; import com.qs.serve.modules.tbs.entity.dto.TbsCostSubItem;
import com.qs.serve.modules.tbs.mapper.TbsActivityCenterMapper; import com.qs.serve.modules.tbs.mapper.TbsActivityCenterMapper;
import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; import com.qs.serve.modules.tbs.mapper.TbsActivityMapper;
@ -26,15 +21,10 @@ import com.qs.serve.modules.tbs.service.TbsBudgetService;
import com.qs.serve.modules.tbs.service.TbsCostApplyService; import com.qs.serve.modules.tbs.service.TbsCostApplyService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors;
/** /**
* BI报表 ROI费率 * BI报表 ROI费率
@ -58,6 +48,7 @@ public class BirRoiRateController {
private TbsActivityMapper tbsActivityMapper; private TbsActivityMapper tbsActivityMapper;
private TbsActivityCenterMapper tbsActivityCenterMapper; private TbsActivityCenterMapper tbsActivityCenterMapper;
private BirBaseActivityService birBaseActivityService; private BirBaseActivityService birBaseActivityService;
private BirBudgetTargetService birBudgetTargetService;
/** /**
* 测试 * 测试
@ -149,6 +140,18 @@ public class BirRoiRateController {
return R.ok(vo); return R.ok(vo);
} }
/**
* 获取费率
* @param query
* @return
*/
@RepeatSubmit
@PostMapping("/costYearMonthV2")
public R<List<BirBudgetTargetVo>> getCostRoiOfYearMonthV2(@RequestBody BirBudgetTargetSo query){
List<BirBudgetTargetVo> list = birBudgetTargetService.listVo(query);
return R.ok(list);
}
/** /**
* 获取成本中心费率 * 获取成本中心费率
* @param costApplyId * @param costApplyId

92
src/main/java/com/qs/serve/modules/bir/entity/BirBudgetTarget.java

@ -0,0 +1,92 @@
package com.qs.serve.modules.bir.entity;
import java.time.LocalDate;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.NotBlank;
/**
* 实体类
* @author YenHex
* @since 2024-06-05
*/
@Data
@TableName("bir_budget_target")
public class BirBudgetTarget implements Serializable {
private static final long serialVersionUID = 1L;
/** id */
@TableId(type = IdType.AUTO)
private Long id;
/** 搜索维度:0-客户;1-城市;2-省级经理;3-大区经理 */
private Integer searchType;
/** 年份 */
private Integer yearNum;
/** 季度 */
private Integer quarterNum;
/** 月份 */
private Integer monthNum;
/** 销售目标 */
private BigDecimal targetAmt;
/** 预算金额 */
private BigDecimal budgetAmt;
/** 实际发货 */
private BigDecimal dispatchAmt;
/** 去年同期发货 */
private BigDecimal lastYearDispatchAmt;
/** 城+省费用 */
private BigDecimal provinceCityAmt;
/** 城+省+区费用 */
private BigDecimal provinceCityRegionAmt;
/** 实际总费用 */
private BigDecimal totalRealAmt;
private String brandId;
/** 品牌编码 */
@Length(max = 255,message = "品牌编码长度不能超过255字")
private String brandCode;
/** 品牌 */
@Length(max = 255,message = "品牌长度不能超过255字")
private String brandName;
/** 成本中心类型:saleRegion; bizRegion; costCenter; supplier */
@Length(max = 255,message = "成本中心类型:saleRegion; bizRegion; costCenter; supplier长度不能超过255字")
private String centerType;
private String centerId;
/** 成本中心编码 */
@Length(max = 255,message = "成本中心编码长度不能超过255字")
private String centerCode;
/** 成本中心名 */
@Length(max = 255,message = "成本中心名长度不能超过255字")
private String centerName;
}

71
src/main/java/com/qs/serve/modules/bir/entity/so/BirBudgetTargetSo.java

@ -0,0 +1,71 @@
package com.qs.serve.modules.bir.entity.so;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
/**
* @author YenHex
* @since 2024/6/4
*/
@Data
public class BirBudgetTargetSo {
/** 搜索维度:0-客户;1-城市;2-省级经理;3-大区经理 */
private Integer loadType;
/**
* 开始时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime yearMonthStart;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime yearMonthEnd;
/**
* 业务待定
*/
private String supplierId;
/**
* 成本中心
*/
private List<CostInfo> centerList;
/**品牌 */
private List<String> brandIds;
/**
* 减少xml条件
*/
private Integer selectCenterFlag;
/**成本中心编码 */
private List<String> centerIds;
/**行政区域-成本中心编码 */
private List<String> bizRegionIds;
/**销售区域-成本中心编码 */
private List<String> saleRegionIds;
/**客户-成本中心编码 */
private List<String> supplierIds;
@Data
public static class CostInfo{
/**
* center,saleRegion,bizRegion,supplier
*/
private String costType;
private String costId;
}
}

61
src/main/java/com/qs/serve/modules/bir/entity/vo/BirBudgetTargetVo.java

@ -0,0 +1,61 @@
package com.qs.serve.modules.bir.entity.vo;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import java.math.BigDecimal;
/**
* @author YenHex
* @since 2024/6/4
*/
@Data
public class BirBudgetTargetVo {
/** 年份 */
private Integer yearNum;
/** 月份 */
private Integer monthNum;
/** 销售目标 */
private BigDecimal targetAmt;
/** 预算金额 */
private BigDecimal budgetAmt;
/** 实际发货 */
private BigDecimal dispatchAmt;
/** 实际总费用 */
private BigDecimal totalRealAmt;
/** 去年同期发货 */
private BigDecimal lastYearDispatchAmt;
/** 城+省费用 */
private BigDecimal provinceCityAmt;
/** 城+省+区费用 */
private BigDecimal provinceCityRegionAmt;
/** 预算费用率 */
private BigDecimal budgetRate;
/** 发货达成率 */
private BigDecimal dispatchRate;
/** 同期成长率*/
private BigDecimal lastYearGrowRate;
/** 城+省费用率 */
private BigDecimal provinceCityRate;
/** 城+省+区费用率 */
private BigDecimal provinceCityRegionRate;
/** 实际总费用率 */
private BigDecimal totalRealRate;
}

22
src/main/java/com/qs/serve/modules/bir/mapper/BirBudgetTargetMapper.java

@ -0,0 +1,22 @@
package com.qs.serve.modules.bir.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.bir.entity.BirBudgetTarget;
import com.qs.serve.modules.bir.entity.so.BirBudgetTargetSo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* Mapper
* @author YenHex
* @date 2024-06-04
*/
public interface BirBudgetTargetMapper extends BaseMapper<BirBudgetTarget> {
@InterceptorIgnore(tenantLine = "1")
List<BirBudgetTarget> selectBirBudgetTargetList(@Param("query") BirBudgetTargetSo budgetTargetSo);
}

20
src/main/java/com/qs/serve/modules/bir/service/BirBudgetTargetService.java

@ -0,0 +1,20 @@
package com.qs.serve.modules.bir.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.bir.entity.BirBudgetTarget;
import com.qs.serve.modules.bir.entity.so.BirBudgetTargetSo;
import com.qs.serve.modules.bir.entity.vo.BirBudgetTargetVo;
import java.util.List;
/**
* 服务接口
* @author YenHex
* @date 2024-06-04
*/
public interface BirBudgetTargetService extends IService<BirBudgetTarget> {
List<BirBudgetTargetVo> listVo(BirBudgetTargetSo query);
}

25
src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java

@ -139,19 +139,22 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe
.collect(Collectors.groupingBy(TbsActivityCenterGoods::getActivityId)); .collect(Collectors.groupingBy(TbsActivityCenterGoods::getActivityId));
LambdaQueryWrapper<BmsSupplier> supplierLqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<BmsSupplier> supplierLqw = new LambdaQueryWrapper<>();
supplierLqw.in(BmsSupplier::getId,activityCenterGoodsAllList.stream().map(a->a.getSupplierId()).distinct().collect(Collectors.toList())); supplierLqw.in(BmsSupplier::getCode,activityCenterGoodsAllList.stream().map(TbsActivityCenterGoods::getSupplierCode).distinct().collect(Collectors.toList()));
List<BmsSupplier> bmsSupplierList = bmsSupplierMapper.selectList(supplierLqw); List<BmsSupplier> bmsSupplierList = bmsSupplierMapper.selectList(supplierLqw);
Map<String,BmsSupplier> supplierMap = bmsSupplierList.stream().collect(Collectors.toMap(BmsSupplier::getId,a->a)); Map<String,BmsSupplier> supplierMap = bmsSupplierList.stream().collect(Collectors.toMap(BmsSupplier::getId,a->a));
LambdaQueryWrapper<BmsRegion> regionLqw = new LambdaQueryWrapper<>(); Map<String,BmsRegion> saleRegionMap = null;
regionLqw.in(BmsRegion::getId,bmsSupplierList.stream().map(a->a.getRegionLast()).collect(Collectors.toList())); Map<String,BmsRegion2> bizRegionMap = null;
List<BmsRegion> saleRegionList = regionMapper.selectList(regionLqw); if(CollUtil.isNotEmpty(bmsSupplierList)) {
Map<String,BmsRegion> saleRegionMap = saleRegionList.stream().collect(Collectors.toMap(BmsRegion::getId,a->a)); LambdaQueryWrapper<BmsRegion> regionLqw = new LambdaQueryWrapper<>();
regionLqw.in(BmsRegion::getId,bmsSupplierList.stream().map(BmsSupplier::getRegionLast).collect(Collectors.toList()));
LambdaQueryWrapper<BmsRegion2> region2Lqw = new LambdaQueryWrapper<>(); List<BmsRegion> saleRegionList = regionMapper.selectList(regionLqw);
region2Lqw.in(BmsRegion2::getId,bmsSupplierList.stream().map(a->a.getRegion2Last()).collect(Collectors.toList())); saleRegionMap = saleRegionList.stream().collect(Collectors.toMap(BmsRegion::getId, a->a));
List<BmsRegion2> bizRegionList = region2Mapper.selectList(region2Lqw); LambdaQueryWrapper<BmsRegion2> region2Lqw = new LambdaQueryWrapper<>();
Map<String,BmsRegion2> bizRegionMap = bizRegionList.stream().collect(Collectors.toMap(BmsRegion2::getId,a->a)); region2Lqw.in(BmsRegion2::getId,bmsSupplierList.stream().map(BmsSupplier::getRegion2Last).collect(Collectors.toList()));
List<BmsRegion2> bizRegionList = region2Mapper.selectList(region2Lqw);
bizRegionMap = bizRegionList.stream().collect(Collectors.toMap(BmsRegion2::getId, a->a));
}
//过滤无效的费用申请 //过滤无效的费用申请
LambdaQueryWrapper<TbsCostApply> costLqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TbsCostApply> costLqw = new LambdaQueryWrapper<>();
@ -225,8 +228,10 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe
} }
} }
if(bacgList.size()>0){ if(bacgList.size()>0){
LocalDateTime nowTime = LocalDateTime.now();
for (BirActivityCenterGoods bir : bacgList) { for (BirActivityCenterGoods bir : bacgList) {
bir.setId(IdUtil.getSnowflakeNextId()); bir.setId(IdUtil.getSnowflakeNextId());
bir.setUpdateTime(nowTime);
super.getBaseMapper().insert(bir); super.getBaseMapper().insert(bir);
} }
} }

7
src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java

@ -24,6 +24,7 @@ import com.qs.serve.modules.bir.mapper.BirBaseActivityMapper;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period; import java.time.Period;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -52,9 +53,11 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
List<Long> ids = activityList.stream().filter(a->a.getId()!=null) List<Long> ids = activityList.stream().filter(a->a.getId()!=null)
.map(TbsActivity::getId).collect(Collectors.toList()); .map(TbsActivity::getId).collect(Collectors.toList());
LambdaQueryWrapper<BirBaseActivity> birBaseActivityLqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<BirBaseActivity> birBaseActivityLqw = new LambdaQueryWrapper<>();
birBaseActivityLqw.in(BirBaseActivity::getCostApplyId,costId); birBaseActivityLqw.eq(BirBaseActivity::getCostApplyId,costId);
super.baseMapper.delete(birBaseActivityLqw); super.baseMapper.delete(birBaseActivityLqw);
//防空指针
ids.add(0L);
LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>();
activityLqw.in(TbsActivity::getId,ids); activityLqw.in(TbsActivity::getId,ids);
activityList = tbsActivityMapper.selectList(activityLqw); activityList = tbsActivityMapper.selectList(activityLqw);
@ -174,8 +177,10 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
} }
//保存 //保存
LocalDateTime nowTime = LocalDateTime.now();
for (BirBaseActivity baseActivity : birBaseActivities) { for (BirBaseActivity baseActivity : birBaseActivities) {
baseActivity.setId(IdUtil.getSnowflakeNextId()); baseActivity.setId(IdUtil.getSnowflakeNextId());
baseActivity.setUpdateTime(nowTime);
super.getBaseMapper().insert(baseActivity); super.getBaseMapper().insert(baseActivity);
} }
} }

116
src/main/java/com/qs/serve/modules/bir/service/impl/BirBudgetTargetServiceImpl.java

@ -0,0 +1,116 @@
package com.qs.serve.modules.bir.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.modules.bir.entity.so.BirBudgetTargetSo;
import com.qs.serve.modules.bir.entity.vo.BirBudgetTargetVo;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import com.qs.serve.modules.bir.entity.BirBudgetTarget;
import com.qs.serve.modules.bir.service.BirBudgetTargetService;
import com.qs.serve.modules.bir.mapper.BirBudgetTargetMapper;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* 服务实现类
* @author YenHex
* @since 2024-06-04
*/
@Slf4j
@Service
@AllArgsConstructor
public class BirBudgetTargetServiceImpl extends ServiceImpl<BirBudgetTargetMapper,BirBudgetTarget> implements BirBudgetTargetService {
@Override
public List<BirBudgetTargetVo> listVo(BirBudgetTargetSo query) {
query.setLoadType(query.getLoadType()+1);
LocalDateTime endMonth = query.getYearMonthEnd();
LocalDateTime startMonth = query.getYearMonthStart();
//格式化
startMonth = startMonth.withDayOfMonth(1).toLocalDate().atTime(0,0,0);
endMonth = endMonth.with(TemporalAdjusters.lastDayOfMonth()).toLocalDate().atTime(23,59,59);
query.setYearMonthStart(startMonth);
query.setYearMonthEnd(endMonth);
query.setSelectCenterFlag(0);
if(CollUtil.isNotEmpty(query.getCenterList())){
query.setSelectCenterFlag(1);
}
List<BirBudgetTarget> birBudgetTargets = baseMapper.selectBirBudgetTargetList(query);
Map<String,List<BirBudgetTarget>> listMap = birBudgetTargets.stream()
.collect(Collectors.groupingBy(obj->obj.getYearNum()+"_"+obj.getMonthNum()));
List<BirBudgetTargetVo> budgetTargetVoList = new ArrayList<>();
//12个月
final int TOTAL_MONTH = 12;
for (int y = startMonth.getYear(); y <= endMonth.getYear(); y++) {
for (int m = 1; m <= TOTAL_MONTH; m++) {
//防止多空白行
if(y == startMonth.getYear() && m < startMonth.getMonthValue()){
continue;
}
if(y == endMonth.getYear() && m > endMonth.getMonthValue()){
continue;
}
budgetTargetVoList.add(getBudgetTargetVo(listMap, m, y));
}
}
return budgetTargetVoList;
}
private BirBudgetTargetVo getBudgetTargetVo(Map<String, List<BirBudgetTarget>> listMap, int month, int year) {
List<BirBudgetTarget> mList = listMap.get(year +"_"+ month);
BirBudgetTargetVo targetVo = new BirBudgetTargetVo();
targetVo.setYearNum(year);
targetVo.setMonthNum(month);
targetVo.setTargetAmt(BigDecimal.ZERO);
targetVo.setBudgetAmt(BigDecimal.ZERO);
targetVo.setDispatchAmt(BigDecimal.ZERO);
targetVo.setTotalRealAmt(BigDecimal.ZERO);
targetVo.setLastYearDispatchAmt(BigDecimal.ZERO);
targetVo.setProvinceCityAmt(BigDecimal.ZERO);
targetVo.setProvinceCityRegionAmt(BigDecimal.ZERO);
if(CollUtil.isNotEmpty(mList)){
for (BirBudgetTarget target : mList) {
targetVo.setTargetAmt(targetVo.getTargetAmt().add(target.getTargetAmt()));
targetVo.setBudgetAmt(targetVo.getBudgetAmt().add(target.getBudgetAmt()));
targetVo.setDispatchAmt(targetVo.getDispatchAmt().add(target.getDispatchAmt()));
targetVo.setTotalRealAmt(targetVo.getTotalRealAmt().add(target.getTotalRealAmt()));
targetVo.setLastYearDispatchAmt(targetVo.getLastYearDispatchAmt().add(target.getLastYearDispatchAmt()));
targetVo.setProvinceCityAmt(targetVo.getProvinceCityAmt().add(target.getProvinceCityAmt()));
targetVo.setProvinceCityRegionAmt(targetVo.getProvinceCityRegionAmt().add(target.getProvinceCityRegionAmt()));
}
//预算费率 = 预算费用/销售目标
targetVo.setBudgetRate(targetVo.getBudgetAmt().divide(targetVo.getTargetAmt(),2, RoundingMode.DOWN));
//发货达成率 = 实际发货/销售目标
targetVo.setDispatchRate(targetVo.getDispatchAmt().divide(targetVo.getTargetAmt(),2, RoundingMode.DOWN));
//(当前发货-去年同期发货)/去年同期发货
targetVo.setLastYearGrowRate(
targetVo.getDispatchAmt()
.subtract(targetVo.getLastYearDispatchAmt())
.divide(targetVo.getLastYearDispatchAmt(),2, RoundingMode.DOWN)
);
//实际费用率=实际费用/实际发货
targetVo.setProvinceCityRate(targetVo.getProvinceCityAmt().divide(targetVo.getDispatchAmt(),2, RoundingMode.DOWN));
targetVo.setProvinceCityRegionRate(targetVo.getProvinceCityRate().divide(targetVo.getDispatchAmt(),2, RoundingMode.DOWN));
targetVo.setTotalRealRate(targetVo.getTotalRealAmt().divide(targetVo.getDispatchAmt(),2, RoundingMode.DOWN));
}
return targetVo;
}
}

7
src/main/java/com/qs/serve/modules/bms/controller/BmsChannelController.java

@ -194,6 +194,13 @@ public class BmsChannelController {
param.setHeadChannel(""); param.setHeadChannel("");
param.setHeadChannelCode(""); param.setHeadChannelCode("");
} }
//编码不可重复
Long count = bmsChannelService.count(new LambdaQueryWrapper<BmsChannel>()
.ne(BmsChannel::getId,param.getId())
.eq(BmsChannel::getChannelCode,param.getChannelCode()));
if(count > 0){
return R.error("编码不可重复");
}
boolean result = bmsChannelService.updateById(param); boolean result = bmsChannelService.updateById(param);
if(!ori.getChannelName().equals(param.getChannelName())){ if(!ori.getChannelName().equals(param.getChannelName())){
List<BmsChannelPoint> channelPoints = bmsChannelPointService.listByChannelId(param.getId()); List<BmsChannelPoint> channelPoints = bmsChannelPointService.listByChannelId(param.getId());

5
src/main/java/com/qs/serve/modules/bms/controller/BmsRegionController.java

@ -110,8 +110,9 @@ public class BmsRegionController {
BmsSupplier supplier = bmsSupplierService.getById(supplierId); BmsSupplier supplier = bmsSupplierService.getById(supplierId);
regionIds.addAll(supplier.listSaleRegionIds()); regionIds.addAll(supplier.listSaleRegionIds());
} }
List<HisUserSupplier> hisUserSuppliers = hisUserSupplierService.selectHisSupplier(null,false); //List<HisUserSupplier> hisUserSuppliers = hisUserSupplierService.selectHisSupplier(null,false);
List<Long> supplierIds = hisUserSuppliers.stream().map(HisUserSupplier::getSupplierId).collect(Collectors.toList()); //List<Long> supplierIds = hisUserSuppliers.stream().map(HisUserSupplier::getSupplierId).collect(Collectors.toList());
List<Long> supplierIds = hisUserSupplierService.selectHisSupplier(null,false);
supplierIds.add(0L); supplierIds.add(0L);
List<BmsSupplier> supplierList = bmsSupplierService.listByIds(supplierIds); List<BmsSupplier> supplierList = bmsSupplierService.listByIds(supplierIds);
List<String> firstRegionIds = supplierList.stream().map(a->a.getRegionFirst()).collect(Collectors.toList()); List<String> firstRegionIds = supplierList.stream().map(a->a.getRegionFirst()).collect(Collectors.toList());

34
src/main/java/com/qs/serve/modules/bms/controller/BmsSubjectController.java

@ -106,7 +106,7 @@ public class BmsSubjectController {
List<String> subjectIds2 = subjectRegionList.stream().map(a->a.getSubjectId().toString()) List<String> subjectIds2 = subjectRegionList.stream().map(a->a.getSubjectId().toString())
.distinct().collect(Collectors.toList()); .distinct().collect(Collectors.toList());
subjectIds.addAll(subjectIds2); subjectIds.addAll(subjectIds2);
recursionToSetSelectAble(treeVoList, subjectIds); recursionToSetSelectAble(treeVoList, subjectIds,null);
} }
} }
@ -123,30 +123,42 @@ public class BmsSubjectController {
findParentVoAndAddToList(treeVoList,newTreeVoList,pVo); findParentVoAndAddToList(treeVoList,newTreeVoList,pVo);
} }
} }
/** /**
* 递归设置可选 * 递归设置可选
* @param treeVoList * @param treeVoList
* @param subjectIds * @param subjectIds
* @param parentNode
*/ */
private void recursionToSetSelectAble(List<?> treeVoList, List<String> subjectIds) { private void recursionToSetSelectAble(List<?> treeVoList, List<String> subjectIds,BmsSubjectTreeVo parentNode) {
if(CollectionUtil.isEmpty(treeVoList)){ if(CollectionUtil.isEmpty(treeVoList)){
return; return;
} }
for (Object object : treeVoList) { for (Object object : treeVoList) {
BmsSubjectTreeVo subjectTreeVo = (BmsSubjectTreeVo)object; BmsSubjectTreeVo subjectTreeVo = (BmsSubjectTreeVo)object;
if(CollectionUtil.isEmpty(subjectTreeVo.getChildren())){ if(subjectTreeVo.getPid().equals(0L)){
if(subjectTreeVo.getBizRegionFlag().equals(0)||subjectTreeVo.getSaleRegionFlag().equals(0)){ for (String subjectId : subjectIds) {
subjectTreeVo.setApiSelectAble(1); if(subjectTreeVo.getId().equals(subjectId)){
}else { subjectTreeVo.setApiSelectAble(1);
for (String subjectId : subjectIds) { break;
if(subjectTreeVo.getId().equals(subjectId)){ }
}
parentNode = subjectTreeVo;
}else {
if(parentNode.getApiSelectAble().equals(1)){
if(subjectTreeVo.getBizRegionFlag().equals(0)||subjectTreeVo.getSaleRegionFlag().equals(0)){
if(!parentNode.getApiSelectAble().equals(0)){
subjectTreeVo.setApiSelectAble(1); subjectTreeVo.setApiSelectAble(1);
break;
} }
} }
} }
}else { }
recursionToSetSelectAble(subjectTreeVo.getChildren(),subjectIds); if(CollectionUtil.isNotEmpty(subjectTreeVo.getChildren())){
if(parentNode.getApiSelectAble().equals(0)){
recursionToSetSelectAble(subjectTreeVo.getChildren(),subjectIds,subjectTreeVo);
}else {
recursionToSetSelectAble(subjectTreeVo.getChildren(),subjectIds,subjectTreeVo);
}
} }
} }
} }

5
src/main/java/com/qs/serve/modules/bms/controller/my/BmsSupplierContactsMyController.java

@ -50,8 +50,9 @@ public class BmsSupplierContactsMyController {
*/ */
@GetMapping("/page") @GetMapping("/page")
public R<PageVo<BmsSupplierContacts>> getPage(BmsSupplierContactsSo param){ public R<PageVo<BmsSupplierContacts>> getPage(BmsSupplierContactsSo param){
List<HisUserSupplier> hisUserSuppliers = hisUserSupplierService.selectHisSupplier(null,false); //List<HisUserSupplier> hisUserSuppliers = hisUserSupplierService.selectHisSupplier(null,false);
List<Long> supplierIds = hisUserSuppliers.stream().map(HisUserSupplier::getSupplierId).collect(Collectors.toList()); //List<Long> supplierIds = hisUserSuppliers.stream().map(HisUserSupplier::getSupplierId).collect(Collectors.toList());
List<Long> supplierIds = hisUserSupplierService.selectHisSupplier(null,false);
PageUtil.startPage(); PageUtil.startPage();
BmsSupplierContacts query = CopierUtil.copy(param,new BmsSupplierContacts()); BmsSupplierContacts query = CopierUtil.copy(param,new BmsSupplierContacts());
LambdaQueryWrapper<BmsSupplierContacts> contactsLambdaQueryWrapper = new LambdaQueryWrapper<>(query); LambdaQueryWrapper<BmsSupplierContacts> contactsLambdaQueryWrapper = new LambdaQueryWrapper<>(query);

3
src/main/java/com/qs/serve/modules/bms/entity/BmsSubject.java

@ -61,6 +61,9 @@ public class BmsSubject implements Serializable {
private Integer level; private Integer level;
/** 应用与发布费用时,必选网点拦截 */
private Integer pointSelectFlag;
/** 备注 */ /** 备注 */
@Length(max = 255,message = "备注长度不能超过255字") @Length(max = 255,message = "备注长度不能超过255字")
private String remark; private String remark;

22
src/main/java/com/qs/serve/modules/bms/entity/BmsSupplier.java

@ -75,13 +75,11 @@ public class BmsSupplier implements Serializable {
/** 名称 */ /** 名称 */
@NotBlank(message = "名称不能为空") @NotBlank(message = "名称不能为空")
@Length(max = 20,message = "名称长度不能超过20字")
@TableField(condition = SqlCondition.LIKE) @TableField(condition = SqlCondition.LIKE)
private String name; private String name;
/** 客户编码 */ /** 客户编码 */
@NotBlank(message = "客户编码不能为空") @NotBlank(message = "客户编码不能为空")
@Length(max = 20,message = "客户编码长度不能超过20字")
@TableField(condition = SqlCondition.LIKE) @TableField(condition = SqlCondition.LIKE)
private String code; private String code;
@ -211,6 +209,18 @@ public class BmsSupplier implements Serializable {
/** 线下下单 */ /** 线下下单 */
private Integer orderOfflineFlag; private Integer orderOfflineFlag;
/** 统计维护的地址数量 */
@TableField(exist = false)
private Integer countAddr;
/**
* 查询维护的地址
* countAddrFlag=0 表示未维护的收货地址
* countAddrFlag=1 表示已维护的收货地址
*/
@TableField(exist = false)
private Integer countAddrFlag;
/** 当前用户ID */ /** 当前用户ID */
@TableField(exist = false) @TableField(exist = false)
private String currUserId; private String currUserId;
@ -364,7 +374,7 @@ public class BmsSupplier implements Serializable {
/*-------------- ----------------- */ /*-------------- ----------------- */
@TableField(exist = false) @TableField(exist = false)
private List<String> searchInIds; private List<Long> searchInIds;
/*-------------- ----------------- */ /*-------------- ----------------- */
@TableField(exist = false) @TableField(exist = false)
@ -396,6 +406,7 @@ public class BmsSupplier implements Serializable {
public HisUserSupplier toHisUserSupplier(String userId,Integer type){ public HisUserSupplier toHisUserSupplier(String userId,Integer type){
HisUserSupplier userSupplier = new HisUserSupplier(); HisUserSupplier userSupplier = new HisUserSupplier();
userSupplier.setQueryValue(this.keyword);
userSupplier.setUserId(userId); userSupplier.setUserId(userId);
if(this.getUserId()!=null){ if(this.getUserId()!=null){
userSupplier.setSupplierId(Long.parseLong(this.getId())); userSupplier.setSupplierId(Long.parseLong(this.getId()));
@ -403,6 +414,7 @@ public class BmsSupplier implements Serializable {
if(this.getId()!=null){ if(this.getId()!=null){
userSupplier.setSupplierId(Long.parseLong(this.getId())); userSupplier.setSupplierId(Long.parseLong(this.getId()));
} }
userSupplier.setSelectSupplierTypes(this.getSelectSupplierTypes());
userSupplier.setSupplierName(this.getName()); userSupplier.setSupplierName(this.getName());
userSupplier.setSupplierCode(this.getCode()); userSupplier.setSupplierCode(this.getCode());
userSupplier.setSaleRegionFirst(this.getRegionFirst()); userSupplier.setSaleRegionFirst(this.getRegionFirst());
@ -415,6 +427,8 @@ public class BmsSupplier implements Serializable {
userSupplier.setBizRegionFourthly(this.getRegion2Fourthly()); userSupplier.setBizRegionFourthly(this.getRegion2Fourthly());
userSupplier.setSupplierFlag(this.getSupplierFlag()); userSupplier.setSupplierFlag(this.getSupplierFlag());
userSupplier.setType(type); userSupplier.setType(type);
userSupplier.setCountAddr(this.getCountAddr());
userSupplier.setCountAddrFlag(this.getCountAddrFlag());
userSupplier.setCostFlag(this.costFlag); userSupplier.setCostFlag(this.costFlag);
return userSupplier; return userSupplier;
} }
@ -440,6 +454,8 @@ public class BmsSupplier implements Serializable {
userSupplier.setBizRegionFourthly(this.getRegion2Fourthly()); userSupplier.setBizRegionFourthly(this.getRegion2Fourthly());
userSupplier.setSupplierFlag(this.getSupplierFlag()); userSupplier.setSupplierFlag(this.getSupplierFlag());
userSupplier.setType(type); userSupplier.setType(type);
userSupplier.setCountAddr(this.getCountAddr());
userSupplier.setCountAddrFlag(this.getCountAddrFlag());
userSupplier.setCostFlag(this.costFlag); userSupplier.setCostFlag(this.costFlag);
userSupplier.setStopFlag(this.stopFlag); userSupplier.setStopFlag(this.stopFlag);
userSupplier.setStopFlagDate(this.stopFlagDate); userSupplier.setStopFlagDate(this.stopFlagDate);

2
src/main/java/com/qs/serve/modules/bms/entity/bo/BmsSupplierBo.java

@ -37,12 +37,10 @@ public class BmsSupplierBo {
/** 名称 */ /** 名称 */
@NotBlank(message = "名称不能为空") @NotBlank(message = "名称不能为空")
@Length(max = 20,message = "名称长度不能超过20字")
private String name; private String name;
/** 客户编码 */ /** 客户编码 */
@NotBlank(message = "客户编码不能为空") @NotBlank(message = "客户编码不能为空")
@Length(max = 20,message = "客户编码长度不能超过20字")
private String code; private String code;
/** 父级id,0表总公司无上级 */ /** 父级id,0表总公司无上级 */

4
src/main/java/com/qs/serve/modules/bms/entity/vo/BmsSubjectTreeVo.java

@ -49,4 +49,8 @@ public class BmsSubjectTreeVo extends TreeNode {
/** 是否进场费用 */ /** 是否进场费用 */
private Integer slottingFlag; private Integer slottingFlag;
/** 应用与发布费用时,必选网点拦截 */
private Integer pointSelectFlag;
} }

9
src/main/java/com/qs/serve/modules/bms/service/impl/BmsChannelPointServiceImpl.java

@ -3,6 +3,7 @@ package com.qs.serve.modules.bms.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.dto.RowParam; import com.qs.serve.common.model.dto.RowParam;
import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.Assert;
import com.qs.serve.common.util.AuthContextUtils; import com.qs.serve.common.util.AuthContextUtils;
@ -98,6 +99,14 @@ public class BmsChannelPointServiceImpl extends ServiceImpl<BmsChannelPointMappe
//更新底层的关联表 //更新底层的关联表
//hisUserChannelPointService.initSetupByPointId(channelPoint.getId()); //hisUserChannelPointService.initSetupByPointId(channelPoint.getId());
}else { }else {
//编码不可重复
Long count = this.count(new LambdaQueryWrapper<BmsChannelPoint>()
.ne(BmsChannelPoint::getId,channelPoint.getId())
.eq(BmsChannelPoint::getPointCode,channelPoint.getPointCode()));
if(count > 0){
Assert.throwEx("编码不可重复");
}
BmsChannelPoint orgData = this.getById(channelPoint.getId()); BmsChannelPoint orgData = this.getById(channelPoint.getId());
sysBusinessLogService.buildLog4Change(BusinessLogType.Point, sysBusinessLogService.buildLog4Change(BusinessLogType.Point,
channelPoint.getId()+"",channelPoint.getPointCode(),channelPoint.getPointName(),null,orgData,channelPoint); channelPoint.getId()+"",channelPoint.getPointCode(),channelPoint.getPointName(),null,orgData,channelPoint);

4
src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java

@ -254,6 +254,8 @@ public class BmsSupplierServiceImpl extends ServiceImpl<BmsSupplierMapper,BmsSup
for (int i = 0; i < regionIds.length; i++) { for (int i = 0; i < regionIds.length; i++) {
if(i==0){ if(i==0){
supplier.setRegionFirst(regionIds[i]); supplier.setRegionFirst(regionIds[i]);
supplier.setRegionSecond(regionIds[i]);
supplier.setRegionThird(regionIds[i]);
}else if(i==1){ }else if(i==1){
supplier.setRegionSecond(regionIds[i]); supplier.setRegionSecond(regionIds[i]);
}else if(i==2){ }else if(i==2){
@ -289,6 +291,8 @@ public class BmsSupplierServiceImpl extends ServiceImpl<BmsSupplierMapper,BmsSup
for (int i = 0; i < regionIds.length; i++) { for (int i = 0; i < regionIds.length; i++) {
if(i==0){ if(i==0){
supplier.setRegion2First(regionIds[i]); supplier.setRegion2First(regionIds[i]);
supplier.setRegion2Second(regionIds[i]);
supplier.setRegion2Third(regionIds[i]);
}else if(i==1){ }else if(i==1){
supplier.setRegion2Second(regionIds[i]); supplier.setRegion2Second(regionIds[i]);
}else if(i==2){ }else if(i==2){

11
src/main/java/com/qs/serve/modules/goods/controller/GoodsAccreditController.java

@ -49,6 +49,17 @@ public class GoodsAccreditController {
return R.ok(data); return R.ok(data);
} }
/**
* 辅助查询
* @param query
* @return
*/
@GetMapping("/getAllList")
public R<List<GoodsAccreditResult>> getAllList(GoodsAccreditQuery query){
List<GoodsAccreditResult> data = goodsAccreditService.queryList(query);
return R.ok(data);
}
/** /**
* ID查询 * ID查询
* @param cateId * @param cateId

2
src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java

@ -350,7 +350,7 @@ public class GoodsSkuController {
}else if (SAVE.equals(opt)){ }else if (SAVE.equals(opt)){
//保存 //保存
if(sku!=null){ if(sku!=null){
skuItem.setErrMsg(skuItem.getErrMsg()==null?"已保存,新增失败;":skuItem.getErrMsg()+"\n已保存,新增失败;"); skuItem.setErrMsg(skuItem.getErrMsg()==null?"编码重复,新增失败;":skuItem.getErrMsg()+"\n编码重复,新增失败;");
throwEx = true; throwEx = true;
continue; continue;
} }

25
src/main/java/com/qs/serve/modules/goods/controller/GoodsSpuController.java

@ -3,6 +3,7 @@ package com.qs.serve.modules.goods.controller;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.qs.serve.common.config.DevEnvironmentConfig; import com.qs.serve.common.config.DevEnvironmentConfig;
import com.qs.serve.common.model.annotation.SysLog; import com.qs.serve.common.model.annotation.SysLog;
import com.qs.serve.common.model.dto.PageVo; import com.qs.serve.common.model.dto.PageVo;
@ -123,6 +124,21 @@ public class GoodsSpuController {
return R.ok(result); return R.ok(result);
} }
/**
* 更新spu下单状态
* @param spuCode
* @param state
* @return
*/
@PutMapping("/orderState/{spuCode}/{state}")
public R<?> updateOrderState(@PathVariable("spuCode")String spuCode,
@PathVariable("state") Integer state){
boolean ok = goodsSpuService.update(new LambdaUpdateWrapper<GoodsSpu>()
.eq(GoodsSpu::getSpuCode,spuCode).set(GoodsSpu::getOrderFlag,state));
return R.isTrue(ok);
}
/** /**
* spu下单查询 * spu下单查询
* @param param * @param param
@ -627,7 +643,14 @@ public class GoodsSpuController {
isError = true; isError = true;
item.setErrMsg("SKU编码不存在"); item.setErrMsg("SKU编码不存在");
} }
long count = goodsSpuService.count(new LambdaQueryWrapper<GoodsSpu>()
.eq(GoodsSpu::getName,item.getName())
.ne(GoodsSpu::getSpuCode,spuCode)
);
if(count>0){
isError = true;
item.setErrMsg("SKU名称已存在");
}
} }
if(isError){ if(isError){

3
src/main/java/com/qs/serve/modules/goods/entity/GoodsSpu.java

@ -209,6 +209,9 @@ public class GoodsSpu implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private String skuName; private String skuName;
@TableField(exist = false)
private String skuBelong;
@TableField(exist = false) @TableField(exist = false)
private String belong; private String belong;

2
src/main/java/com/qs/serve/modules/goods/service/GoodsAccreditService.java

@ -24,6 +24,8 @@ public interface GoodsAccreditService extends IService<GoodsAccredit> {
PageVo<GoodsAccreditResult> queryPage(GoodsAccreditQuery query); PageVo<GoodsAccreditResult> queryPage(GoodsAccreditQuery query);
List<GoodsAccreditResult> queryList(GoodsAccreditQuery query);
void modify(GoodsAccreditBo param); void modify(GoodsAccreditBo param);
GoodsAccreditVo getById(String cateId, String spuId, String skuId); GoodsAccreditVo getById(String cateId, String spuId, String skuId);

167
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsAccreditServiceImpl.java

@ -59,6 +59,98 @@ public class GoodsAccreditServiceImpl extends ServiceImpl<GoodsAccreditMapper,Go
@Override @Override
public PageVo<GoodsAccreditResult> queryPage(GoodsAccreditQuery query) { public PageVo<GoodsAccreditResult> queryPage(GoodsAccreditQuery query) {
initAccreditQuery(query);
PageUtil.startPage();
List<GoodsAccreditExt> list = super.baseMapper.queryUnionPage(query);
List<GoodsAccreditResult> results = getGoodsAccreditResults(list);
return R.byPageHelperList(list,results).getData();
}
@Override
public List<GoodsAccreditResult> queryList(GoodsAccreditQuery query) {
initAccreditQuery(query);
List<GoodsAccreditExt> list = super.baseMapper.queryUnionPage(query);
List<GoodsAccreditResult> results = getGoodsAccreditResults(list);
return results;
}
private List<GoodsAccreditResult> getGoodsAccreditResults(List<GoodsAccreditExt> list) {
List<GoodsAccreditResult> results = list.stream().map(ext->{
if (ext.getUnionType().equals("accredit")){
GoodsAccreditResult result = new GoodsAccreditResult();
result.setId("goods"+ext.getId());
result.setRuleType("goods");
if(ext.getCategoryId()!=null){
result.setGoodType("category");
}else if (ext.getSpuId()!=null){
result.setGoodType("spu");
}else {
result.setGoodType("sku");
}
result.setCode(ext.getCode());
result.setName(ext.getName());
result.setAccType(ext.getAccType().equals(0)?"in":"notIn");
if(ext.getTargetType().equals("0")){
result.setTargetType("supplier");
}else if (ext.getTargetType().equals("1")){
result.setTargetType("bizRegion");
}else if (ext.getTargetType().equals("2")){
result.setTargetType("saleRegion");
}else {
result.setTargetType(ext.getTargetType());
}
result.setTargetCode(ext.getTargetCode());
result.setTargetName(ext.getTargetName());
result.setTargetId(ext.getTargetId());
result.setCreateTime(ext.getCreateTime());
result.setCreateUser(ext.getCreateUser());
result.setCreateUserCode(ext.getCreateUserCode());
return result;
}else {
GoodsAccreditResult result = new GoodsAccreditResult();
result.setId("supplier"+ext.getId());
result.setRuleType("supplier");
if(ext.getUserId()!=null) {
result.setTargetType("user");
}else if(ext.getSaleRegionId()!=null){
result.setTargetType("saleRegion");
}else if (ext.getBizRegionId()!=null){
result.setTargetType("bizRegion");
}else {
result.setTargetType("supplier");
}
result.setCode(ext.getCode());
result.setName(ext.getName());
if(ext.getTargetType().equals("1")){
result.setAccType("in");
result.setGoodType("category");
}else if (ext.getTargetType().equals("2")){
result.setAccType("notIn");
result.setGoodType("category");
}else if (ext.getTargetType().equals("3")){
result.setAccType("in");
result.setGoodType("spu");
}else {
result.setAccType("notIn");
result.setGoodType("spu");
}
result.setTargetId(ext.getId()+"");
//result.setTargetType(ext.getTargetType());
result.setTargetCode(ext.getTargetCode());
result.setTargetName(ext.getTargetName());
result.setCreateTime(ext.getCreateTime());
result.setCreateUser(ext.getCreateUser());
result.setCreateUserCode(ext.getCreateUserCode());
return result;
}
}).collect(Collectors.toList());
return results;
}
private void initAccreditQuery(GoodsAccreditQuery query) {
String productCode = query.getCode(); String productCode = query.getCode();
String productName = query.getName(); String productName = query.getName();
String targetCode = query.getTargetCode(); String targetCode = query.getTargetCode();
@ -175,81 +267,6 @@ public class GoodsAccreditServiceImpl extends ServiceImpl<GoodsAccreditMapper,Go
query.setTargetCodeList(targetCodes); query.setTargetCodeList(targetCodes);
} }
PageUtil.startPage();
List<GoodsAccreditExt> list = super.baseMapper.queryUnionPage(query);
List<GoodsAccreditResult> results = list.stream().map(ext->{
if (ext.getUnionType().equals("accredit")){
GoodsAccreditResult result = new GoodsAccreditResult();
result.setId("goods"+ext.getId());
result.setRuleType("goods");
if(ext.getCategoryId()!=null){
result.setGoodType("category");
}else if (ext.getSpuId()!=null){
result.setGoodType("spu");
}else {
result.setGoodType("sku");
}
result.setCode(ext.getCode());
result.setName(ext.getName());
result.setAccType(ext.getAccType().equals(0)?"in":"notIn");
if(ext.getTargetType().equals("0")){
result.setTargetType("supplier");
}else if (ext.getTargetType().equals("1")){
result.setTargetType("bizRegion");
}else if (ext.getTargetType().equals("2")){
result.setTargetType("saleRegion");
}else {
result.setTargetType(ext.getTargetType());
}
result.setTargetCode(ext.getTargetCode());
result.setTargetName(ext.getTargetName());
result.setTargetId(ext.getTargetId());
result.setCreateTime(ext.getCreateTime());
result.setCreateUser(ext.getCreateUser());
result.setCreateUserCode(ext.getCreateUserCode());
return result;
}else {
GoodsAccreditResult result = new GoodsAccreditResult();
result.setId("supplier"+ext.getId());
result.setRuleType("supplier");
if(ext.getUserId()!=null) {
result.setTargetType("user");
}else if(ext.getSaleRegionId()!=null){
result.setTargetType("saleRegion");
}else if (ext.getBizRegionId()!=null){
result.setTargetType("bizRegion");
}else {
result.setTargetType("supplier");
}
result.setCode(ext.getCode());
result.setName(ext.getName());
if(ext.getTargetType().equals("1")){
result.setAccType("in");
result.setGoodType("category");
}else if (ext.getTargetType().equals("2")){
result.setAccType("notIn");
result.setGoodType("category");
}else if (ext.getTargetType().equals("3")){
result.setAccType("in");
result.setGoodType("spu");
}else {
result.setAccType("notIn");
result.setGoodType("spu");
}
result.setTargetId(ext.getId()+"");
//result.setTargetType(ext.getTargetType());
result.setTargetCode(ext.getTargetCode());
result.setTargetName(ext.getTargetName());
result.setCreateTime(ext.getCreateTime());
result.setCreateUser(ext.getCreateUser());
result.setCreateUserCode(ext.getCreateUserCode());
return result;
}
}).collect(Collectors.toList());
return R.byPageHelperList(list,results).getData();
} }
@Override @Override

13
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSkuServiceImpl.java

@ -273,6 +273,19 @@ public class GoodsSkuServiceImpl extends ServiceImpl<GoodsSkuMapper,GoodsSku> im
goodsSku.setId(dbGoodSku.getId()); goodsSku.setId(dbGoodSku.getId());
} }
//code必须唯一
Long goodsSkuId = null;
if(dbGoodSku!=null){
goodsSkuId = dbGoodSku.getId();
}
Long countCode = super.getBaseMapper().selectCount(new LambdaQueryWrapper<GoodsSku>()
.ne(GoodsSku::getId,goodsSkuId)
.eq(GoodsSku::getSkuCode,goodSkuVo.getSkuCode())
);
if(countCode>0L){
Assert.throwEx("编码必须唯一");
}
//拓展spu //拓展spu
GoodsSpu goodsSpu = goodsSpuMapper.selectById(goodsSku.getSpuId()); GoodsSpu goodsSpu = goodsSpuMapper.selectById(goodsSku.getSpuId());
if(goodsSpu==null){ if(goodsSpu==null){

17
src/main/java/com/qs/serve/modules/goods/service/impl/GoodsSpuServiceImpl.java

@ -167,13 +167,24 @@ public class GoodsSpuServiceImpl extends ServiceImpl<GoodsSpuMapper,GoodsSpu> im
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public GoodsSpu editTasteSpu(GoodsSpuBo param) { public GoodsSpu editTasteSpu(GoodsSpuBo param) {
GoodsSpu spu = CopierUtil.copy(param,new GoodsSpu()); GoodsSpu spu = CopierUtil.copy(param,new GoodsSpu());
if(param.getId()!=null){
spu.setSpuCode(null);
}
if(StringUtils.hasText(param.getCategoryId())){ if(StringUtils.hasText(param.getCategoryId())){
GoodsCategory category = goodsCategoryService.getById(param.getCategoryId()); GoodsCategory category = goodsCategoryService.getById(param.getCategoryId());
relateCate(spu,category); relateCate(spu,category);
} }
Long count = super.baseMapper.selectCount(new LambdaQueryWrapper<GoodsSpu>()
.ne(param.getId()!=null,GoodsSpu::getId,param.getId())
.eq(GoodsSpu::getSpuCode,param.getSpuCode())
);
if(count>0){
Assert.throwEx("编码不可重复");
}
Long count2 = super.baseMapper.selectCount(new LambdaQueryWrapper<GoodsSpu>()
.ne(param.getId()!=null,GoodsSpu::getId,param.getId())
.eq(GoodsSpu::getName,param.getName())
);
if(count2>0){
Assert.throwEx("名称不可重复");
}
this.saveOrUpdate(spu); this.saveOrUpdate(spu);
insertSpuSpec(spu.getId()); insertSpuSpec(spu.getId());
return spu; return spu;

17
src/main/java/com/qs/serve/modules/his/entity/HisUserSupplier.java

@ -125,6 +125,17 @@ public class HisUserSupplier implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private LocalDateTime cooperatePauseFlagDate; private LocalDateTime cooperatePauseFlagDate;
/** 统计维护的地址数量 */
@TableField(exist = false)
private Integer countAddr;
/**
* 查询维护的地址
* countAddrFlag=0 表示未维护的收货地址
* countAddrFlag=1 表示已维护的收货地址
*/
@TableField(exist = false)
private Integer countAddrFlag;
@TableField(exist = false) @TableField(exist = false)
private String queryAddress; private String queryAddress;
@ -135,6 +146,12 @@ public class HisUserSupplier implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private List<String> selectUserIds; private List<String> selectUserIds;
/**
* 对应是supplierFlag
*/
@TableField(exist = false)
private List<Integer> selectSupplierTypes;
@TableField(exist = false) @TableField(exist = false)
private String addressId; private String addressId;

13
src/main/java/com/qs/serve/modules/his/entity/HisUserSupplierTemp.java

@ -111,6 +111,19 @@ public class HisUserSupplierTemp implements Serializable {
/** 闭户 */ /** 闭户 */
private Integer stopFlag; private Integer stopFlag;
/** 统计维护的地址数量 */
@TableField(exist = false)
private Integer countAddr;
/**
* 查询维护的地址
* countAddrFlag=0 表示未维护的收货地址
* countAddrFlag=1 表示已维护的收货地址
*/
@TableField(exist = false)
private Integer countAddrFlag;
/** 闭户日期 */ /** 闭户日期 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

5
src/main/java/com/qs/serve/modules/his/mapper/HisUserSupplierMapper.java

@ -1,6 +1,8 @@
package com.qs.serve.modules.his.mapper; package com.qs.serve.modules.his.mapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.qs.serve.modules.bms.entity.so.BmsSupplierVisitSo; import com.qs.serve.modules.bms.entity.so.BmsSupplierVisitSo;
import com.qs.serve.modules.his.entity.HisUserSupplier; import com.qs.serve.modules.his.entity.HisUserSupplier;
import com.qs.serve.modules.his.entity.dto.HisUserSupplierAddressVo; import com.qs.serve.modules.his.entity.dto.HisUserSupplierAddressVo;
@ -15,5 +17,8 @@ public interface HisUserSupplierMapper extends BaseMapper<HisUserSupplier> {
List<HisUserSupplierAddressVo> selectHisUserSupplierAddressList(@Param("query") HisUserSupplier param); List<HisUserSupplierAddressVo> selectHisUserSupplierAddressList(@Param("query") HisUserSupplier param);
List<Long> selectSupplierIdByQuery(@Param("query") HisUserSupplier param,@Param(Constants.WRAPPER) QueryWrapper<HisUserSupplier> lqw);
} }

2
src/main/java/com/qs/serve/modules/his/service/HisUserSupplierService.java

@ -14,7 +14,7 @@ import java.util.List;
*/ */
public interface HisUserSupplierService extends IService<HisUserSupplier> { public interface HisUserSupplierService extends IService<HisUserSupplier> {
List<HisUserSupplier> selectHisSupplier(BmsSupplier param,boolean usePage); List<Long> selectHisSupplier(BmsSupplier param,boolean usePage);
List<BmsSupplier> selectListSupplier(BmsSupplier param); List<BmsSupplier> selectListSupplier(BmsSupplier param);

36
src/main/java/com/qs/serve/modules/his/service/impl/HisUserSupplierServiceImpl.java

@ -51,7 +51,7 @@ public class HisUserSupplierServiceImpl extends ServiceImpl<HisUserSupplierMappe
private RedisService redisService; private RedisService redisService;
@Override @Override
public List<HisUserSupplier> selectHisSupplier(BmsSupplier param, boolean usePage) { public List<Long> selectHisSupplier(BmsSupplier param, boolean usePage) {
if(param==null){ if(param==null){
param = new BmsSupplier(); param = new BmsSupplier();
} }
@ -69,27 +69,29 @@ public class HisUserSupplierServiceImpl extends ServiceImpl<HisUserSupplierMappe
return new ArrayList<>(); return new ArrayList<>();
} }
HisUserSupplier userSupplier = param.toHisUserSupplier(null,null); HisUserSupplier userSupplier = param.toHisUserSupplier(null,null);
userSupplier.setSelectUserIds(userIds);
QueryWrapper<HisUserSupplier> lqw = new QueryWrapper<>(userSupplier); QueryWrapper<HisUserSupplier> lqw = new QueryWrapper<>(userSupplier);
lqw.select("distinct his_user_supplier.supplier_id"); // lqw.select("distinct his_user_supplier.supplier_id");
if(StringUtils.hasText(param.getKeyword())){ // if(StringUtils.hasText(param.getKeyword())){
lqw.lambda().like(HisUserSupplier::getSupplierCode,param.getKeyword()); // lqw.lambda().like(HisUserSupplier::getSupplierCode,param.getKeyword());
lqw.lambda().like(HisUserSupplier::getSupplierName,param.getKeyword()); // lqw.lambda().like(HisUserSupplier::getSupplierName,param.getKeyword());
} // }
if(CollectionUtil.isNotEmpty(param.getSelectSupplierTypes())){ // if(CollectionUtil.isNotEmpty(param.getSelectSupplierTypes())){
lqw.lambda().in(HisUserSupplier::getSupplierFlag,param.getSelectSupplierTypes()); // lqw.lambda().in(HisUserSupplier::getSupplierFlag,param.getSelectSupplierTypes());
} // }
lqw.lambda().in(HisUserSupplier::getUserId,userIds) // lqw.lambda().in(HisUserSupplier::getUserId,userIds)
.ne(HisUserSupplier::getSupplierId,0); // .ne(HisUserSupplier::getSupplierId,0);
if(usePage){ if(usePage){
PageUtil.startPage(); PageUtil.startPage();
} }
return this.list(lqw); return baseMapper.selectSupplierIdByQuery(userSupplier,lqw);
//return this.list(lqw).stream().map(a->a.getSupplierId()).collect(Collectors.toList());
} }
@Override @Override
public List<BmsSupplier> selectListSupplier(BmsSupplier param) { public List<BmsSupplier> selectListSupplier(BmsSupplier param) {
List<HisUserSupplier> hisUserSuppliers = selectHisSupplier(param,false); List<Long> supplierIds = selectHisSupplier(param,false);
List<String> supplierIds = hisUserSuppliers.stream().map(a->a.getSupplierId().toString()).collect(Collectors.toList()); //List<String> supplierIds = hisUserSuppliers.stream().map(a->a.getSupplierId().toString()).collect(Collectors.toList());
if(supplierIds.size()>0) { if(supplierIds.size()>0) {
param.setSearchInIds(supplierIds); param.setSearchInIds(supplierIds);
List<BmsSupplier> supplierList = bmsSupplierService.selectSupplierList(param); List<BmsSupplier> supplierList = bmsSupplierService.selectSupplierList(param);
@ -101,12 +103,12 @@ public class HisUserSupplierServiceImpl extends ServiceImpl<HisUserSupplierMappe
@Override @Override
public PageVo<BmsSupplier> selectPageSupplier(BmsSupplier param) { public PageVo<BmsSupplier> selectPageSupplier(BmsSupplier param) {
List<HisUserSupplier> hisUserSuppliers = selectHisSupplier(param,true); List<Long> supplierIds = selectHisSupplier(param,true);
List<String> supplierIds = hisUserSuppliers.stream().map(a->a.getSupplierId().toString()).collect(Collectors.toList()); //List<String> supplierIds = hisUserSuppliers.stream().map(a->a.getSupplierId().toString()).collect(Collectors.toList());
if(supplierIds.size()>0) { if(supplierIds.size()>0) {
param.setSearchInIds(supplierIds); param.setSearchInIds(supplierIds);
List<BmsSupplier> supplierList = bmsSupplierService.selectSupplierList(param); List<BmsSupplier> supplierList = bmsSupplierService.selectSupplierList(param);
return R.buildPageHelperList(hisUserSuppliers,supplierList); return R.buildPageHelperList(supplierIds,supplierList);
}else{ }else{
return R.buildPageHelperList(new ArrayList<>()); return R.buildPageHelperList(new ArrayList<>());
} }

16
src/main/java/com/qs/serve/modules/oms/controller/api/OmsOrderApi.java

@ -40,6 +40,7 @@ import org.springframework.web.bind.annotation.*;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static com.qs.serve.modules.tbs.common.TbsSeeYonConst.ERP_ORDER_STATUS; import static com.qs.serve.modules.tbs.common.TbsSeeYonConst.ERP_ORDER_STATUS;
@ -170,6 +171,14 @@ public class OmsOrderApi {
addrIds.add(0L); addrIds.add(0L);
List<BmsSupplierAddress> supplierAddressList = bmsSupplierAddressService.listByIds(addrIds); List<BmsSupplierAddress> supplierAddressList = bmsSupplierAddressService.listByIds(addrIds);
List<Long> orderIds = list.stream().map(OmsOrder::getId).collect(Collectors.toList());
orderIds.add(0L);
LambdaQueryWrapper<OmsOrderItem> lqw = new LambdaQueryWrapper<>();
lqw.in(OmsOrderItem::getOrderId,orderIds);
List<OmsOrderItem> allItems = omsOrderItemService.list(lqw);
Map<Long,List<OmsOrderItem>> itemsMap = allItems.stream().collect(Collectors.groupingBy(OmsOrderItem::getOrderId));
for (OmsOrder order : list) { for (OmsOrder order : list) {
omsOrderService.checkMsOrderStatus(order); omsOrderService.checkMsOrderStatus(order);
@ -185,10 +194,7 @@ public class OmsOrderApi {
} }
} }
LambdaQueryWrapper<OmsOrderItem> lqw = new LambdaQueryWrapper<>(); order.setOrderItems(itemsMap.get(order.getId()));
lqw.eq(OmsOrderItem::getOrderId,order.getId());
List<OmsOrderItem> items = omsOrderItemService.list(lqw);
order.setOrderItems(items);
} }
return R.byPageHelperList(list); return R.byPageHelperList(list);
@ -254,6 +260,8 @@ public class OmsOrderApi {
GoodsSku goodsSku = goodsSkuService.getById(orderItem.getSkuId()); GoodsSku goodsSku = goodsSkuService.getById(orderItem.getSkuId());
if(goodsSku!=null){ if(goodsSku!=null){
orderItem.setSkuSpecialFlag(goodsSku.getSpecialFlag()); orderItem.setSkuSpecialFlag(goodsSku.getSpecialFlag());
orderItem.setSkuBelong(goodsSku.getBelong());
orderItem.setSkuAddCode(goodsSku.getSkuAddCode());
} }
} }
omsOrder.setOrderItems(list); omsOrder.setOrderItems(list);

8
src/main/java/com/qs/serve/modules/oms/entity/OmsOrderItem.java

@ -129,6 +129,14 @@ public class OmsOrderItem implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private Object spuInfo; private Object spuInfo;
/** skuBelong */
@TableField(exist = false)
private Object skuBelong;
/** skuBelong */
@TableField(exist = false)
private Object skuAddCode;
/** 分类 */ /** 分类 */
@TableField(exist = false) @TableField(exist = false)
private Object categoryInfo; private Object categoryInfo;

3
src/main/java/com/qs/serve/modules/oms/entity/bo/OmsOrderBo.java

@ -26,6 +26,9 @@ public class OmsOrderBo {
/** 品牌规则ID */ /** 品牌规则ID */
private Long brandRuleId; private Long brandRuleId;
/** CD单据备注 */
private String cdOrderRemark;
/** 购物车ID(购物车方式下单) */ /** 购物车ID(购物车方式下单) */
private List<Long> shoppingCartIds; private List<Long> shoppingCartIds;

3
src/main/java/com/qs/serve/modules/oms/entity/bo/OmsOrderSkuBo.java

@ -34,6 +34,9 @@ public class OmsOrderSkuBo {
/** 立刻下单标识 */ /** 立刻下单标识 */
private Integer instantFlag; private Integer instantFlag;
/** CD单据备注 */
private String cdOrderRemark;
/** 收货地址 */ /** 收货地址 */
private Long addressId; private Long addressId;

1
src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java

@ -445,6 +445,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper,OmsOrder> im
confirmOrder.setLatitudeFrom("SPU"); confirmOrder.setLatitudeFrom("SPU");
confirmOrder.setOrderSource(omsOrderBo.getOrderSource()); confirmOrder.setOrderSource(omsOrderBo.getOrderSource());
CreateOrderParam createOrderParam = omsOrderBo.getCreateOrderParam(); CreateOrderParam createOrderParam = omsOrderBo.getCreateOrderParam();
createOrderParam.setCdOrderRemark(omsOrderBo.getCdOrderRemark());
OmsOrder order = this.buildOmsOrder(confirmOrder, createOrderParam); OmsOrder order = this.buildOmsOrder(confirmOrder, createOrderParam);
if(omsOrderBo.getInstantFlag()!=null&&omsOrderBo.getInstantFlag().equals(1)){ if(omsOrderBo.getInstantFlag()!=null&&omsOrderBo.getInstantFlag().equals(1)){
this.buildPriceOrder(order.getId()+"",null); this.buildPriceOrder(order.getId()+"",null);

96
src/main/java/com/qs/serve/modules/pay/controller/PayPaymentController.java

@ -25,9 +25,13 @@ import com.qs.serve.modules.pay.entity.vo.PaySupplierVo;
import com.qs.serve.modules.pay.mapper.PaySupplierMapper; import com.qs.serve.modules.pay.mapper.PaySupplierMapper;
import com.qs.serve.modules.pay.service.PayPaymentItemService; import com.qs.serve.modules.pay.service.PayPaymentItemService;
import com.qs.serve.modules.sys.entity.SysConfig; import com.qs.serve.modules.sys.entity.SysConfig;
import com.qs.serve.modules.sys.entity.SysSyncLog;
import com.qs.serve.modules.sys.service.SysConfigService; import com.qs.serve.modules.sys.service.SysConfigService;
import com.qs.serve.modules.sys.service.SysPostUserService; import com.qs.serve.modules.sys.service.SysPostUserService;
import com.qs.serve.modules.sys.service.SysSyncLogService;
import com.qs.serve.modules.tbs.mapper.TbsCostApplySumAmountMapper; import com.qs.serve.modules.tbs.mapper.TbsCostApplySumAmountMapper;
import com.qs.serve.modules.third.ThirdTokenUtil;
import com.qs.serve.modules.third.entity.ProcessCreateCostApplyBo;
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;
@ -39,6 +43,7 @@ import com.qs.serve.modules.pay.entity.bo.PayPaymentBo;
import com.qs.serve.modules.pay.entity.PayPayment; import com.qs.serve.modules.pay.entity.PayPayment;
import com.qs.serve.modules.pay.service.PayPaymentService; import com.qs.serve.modules.pay.service.PayPaymentService;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid; import javax.validation.Valid;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
@ -63,6 +68,7 @@ public class PayPaymentController {
private PaySupplierMapper paySupplierMapper; private PaySupplierMapper paySupplierMapper;
private DateCheckApplyService dateCheckApplyService; private DateCheckApplyService dateCheckApplyService;
private SysConfigService configService; private SysConfigService configService;
private SysSyncLogService sysSyncLogService;
/** /**
* 客户费用列表 * 客户费用列表
@ -228,9 +234,27 @@ public class PayPaymentController {
@PostMapping("/unPayment") @PostMapping("/unPayment")
@SysLog(module = SystemModule.Payment, title = "支付", biz = BizType.INSERT) @SysLog(module = SystemModule.Payment, title = "支付", biz = BizType.INSERT)
@PreAuthorize("hasRole('pay:payment:pay')") @PreAuthorize("hasRole('pay:payment:pay')")
public R<PayPayment> unPayment(@RequestBody @Valid PayPaymentBo param){ public R<PayPayment> unPayment(@RequestBody @Valid PayPaymentBo param, HttpServletRequest request){
PayPayment payPayment = payPaymentService.unpayment(param); SysSyncLog syncLog = new SysSyncLog();
return R.ok(payPayment); syncLog.setFromPlat("新增不再支付");
syncLog.setUrl(request.getRequestURI());
syncLog.setRequestJson(JsonUtil.objectToJson(param));
syncLog.setEntityClass(ProcessCreateCostApplyBo.class.getName());
PayPayment payPayment = null;
try {
payPayment = payPaymentService.unpayment(param);
syncLog.setSuccessStatus(1);
} catch (Exception e) {
syncLog.setFailReason(e.getMessage());
sysSyncLogService.save(syncLog);
return R.error(e.getMessage());
}
sysSyncLogService.save(syncLog);
if(syncLog.getSuccessStatus()!=null&&syncLog.getSuccessStatus().equals(1)){
return R.ok(payPayment);
}
return R.error("新增不再支付异常");
} }
@ -242,9 +266,25 @@ public class PayPaymentController {
@PostMapping("/cancelUnPayment") @PostMapping("/cancelUnPayment")
@SysLog(module = SystemModule.Payment, title = "支付", biz = BizType.INSERT) @SysLog(module = SystemModule.Payment, title = "支付", biz = BizType.INSERT)
@PreAuthorize("hasRole('pay:payment:pay')") @PreAuthorize("hasRole('pay:payment:pay')")
public R<PayPayment> cancelUnPayment(@RequestBody String verificationCode){ public R<PayPayment> cancelUnPayment(@RequestBody String verificationCode, HttpServletRequest request){
payPaymentService.cancelUnPayment(verificationCode); SysSyncLog syncLog = new SysSyncLog();
return R.ok(); syncLog.setFromPlat("取消不再支付");
syncLog.setUrl(request.getRequestURI());
syncLog.setRemark(verificationCode);
syncLog.setEntityClass(ProcessCreateCostApplyBo.class.getName());
try {
payPaymentService.cancelUnPayment(verificationCode);
syncLog.setSuccessStatus(1);
} catch (Exception e) {
syncLog.setFailReason(e.getMessage());
sysSyncLogService.save(syncLog);
return R.error(e.getMessage());
}
sysSyncLogService.save(syncLog);
if(syncLog.getSuccessStatus()!=null&&syncLog.getSuccessStatus().equals(1)){
return R.ok();
}
return R.error("取消不再支付异常");
} }
/** /**
@ -255,9 +295,26 @@ public class PayPaymentController {
@PostMapping("/save") @PostMapping("/save")
@SysLog(module = SystemModule.Payment, title = "支付", biz = BizType.INSERT) @SysLog(module = SystemModule.Payment, title = "支付", biz = BizType.INSERT)
@PreAuthorize("hasRole('pay:payment:pay')") @PreAuthorize("hasRole('pay:payment:pay')")
public R<PayPayment> save(@RequestBody @Valid PayPaymentBo param){ public R<PayPayment> save(@RequestBody @Valid PayPaymentBo param, HttpServletRequest request){
PayPayment payPayment = payPaymentService.payment(param); SysSyncLog syncLog = new SysSyncLog();
return R.ok(payPayment); syncLog.setFromPlat("新增支付");
syncLog.setUrl(request.getRequestURI());
syncLog.setRequestJson(JsonUtil.objectToJson(param));
syncLog.setEntityClass(ProcessCreateCostApplyBo.class.getName());
PayPayment payPayment = null;
try {
payPayment = payPaymentService.payment(param);
syncLog.setSuccessStatus(1);
} catch (Exception e) {
syncLog.setFailReason(e.getMessage());
sysSyncLogService.save(syncLog);
return R.error(e.getMessage());
}
sysSyncLogService.save(syncLog);
if(syncLog.getSuccessStatus()!=null&&syncLog.getSuccessStatus().equals(1)){
return R.ok(payPayment);
}
return R.error("新增支付异常");
} }
/** /**
@ -268,9 +325,24 @@ public class PayPaymentController {
@RequestMapping(value = "/cancel/{id}",method = {RequestMethod.GET,RequestMethod.DELETE}) @RequestMapping(value = "/cancel/{id}",method = {RequestMethod.GET,RequestMethod.DELETE})
@SysLog(module = SystemModule.Payment, title = "取消支付", biz = BizType.DELETE) @SysLog(module = SystemModule.Payment, title = "取消支付", biz = BizType.DELETE)
@PreAuthorize("hasRole('pay:payment:cancel')") @PreAuthorize("hasRole('pay:payment:cancel')")
public R<?> cancelById(@PathVariable("id") String erpId){ public R<?> cancelById(@PathVariable("id") String erpId, HttpServletRequest request){
payPaymentService.cancel(erpId); SysSyncLog syncLog = new SysSyncLog();
return R.ok(); syncLog.setFromPlat("取消支付");
syncLog.setUrl(request.getRequestURI());
syncLog.setEntityClass(ProcessCreateCostApplyBo.class.getName());
try {
payPaymentService.cancel(erpId);
syncLog.setSuccessStatus(1);
} catch (Exception e) {
syncLog.setFailReason(e.getMessage());
sysSyncLogService.save(syncLog);
return R.error(e.getMessage());
}
sysSyncLogService.save(syncLog);
if(syncLog.getSuccessStatus()!=null&&syncLog.getSuccessStatus().equals(1)){
return R.ok();
}
return R.error("取消支付异常");
} }
} }

2
src/main/java/com/qs/serve/modules/pay/service/impl/PayPaymentServiceImpl.java

@ -135,7 +135,7 @@ public class PayPaymentServiceImpl extends ServiceImpl<PayPaymentMapper,PayPayme
LambdaQueryWrapper<PayPaymentItem> lambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<PayPaymentItem> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(PayPaymentItem::getVerificationId,vtb.getId()); lambdaQueryWrapper.eq(PayPaymentItem::getVerificationId,vtb.getId());
List<PayPaymentItem> payPaymentItemList = paymentItemService.list(lambdaQueryWrapper); List<PayPaymentItem> payPaymentItemList = paymentItemService.list(lambdaQueryWrapper);
BigDecimal usedAmount = payPaymentItemList.stream().map(a->a.getItemPayAmount()).reduce(BigDecimal.ZERO,BigDecimal::add); BigDecimal usedAmount = payPaymentItemList.stream().map(PayPaymentItem::getItemPayAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
if(usedAmount==null){ if(usedAmount==null){
usedAmount = BigDecimal.ZERO; usedAmount = BigDecimal.ZERO;
} }

8
src/main/java/com/qs/serve/modules/seeyon/service/SeeYonRequestService.java

@ -84,6 +84,14 @@ public interface SeeYonRequestService {
*/ */
SyAffairStateResult checkAffairState(String targetId,String templateCode); SyAffairStateResult checkAffairState(String targetId,String templateCode);
/**
* 检验协议类编码是否存在
* @param templateCode
* @return
*/
Boolean checkConstCodeExist(String templateCode);
/** /**
* 校验OA节点状态用于调整校验 * 校验OA节点状态用于调整校验
* @param key * @param key

14
src/main/java/com/qs/serve/modules/seeyon/service/impl/SeeYonRequestServiceImpl.java

@ -25,6 +25,8 @@ import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static com.qs.serve.modules.tbs.common.TbsSeeYonConst.API_PROCESS_GET_CONST;
/** /**
* @author YenHex * @author YenHex
* @since 2022/11/30 * @since 2022/11/30
@ -164,6 +166,18 @@ public class SeeYonRequestServiceImpl implements SeeYonRequestService {
return getSyAffairStateResult(title, param); return getSyAffairStateResult(title, param);
} }
@Override
public Boolean checkConstCodeExist(String templateCode) {
R<String> result = seeYonRequestBaseService.getBase(API_PROCESS_GET_CONST+"?costCode="+templateCode,"API_PROCESS_GET_CONST");
if(result.getStatus()==200){
String resultString = result.getData();
if(resultString.contains("ok")){
return true;
}
}
return false;
}
@Override @Override
public SyAffairStateResult checkAffairState(String key, String memberId, String templateCode) { public SyAffairStateResult checkAffairState(String key, String memberId, String templateCode) {
String title = "【校验OA节点状态】"; String title = "【校验OA节点状态】";

20
src/main/java/com/qs/serve/modules/sys/service/impl/SysDeleteLogServiceImpl.java

@ -3,13 +3,11 @@ import java.time.LocalDateTime;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.*;
import com.qs.serve.common.util.HttpUtil;
import com.qs.serve.common.util.IdUtil;
import com.qs.serve.common.util.JsonUtil;
import com.qs.serve.modules.bir.consts.BirActivityCenterGoodsUtil; import com.qs.serve.modules.bir.consts.BirActivityCenterGoodsUtil;
import com.qs.serve.modules.bms.entity.BmsSupplier; import com.qs.serve.modules.bms.entity.BmsSupplier;
import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; import com.qs.serve.modules.bms.mapper.BmsSupplierMapper;
import com.qs.serve.modules.seeyon.service.SeeYonRequestService;
import com.qs.serve.modules.sys.entity.dto.CostDeletion; import com.qs.serve.modules.sys.entity.dto.CostDeletion;
import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.entity.TbsCostApply;
import com.qs.serve.modules.tbs.entity.TbsCostTodo; import com.qs.serve.modules.tbs.entity.TbsCostTodo;
@ -45,11 +43,16 @@ public class SysDeleteLogServiceImpl extends ServiceImpl<SysDeleteLogMapper,SysD
private final VtbVerificationMapper verificationMapper; private final VtbVerificationMapper verificationMapper;
private final TbsCostTodoMapper tbsCostTodoMapper; private final TbsCostTodoMapper tbsCostTodoMapper;
private final BmsSupplierMapper supplierMapper; private final BmsSupplierMapper supplierMapper;
private final SeeYonRequestService seeYonService;
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void deleteCostApply(Long costApplyId,String remark) { public void deleteCostApply(Long costApplyId,String remark) {
if(!StringUtils.hasText(remark)||remark.length()<6){
Assert.throwEx("请详细注明删除备注");
}
TbsCostApply costApply = tbsCostApplyMapper.selectById(costApplyId); TbsCostApply costApply = tbsCostApplyMapper.selectById(costApplyId);
BmsSupplier supplier = supplierMapper.selectById(costApply.getSupplierId()); BmsSupplier supplier = supplierMapper.selectById(costApply.getSupplierId());
@ -65,6 +68,13 @@ public class SysDeleteLogServiceImpl extends ServiceImpl<SysDeleteLogMapper,SysD
deleteLogList.add(deleteLog); deleteLogList.add(deleteLog);
} }
if(costApply.getContractFlag().equals(1)){
boolean checkExist = seeYonService.checkConstCodeExist(costApply.getCode());
if(!checkExist){
Assert.throwEx("流程在OA已存在,优先删除OA数据,再调用该接口");
}
}
//远程删除ERP //远程删除ERP
String url = "http://59.37.164.96:2505/api/cms/cost/deletion"; String url = "http://59.37.164.96:2505/api/cms/cost/deletion";
CostDeletion costDeletion = new CostDeletion(); CostDeletion costDeletion = new CostDeletion();
@ -108,6 +118,8 @@ public class SysDeleteLogServiceImpl extends ServiceImpl<SysDeleteLogMapper,SysD
tbsCostApplyRemoveMapper.pay_payment(costApplyId); tbsCostApplyRemoveMapper.pay_payment(costApplyId);
tbsCostApplyRemoveMapper.pay_payment_item(costApplyId); tbsCostApplyRemoveMapper.pay_payment_item(costApplyId);
tbsCostApplyRemoveMapper.tbs_budget_log(costApplyId); tbsCostApplyRemoveMapper.tbs_budget_log(costApplyId);
//移除CA订单
tbsCostApplyRemoveMapper.tbs_budget_log_policy(costApplyId);
tbsCostApplyRemoveMapper.tbs_budget_cost_item(costApplyId); tbsCostApplyRemoveMapper.tbs_budget_cost_item(costApplyId);
tbsCostApplyRemoveMapper.tbs_budget_cost_item_split(costApplyId); tbsCostApplyRemoveMapper.tbs_budget_cost_item_split(costApplyId);
tbsCostApplyRemoveMapper.vtb_fund_flow(costApplyId); tbsCostApplyRemoveMapper.vtb_fund_flow(costApplyId);

1
src/main/java/com/qs/serve/modules/sys/service/impl/SysPostServiceImpl.java

@ -119,6 +119,7 @@ public class SysPostServiceImpl extends ServiceImpl<SysPostMapper, SysPost> impl
post.setPathIds(pPathId +"_"+post.getId()); post.setPathIds(pPathId +"_"+post.getId());
post.setPathNames(pPathName+"_"+post.getPostName()); post.setPathNames(pPathName+"_"+post.getPostName());
} }
this.updateById(post);
this.toFlushPathIds(post.getId(),post.getPathIds(),post.getPostName()); this.toFlushPathIds(post.getId(),post.getPathIds(),post.getPostName());
} }
} }

2
src/main/java/com/qs/serve/modules/sys/service/impl/SysPostUserServiceImpl.java

@ -44,7 +44,7 @@ public class SysPostUserServiceImpl extends ServiceImpl<SysPostUserMapper,SysPos
for (SysPostUser postUser : postUserList) { for (SysPostUser postUser : postUserList) {
LambdaQueryWrapper<SysPostUser> lqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<SysPostUser> lqw = new LambdaQueryWrapper<>();
lqw.likeRight(SysPostUser::getPathIds,postUser.getPathIds()+"_"); lqw.likeRight(SysPostUser::getPathIds,postUser.getPathIds()+"_");
lqw.select(SysPostUser::getUserId,SysPostUser::getId); //lqw.select(SysPostUser::getUserId,SysPostUser::getId);
List<SysPostUser> sysPostUsers = this.list(lqw); List<SysPostUser> sysPostUsers = this.list(lqw);
for (SysPostUser childUser : sysPostUsers) { for (SysPostUser childUser : sysPostUsers) {
userIdSet.add(childUser.getUserId()); userIdSet.add(childUser.getUserId());

1
src/main/java/com/qs/serve/modules/tbs/common/TbsSeeYonConst.java

@ -68,6 +68,7 @@ public interface TbsSeeYonConst {
String API_TEST = "/testConnection"; String API_TEST = "/testConnection";
String API_PROCESS_CREATE = "/process/create"; String API_PROCESS_CREATE = "/process/create";
String API_PROCESS_GET_CONST = "/process/getConst";
String API_PROCESS_CREATE_NEW = "/process/newCreate"; String API_PROCESS_CREATE_NEW = "/process/newCreate";
String API_PROCESS_CREATE_CALLBACK = "/process/createCallback"; String API_PROCESS_CREATE_CALLBACK = "/process/createCallback";
String API_PROCESS_COMMIT = "/process/commit"; String API_PROCESS_COMMIT = "/process/commit";

3
src/main/java/com/qs/serve/modules/tbs/common/util/TbsBudgetLogBuildUtil.java

@ -62,7 +62,8 @@ public class TbsBudgetLogBuildUtil {
* @param activity * @param activity
* @return * @return
*/ */
public static TbsBudgetLog buildTbsBudgetLog(BudgetLogOptFlag optType, SysUser sysUser, TbsCostApply costApply, TbsBudgetCostItem item, TbsBudget budget, BigDecimal amount, TbsActivity activity) { public static TbsBudgetLog buildTbsBudgetLog(BudgetLogOptFlag optType, SysUser sysUser, TbsCostApply costApply,
TbsBudgetCostItem item, TbsBudget budget, BigDecimal amount, TbsActivity activity) {
TbsBudgetLog budgetLog = new TbsBudgetLog(); TbsBudgetLog budgetLog = new TbsBudgetLog();
budgetLog.setBudgetId(item.getBudgetId()); budgetLog.setBudgetId(item.getBudgetId());
budgetLog.setBudgetCode(budget.getBudgetCode()); budgetLog.setBudgetCode(budget.getBudgetCode());

20
src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java

@ -99,6 +99,23 @@ public class TbsActivityController {
private final TbsCostApplyPart1Service tbsCostApplyPart1Service; private final TbsCostApplyPart1Service tbsCostApplyPart1Service;
private SysAttachService attachService; private SysAttachService attachService;
TbsActivityDebugApplicationService tbsActivityDebugApplicationService;
@GetMapping("/reset/{id}")
public R<?> reset(@PathVariable("id") Long id){
tbsActivityDebugApplicationService.reset(id);
return R.ok();
}
@GetMapping("/resetList")
public R<?> reset(){
Long[] ids = new Long[]{
};
for (Long id : ids) {
System.out.println(tbsActivityDebugApplicationService.reset(id));
}
return R.ok();
}
/** /**
* 列表 * 列表
@ -518,6 +535,7 @@ public class TbsActivityController {
public R<TbsActivityDefaultCenterVo> getDefaultCenter(@RequestBody TbsActivityDefaultCenterBo defaultCenterBo){ public R<TbsActivityDefaultCenterVo> getDefaultCenter(@RequestBody TbsActivityDefaultCenterBo defaultCenterBo){
String goodsType = defaultCenterBo.getActivityGoodsType(); String goodsType = defaultCenterBo.getActivityGoodsType();
List<Long> goodsIds = defaultCenterBo.getGoodsIds(); List<Long> goodsIds = defaultCenterBo.getGoodsIds();
goodsIds = goodsIds.stream().filter(Objects::nonNull).collect(Collectors.toList());
Long subjectId = defaultCenterBo.getSubjectId(); Long subjectId = defaultCenterBo.getSubjectId();
Long supplierId = defaultCenterBo.getSupplierId(); Long supplierId = defaultCenterBo.getSupplierId();
BmsSupplier supplier = bmsSupplierService.getById(supplierId); BmsSupplier supplier = bmsSupplierService.getById(supplierId);
@ -555,7 +573,7 @@ public class TbsActivityController {
} }
} }
} }
List<Long> budgetIds = budgetList.stream().map(a->a.getId()).collect(Collectors.toList()); List<Long> budgetIds = budgetList.stream().map(TbsBudget::getId).collect(Collectors.toList());
LambdaQueryWrapper<TbsBudgetCondition> lqwCon = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TbsBudgetCondition> lqwCon = new LambdaQueryWrapper<>();
lqwCon.in(TbsBudgetCondition::getBudgetId,budgetIds); lqwCon.in(TbsBudgetCondition::getBudgetId,budgetIds);
List<TbsBudgetCondition> budgetConditionsAll = tbsBudgetConditionService.list(lqwCon); List<TbsBudgetCondition> budgetConditionsAll = tbsBudgetConditionService.list(lqwCon);

23
src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetLogController.java

@ -17,6 +17,7 @@ import com.qs.serve.modules.tbs.entity.so.TbsBudgetSo;
import com.qs.serve.modules.tbs.entity.vo.TbsBudgetVo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetVo;
import com.qs.serve.modules.tbs.mapper.TbsBudgetLogMapper; import com.qs.serve.modules.tbs.mapper.TbsBudgetLogMapper;
import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper;
import com.qs.serve.modules.tbs.service.TbsBudgetReleaseApplicationService;
import com.qs.serve.modules.tbs.service.TbsBudgetService; import com.qs.serve.modules.tbs.service.TbsBudgetService;
import com.qs.serve.modules.tbs.service.TbsScheduleItemBudgetService; import com.qs.serve.modules.tbs.service.TbsScheduleItemBudgetService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -46,6 +47,7 @@ import java.util.stream.Collectors;
@RequestMapping("tbs/budgetLog") @RequestMapping("tbs/budgetLog")
public class TbsBudgetLogController { public class TbsBudgetLogController {
private TbsBudgetReleaseApplicationService tbsBudgetReleaseApplicationService;
private TbsBudgetLogService tbsBudgetLogService; private TbsBudgetLogService tbsBudgetLogService;
private TbsBudgetService tbsBudgetService; private TbsBudgetService tbsBudgetService;
private TbsBudgetLogMapper tbsBudgetLogMapper; private TbsBudgetLogMapper tbsBudgetLogMapper;
@ -53,6 +55,27 @@ public class TbsBudgetLogController {
private TbsScheduleItemBudgetService tbsScheduleItemBudgetService; private TbsScheduleItemBudgetService tbsScheduleItemBudgetService;
private TbsBudgetLogService budgetLogService; private TbsBudgetLogService budgetLogService;
/**
* 修复释放费用
* @return
*/
@GetMapping("/debug")
public R<?> debug(){
//tbsBudgetReleaseApplicationService.check();
return R.ok();
}
/**
* 初始化活动申请费用
* @param activityId
* @return
*/
@GetMapping("/debugActivity")
public R<?> debugActivity(Long activityId){
//tbsBudgetReleaseApplicationService.initHis(activityId);
return R.ok();
}
/** /**
* 翻页 * 翻页
* @param param * @param param

9
src/main/java/com/qs/serve/modules/tbs/controller/TbsCostContractController.java

@ -15,6 +15,7 @@ import com.qs.serve.modules.bms.service.BmsDutyInfoService;
import com.qs.serve.modules.sys.entity.SysAttach; import com.qs.serve.modules.sys.entity.SysAttach;
import com.qs.serve.modules.sys.service.SysAttachService; import com.qs.serve.modules.sys.service.SysAttachService;
import com.qs.serve.modules.tbs.entity.bo.TbsCostContractBo; import com.qs.serve.modules.tbs.entity.bo.TbsCostContractBo;
import com.qs.serve.modules.tbs.service.TbsCostContractApplication;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -41,6 +42,14 @@ public class TbsCostContractController {
private TbsCostContractService tbsCostContractService; private TbsCostContractService tbsCostContractService;
private SysAttachService attachService; private SysAttachService attachService;
private BmsDutyInfoService bmsDutyInfoService; private BmsDutyInfoService bmsDutyInfoService;
private TbsCostContractApplication tbsCostContractApplication;
@GetMapping("resetRelease")
public R<?> getById(){
tbsCostContractApplication.resetState();
return R.ok();
}
/** /**
* 列表 * 列表

22
src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsBudgetCheckingWithAmount.java

@ -0,0 +1,22 @@
package com.qs.serve.modules.tbs.entity.dto;
import lombok.Data;
/**
* @author YenHex
* @since 2024/6/3
*/
@Data
public class TbsBudgetCheckingWithAmount {
private String type;
private String tarId;
private String tarCode;
private String tarTitle;
private String totalAmount;
private String supplierCode;
private String supplierName;
private String userCode;
private String userName;
}

21
src/main/java/com/qs/serve/modules/tbs/entity/so/TbsScheduleItemSearch.java

@ -28,6 +28,11 @@ public class TbsScheduleItemSearch {
*/ */
private List<String> scheduleItemIds; private List<String> scheduleItemIds;
/**
* 周期项的预算ID用于查询`审批中`的使用情况
*/
private List<Long> scheduleItemBudgetIds;
/** /**
* 品牌ID * 品牌ID
*/ */
@ -56,4 +61,20 @@ public class TbsScheduleItemSearch {
} }
} }
private Integer pageNum;
private Integer pageSize;
/**
* 用于查询预算审批中的数据
*/
private String type;
private String tarCode;
private String tarTitle;
private String supplierCode;
private String supplierName;
private String userCode;
private String userName;
} }

24
src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityChannelPointMapper.java

@ -1,7 +1,10 @@
package com.qs.serve.modules.tbs.mapper; package com.qs.serve.modules.tbs.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tbs.entity.TbsActivityChannelPoint; import com.qs.serve.modules.tbs.entity.TbsActivityChannelPoint;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/** /**
* 活动网点项 Mapper * 活动网点项 Mapper
@ -10,5 +13,26 @@ import com.qs.serve.modules.tbs.entity.TbsActivityChannelPoint;
*/ */
public interface TbsActivityChannelPointMapper extends BaseMapper<TbsActivityChannelPoint> { public interface TbsActivityChannelPointMapper extends BaseMapper<TbsActivityChannelPoint> {
/**
* 检查科目必选网点拦截
* @param activityId
* @return activityId表示被拦截空表示ok
*/
@InterceptorIgnore(tenantLine = "1")
@Select("select tbs_activity_subject.activity_id from tbs_activity_subject " +
"left join bms_subject on subject_id = bms_subject.id " +
"left join ( " +
" select count(1) as count_point,activity_id from tbs_activity_channel_point " +
" where del_flag = 0 and activity_id = #{activityId} " +
" group by activity_id " +
") t1 on t1.activity_id = tbs_activity_subject.activity_id " +
"where " +
" bms_subject.del_flag = 0 " +
"and tbs_activity_subject.del_flag = 0 " +
"and bms_subject.point_select_flag = 1 " +
"and (t1.activity_id is null or t1.count_point = 0) " +
"and tbs_activity_subject.activity_id = #{activityId}")
Long checkSubjectPoint(@Param("activityId") Long activityId);
} }

25
src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityPayConditionMapper.java

@ -1,10 +1,14 @@
package com.qs.serve.modules.tbs.mapper; package com.qs.serve.modules.tbs.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tbs.entity.TbsActivityPayCondition; import com.qs.serve.modules.tbs.entity.TbsActivityPayCondition;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update; import org.apache.ibatis.annotations.Update;
import java.util.List;
/** /**
* 活动支付条件 Mapper * 活动支付条件 Mapper
* @author YenHex * @author YenHex
@ -13,6 +17,27 @@ import org.apache.ibatis.annotations.Update;
public interface TbsActivityPayConditionMapper extends BaseMapper<TbsActivityPayCondition> { public interface TbsActivityPayConditionMapper extends BaseMapper<TbsActivityPayCondition> {
@InterceptorIgnore(tenantLine = "1")
@Select("select " +
"tbs_cost_apply.id " +
" from tbs_cost_apply " +
"left join ( " +
" select cost_apply_id,count(*) as total_contract from tbs_activity_pay_condition " +
" where del_flag = 0 " +
" group by cost_apply_id " +
") t1 on t1.cost_apply_id = tbs_cost_apply.id " +
"left join ( " +
" select cost_apply_id,count(*) as total_vtb from vtb_verification " +
" where del_flag = 0 " +
" group by cost_apply_id " +
") t2 on t2.cost_apply_id = tbs_cost_apply.id " +
"where " +
"tbs_cost_apply.del_flag = 0 " +
"and tbs_cost_apply.charge_state !=3 " +
"and tbs_cost_apply.contract_flag = 1 " +
"and t1.total_contract = t2.total_vtb")
List<Long> getFinishedCostId();
@Update("update `tbs_activity_pay_condition` set pre_notify_time = null where id = #{id}") @Update("update `tbs_activity_pay_condition` set pre_notify_time = null where id = #{id}")
void updateSetNotifyTimeNull(@Param("id")String id); void updateSetNotifyTimeNull(@Param("id")String id);

21
src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivitySubjectMapper.java

@ -2,6 +2,8 @@ package com.qs.serve.modules.tbs.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tbs.entity.TbsActivitySubject; import com.qs.serve.modules.tbs.entity.TbsActivitySubject;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/** /**
* 活动科目项 Mapper * 活动科目项 Mapper
@ -10,5 +12,24 @@ import com.qs.serve.modules.tbs.entity.TbsActivitySubject;
*/ */
public interface TbsActivitySubjectMapper extends BaseMapper<TbsActivitySubject> { public interface TbsActivitySubjectMapper extends BaseMapper<TbsActivitySubject> {
@Select("select \n" +
" count(1) " +
"from tbs_activity \n" +
"left join tbs_cost_apply on tbs_activity.cost_apply_id = tbs_cost_apply.id\n" +
"left join (\n" +
"\tselect activity_id,sum(used_amount) as tal_used,count(1) as count_subject from tbs_activity_subject \n" +
"\twhere del_flag = 0 and activity_id = #{activityId} " +
"\tgroup by activity_id\n" +
") act_info on act_info.activity_id = tbs_activity.id\n" +
"where tbs_activity.del_flag = 0 \n" +
"and tbs_cost_apply.del_flag = 0\n" +
"and tbs_cost_apply.charge_state in (1,2,3,7)\n" +
"and tbs_cost_apply.cancel_flag = 0\n" +
"and tbs_activity.cancel_flag = 0\n" +
"and tbs_activity.release_flag = 1\n" +
"and tbs_activity.id = #{activityId} " +
"and act_info.tal_used != tbs_activity.used_amount ")
Long checkActAndSubjectAmt(@Param("activityId") Long activityId);
} }

17
src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLog2Mapper.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tbs.entity.TbsBudgetLog; import com.qs.serve.modules.tbs.entity.TbsBudgetLog;
import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.entity.TbsCostApply;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCheckingWithAmount;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount;
import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto; import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto;
import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch; import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch;
@ -70,5 +71,21 @@ public interface TbsBudgetLog2Mapper extends BaseMapper<TbsBudgetLog> {
@InterceptorIgnore(tenantLine = "true") @InterceptorIgnore(tenantLine = "true")
List<TbsBudgetLogWithAmount> getCostCheckingList(@Param("selectIds") List<Long> ids,@Param("optNumbers")List<Integer> optNumbers); List<TbsBudgetLogWithAmount> getCostCheckingList(@Param("selectIds") List<Long> ids,@Param("optNumbers")List<Integer> optNumbers);
/**
* 统计审批中的费用占用多少的logs
* @param ids
* @param policyNumbers
* @param costNumbers
* @return
*/
@InterceptorIgnore(tenantLine = "true")
List<TbsBudgetCheckingWithAmount> getBudgetLogCheckingList(
@Param("query")TbsScheduleItemSearch param,
@Param("selectIds") List<Long> ids
,@Param("scheduleItemBudgetIds") List<Long> scheduleItemBudgetIds
, @Param("policyNumbers")List<Integer> policyNumbers
, @Param("costNumbers")List<Integer> costNumbers
);
} }

3
src/main/java/com/qs/serve/modules/tbs/mapper/TbsBudgetLogMapper.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.tbs.mapper; package com.qs.serve.modules.tbs.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tbs.entity.TbsBudgetLog; import com.qs.serve.modules.tbs.entity.TbsBudgetLog;
import com.qs.serve.modules.tbs.entity.TbsCostApply; import com.qs.serve.modules.tbs.entity.TbsCostApply;
@ -67,7 +68,5 @@ public interface TbsBudgetLogMapper extends BaseMapper<TbsBudgetLog> {
" and (total_activity_amount-sum_budget>1 or sum_budget - total_activity_amount>1 )") " and (total_activity_amount-sum_budget>1 or sum_budget - total_activity_amount>1 )")
List<TbsCostApply> selectErrorThirtyCostId(); List<TbsCostApply> selectErrorThirtyCostId();
} }

3
src/main/java/com/qs/serve/modules/tbs/mapper/TbsCostApplyRemoveMapper.java

@ -56,6 +56,9 @@ public interface TbsCostApplyRemoveMapper {
@Update("update tbs_budget_log set del_flag = 1 where cost_apply_id = #{costApplyId}") @Update("update tbs_budget_log set del_flag = 1 where cost_apply_id = #{costApplyId}")
int tbs_budget_log(@Param("costApplyId") Long costId); int tbs_budget_log(@Param("costApplyId") Long costId);
@Update("update tbs_budget_log set del_flag = 1 where create_cost_id = #{costApplyId}")
int tbs_budget_log_policy(@Param("costApplyId") Long costId);
@Update("update tbs_budget_cost_item set del_flag = 1 where cost_apply_id = #{costApplyId}") @Update("update tbs_budget_cost_item set del_flag = 1 where cost_apply_id = #{costApplyId}")
int tbs_budget_cost_item(@Param("costApplyId") Long costId); int tbs_budget_cost_item(@Param("costApplyId") Long costId);

1
src/main/java/com/qs/serve/modules/tbs/mapper/TbsScheduleItemBudgetMapper.java

@ -226,7 +226,6 @@ public interface TbsScheduleItemBudgetMapper extends BaseMapper<TbsScheduleItemB
"tbs_budget_log.del_flag = 0 " + "tbs_budget_log.del_flag = 0 " +
"and tbs_budget.del_flag = 0 " + "and tbs_budget.del_flag = 0 " +
"and tbs_schedule_item_budget.del_flag = 0 " + "and tbs_schedule_item_budget.del_flag = 0 " +
"and tbs_budget.budget_state = 1 " +
"and tbs_budget_log.center_id = #{centerId} " + "and tbs_budget_log.center_id = #{centerId} " +
"and tbs_budget_log.center_type = #{centerType} " + "and tbs_budget_log.center_type = #{centerType} " +
"and tbs_budget_log.subject_id = #{subjectId} " + "and tbs_budget_log.subject_id = #{subjectId} " +

494
src/main/java/com/qs/serve/modules/tbs/service/TbsActivityDebugApplicationService.java

@ -0,0 +1,494 @@
package com.qs.serve.modules.tbs.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.common.util.CopierUtil;
import com.qs.serve.common.util.StringUtils;
import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.tbs.mapper.*;
import com.qs.serve.modules.vtb.entity.VtbVerification;
import com.qs.serve.modules.vtb.entity.VtbVerificationSubject;
import com.qs.serve.modules.vtb.mapper.VtbVerificationMapper;
import com.qs.serve.modules.vtb.mapper.VtbVerificationSubjectMapper;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.jetbrains.annotations.NotNull;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author YenHex
* @since 2024/5/25
*/
@Slf4j
@Service
@AllArgsConstructor
public class TbsActivityDebugApplicationService {
private TbsActivityMapper activityMapper;
private TbsActivitySubjectService activitySubjectService;
private TbsActivitySubjectMapper activitySubjectMapper;
private TbsActivityCenterService activityCenterService;
private TbsActivityCenterGoodsService activityCenterGoodsService;
private TbsBudgetLogService budgetLogService;
private VtbVerificationMapper verificationMapper;
private TbsCostApplyMapper tbsCostApplyMapper;
public String reset(Long activityId){
BigDecimal n100 = new BigDecimal("100");
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("activity_id",activityId);
TbsActivity activity = activityMapper.selectById(activityId);
//TbsCostApply costApply = tbsCostApplyMapper.selectById(activity.getCostApplyId());
// if(costApply.getPolicyItemId()!=null){
// log.warn("随货折让不支持该方法");
// return "随货折让不支持该方法";
// }
// //过滤 CA SHX YX06 PortalOfCostApplication.createCostProcess()
// if(StringUtils.hasText(costApply.getBillNumber())||StringUtils.hasText(costApply.getDisCode())){
// log.warn("方法仅支持普通订单");
// return "方法仅支持普通订单";
// }
BigDecimal checkeAmt = activity.getUsedAmount();
if(activity.getReleaseFlag().equals(1)){
checkeAmt = checkeAmt.add(activity.getReleaseAmount());
}
if(checkeAmt.compareTo(activity.getTotalAmount())>0){
log.warn("活动自身金额异常");
return "活动自身金额异常";
}
Long unMatchNum = activitySubjectMapper.checkActAndSubjectAmt(activityId);
if(unMatchNum!=null&&unMatchNum>0){
log.warn("活动科目金额异常");
return "活动科目金额异常";
}
//校验核销金额,错误则不执行
BigDecimal totalVerificationAmt = verificationMapper.getActivityVerificationAmt(activityId);
if(totalVerificationAmt==null){
totalVerificationAmt = BigDecimal.ZERO;
}
if(activity.getUsedAmount().compareTo(BigDecimal.ZERO)!=0
&&activity.getUsedAmount().compareTo(totalVerificationAmt)!=0){
return "核销金额异常";
}
// subject是和activity的 申请金额和核销金额一致,不进行更新
List<TbsActivitySubject> activitySubjectList = activitySubjectService.list(wrapper);
List<TbsActivityCenter> activityCenterList = activityCenterService.list(wrapper);
List<TbsActivityCenterGoods> activityCenterGoodsList = activityCenterGoodsService.list(wrapper);
Map<Long,List<TbsActivityCenterGoods>> activityCenterGoodsListMap = activityCenterGoodsList.stream()
.collect(Collectors.groupingBy(TbsActivityCenterGoods::getSubjectId));
Map<Long,List<TbsActivityCenter>> activityCenterListMap = activityCenterList.stream()
.collect(Collectors.groupingBy(TbsActivityCenter::getSubjectId));
boolean updateSubject = false;
for (TbsActivitySubject activitySubject : activitySubjectList) {
Long subjectId = activitySubject.getSubjectId();
List<TbsActivityCenter> subjectCenterList = activityCenterListMap.get(subjectId);
BigDecimal totalCenterRate = BigDecimal.ZERO;
BigDecimal totalCenterAmt = BigDecimal.ZERO;
BigDecimal totalCenterUsedAmt = BigDecimal.ZERO;
BigDecimal subjectUsedAmt = activitySubject.getUsedAmount();
BigDecimal subjectAmt = activitySubject.getAmount();
for (TbsActivityCenter activityCenter : subjectCenterList) {
if(activityCenter.getCenterRate().compareTo(BigDecimal.ZERO)>=0){
totalCenterRate = totalCenterRate.add(activityCenter.getCenterRate());
}
if(activityCenter.getCenterAmount().compareTo(BigDecimal.ZERO)>=0){
totalCenterAmt = totalCenterAmt.add(activityCenter.getCenterAmount());
}
totalCenterUsedAmt = totalCenterUsedAmt.add(activityCenter.getUsedAmount());
}
if(n100.compareTo(totalCenterRate)!=0){
log.info("重新分配TbsActivityCenter的比例");
BigDecimal centerRate = n100;
for (int i = 0; i < subjectCenterList.size(); i++) {
TbsActivityCenter activityCenter = subjectCenterList.get(i);
if(i+1 == subjectCenterList.size()){
activityCenter.setCenterRate(centerRate);
}else {
if(activityCenter.getCenterRate().compareTo(BigDecimal.ZERO)<0){
activityCenter.setCenterRate(BigDecimal.ZERO);
}
centerRate = centerRate.subtract(activityCenter.getCenterRate());
}
}
}
// 更新subject的已用金额
if(subjectUsedAmt==null || totalCenterUsedAmt.compareTo(subjectUsedAmt)!=0){
log.info("成本中心和科目已用金额不匹配");
BigDecimal totalUsedOnCenter = BigDecimal.ZERO;
for (TbsActivityCenter center : activityCenterList) {
totalUsedOnCenter = totalUsedOnCenter.add(center.getUsedAmount());
}
if(0 == totalUsedOnCenter.compareTo(activity.getUsedAmount())){
log.info("通过center更新subject金额");
subjectUsedAmt = BigDecimal.ZERO;
for (TbsActivityCenter center : subjectCenterList) {
subjectUsedAmt = subjectUsedAmt.add(center.getUsedAmount());
}
activitySubject.setUsedAmount(subjectUsedAmt);
updateSubject = true;
}else if (activitySubjectList.size()==1){
subjectUsedAmt = activity.getUsedAmount();
activitySubject.setUsedAmount(subjectUsedAmt);
log.info("更新TbsActivityCenter的已用金额");
BigDecimal totalCenterSubjectRate = BigDecimal.ZERO;
for (TbsActivityCenter center : subjectCenterList) {
totalCenterSubjectRate = totalCenterSubjectRate.add(center.getCenterRate());
}
if(totalCenterSubjectRate.compareTo(n100)!=0){
log.info("更新TbsActivityCenter的比率");
BigDecimal avgRate = n100.divide(new BigDecimal(subjectCenterList.size()),2,RoundingMode.DOWN);
BigDecimal addRate = BigDecimal.ZERO;
for (int i = 0; i < subjectCenterList.size(); i++) {
TbsActivityCenter center = subjectCenterList.get(i);
if(i+1 == subjectCenterList.size()){
center.setCenterRate(n100.subtract(addRate));
}else {
center.setCenterRate(avgRate);
addRate = avgRate.add(avgRate);
}
}
}
BigDecimal totalUsed11 = BigDecimal.ZERO;
for (int i = 0; i < subjectCenterList.size(); i++) {
log.info("更新TbsActivityCenter的已用");
TbsActivityCenter center = subjectCenterList.get(i);
if(i+1 == subjectCenterList.size()){
center.setUsedAmount(subjectUsedAmt.subtract(totalUsed11));
}else {
BigDecimal curAmt = subjectUsedAmt.multiply(center.getCenterRate()).divide(n100,2,RoundingMode.DOWN);
center.setUsedAmount(curAmt);
totalUsed11 = totalUsed11.add(curAmt);
}
}
}else {
log.info("成本中心和科目已用金额不匹配,而且活动金额也不匹配");
return "成本中心和科目已用金额不匹配,而且活动金额也不匹配";
}
}
// 分配center的占用金额和已用金额
if(totalCenterAmt.compareTo(activitySubject.getAmount())!=0){
log.info("重新分配TbsActivityCenter的CenterAmount");
BigDecimal centerAmt = subjectAmt;
BigDecimal centerUsedAmt = subjectUsedAmt;
for (int i = 0; i < subjectCenterList.size(); i++) {
TbsActivityCenter activityCenter = subjectCenterList.get(i);
if(i+1 == subjectCenterList.size()){
activityCenter.setCenterAmount(centerAmt);
}else {
BigDecimal currAmt = subjectAmt
.multiply(activityCenter.getCenterRate())
.divide(n100, 2,RoundingMode.DOWN);
centerAmt = centerAmt.subtract(currAmt);
activityCenter.setCenterAmount(currAmt);
}
//设置已用金额
if(subjectAmt.compareTo(subjectUsedAmt)==0){
activityCenter.setUsedAmount(activityCenter.getCenterAmount());
}else {
if(i+1 == subjectCenterList.size()){
activityCenter.setUsedAmount(centerUsedAmt);
}else {
BigDecimal currAmt = subjectUsedAmt
.multiply(activityCenter.getCenterRate())
.divide(n100, 2,RoundingMode.DOWN);
centerUsedAmt = centerUsedAmt.subtract(currAmt);
activityCenter.setUsedAmount(centerAmt);
}
}
}
}
List<TbsActivityCenterGoods> activityCenterGoodsListOfSubject = activityCenterGoodsListMap.get(subjectId);
for (TbsActivityCenter center : subjectCenterList) {
List<TbsActivityCenterGoods> goodsList = activityCenterGoodsListOfSubject.stream()
.filter(a->a.getCenterId().equals(center.getCenterId())&&a.getCenterType().equals(center.getCenterType()))
.collect(Collectors.toList());
if(goodsList.size()==0){
if(subjectCenterList.size()==1 && activityCenterGoodsListOfSubject.size()==1){
TbsActivityCenterGoods centerGoods = activityCenterGoodsListOfSubject.get(0);
centerGoods.setCenterType(center.getCenterType());
centerGoods.setCenterId(center.getCenterId());
centerGoods.setCenterName(center.getCenterName());
goodsList = new ArrayList<>();
goodsList.add(centerGoods);
}else {
log.error("商品数据缺失");
return "商品数据缺失";
}
}
final BigDecimal centerUsed = center.getUsedAmount();
final BigDecimal centerAmt = center.getCenterAmount();
BigDecimal totalGoodRate = BigDecimal.ZERO;
for (TbsActivityCenterGoods goods : goodsList) {
BigDecimal rate = goods.getCenterGoodsRate();
if(rate.compareTo(BigDecimal.ZERO)>0){
totalGoodRate = totalGoodRate.add(rate);
}
}
//重新分配比率
if(totalGoodRate.compareTo(n100)!=0){
log.info("重新分配申请Rate");
BigDecimal avgRate = n100.divide(new BigDecimal(goodsList.size()),2,RoundingMode.DOWN);
BigDecimal addRate = BigDecimal.ZERO;
for (int i = 0; i < goodsList.size(); i++) {
TbsActivityCenterGoods goods = goodsList.get(i);
if(i+1 == goodsList.size()){
goods.setCenterGoodsRate(n100.subtract(addRate));
}else {
goods.setCenterGoodsRate(avgRate);
addRate = addRate.add(avgRate);
}
}
}
//分配申请金额
BigDecimal centerAmt3 = centerAmt;
log.info("重新分配申请金额");
for (int i = 0; i < goodsList.size(); i++) {
TbsActivityCenterGoods goods = goodsList.get(i);
if(i+1 == goodsList.size()){
goods.setCenterGoodsAmount(centerAmt3);
}else {
BigDecimal currentAmt = centerAmt
.multiply(goods.getCenterGoodsRate())
.divide(n100,2,RoundingMode.DOWN);
goods.setCenterGoodsAmount(currentAmt);
centerAmt3 = centerAmt3.subtract(currentAmt);
}
}
//分配TbsActivityCenterGoods已用金额
BigDecimal centerUsed2 = centerUsed;
log.info("重新分配已用金额");
for (int i = 0; i < goodsList.size(); i++) {
TbsActivityCenterGoods goods = goodsList.get(i);
if(i+1 == goodsList.size()){
goods.setUsedAmount(centerUsed2);
}else {
BigDecimal currentAmt = centerUsed
.multiply(goods.getCenterGoodsRate())
.divide(n100,2,RoundingMode.DOWN);
goods.setUsedAmount(currentAmt);
centerUsed2 = centerUsed2.subtract(currentAmt);
}
}
}
}
//二次校验
BigDecimal totalSubjectAmt = BigDecimal.ZERO;
BigDecimal totalSubjectUsedAmt = BigDecimal.ZERO;
BigDecimal totalAllCenterUsedAmt = BigDecimal.ZERO;
for (TbsActivitySubject activitySubject : activitySubjectList) {
Long subjectId = activitySubject.getSubjectId();
List<TbsActivityCenter> subjectCenterList = activityCenterListMap.get(subjectId);
BigDecimal totalCenterRate = BigDecimal.ZERO;
BigDecimal totalCenterAmt = BigDecimal.ZERO;
BigDecimal totalCenterUsedAmt = BigDecimal.ZERO;
BigDecimal subjectUsedAmt = activitySubject.getUsedAmount();
BigDecimal subjectAmt = activitySubject.getAmount();
totalSubjectAmt = totalSubjectAmt.add(subjectAmt);
totalSubjectUsedAmt = totalSubjectUsedAmt.add(activitySubject.getUsedAmount());
for (TbsActivityCenter activityCenter : subjectCenterList) {
totalCenterRate = totalCenterRate.add(activityCenter.getCenterRate());
totalCenterAmt = totalCenterAmt.add(activityCenter.getCenterAmount());
totalCenterUsedAmt = totalCenterUsedAmt.add(activityCenter.getUsedAmount());
}
totalAllCenterUsedAmt = totalAllCenterUsedAmt.add(totalCenterUsedAmt);
if(totalCenterAmt.compareTo(subjectAmt)!=0){
log.error("合计totalCenterAmt金额异常:{}",activityId);
return "合计totalCenterAmt金额异常";
}
if(totalCenterUsedAmt.compareTo(subjectUsedAmt)!=0){
log.error("合计totalCenterUsedAmt金额异常,将重新分配活动的成本中心金额:{}",activityId);
return "合计totalCenterUsedAmt金额异常";
}
if(n100.compareTo(totalCenterRate)!=0){
log.error("centerRate不为100:{}",activityId);
return "centerRate不为100";
}
List<TbsActivityCenterGoods> activityCenterGoodsListOfSubject = activityCenterGoodsListMap.get(subjectId);
for (TbsActivityCenter center : subjectCenterList) {
List<TbsActivityCenterGoods> goodsList = activityCenterGoodsListOfSubject.stream()
.filter(a->a.getCenterId().equals(center.getCenterId())&&a.getCenterType().equals(center.getCenterType()))
.collect(Collectors.toList());
final BigDecimal centerUsed = center.getUsedAmount();
final BigDecimal centerAmt = center.getCenterAmount();
BigDecimal totalGoodRate = BigDecimal.ZERO;
BigDecimal totalGoodUsed = BigDecimal.ZERO;
BigDecimal totalGoodAmt = BigDecimal.ZERO;
for (TbsActivityCenterGoods goods : goodsList) {
BigDecimal rate = goods.getCenterGoodsRate();
totalGoodRate = totalGoodRate.add(rate);
totalGoodAmt = totalGoodAmt.add(goods.getCenterGoodsAmount());
totalGoodUsed = totalGoodUsed.add(goods.getUsedAmount());
}
//重新分配比率
if(totalGoodRate.compareTo(n100)!=0){
log.error("totalGoodRate不为100:{}",activityId);
return "totalGoodRate不为100";
}
if(totalGoodAmt.compareTo(centerAmt)!=0){
log.error("totalGoodAmt:{}",activityId);
return "totalGoodAmt错误";
}
if(totalGoodUsed.compareTo(centerUsed)!=0){
log.error("totalGoodUsed:{}",activityId);
return "totalGoodUsed错误";
}
}
}
if(activity.getUsedAmount().compareTo(totalSubjectUsedAmt)!=0){
log.error("活动和totalSubjectUsedAmt匹对金额异常:{}",activityId);
return "活动和totalSubjectUsedAmt匹对金额异常";
}
if(totalSubjectUsedAmt.compareTo(totalAllCenterUsedAmt)!=0){
log.error("活动和totalAllCenterUsedAmt匹对金额异常:{}",activityId);
return "活动和totalAllCenterUsedAmt匹对金额异常";
}
if(activity.getTotalAmount().compareTo(totalSubjectAmt)!=0){
log.error("科目和活动的申请金额不匹配");
return "科目和活动的申请金额不匹配";
}
// 处理预算占用
List<TbsBudgetLog> actBudgetLogs = budgetLogService.list(wrapper);
List<TbsBudgetLog> applyLogs = actBudgetLogs.stream().filter(a-> a.getOptType()!=4).collect(Collectors.toList());
List<TbsBudgetLog> releaseLogs = actBudgetLogs.stream().filter(a-> a.getOptType()==4).collect(Collectors.toList());
BigDecimal applyAmt = totalBudgetLogAmount(applyLogs);
BigDecimal releaseAmt = totalBudgetLogAmount(releaseLogs);
//检查下占用预算和释放
if(applyAmt.negate().compareTo(activity.getTotalAmount())!=0){
log.info("历史预算占用金额异常");
}
if(activity.getReleaseAmount()!=null && releaseAmt.compareTo(activity.getReleaseAmount())!=0){
log.info("历史预算释放金额异常");
}
List<TbsBudgetLog> newApplyLogList = new ArrayList<>();
List<TbsBudgetLog> newReleaseLogList = new ArrayList<>();
for (TbsActivityCenterGoods goods : activityCenterGoodsList) {
List<TbsBudgetLog> goodApplyLogs = actBudgetLogs.stream().filter(a->
a.getSubjectId().equals(goods.getSubjectId())
&&a.getCenterType().equals(goods.getCenterType())
&&a.getCenterId().equals(goods.getCenterId())
&&a.getOptType()!=4
).collect(Collectors.toList());
List<TbsBudgetLog> goodReleaseLogs = actBudgetLogs.stream().filter(a->
a.getSubjectId().equals(goods.getSubjectId())
&&a.getCenterType().equals(goods.getCenterType())
&&a.getCenterId().equals(goods.getCenterId())
&&a.getOptType()==4
).collect(Collectors.toList());
if(goodApplyLogs.size()==0 && goodReleaseLogs.size() ==0
&&goods.getCenterGoodsAmount().equals(goods.getUsedAmount())){
continue;
}
if(goodApplyLogs.size()==0){
return "缺失费用申请log";
}
// 新log
TbsBudgetLog newApplyLog = CopierUtil.copy(goodApplyLogs.get(0),new TbsBudgetLog());
newApplyLog.setId(null);
newApplyLog.setAmount(goods.getCenterGoodsAmount().negate());
newApplyLog.setOptType(1);
newApplyLogList.add(newApplyLog);
if(goodReleaseLogs.size()>0){
TbsBudgetLog newReleaseLog = CopierUtil.copy(goodReleaseLogs.get(0),new TbsBudgetLog());
newReleaseLog.setId(null);
newReleaseLog.setAmount(goods.getCenterGoodsAmount().subtract(goods.getUsedAmount()));
newReleaseLog.setOptType(4);
newReleaseLogList.add(newReleaseLog);
}
}
BigDecimal newApplyAmt = totalBudgetLogAmount(newApplyLogList);
BigDecimal newReleaseAmt = totalBudgetLogAmount(newReleaseLogList);
if(newApplyAmt.negate().compareTo(activity.getTotalAmount())!=0){
log.error("预算占用金额异常");
return "预算占用金额异常";
}
if(activity.getReleaseAmount()!=null && newReleaseAmt.compareTo(activity.getReleaseAmount())!=0){
log.error("预算释放金额异常 activity{},.getReleaseAmount():{} newReleaseAmt:{}",activityId,activity.getReleaseAmount(),newReleaseAmt);
return "预算释放金额异常";
}
if(updateSubject){
activitySubjectService.updateBatchById(activitySubjectList);
}
activityCenterService.updateBatchById(activityCenterList);
activityCenterGoodsService.updateBatchById(activityCenterGoodsList);
List<Long> logIds = actBudgetLogs.stream().map(a->a.getId()).collect(Collectors.toList());
if(!newApplyLogList.isEmpty()){
budgetLogService.saveBatch(newApplyLogList);
}
if(CollectionUtil.isNotEmpty(newReleaseLogList)){
budgetLogService.saveBatch(newReleaseLogList);
}
if(CollectionUtil.isNotEmpty(logIds)){
budgetLogService.removeBatchByIds(logIds);
}
return null;
}
private BigDecimal totalBudgetLogAmount(List<TbsBudgetLog> releaseLogs) {
BigDecimal amt = BigDecimal.ZERO;
if(releaseLogs!=null){
for (TbsBudgetLog reLog : releaseLogs) {
amt = amt.add(reLog.getAmount());
}
}
return amt;
}
}

206
src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetReleaseApplicationService.java

@ -0,0 +1,206 @@
package com.qs.serve.modules.tbs.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.qs.serve.common.model.enums.BudgetLogOptFlag;
import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil;
import com.qs.serve.modules.tbs.entity.*;
import com.qs.serve.modules.vtb.common.VtbFundFlowType;
import com.qs.serve.modules.vtb.entity.VtbFundFlow;
import com.qs.serve.modules.vtb.mapper.VtbFundFlowMapper;
import com.qs.serve.modules.vtb.service.VtbFundFlowService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author YenHex
* @since 2024/5/28
*/
@Slf4j
@Service
@AllArgsConstructor
public class TbsBudgetReleaseApplicationService {
private final VtbFundFlowService fundFlowService;
private final VtbFundFlowMapper vtbFundFlowMapper;
private final TbsBudgetService budgetService;
private final TbsBudgetLogService budgetLogService;
private final TbsBudgetCostItemService budgetCostItemService;
private final TbsActivityService activityService;
private final TbsActivityCenterGoodsService activityCenterGoodsService;
private final TbsCostApplyService costApplyService;
private final TbsActivityPayConditionService activityPayConditionService;
private final TbsScheduleItemBudgetService tbsScheduleItemBudgetService;
public void initHis(Long activityId){
TbsBudget budget = budgetService.getById("1669");
TbsScheduleItemBudget scheduleItemBudget = tbsScheduleItemBudgetService.getById("4896");
TbsActivity activity = activityService.getById(activityId);
TbsCostApply costApply = costApplyService.getById(activity.getCostApplyId());
SysUser sysUser = new SysUser();
sysUser.setId("0");
sysUser.setName("系统执行");
sysUser.setCode("0");
List<TbsBudgetLog> budgetLogList = new ArrayList<>();
List<TbsActivityCenterGoods> centerGoodsList = activityCenterGoodsService.listByActivityId(activityId);
for (TbsActivityCenterGoods centerGoods : centerGoodsList) {
BigDecimal amount = centerGoods.getCenterGoodsAmount();
TbsBudgetCostItem costItem = new TbsBudgetCostItem();
costItem.setCenterGoodsCode(centerGoods.getCenterGoodsCode());
costItem.setCostApplyId(centerGoods.getCostApplyId());
costItem.setActivityId(centerGoods.getActivityId());
costItem.setActivityCode(centerGoods.getActivityCode());
costItem.setSupplierId(centerGoods.getSupplierId());
costItem.setSupplierCode(centerGoods.getSupplierCode());
costItem.setSupplierName(centerGoods.getSupplierName());
costItem.setSubjectId(centerGoods.getSubjectId());
costItem.setSubjectCode(centerGoods.getSubjectCode());
costItem.setSubjectName(centerGoods.getSubjectName());
costItem.setCenterType(centerGoods.getCenterType());
costItem.setCenterId(centerGoods.getCenterId());
costItem.setCenterCode(centerGoods.getCenterCode());
costItem.setCenterName(centerGoods.getCenterName());
costItem.setCenterAmount(centerGoods.getCenterAmount());
costItem.setCenterRate(centerGoods.getCenterRate());
costItem.setCenterGoodsAmount(centerGoods.getCenterGoodsAmount());
costItem.setCenterGoodsRate(centerGoods.getCenterGoodsRate());
costItem.setTargetType(centerGoods.getTargetType());
costItem.setTargetId(centerGoods.getTargetId());
costItem.setTargetCode(centerGoods.getTargetCode());
costItem.setTargetName(centerGoods.getTargetName());
costItem.setTargetLevelPathIds(centerGoods.getTargetLevelPathIds());
costItem.setTargetLevelPathNames(centerGoods.getTargetLevelPathNames());
costItem.setActStartDate(centerGoods.getActStartDate());
costItem.setActEndDate(centerGoods.getActEndDate());
costItem.setPreStartDate(centerGoods.getPreStartDate());
costItem.setPreEndDate(centerGoods.getPreEndDate());
costItem.setPreCheckDate(centerGoods.getPreCheckDate());
costItem.setCenterGoodItemId(centerGoods.getId());
TbsBudgetLog budgetLog = TbsBudgetLogBuildUtil.buildTbsBudgetLog(BudgetLogOptFlag.State_1,sysUser,costApply,costItem ,budget,amount,activity);
budgetLog.setBudgetId(budget.getId());
budgetLog.setScheduleItemBudgetId(scheduleItemBudget.getId());
budgetLog.setScheduleId(scheduleItemBudget.getScheduleId());
budgetLog.setScheduleItemId(scheduleItemBudget.getScheduleItemId());
budgetLog.setItemName(scheduleItemBudget.getItemName());
budgetLogList.add(budgetLog);
}
//移除历史记录
budgetLogService.remove(new LambdaQueryWrapper<TbsBudgetLog>()
.eq(TbsBudgetLog::getCostApplyId,activity.getCostApplyId())
.eq(TbsBudgetLog::getOptType, BudgetLogOptFlag.State_1.getCode())
.eq(TbsBudgetLog::getActivityId,activity.getId()));
//重新保存
if(CollectionUtil.isNotEmpty(budgetLogList)){
budgetLogService.saveBatch(budgetLogList);
}
}
/**
* 依据剩余预算刷新释放金额
*/
public void check(Long actId){
//校验活动的核销金额是否匹配,不匹配则中断
//查询需要补偿释放的活动ID
//List<Long> activityIds = vtbFundFlowMapper.listMissReleaseActivityId();
Long[] activityIds = new Long[]{actId};
for (Long activityId : activityIds) {
TbsActivity activity = activityService.getById(activityId);
TbsCostApply costApply = costApplyService.getById(activity.getCostApplyId());
//保存预算日志
List<TbsActivityCenterGoods> centerGoodsList = activityCenterGoodsService.listByActivityId(activityId);
LambdaQueryWrapper<TbsBudgetCostItem> itemLqw = new LambdaQueryWrapper<>();
itemLqw.eq(TbsBudgetCostItem::getActivityId,activityId);
List<TbsBudgetCostItem> budgetCostItemList = budgetCostItemService.list(itemLqw);
List<Long> budgetIds = budgetCostItemList.stream().map(TbsBudgetCostItem::getBudgetId).collect(Collectors.toList());
if(CollUtil.isEmpty(budgetIds)){
continue;
}
List<TbsBudget> budgetLIst = budgetService.listByIds(budgetIds);
List<TbsBudgetLog> budgetLogList = new ArrayList<>();
for (TbsActivityCenterGoods centerGoods : centerGoodsList) {
if(centerGoods.getCenterGoodsAmount().compareTo(centerGoods.getUsedAmount())<1){
continue;
}
TbsBudgetCostItem currCostItem = null;
TbsBudget currentBudget = null;
for (TbsBudgetCostItem costItem : budgetCostItemList) {
if(centerGoods.getId().equals(costItem.getCenterGoodItemId())){
currCostItem = costItem;
break;
}
}
for (TbsBudget budget : budgetLIst) {
if (currCostItem.getBudgetId().equals(budget.getId())){
currentBudget = budget;
}
}
BigDecimal amount = centerGoods.getCenterGoodsAmount().subtract(centerGoods.getUsedAmount());
SysUser sysUser = new SysUser();
sysUser.setId("0");
sysUser.setName("系统执行");
sysUser.setCode("0");
TbsBudgetLog budgetLog = TbsBudgetLogBuildUtil.buildTbsBudgetLog(BudgetLogOptFlag.State_4,sysUser,costApply,currCostItem,currentBudget,amount,activity);
budgetLogList.add(budgetLog);
}
//TODO 二次校验,释放金额是否一致
//移除历史记录
fundFlowService.remove(
new LambdaQueryWrapper<VtbFundFlow>()
.eq(VtbFundFlow::getFundType, VtbFundFlowType.Release)
.eq(VtbFundFlow::getCostApplyId,activity.getCostApplyId())
.eq(VtbFundFlow::getActivityId,activity.getId())
);
VtbFundFlow fundFlow = new VtbFundFlow();
fundFlow.setFundType(VtbFundFlowType.Release);
fundFlow.setVerificationId(0L);
fundFlow.setCenterGoodsCode(activity.getActivityCode()+"_00");
fundFlow.setCostApplyId(activity.getCostApplyId());
fundFlow.setActivityId(activity.getId());
fundFlow.setUsedAmount(activity.getReleaseAmount());
fundFlow.setSupplierId(activity.getSupplierId());
fundFlow.setSupplierCode(activity.getSupplierCode());
fundFlow.setSupplierName(activity.getSupplierName());
fundFlowService.save(fundFlow);
//移除历史记录
budgetLogService.remove(new LambdaQueryWrapper<TbsBudgetLog>()
.eq(TbsBudgetLog::getCostApplyId,activity.getCostApplyId())
.eq(TbsBudgetLog::getOptType, BudgetLogOptFlag.State_4.getCode())
.eq(TbsBudgetLog::getActivityId,activity.getId()));
//更新付款条件状态
LambdaQueryWrapper<TbsActivityPayCondition> updLqw = new LambdaQueryWrapper<>();
updLqw.eq(TbsActivityPayCondition::getActivityId,activityId);
TbsActivityPayCondition payCondition = new TbsActivityPayCondition();
payCondition.setFinishedFlag(1);
activityPayConditionService.update(payCondition,updLqw);
//重新保存
if(CollectionUtil.isNotEmpty(budgetLogList)){
budgetLogService.saveBatch(budgetLogList);
}
}
}
}

66
src/main/java/com/qs/serve/modules/tbs/service/TbsCostContractApplication.java

@ -0,0 +1,66 @@
package com.qs.serve.modules.tbs.service;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.qs.serve.modules.tbs.common.TbsActivityState;
import com.qs.serve.modules.tbs.entity.TbsActivity;
import com.qs.serve.modules.tbs.entity.TbsActivityPayCondition;
import com.qs.serve.modules.tbs.entity.TbsCostApply;
import com.qs.serve.modules.tbs.mapper.TbsActivityPayConditionMapper;
import com.qs.serve.modules.vtb.service.VtbVerificationService;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author YenHex
* @since 2024/5/28
*/
@Slf4j
@Service
@AllArgsConstructor
public class TbsCostContractApplication {
private final TbsBudgetReleaseApplicationService tbsBudgetReleaseApplicationService;
private final TbsActivityPayConditionMapper activityPayConditionMapper;
private final TbsActivityPayConditionService activityPayConditionService;
private final TbsActivityService tbsActivityService;
private final TbsCostApplyService tbsCostApplyService;
private final VtbVerificationService verificationService;
public void resetState(){
//更新遗漏的已完成费用申请
List<Long> costIds = activityPayConditionMapper.getFinishedCostId();
if(CollUtil.isNotEmpty(costIds)){
List<TbsCostApply> costApplyList = tbsCostApplyService.listByIds(costIds);
for (TbsCostApply costApply : costApplyList) {
costApply.setChargeState(3);
costApply.setCheckState(1);
}
tbsCostApplyService.updateBatchById(costApplyList);
//更新状态
activityPayConditionService.update(new LambdaUpdateWrapper<TbsActivityPayCondition>()
.set(TbsActivityPayCondition::getFinishedFlag,1)
.in(TbsActivityPayCondition::getCostApplyId,costIds));
List<TbsActivity> activityList = tbsActivityService.list(new LambdaQueryWrapper<TbsActivity>()
.in(TbsActivity::getCostApplyId,costIds));
for (TbsActivity activity : activityList) {
if(activity.getUsedAmount().compareTo(activity.getTotalAmount())==0){
activity.setActivityState(TbsActivityState.STATE_1_Finished);
}else {
//不进行直接释放,通过补充释放,最终一次性修复
activity.setReleaseFlag(1);
activity.setReleaseAmount(activity.getTotalAmount().subtract(activity.getUsedAmount()));
activity.setActivityState(TbsActivityState.STATE_4_Release);
tbsBudgetReleaseApplicationService.check(activity.getId());
}
}
tbsActivityService.updateBatchById(activityList);
}
}
}

12
src/main/java/com/qs/serve/modules/tbs/service/TbsScheduleItemBudgetService.java

@ -3,10 +3,7 @@ package com.qs.serve.modules.tbs.service;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetScheduleWithAmount; import com.qs.serve.modules.tbs.entity.dto.*;
import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemBudgetIdDto;
import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemWithAmount;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetWithAmount;
import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch; import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch;
import java.time.LocalDate; import java.time.LocalDate;
@ -46,6 +43,13 @@ public interface TbsScheduleItemBudgetService extends IService<TbsScheduleItemBu
*/ */
List<TbsBudgetWithAmount> listBudgetAmountByIds(TbsScheduleItemSearch param); List<TbsBudgetWithAmount> listBudgetAmountByIds(TbsScheduleItemSearch param);
/**
* 查询审批中的费用或政策
* @param param
* @return
*/
List<TbsBudgetCheckingWithAmount> listBudgetCheckingAmount(TbsScheduleItemSearch param);
} }

6
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java

@ -58,6 +58,7 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
private final TbsActivityCenterGoodsService activityCenterGoodsService; private final TbsActivityCenterGoodsService activityCenterGoodsService;
private final TbsActivityChannelService activityChannelService; private final TbsActivityChannelService activityChannelService;
private final TbsActivityChannelPointService activityChannelPointService; private final TbsActivityChannelPointService activityChannelPointService;
private final TbsActivityChannelPointMapper tbsActivityChannelPointMapper;
private final TbsActivityTemplateMapper activityTemplateMapper; private final TbsActivityTemplateMapper activityTemplateMapper;
private final TbsCostApplyMapper costApplyMapper; private final TbsCostApplyMapper costApplyMapper;
private final TbsActivitySlottingFeeService activitySlottingFeeService; private final TbsActivitySlottingFeeService activitySlottingFeeService;
@ -194,6 +195,7 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
// LocalDate preDay = DateUtils.beSetDate(activity.getActEndDate(),days); // LocalDate preDay = DateUtils.beSetDate(activity.getActEndDate(),days);
// activity.setPreCheckDate(preDay); // activity.setPreCheckDate(preDay);
this.saveOrUpdate(activity); this.saveOrUpdate(activity);
//统计费用信息 //统计费用信息
this.updateCostTotal(costApply.getId()); this.updateCostTotal(costApply.getId());
if(isUpdate){ if(isUpdate){
@ -252,6 +254,10 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
if(activityChannelPointList.size()>0){ if(activityChannelPointList.size()>0){
activityChannelPointService.saveBatch(activityChannelPointList); activityChannelPointService.saveBatch(activityChannelPointList);
} }
Long actId = tbsActivityChannelPointMapper.checkSubjectPoint(activity.getId());
if(actId!=null){
Assert.throwEx("活动["+activity.getActivityCode() + "]因科目类型,必须选网点");
}
//保存 //保存
activityGoodsService.saveBatch(activityGoodsList); activityGoodsService.saveBatch(activityGoodsList);
activitySubjectService.saveBatch(activitySubjects); activitySubjectService.saveBatch(activitySubjects);

3
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetApplyOperationServiceImpl.java

@ -16,6 +16,7 @@ import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget;
import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo;
import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper;
import com.qs.serve.modules.tbs.service.TbsBudgetLogService; import com.qs.serve.modules.tbs.service.TbsBudgetLogService;
import com.qs.serve.modules.tbs.service.TbsBudgetService;
import com.qs.serve.modules.tbs.service.TbsScheduleItemBudgetService; import com.qs.serve.modules.tbs.service.TbsScheduleItemBudgetService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -34,6 +35,7 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
public class TbsBudgetApplyOperationServiceImpl implements SeeYonOperationService { public class TbsBudgetApplyOperationServiceImpl implements SeeYonOperationService {
private final TbsBudgetService budgetService;
private final TbsBudgetMapper budgetMapper; private final TbsBudgetMapper budgetMapper;
private final TbsBudgetLogService budgetLogService; private final TbsBudgetLogService budgetLogService;
private final TbsScheduleItemBudgetService scheduleItemBudgetService; private final TbsScheduleItemBudgetService scheduleItemBudgetService;
@ -102,6 +104,7 @@ public class TbsBudgetApplyOperationServiceImpl implements SeeYonOperationServic
budgetLogService.saveBatch(budgetLogList); budgetLogService.saveBatch(budgetLogList);
} }
budgetMapper.updateConFlag(); budgetMapper.updateConFlag();
budgetService.syncMissSchItem();
return null; return null;
} }

1
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchOperationServiceImpl.java

@ -81,6 +81,7 @@ public class TbsBudgetBatchOperationServiceImpl implements SeeYonOperationServic
budgetBatch.setFinishedTime(LocalDateTime.now()); budgetBatch.setFinishedTime(LocalDateTime.now());
budgetBatchService.updateById(budgetBatch); budgetBatchService.updateById(budgetBatch);
tbsBudgetMapper.updateConFlag(); tbsBudgetMapper.updateConFlag();
tbsBudgetService.syncMissSchItem();
return null; return null;
} }

2
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java

@ -553,7 +553,7 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
boolean conditionFlag = StringUtils.hasText(paramItem.getCategoryNames()) boolean conditionFlag = StringUtils.hasText(paramItem.getCategoryNames())
||StringUtils.hasText(paramItem.getSeriesNames()) ||StringUtils.hasText(paramItem.getSeriesNames())
||StringUtils.hasText(paramItem.getBrandNames()); ||StringUtils.hasText(paramItem.getBrandNames());
newBudget.setConditionFlag(conditionFlag?0:1); newBudget.setConditionFlag(conditionFlag?1:0);
newBudget.setUserId(sysUser.getId()); newBudget.setUserId(sysUser.getId());
newBudget.setUserCode(sysUser.getCode()); newBudget.setUserCode(sysUser.getCode());
newBudget.setUserName(sysUser.getName()); newBudget.setUserName(sysUser.getName());

2
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeOperationServiceImpl.java

@ -35,6 +35,7 @@ import java.util.stream.Collectors;
@AllArgsConstructor @AllArgsConstructor
public class TbsBudgetChangeOperationServiceImpl implements SeeYonOperationService { public class TbsBudgetChangeOperationServiceImpl implements SeeYonOperationService {
private TbsBudgetService budgetService;
private TbsBudgetMapper budgetMapper; private TbsBudgetMapper budgetMapper;
private TbsBudgetChangeMapper budgetChangeMapper; private TbsBudgetChangeMapper budgetChangeMapper;
private TbsBudgetConditionService tbsBudgetConditionService; private TbsBudgetConditionService tbsBudgetConditionService;
@ -142,6 +143,7 @@ public class TbsBudgetChangeOperationServiceImpl implements SeeYonOperationServi
} }
} }
budgetMapper.updateConFlag(); budgetMapper.updateConFlag();
budgetService.syncMissSchItem();
} }
/** /**

11
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetManagerServiceImpl.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.tbs.service.impl; package com.qs.serve.modules.tbs.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.common.util.CollectionUtil;
@ -131,10 +132,12 @@ public class TbsBudgetManagerServiceImpl implements TbsBudgetManagerService {
List<TbsActivityGoods> activityGoodsList = goodsListMap.get(activityId); List<TbsActivityGoods> activityGoodsList = goodsListMap.get(activityId);
for (TbsActivityGoods goods : activityGoodsList) { for (TbsActivityGoods goods : activityGoodsList) {
boolean isMatch = false; boolean isMatch = false;
for (TbsBudgetCondition condition : budgetConditionList) { if(CollUtil.isNotEmpty(budgetConditionList)){
if(goods.getTargetLevelPathIds().contains(condition.getTargetLevelPathIds())){ for (TbsBudgetCondition condition : budgetConditionList) {
isMatch = true; if(goods.getTargetLevelPathIds().contains(condition.getTargetLevelPathIds())){
break; isMatch = true;
break;
}
} }
} }
if(!isMatch){ if(!isMatch){

8
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java

@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.config.properties.ProjectProperties; import com.qs.serve.common.config.properties.ProjectProperties;
import com.qs.serve.common.framework.manager.AsyncFactory; import com.qs.serve.common.framework.manager.AsyncFactory;
import com.qs.serve.common.framework.manager.AsyncManager; import com.qs.serve.common.framework.manager.AsyncManager;
import com.qs.serve.common.framework.redis.RedisService;
import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.enums.BudgetLogOptFlag;
import com.qs.serve.common.util.*; import com.qs.serve.common.util.*;
@ -83,6 +84,7 @@ public class TbsBudgetServiceImpl extends ServiceImpl<TbsBudgetMapper,TbsBudget>
private final VtbFundFlowService vtbFundFlowService; private final VtbFundFlowService vtbFundFlowService;
private final TbsActivityTemplateMapper tbsActivityTemplateMapper; private final TbsActivityTemplateMapper tbsActivityTemplateMapper;
private RedisService redisService;
private SysAttachService attachService; private SysAttachService attachService;
private SeeYonRequestService seeYonService; private SeeYonRequestService seeYonService;
private ProjectProperties projectProperties; private ProjectProperties projectProperties;
@ -90,10 +92,12 @@ public class TbsBudgetServiceImpl extends ServiceImpl<TbsBudgetMapper,TbsBudget>
@Override @Override
public void commitApply(Long id) { public void commitApply(Long id) {
TbsBudget tbsBudget = this.getById(id);
redisService.throwResLock(TbsBudget.class.getSimpleName(),id.toString());
seeYonService.testConnection(); seeYonService.testConnection();
String templateCode = TbsSeeYonConst.BudgetApplyConf.Code(); String templateCode = TbsSeeYonConst.BudgetApplyConf.Code();
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId());
TbsBudget tbsBudget = this.getById(id);
if(tbsBudget.getBudgetState().equals(1)){ if(tbsBudget.getBudgetState().equals(1)){
Assert.throwEx("已开启"); Assert.throwEx("已开启");
} }
@ -199,7 +203,7 @@ public class TbsBudgetServiceImpl extends ServiceImpl<TbsBudgetMapper,TbsBudget>
budget.setAttachIds(budgetBo.getAttachIds()); budget.setAttachIds(budgetBo.getAttachIds());
//设置指定模板 //设置指定模板
budget.setTemplateIds(new String[]{}); budget.setTemplateIds(new String[]{});
if(budget.getTemplateFlag()!=null&&budget.getTemplateFlag().equals(1)){ if(budgetBo.getTemplateFlag()!=null&&budgetBo.getTemplateFlag().equals(1)){
if(budgetBo.getTemplateIds()!=null&&budgetBo.getTemplateIds().length>0){ if(budgetBo.getTemplateIds()!=null&&budgetBo.getTemplateIds().length>0){
budget.setTemplateIds(budgetBo.getTemplateIds()); budget.setTemplateIds(budgetBo.getTemplateIds());
} }

12
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyOperationServiceImpl.java

@ -221,12 +221,12 @@ public class TbsCostApplyOperationServiceImpl implements SeeYonOperationService
ctpAffairVo.setAffairInfo(ctpAffair); ctpAffairVo.setAffairInfo(ctpAffair);
//2已发 //2已发
if(ctpAffair!=null&&ctpAffair.getState().equals(2)){ if(ctpAffair!=null&&ctpAffair.getState().equals(2)){
String costId = ctpAffair.getCostApplyId(); // String costId = ctpAffair.getCostApplyId();
if(costId!=null){ // if(costId!=null){
TbsCostApply costApply1 = costApplyService.getById(costId); // TbsCostApply costApply1 = costApplyService.getById(costId);
Date date = Date.from(costApply1.getSubmitTime().atZone(ZoneId.systemDefault()).toInstant()); // Date date = Date.from(costApply1.getSubmitTime().atZone(ZoneId.systemDefault()).toInstant());
ctpAffair.setCommentTime(date); // ctpAffair.setCommentTime(date);
} // }
} }
for (SysUser user : userList) { for (SysUser user : userList) {
if(ctpAffair.getMemberId().equals(user.getSyUserId())){ if(ctpAffair.getMemberId().equals(user.getSyUserId())){

3
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyPart1ServiceImpl.java

@ -111,6 +111,9 @@ public class TbsCostApplyPart1ServiceImpl implements TbsCostApplyPart1Service {
if(orgCost.getCancelFlag().equals(1)){ if(orgCost.getCancelFlag().equals(1)){
Assert.throwEx("该记录的费用已异动"); Assert.throwEx("该记录的费用已异动");
} }
if(orgCost.getContractFlag().equals(1)){
Assert.throwEx("协议类不支持异动");
}
boolean isExtUser = orgCost.getExtUserId()!=null&&userId.equals(orgCost.getExtUserId()); boolean isExtUser = orgCost.getExtUserId()!=null&&userId.equals(orgCost.getExtUserId());
if(!userId.equals(orgCost.getUserId())&&!isExtUser){ if(!userId.equals(orgCost.getUserId())&&!isExtUser){
Assert.throwEx("拒绝访问"); Assert.throwEx("拒绝访问");

23
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java

@ -8,6 +8,7 @@ import com.qs.serve.common.config.properties.ProjectApisProperties;
import com.qs.serve.common.config.properties.ProjectProperties; import com.qs.serve.common.config.properties.ProjectProperties;
import com.qs.serve.common.framework.manager.AsyncFactory; import com.qs.serve.common.framework.manager.AsyncFactory;
import com.qs.serve.common.framework.manager.AsyncManager; import com.qs.serve.common.framework.manager.AsyncManager;
import com.qs.serve.common.framework.redis.RedisService;
import com.qs.serve.common.model.consts.ApplyTypeConst; import com.qs.serve.common.model.consts.ApplyTypeConst;
import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.enums.BudgetLogOptFlag;
import com.qs.serve.common.model.consts.BudgetLogRollbackFlag; import com.qs.serve.common.model.consts.BudgetLogRollbackFlag;
@ -88,6 +89,8 @@ import java.util.stream.Collectors;
@AllArgsConstructor @AllArgsConstructor
public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsCostApply> implements TbsCostApplyService { public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsCostApply> implements TbsCostApplyService {
private RedisService redisService;
private TbsActivityChannelPointMapper tbsActivityChannelPointMapper;
private VtbVerificationMapper vtbVerificationMapper; private VtbVerificationMapper vtbVerificationMapper;
private TbsBudgetApplicationService budgetApplicationService; private TbsBudgetApplicationService budgetApplicationService;
private TbsBudgetCostItemService budgetCostItemService; private TbsBudgetCostItemService budgetCostItemService;
@ -163,6 +166,9 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
&&!costApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){ &&!costApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){
Assert.throwEx("当前单据状态不可作废"); Assert.throwEx("当前单据状态不可作废");
} }
if(costApply.getContractFlag().equals(1)){
Assert.throwEx("协议类不支持作废");
}
LambdaQueryWrapper<VtbVerification> vtbLqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<VtbVerification> vtbLqw = new LambdaQueryWrapper<>();
vtbLqw.eq(VtbVerification::getCostApplyId,id); vtbLqw.eq(VtbVerification::getCostApplyId,id);
vtbLqw.and( vtbLqw.and(
@ -495,8 +501,9 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void commitApply(String id) { public void commitApply(String id) {
seeYonService.testConnection();
TbsCostApply tbsCostApply = this.getById(id); TbsCostApply tbsCostApply = this.getById(id);
redisService.throwResLock(TbsCostApply.class.getSimpleName(),id);
seeYonService.testConnection();
if(!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode()) if(!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())
&&!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){ &&!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){
Assert.throwEx("操作失败,申请费用状态不支持"); Assert.throwEx("操作失败,申请费用状态不支持");
@ -513,6 +520,13 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
actLqw.eq(TbsActivity::getCostApplyId,id); actLqw.eq(TbsActivity::getCostApplyId,id);
List<TbsActivity> activityList = tbsActivityMapper.selectList(actLqw); List<TbsActivity> activityList = tbsActivityMapper.selectList(actLqw);
for (TbsActivity activity : activityList) {
Long actId = tbsActivityChannelPointMapper.checkSubjectPoint(activity.getId());
if(actId!=null){
Assert.throwEx("活动["+activity.getActivityCode() + "]因科目类型,必须选网点");
}
}
//判断是否进场费 //判断是否进场费
if(tbsCostApply.getContractFlag()!=null&&tbsCostApply.getContractFlag().equals(2)){ if(tbsCostApply.getContractFlag()!=null&&tbsCostApply.getContractFlag().equals(2)){
if (activityList.size()>1){ if (activityList.size()>1){
@ -531,6 +545,12 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
List<TbsActivityPayCondition> payConditions = null; List<TbsActivityPayCondition> payConditions = null;
if(tbsCostApply.getContractFlag()!=null&&tbsCostApply.getContractFlag().equals(1)){ if(tbsCostApply.getContractFlag()!=null&&tbsCostApply.getContractFlag().equals(1)){
//排查OA是否已提交数据
String costCode = tbsCostApply.getCode();
boolean checkExist = seeYonService.checkConstCodeExist(costCode);
if(!checkExist){
Assert.throwEx("有效流程已在OA存在,无法重新发起流程");
}
LambdaQueryWrapper<TbsCostContract> contractLambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TbsCostContract> contractLambdaQueryWrapper = new LambdaQueryWrapper<>();
contractLambdaQueryWrapper.eq(TbsCostContract::getCostApplyId,id); contractLambdaQueryWrapper.eq(TbsCostContract::getCostApplyId,id);
List<TbsCostContract> contractList = costContractMapper.selectList(contractLambdaQueryWrapper); List<TbsCostContract> contractList = costContractMapper.selectList(contractLambdaQueryWrapper);
@ -671,6 +691,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
} }
if(flowIdResult==null||flowIdResult.getStatus()!=200){ if(flowIdResult==null||flowIdResult.getStatus()!=200){
assert flowIdResult != null;
Assert.throwEx("远程服务调用失败:"+flowIdResult.getMsg()); Assert.throwEx("远程服务调用失败:"+flowIdResult.getMsg());
} }
String flowId = flowIdResult.getData(); String flowId = flowIdResult.getData();

45
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsScheduleItemBudgetServiceImpl.java

@ -2,10 +2,13 @@ package com.qs.serve.modules.tbs.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.enums.BudgetLogOptFlag;
import com.qs.serve.common.util.CollectionUtil; import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.common.util.PageUtil;
import com.qs.serve.modules.tbs.entity.TbsBudget; import com.qs.serve.modules.tbs.entity.TbsBudget;
import com.qs.serve.modules.tbs.entity.TbsBudgetCondition; import com.qs.serve.modules.tbs.entity.TbsBudgetCondition;
import com.qs.serve.modules.tbs.entity.TbsBudgetLog;
import com.qs.serve.modules.tbs.entity.dto.*; import com.qs.serve.modules.tbs.entity.dto.*;
import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch; import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch;
import com.qs.serve.modules.tbs.mapper.*; import com.qs.serve.modules.tbs.mapper.*;
@ -349,5 +352,47 @@ public class TbsScheduleItemBudgetServiceImpl extends ServiceImpl<TbsScheduleIte
return result; return result;
} }
@Override
public List<TbsBudgetCheckingWithAmount> listBudgetCheckingAmount(TbsScheduleItemSearch param) {
LambdaQueryWrapper<TbsBudget> budgetLqw = new LambdaQueryWrapper<>();
budgetLqw.in(TbsBudget::getScheduleId,param.getScheduleIds());
budgetLqw.in(TbsBudget::getCenterCombo,param.getCenterCombos());
budgetLqw.eq(TbsBudget::getBudgetState,1);
List<TbsBudget> budgetList = tbsBudgetMapper.selectList(budgetLqw);
Set<Long> budgetIds;
if(CollectionUtil.isNotEmpty(param.getBrandIds())){
//无品牌条件
budgetIds = budgetList.stream()
.filter(a->a.getConditionFlag().equals(0))
.map(TbsBudget::getId).collect(Collectors.toSet());
//筛选符合品牌条件
List<Long> conBudgetIds = budgetList.stream()
.filter(a->a.getConditionFlag().equals(1))
.map(TbsBudget::getId).collect(Collectors.toList());
LambdaQueryWrapper<TbsBudgetCondition> conLqw = new LambdaQueryWrapper<>();
conBudgetIds.add(0L);
conLqw.in(TbsBudgetCondition::getBudgetId,conBudgetIds);
conLqw.in(TbsBudgetCondition::getBrandId,param.getBrandIds());
List<TbsBudgetCondition> conditions = budgetConditionMapper.selectList(conLqw);
conBudgetIds = conditions.stream().map(TbsBudgetCondition::getBudgetId).collect(Collectors.toList());
budgetIds.addAll(conBudgetIds);
}else {
//加载所有
budgetIds = budgetList.stream().map(TbsBudget::getId).collect(Collectors.toSet());
}
budgetIds.add(0L);
PageHelper.startPage(param.getPageNum(),param.getPageSize());
List<TbsBudgetCheckingWithAmount> budgetLogs = tbsBudgetLog2Mapper.getBudgetLogCheckingList(param,new ArrayList<>(budgetIds),param.getScheduleItemBudgetIds(), BudgetLogOptFlag.finalPolicyOptFlag,BudgetLogOptFlag.finalCostOptFlag);
return budgetLogs;
}
} }

8
src/main/java/com/qs/serve/modules/third/service/PortalOfCostApplication.java

@ -83,6 +83,7 @@ import java.util.stream.Collectors;
@AllArgsConstructor @AllArgsConstructor
public class PortalOfCostApplication { public class PortalOfCostApplication {
private TbsCostContractApplication costContractApplication;
private SysUserCodeMathMapper userCodeMathMapper; private SysUserCodeMathMapper userCodeMathMapper;
private final SysSyncLogService sysSyncLogService; private final SysSyncLogService sysSyncLogService;
private SysTableTempMapper sysTableTempMapper; private SysTableTempMapper sysTableTempMapper;
@ -187,6 +188,7 @@ public class PortalOfCostApplication {
*/ */
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void createCostProcessByPolicy(ProcessCreatePolicyCostBo createBo){ public void createCostProcessByPolicy(ProcessCreatePolicyCostBo createBo){
LocalDateTime nowTime = LocalDateTime.now();
SysUser user = userService.getByAccount(createBo.getUserCode()); SysUser user = userService.getByAccount(createBo.getUserCode());
if(user==null){Assert.throwEx("用户不存在,请重新编辑");} if(user==null){Assert.throwEx("用户不存在,请重新编辑");}
TzcPolicyItem policyItem = policyItemServiceService.getByPolicyItemCode(createBo.getPolicyItemCode()); TzcPolicyItem policyItem = policyItemServiceService.getByPolicyItemCode(createBo.getPolicyItemCode());
@ -194,6 +196,9 @@ public class PortalOfCostApplication {
if(!policyItem.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_2_SyncSuccess)){ if(!policyItem.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_2_SyncSuccess)){
Assert.throwEx("政策项状态异常或未完成同步"); Assert.throwEx("政策项状态异常或未完成同步");
} }
if(nowTime.isBefore(policyItem.getPolicyEndDate().atStartOfDay())){
Assert.throwEx("政策活动已截止于"+policyItem.getPolicyEndDate());
}
if(CollectionUtil.isEmpty(createBo.getGoodsList()) || createBo.getGoodsList().size()==0){ if(CollectionUtil.isEmpty(createBo.getGoodsList()) || createBo.getGoodsList().size()==0){
Assert.throwEx("商品数据不能为空"); Assert.throwEx("商品数据不能为空");
} }
@ -215,7 +220,6 @@ public class PortalOfCostApplication {
//常用参数 //常用参数
final String GOODS_TYPE = "sku"; final String GOODS_TYPE = "sku";
final BigDecimal OneHundred = new BigDecimal("100"); final BigDecimal OneHundred = new BigDecimal("100");
LocalDateTime nowTime = LocalDateTime.now();
LocalDate nowDate = LocalDate.now(); LocalDate nowDate = LocalDate.now();
Long supplierId = Long.parseLong(supplier.getId()); Long supplierId = Long.parseLong(supplier.getId());
BigDecimal totalAmount = createBo.getTotalAmount(); BigDecimal totalAmount = createBo.getTotalAmount();
@ -1150,11 +1154,13 @@ public class PortalOfCostApplication {
paymentItemService.save(paymentItem); paymentItemService.save(paymentItem);
verificationSubjectService.save(verificationSubject); verificationSubjectService.save(verificationSubject);
} }
if(subjectSurplus.compareTo(BigDecimal.ZERO)>0){ if(subjectSurplus.compareTo(BigDecimal.ZERO)>0){
Assert.throwEx("余额不足"); Assert.throwEx("余额不足");
} }
// 修复没有vtbFundFlow异常,并修复活动状态 // 修复没有vtbFundFlow异常,并修复活动状态
verificationService.successCommit(verification.getId(),false); verificationService.successCommit(verification.getId(),false);
costContractApplication.resetState();
} }

11
src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyController.java

@ -184,6 +184,15 @@ public class TzcPolicyController {
public R<TzcPolicy> getById(@PathVariable("id") String id){ public R<TzcPolicy> getById(@PathVariable("id") String id){
TzcPolicy tzcPolicy = tzcPolicyService.getById(id); TzcPolicy tzcPolicy = tzcPolicyService.getById(id);
if(tzcPolicy!=null){ if(tzcPolicy!=null){
if(tzcPolicy.getPolicyStatus().equals(TzcPolicyStatus.Status_1_Checking)){
//尝试进行补偿
try {
tzcPolicyOperationService.runCompensate(id);
tzcPolicy = tzcPolicyService.getById(id);
}catch (Exception e){
}
}
List<TzcPolicyItem> policyItemList = tzcPolicyItemService.listByPolicyId(tzcPolicy.getId()); List<TzcPolicyItem> policyItemList = tzcPolicyItemService.listByPolicyId(tzcPolicy.getId());
tzcPolicy.setPolicyItemList(policyItemList); tzcPolicy.setPolicyItemList(policyItemList);
} }
@ -450,7 +459,7 @@ public class TzcPolicyController {
* @param id * @param id
* @return * @return
*/ */
@PostMapping("/cancellation/{id}") @DeleteMapping("/cancellation/{id}")
public R<?> cancellation(@PathVariable Long id){ public R<?> cancellation(@PathVariable Long id){
List<TzcPolicyItem> tzcPolicyItemList = tzcPolicyItemService.listByPolicyId(id); List<TzcPolicyItem> tzcPolicyItemList = tzcPolicyItemService.listByPolicyId(id);
List<Long> itemIds = tzcPolicyItemList.stream().map(TzcPolicyItem::getId).collect(Collectors.toList()); List<Long> itemIds = tzcPolicyItemList.stream().map(TzcPolicyItem::getId).collect(Collectors.toList());

38
src/main/java/com/qs/serve/modules/tzc/controller/TzcPolicyItemController.java

@ -8,9 +8,12 @@ import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.*; import com.qs.serve.common.util.*;
import com.qs.serve.modules.sys.entity.SysAttach; import com.qs.serve.modules.sys.entity.SysAttach;
import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.sys.service.SysAttachService; import com.qs.serve.modules.sys.service.SysAttachService;
import com.qs.serve.modules.sys.service.SysUserService;
import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget;
import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudgetMapper; import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudgetMapper;
import com.qs.serve.modules.tzc.common.TzPolicyItemStatus;
import com.qs.serve.modules.tzc.common.TzcPolicyStatus; import com.qs.serve.modules.tzc.common.TzcPolicyStatus;
import com.qs.serve.modules.tzc.entity.TzcPolicy; import com.qs.serve.modules.tzc.entity.TzcPolicy;
import com.qs.serve.modules.tzc.entity.TzcPolicyGoods; import com.qs.serve.modules.tzc.entity.TzcPolicyGoods;
@ -27,6 +30,7 @@ import com.qs.serve.modules.tzc.entity.TzcPolicyItem;
import com.qs.serve.modules.tzc.service.TzcPolicyItemService; import com.qs.serve.modules.tzc.service.TzcPolicyItemService;
import javax.validation.Valid; import javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -42,6 +46,7 @@ import java.util.stream.Collectors;
@RequestMapping("tzc/policyItem") @RequestMapping("tzc/policyItem")
public class TzcPolicyItemController { public class TzcPolicyItemController {
private SysUserService sysUserService;
private TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper; private TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper;
private TzcPolicyItemService tzcPolicyItemService; private TzcPolicyItemService tzcPolicyItemService;
private TzcPolicyGoodsService tzcPolicyGoodsService; private TzcPolicyGoodsService tzcPolicyGoodsService;
@ -49,6 +54,17 @@ public class TzcPolicyItemController {
private SysAttachService attachService; private SysAttachService attachService;
private TzcPolicyApplicationService policyApplicationService; private TzcPolicyApplicationService policyApplicationService;
/**
* 释放政策
* @param policyItemId
* @return
*/
@GetMapping("/releaseDev")
public R<?> releasePcy(Long policyItemId){
policyApplicationService.syncExpireRelease();
return R.ok();
}
/** /**
* 释放政策 * 释放政策
* @param policyItemId * @param policyItemId
@ -56,7 +72,19 @@ public class TzcPolicyItemController {
*/ */
@GetMapping("/releasePolicyByItemId") @GetMapping("/releasePolicyByItemId")
public R<?> releasePolicy(Long policyItemId){ public R<?> releasePolicy(Long policyItemId){
policyApplicationService.releasePolicyItem(policyItemId); SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId());
policyApplicationService.releasePolicyItem(policyItemId, sysUser);
return R.ok();
}
/**
* 取消释放政策
* @param policyItemId
* @return
*/
@GetMapping("/cancelReleasePolicyByItemId")
public R<?> cancelReleasePolicyByItemId(Long policyItemId){
policyApplicationService.cancelReleasePolicyItem(policyItemId);
return R.ok(); return R.ok();
} }
@ -75,7 +103,15 @@ public class TzcPolicyItemController {
policy = tzcPolicyService.getById(param.getPolicyId()); policy = tzcPolicyService.getById(param.getPolicyId());
} }
LocalDateTime nowTime = LocalDateTime.now();
for (TzcPolicyItem policyItem : list) { for (TzcPolicyItem policyItem : list) {
int expire = 0;
if(policyItem.getPolicyEndDate().atStartOfDay().isBefore(nowTime)){
expire = 1;
}
policyItem.setExpireFlag(expire);
List<TzcPolicyGoods> policyGoodsList = tzcPolicyGoodsService.listByItemId(policyItem.getId()); List<TzcPolicyGoods> policyGoodsList = tzcPolicyGoodsService.listByItemId(policyItem.getId());
policyItem.setPolicyGoodsList(policyGoodsList); policyItem.setPolicyGoodsList(policyGoodsList);
if(policyItem.getAttachIds()!=null&&policyItem.getAttachIds().length>0){ if(policyItem.getAttachIds()!=null&&policyItem.getAttachIds().length>0){

24
src/main/java/com/qs/serve/modules/tzc/entity/TzcPolicyItem.java

@ -81,6 +81,24 @@ public class TzcPolicyItem implements Serializable {
@NotNull(message = "已用金额不能为空") @NotNull(message = "已用金额不能为空")
private BigDecimal usedAmount; private BigDecimal usedAmount;
/** 是否释放 */
private Integer releaseFlag;
/** 释放时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(updateStrategy = FieldStrategy.NOT_NULL)
private LocalDateTime releaseTime;
private String releaseUserId;
private String releaseUserCode;
private String releaseUserName;
/** 释放金额 */
private BigDecimal releaseAmount;
/** 客户id */ /** 客户id */
@NotNull(message = "客户id不能为空") @NotNull(message = "客户id不能为空")
private Long supplierId; private Long supplierId;
@ -216,6 +234,12 @@ public class TzcPolicyItem implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private List<?> matchBudgetList; private List<?> matchBudgetList;
/**
* 是否过期
*/
@TableField(exist = false)
private Integer expireFlag;
public void initSetNull(){ public void initSetNull(){
this.setId(null); this.setId(null);
this.setCreateBy(null); this.setCreateBy(null);

6
src/main/java/com/qs/serve/modules/tzc/mapper/TzcPolicyMapper.java

@ -39,6 +39,12 @@ public interface TzcPolicyMapper extends BaseMapper<TzcPolicy> {
*/ */
int cancelCostExtUserByPolicyIds(@Param("policyIds") List<String> policyIds); int cancelCostExtUserByPolicyIds(@Param("policyIds") List<String> policyIds);
/**
* 获取需要释放的Item
* @return
*/
List<Long> listExpireItemIds();
/** /**
* 替换继承人 * 替换继承人
* @param userId * @param userId

14
src/main/java/com/qs/serve/modules/tzc/service/TzcPolicyApplicationService.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.tzc.service; package com.qs.serve.modules.tzc.service;
import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult; import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult;
import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo;
import com.qs.serve.modules.tzc.entity.TzcPolicyItem; import com.qs.serve.modules.tzc.entity.TzcPolicyItem;
@ -21,7 +22,18 @@ public interface TzcPolicyApplicationService {
void syncPolicy(Long policyId); void syncPolicy(Long policyId);
void releasePolicyItem(Long policyId); /**
* 同步过期的政策释放
*/
void syncExpireRelease();
/**
* 取消释放
* @param policyItemId
*/
void cancelReleasePolicyItem(Long policyItemId);
void releasePolicyItem(Long policyItemId, SysUser user);
/** /**
* 创建费用占用结果 * 创建费用占用结果

104
src/main/java/com/qs/serve/modules/tzc/service/impl/TzcPolicyApplicationServiceImpl.java

@ -1,11 +1,13 @@
package com.qs.serve.modules.tzc.service.impl; package com.qs.serve.modules.tzc.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.qs.serve.common.config.DevEnvironmentConfig; import com.qs.serve.common.config.DevEnvironmentConfig;
import com.qs.serve.common.config.properties.ProjectApisProperties; import com.qs.serve.common.config.properties.ProjectApisProperties;
import com.qs.serve.common.config.properties.ProjectProperties; import com.qs.serve.common.config.properties.ProjectProperties;
import com.qs.serve.common.framework.manager.AsyncFactory; import com.qs.serve.common.framework.manager.AsyncFactory;
import com.qs.serve.common.framework.manager.AsyncManager; import com.qs.serve.common.framework.manager.AsyncManager;
import com.qs.serve.common.framework.redis.RedisService;
import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.enums.BudgetLogOptFlag;
import com.qs.serve.common.model.consts.BudgetLogRollbackFlag; import com.qs.serve.common.model.consts.BudgetLogRollbackFlag;
import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.dto.R;
@ -53,12 +55,14 @@ import com.qs.serve.modules.tzc.entity.TzcPolicyGoods;
import com.qs.serve.modules.tzc.entity.TzcPolicyItem; import com.qs.serve.modules.tzc.entity.TzcPolicyItem;
import com.qs.serve.modules.tzc.entity.dto.PolicyItemDto; import com.qs.serve.modules.tzc.entity.dto.PolicyItemDto;
import com.qs.serve.modules.tzc.mapper.TzcPolicyItemMapper; import com.qs.serve.modules.tzc.mapper.TzcPolicyItemMapper;
import com.qs.serve.modules.tzc.mapper.TzcPolicyMapper;
import com.qs.serve.modules.tzc.service.TzcPolicyApplicationService; import com.qs.serve.modules.tzc.service.TzcPolicyApplicationService;
import com.qs.serve.modules.tzc.service.TzcPolicyGoodsService; import com.qs.serve.modules.tzc.service.TzcPolicyGoodsService;
import com.qs.serve.modules.tzc.service.TzcPolicyItemService; import com.qs.serve.modules.tzc.service.TzcPolicyItemService;
import com.qs.serve.modules.tzc.service.TzcPolicyService; import com.qs.serve.modules.tzc.service.TzcPolicyService;
import com.qs.serve.modules.vtb.common.VtbFundFlowType; import com.qs.serve.modules.vtb.common.VtbFundFlowType;
import com.qs.serve.modules.vtb.entity.VtbFundFlow; import com.qs.serve.modules.vtb.entity.VtbFundFlow;
import com.qs.serve.modules.vtb.entity.VtbVerification;
import com.qs.serve.modules.vtb.service.VtbFundFlowService; import com.qs.serve.modules.vtb.service.VtbFundFlowService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -82,6 +86,8 @@ import java.util.stream.Collectors;
@AllArgsConstructor @AllArgsConstructor
public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationService { public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationService {
private RedisService redisService;
private TzcPolicyMapper tzcPolicyMapper;
private TzcPolicyService tzcPolicyService; private TzcPolicyService tzcPolicyService;
private TzcPolicyItemService tzcPolicyItemService; private TzcPolicyItemService tzcPolicyItemService;
private TzcPolicyItemMapper tzcPolicyItemMapper; private TzcPolicyItemMapper tzcPolicyItemMapper;
@ -107,6 +113,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
private ProjectApisProperties projectApisProperties; private ProjectApisProperties projectApisProperties;
private final VtbFundFlowService vtbFundFlowService; private final VtbFundFlowService vtbFundFlowService;
@Override @Override
public void syncPolicy(Long policyId) { public void syncPolicy(Long policyId) {
LambdaQueryWrapper<TzcPolicyItem> wrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TzcPolicyItem> wrapper = new LambdaQueryWrapper<>();
@ -119,9 +126,84 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
} }
@Override @Override
public void releasePolicyItem(Long policyItemId) { public void syncExpireRelease() {
SysUser sysUser = new SysUser();
sysUser.setId("0");
sysUser.setName("系统执行");
sysUser.setCode("");
List<Long> ids = tzcPolicyMapper.listExpireItemIds();
for (Long id : ids) {
try {
releasePolicyItem(id,sysUser);
} catch (Exception e) {
log.error("释放过期费用失败,itemId:{} 原因:{}",id,e.getMessage());
}
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void cancelReleasePolicyItem(Long policyItemId) {
TzcPolicyItem policyItem = tzcPolicyItemService.getById(policyItemId);
if(policyItem.getPolicyEndDate().atStartOfDay().isBefore(LocalDateTime.now())){
Assert.throwEx("政策项已过期,不支持取消释放");
}
if(!policyItem.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_3_Finished)||
!policyItem.getReleaseFlag().equals(1)){
Assert.throwEx("政策项的状态不支持");
}
//查询已转移金额,金额为正数
BigDecimal usedAmt = tzcPolicyItemMapper.sumPolicyItemTranAmt(policyItem.getId());
if(policyItem.getUsedAmount().compareTo(usedAmt)!=0){
Assert.throwEx("政策的已用金额异常");
}
//移除流水
vtbFundFlowService.remove(new LambdaQueryWrapper<VtbFundFlow>()
.eq(VtbFundFlow::getPolicyItemId,policyItemId)
.eq(VtbFundFlow::getFundType,VtbFundFlowType.Release)
);
//移除Log释放
List<TbsBudgetLog> budgetLogList = budgetLogService.list(new LambdaQueryWrapper<TbsBudgetLog>()
.eq(TbsBudgetLog::getOptType,BudgetLogOptFlag.State_16.getCode())
.eq(TbsBudgetLog::getPolicyItemId,policyItemId)
);
BigDecimal totalRelease = BigDecimal.ZERO;
for (TbsBudgetLog budgetLog : budgetLogList) {
totalRelease = totalRelease.add(budgetLog.getAmount());
}
if(policyItem.getReleaseAmount().compareTo(totalRelease)!=0){
Assert.throwEx("释放金额异常");
}
List<Long> logIds = budgetLogList.stream().map(TbsBudgetLog::getId).collect(Collectors.toList());
budgetLogService.removeBatchByIds(logIds);
//恢复状态
policyItem.setReleaseAmount(BigDecimal.ZERO);
policyItem.setReleaseFlag(0);
policyItem.setReleaseTime(null);
policyItem.setReleaseUserId("");
policyItem.setReleaseUserCode("");
policyItem.setReleaseUserName("");
policyItem.setPolicyItemStatus(TzPolicyItemStatus.Status_2_SyncSuccess);
tzcPolicyItemService.updateById(policyItem);
//恢复主表状态
Long policyId = policyItem.getPolicyId();
TzcPolicy policy = tzcPolicyService.getById(policyId);
if(policy.getPolicyStatus().equals(TzcPolicyStatus.Status_3_Success)){
policy.setPolicyStatus(TzcPolicyStatus.Status_2_PassSuccess);
tzcPolicyService.updateById(policy);
}
}
@Override
@Transactional(rollbackFor = Exception.class)
public void releasePolicyItem(Long policyItemId, SysUser user) {
TzcPolicyItem policyItem = tzcPolicyItemService.getById(policyItemId); TzcPolicyItem policyItem = tzcPolicyItemService.getById(policyItemId);
if(!policyItem.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_3_Finished)){ if(!policyItem.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_2_SyncSuccess)){
Assert.throwEx("政策项的状态不支持"); Assert.throwEx("政策项的状态不支持");
} }
Long policyId = policyItem.getPolicyId(); Long policyId = policyItem.getPolicyId();
@ -129,7 +211,11 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
if(!policy.getPolicyStatus().equals(TzcPolicyStatus.Status_2_PassSuccess)){ if(!policy.getPolicyStatus().equals(TzcPolicyStatus.Status_2_PassSuccess)){
Assert.throwEx("政策的状态不支持"); Assert.throwEx("政策的状态不支持");
} }
//查询已转移金额,金额为正数
BigDecimal usedAmt = tzcPolicyItemMapper.sumPolicyItemTranAmt(policyItem.getId()); BigDecimal usedAmt = tzcPolicyItemMapper.sumPolicyItemTranAmt(policyItem.getId());
if(policyItem.getUsedAmount().compareTo(usedAmt)!=0){
Assert.throwEx("政策的已用金额异常");
}
BigDecimal surplusAmt = policyItem.getDiscountMax().subtract(usedAmt); BigDecimal surplusAmt = policyItem.getDiscountMax().subtract(usedAmt);
if(surplusAmt.compareTo(BigDecimal.ZERO)>0){ if(surplusAmt.compareTo(BigDecimal.ZERO)>0){
LambdaQueryWrapper<TbsBudgetLog> tbsLogLqw = new LambdaQueryWrapper<>(); LambdaQueryWrapper<TbsBudgetLog> tbsLogLqw = new LambdaQueryWrapper<>();
@ -165,7 +251,13 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
budgetLog.setOptType(optFlag.getCode()); budgetLog.setOptType(optFlag.getCode());
budgetLogService.save(budgetLog); budgetLogService.save(budgetLog);
policyItem.setUsedAmount(policyItem.getDiscountMax()); //policyItem.setUsedAmount(policyItem.getDiscountMax());
policyItem.setReleaseAmount(surplusAmt);
policyItem.setReleaseFlag(1);
policyItem.setReleaseTime(LocalDateTime.now());
policyItem.setReleaseUserId(user.getId());
policyItem.setReleaseUserCode(user.getCode());
policyItem.setReleaseUserName(user.getName());
policyItem.setPolicyItemStatus(TzPolicyItemStatus.Status_3_Finished); policyItem.setPolicyItemStatus(TzPolicyItemStatus.Status_3_Finished);
tzcPolicyItemService.updateById(policyItem); tzcPolicyItemService.updateById(policyItem);
@ -175,7 +267,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
boolean allFinished = true; boolean allFinished = true;
for (TzcPolicyItem item : listByPolicyId) { for (TzcPolicyItem item : listByPolicyId) {
if(!item.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_3_Finished)){ if(!item.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_3_Finished)){
if (item.getDiscountMax().compareTo(item.getUsedAmount())==0){ if (item.getDiscountMax().compareTo(item.getUsedAmount())==0||item.getReleaseFlag().equals(1)){
item.setPolicyItemStatus(TzPolicyItemStatus.Status_3_Finished); item.setPolicyItemStatus(TzPolicyItemStatus.Status_3_Finished);
tzcPolicyItemService.updateById(item); tzcPolicyItemService.updateById(item);
continue; continue;
@ -289,8 +381,10 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void commitPolicy(Long policyId){ public void commitPolicy(Long policyId){
seeYonService.testConnection();
TzcPolicy tzcPolicy = tzcPolicyService.getById(policyId); TzcPolicy tzcPolicy = tzcPolicyService.getById(policyId);
redisService.throwResLock(TzcPolicy.class.getSimpleName(),tzcPolicy.getId()+"");
seeYonService.testConnection();
Integer tzcPolicyStatus = tzcPolicy.getPolicyStatus(); Integer tzcPolicyStatus = tzcPolicy.getPolicyStatus();
if(!tzcPolicy.allowEditFlag()){ if(!tzcPolicy.allowEditFlag()){
Assert.throwEx("操作失败,政策状态不支持"); Assert.throwEx("操作失败,政策状态不支持");

2
src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java

@ -335,7 +335,7 @@ public class VtbVerificationController {
* @param commitBo * @param commitBo
* @return * @return
*/ */
@LimitSubmit(interval = 3000) @LimitSubmit(interval = 30000)
@PostMapping("/commit") @PostMapping("/commit")
@SysLog(module = SystemModule.Verification, title = "核销", biz = BizType.UPDATE) @SysLog(module = SystemModule.Verification, title = "核销", biz = BizType.UPDATE)
@PreAuthorize("hasRole('vtb:verification:commit')") @PreAuthorize("hasRole('vtb:verification:commit')")

4
src/main/java/com/qs/serve/modules/vtb/mapper/VtbFundFlowMapper.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.vtb.mapper; package com.qs.serve.modules.vtb.mapper;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.common.model.AmountDTO; import com.qs.serve.common.model.AmountDTO;
import com.qs.serve.modules.vtb.entity.VtbFundFlow; import com.qs.serve.modules.vtb.entity.VtbFundFlow;
@ -14,6 +15,9 @@ import java.util.List;
*/ */
public interface VtbFundFlowMapper extends BaseMapper<VtbFundFlow> { public interface VtbFundFlowMapper extends BaseMapper<VtbFundFlow> {
@InterceptorIgnore(tenantLine = "1")
List<Long> listMissReleaseActivityId();
/** /**
* 统计金额 * 统计金额
* @param flow * @param flow

6
src/main/java/com/qs/serve/modules/vtb/mapper/VtbVerificationMapper.java

@ -84,5 +84,11 @@ public interface VtbVerificationMapper extends BaseMapper<VtbVerification> {
*/ */
int updateCostExtUserByCostIds(@Param("costIds") List<String> costIds, @Param("obj") SysUser sysUser); int updateCostExtUserByCostIds(@Param("costIds") List<String> costIds, @Param("obj") SysUser sysUser);
/**
* 获取活动核销金额
* @param actId
* @return
*/
BigDecimal getActivityVerificationAmt(@Param("actId")Long actId);
} }

13
src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

@ -8,6 +8,7 @@ import com.qs.serve.common.config.properties.ProjectApisProperties;
import com.qs.serve.common.config.properties.ProjectProperties; import com.qs.serve.common.config.properties.ProjectProperties;
import com.qs.serve.common.framework.manager.AsyncFactory; import com.qs.serve.common.framework.manager.AsyncFactory;
import com.qs.serve.common.framework.manager.AsyncManager; import com.qs.serve.common.framework.manager.AsyncManager;
import com.qs.serve.common.framework.redis.RedisService;
import com.qs.serve.common.model.AmountDTO; import com.qs.serve.common.model.AmountDTO;
import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.enums.BudgetLogOptFlag;
import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.dto.R;
@ -103,6 +104,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
private final SysSyncLogService sysSyncLogService; private final SysSyncLogService sysSyncLogService;
private final ProjectApisProperties projectApisProperties; private final ProjectApisProperties projectApisProperties;
private final RedisService redisService;
private final VtbVerificationChannelService verificationChannelService; private final VtbVerificationChannelService verificationChannelService;
private final VtbVerificationChannelPointService verificationChannelPointService; private final VtbVerificationChannelPointService verificationChannelPointService;
@ -475,6 +477,12 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
} }
log.warn("费用释放 activityId:{} url:{}",activityId,url); log.warn("费用释放 activityId:{} url:{}",activityId,url);
SysUser sysUser = sysUserService.getByAccount(userCode); SysUser sysUser = sysUserService.getByAccount(userCode);
if(userCode.equals("0")){
sysUser = new SysUser();
sysUser.setCode("0");
sysUser.setName("系统执行");
sysUser.setId("0");
}
if(sysUser==null){ if(sysUser==null){
Assert.throwEx("用户编码不存在:"+userCode); Assert.throwEx("用户编码不存在:"+userCode);
} }
@ -668,10 +676,10 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void commit(VtbVerificationBo verificationBo) { public void commit(VtbVerificationBo verificationBo) {
TbsActivity activity = activityService.getById(verificationBo.getActivityId());
redisService.throwResLock(VtbVerification.class.getSimpleName(),activity.getId()+"");
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId()); SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId());
sysUser.checkSyAccount(); sysUser.checkSyAccount();
TbsActivity activity = activityService.getById(verificationBo.getActivityId());
//自定义成本中心核销 //自定义成本中心核销
List<VtbVerificationSubjectCenterBo> subjectCenterBoList = verificationBo.getSubjectCenterList(); List<VtbVerificationSubjectCenterBo> subjectCenterBoList = verificationBo.getSubjectCenterList();
boolean isCenterCheck = CollectionUtil.isNotEmpty(subjectCenterBoList); boolean isCenterCheck = CollectionUtil.isNotEmpty(subjectCenterBoList);
@ -844,6 +852,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
} }
verification.setAmount(totalAmount); verification.setAmount(totalAmount);
verification.setAmountRecord(totalAmount); verification.setAmountRecord(totalAmount);
//保存 //保存
this.saveOrUpdate(verification); this.saveOrUpdate(verification);
this.commitSy(activity,sysUser,verification,saleBizNames,bizBizNames); this.commitSy(activity,sysUser,verification,saleBizNames,bizBizNames);

2
src/main/java/com/qs/serve/task/TbsTask.java

@ -82,7 +82,7 @@ public class TbsTask {
} }
//启用和停用模板规则 //启用和停用模板规则
@Scheduled(cron="0 0 1 * * ?") //@Scheduled(cron="0 0 1 * * ?")
public void task2(){ public void task2(){

2
src/main/resources/application.yml

@ -58,7 +58,7 @@ logging:
ROOT: info ROOT: info
com.qs.serve: debug com.qs.serve: debug
#com.qs.serve.modules.his: info #com.qs.serve.modules.his: info
com.qs.serve.modules.sys: debug com.qs.serve.modules.sys: info
com.qs.serve.modules.tag: info com.qs.serve.modules.tag: info
org.xnio.nio: info org.xnio.nio: info
org.springframework: info org.springframework: info

101
src/main/resources/mapper/bir/BirBudgetTargetMapper.xml

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qs.serve.modules.bir.mapper.BirBudgetTargetMapper">
<resultMap id="birBudgetTargetMap" type="com.qs.serve.modules.bir.entity.BirBudgetTarget" >
<result property="id" column="id"/>
<result property="searchType" column="search_type"/>
<result property="yearNum" column="year_num"/>
<result property="quarterNum" column="quarter_num"/>
<result property="monthNum" column="month_num"/>
<result property="targetAmt" column="target_amt"/>
<result property="budgetAmt" column="budget_amt"/>
<result property="dispatchAmt" column="dispatch_amt"/>
<result property="lastYearDispatchAmt" column="last_year_dispatch_amt"/>
<result property="provinceCityAmt" column="province_city_amt"/>
<result property="provinceCityRegionAmt" column="province_city_region_amt"/>
<result property="totalRealAmt" column="total_real_amt"/>
<result property="brandId" column="brand_id"/>
<result property="brandCode" column="brand_code"/>
<result property="brandName" column="brand_name"/>
<result property="centerType" column="center_type"/>
<result property="centerId" column="center_id"/>
<result property="centerCode" column="center_code"/>
<result property="centerName" column="center_name"/>
</resultMap>
<sql id="birBudgetTargetSql">
bir_budget_target.`id`,
bir_budget_target.`search_type`,
bir_budget_target.`year_num`,
bir_budget_target.`quarter_num`,
bir_budget_target.`month_num`,
bir_budget_target.`target_amt`,
bir_budget_target.`budget_amt`,
bir_budget_target.`dispatch_amt`,
bir_budget_target.`last_year_dispatch_amt`,
bir_budget_target.`province_city_amt`,
bir_budget_target.`province_city_region_amt`,
bir_budget_target.`total_real_amt`,
bir_budget_target.`brand_id`,
bir_budget_target.`brand_code`,
bir_budget_target.`brand_name`,
bir_budget_target.`center_type`,
bir_budget_target.`center_id`,
bir_budget_target.`center_code`,
bir_budget_target.`center_name` </sql>
<select id="selectBirBudgetTargetList" parameterType="com.qs.serve.modules.bir.entity.BirBudgetTarget" resultMap="birBudgetTargetMap">
SELECT <include refid="birBudgetTargetSql"/> FROM `bir_budget_target` `bir_budget_target`
<where>
<if test="query.loadType != null"> and `bir_budget_target`.`search_type` = #{query.loadType}</if>
<if test="query.yearMonthStart != null"> and `bir_budget_target`.`row_date` &gt;= #{query.yearMonthStart}</if>
<if test="query.yearMonthEnd != null"> and `bir_budget_target`.`row_date` &lt;= #{query.yearMonthEnd}</if>
<if test="query.brandIds!=null and query.brandIds.size > 0">
and `bir_budget_target`.`brand_id` in
<foreach collection="query.brandIds" item="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
</if>
<if test="query.selectCenterFlag=1">
and (
1=0
<if test="query.supplierIds!=null and query.supplierIds.size > 0">
or (`bir_budget_target`.`center_type` = 'supplier' and `bir_budget_target`.center_id in
<foreach collection="query.supplierIds" item="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
)
</if>
<if test="query.saleRegionIds!=null and query.saleRegionIds.size > 0">
or (`bir_budget_target`.`center_type` = 'saleRegion' and `bir_budget_target`.center_id in
<foreach collection="query.saleRegionIds" item="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
)
</if>
<if test="query.bizRegionIds!=null and query.bizRegionIds.size > 0">
or (`bir_budget_target`.`center_type` = 'bizRegion' and `bir_budget_target`.center_id in
<foreach collection="query.bizRegionIds" item="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
)
</if>
<if test="query.centerIds!=null and query.centerIds.size > 0">
or (`bir_budget_target`.`center_type` = 'costCenter' and `bir_budget_target`.center_id in
<foreach collection="query.centerIds" item="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
)
</if>
)
</if>
</where>
</select>
</mapper>

12
src/main/resources/mapper/bms/BmsSupplierMapper.xml

@ -85,14 +85,19 @@
bms_supplier.`del_flag` </sql> bms_supplier.`del_flag` </sql>
<select id="selectSupplierList" parameterType="com.qs.serve.modules.bms.entity.BmsSupplier" resultMap="bmsSupplierMap"> <select id="selectSupplierList" parameterType="com.qs.serve.modules.bms.entity.BmsSupplier" resultMap="bmsSupplierMap">
SELECT <include refid="bmsSupplierSql"/> FROM `bms_supplier` `bms_supplier` SELECT <include refid="bmsSupplierSql"/> ,
supplier_addr.`count_addr`
FROM `bms_supplier` `bms_supplier`
left join (select count(1) as count_addr,supplier_id from bms_supplier_address where del_flag = 0 group by supplier_id) supplier_addr
on supplier_addr.supplier_id = bms_supplier.id
<where> <where>
<if test="query.countAddr != null"> and `supplier_addr`.`count_addr` = #{query.countAddr} </if>
<if test="query.countAddrFlag != null and query.countAddrFlag==0 "> and `supplier_addr`.`count_addr` is null </if>
<if test="query.countAddrFlag != null and query.countAddrFlag==1 "> and `supplier_addr`.`count_addr` =#{query.countAddrFlag} </if>
<if test="query.id != null"> and `bms_supplier`.`id` = #{query.id}</if> <if test="query.id != null"> and `bms_supplier`.`id` = #{query.id}</if>
<if test="query.regionFirst != null"> and `bms_supplier`.`region_first` = #{query.regionFirst}</if> <if test="query.regionFirst != null"> and `bms_supplier`.`region_first` = #{query.regionFirst}</if>
<if test="query.regionSecond != null"> and `bms_supplier`.`region_second` = #{query.regionSecond}</if> <if test="query.regionSecond != null"> and `bms_supplier`.`region_second` = #{query.regionSecond}</if>
<if test="query.regionThird != null"> and `bms_supplier`.`region_third` = #{query.regionThird}</if> <if test="query.regionThird != null"> and `bms_supplier`.`region_third` = #{query.regionThird}</if>
<if test="query.cdOrderFlag != null"> and `bms_supplier`.`cd_order_flag` = #{query.regionThird}</if>
<if test="query.supplierFlag != null"> and `bms_supplier`.`supplier_flag` = #{query.supplierFlag}</if> <if test="query.supplierFlag != null"> and `bms_supplier`.`supplier_flag` = #{query.supplierFlag}</if>
<if test="query.address != null and query.address != ''"> and `bms_supplier`.`address` = #{query.address}</if> <if test="query.address != null and query.address != ''"> and `bms_supplier`.`address` = #{query.address}</if>
<if test="query.name != null and query.name != ''"> and `bms_supplier`.`name` like concat('%',#{query.name},'%') </if> <if test="query.name != null and query.name != ''"> and `bms_supplier`.`name` like concat('%',#{query.name},'%') </if>
@ -103,6 +108,7 @@
<if test="query.parentCode != null and query.parentCode != ''"> and `bms_supplier`.`parent_code` = #{query.parentCode}</if> <if test="query.parentCode != null and query.parentCode != ''"> and `bms_supplier`.`parent_code` = #{query.parentCode}</if>
<if test="query.stopFlag != null"> and `bms_supplier`.`stop_flag` = #{query.stopFlag}</if> <if test="query.stopFlag != null"> and `bms_supplier`.`stop_flag` = #{query.stopFlag}</if>
<if test="query.belong != null and query.belong != ''"> and `bms_supplier`.`belong` = #{query.belong}</if> <if test="query.belong != null and query.belong != ''"> and `bms_supplier`.`belong` = #{query.belong}</if>
<if test="query.cdOrderFlag != null"> and `bms_supplier`.`cd_order_flag` = #{query.cdOrderFlag}</if>
<if test="query.createTime != null"> and `bms_supplier`.`create_time` = #{query.createTime}</if> <if test="query.createTime != null"> and `bms_supplier`.`create_time` = #{query.createTime}</if>
<if test="query.createBy != null and query.createBy != ''"> and `bms_supplier`.`create_by` = #{query.createBy}</if> <if test="query.createBy != null and query.createBy != ''"> and `bms_supplier`.`create_by` = #{query.createBy}</if>
<if test="query.updateTime != null"> and `bms_supplier`.`update_time` = #{query.updateTime}</if> <if test="query.updateTime != null"> and `bms_supplier`.`update_time` = #{query.updateTime}</if>

3
src/main/resources/mapper/goods/GoodsSpuMapper.xml

@ -36,7 +36,8 @@
goods_sku.sku_name as sku_name, goods_sku.sku_name as sku_name,
goods_sku.id as sku_id, goods_sku.id as sku_id,
goods_sku.sku_code as sku_code, goods_sku.sku_code as sku_code,
goods_sku.special_flag as sku_special_flag goods_sku.special_flag as sku_special_flag,
goods_sku.belong as sku_belong
</sql> </sql>

32
src/main/resources/mapper/his/HisUserSupplierMapper.xml

@ -70,4 +70,36 @@
bms_supplier_visit_address.id bms_supplier_visit_address.id
</select> </select>
<select id="selectSupplierIdByQuery" resultType="java.lang.Long">
select distinct his_user_supplier.supplier_id
from his_user_supplier
left join (select count(1) as count_addr,supplier_id from bms_supplier_address where del_flag = 0 group by supplier_id) supplier_addr
on supplier_addr.supplier_id = his_user_supplier.supplier_id
where
his_user_supplier.supplier_id != 0
<if test="query.countAddr != null"> and `supplier_addr`.`count_addr` = #{query.countAddr} </if>
<if test="query.countAddrFlag != null and query.countAddrFlag==0 "> and `supplier_addr`.`count_addr` is null </if>
<if test="query.countAddrFlag != null and query.countAddrFlag==1 "> and `supplier_addr`.`count_addr` =#{query.countAddrFlag} </if>
<if test="query.queryValue != null and query.queryValue != ''">
and
(
`his_user_supplier`.`supplier_code` like concat('%',#{query.queryValue},'%')
or `his_user_supplier`.`supplier_name` like concat('%',#{query.queryValue},'%')
)
</if>
<if test="query.selectUserIds!=null and query.selectUserIds.size > 0">
and `his_user_supplier`.`user_id` in
<foreach collection="query.selectUserIds" item="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
</if>
<if test="query.selectSupplierTypes!=null and query.selectSupplierTypes.size > 0">
and `his_user_supplier`.`supplier_flag` in
<foreach collection="query.selectSupplierTypes" item="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
</if>
${ew.customSqlSegment}
</select>
</mapper> </mapper>

86
src/main/resources/mapper/tbs/TbsBudget2Mapper.xml

@ -114,6 +114,7 @@
group by tbs_budget_log.schedule_item_budget_id group by tbs_budget_log.schedule_item_budget_id
</select> </select>
<select id="getCostCheckingList" resultType="com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount"> <select id="getCostCheckingList" resultType="com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount">
select select
tbs_budget_log.budget_id as id, tbs_budget_log.budget_id as id,
@ -137,5 +138,90 @@
group by tbs_budget_log.schedule_item_budget_id group by tbs_budget_log.schedule_item_budget_id
</select> </select>
<select id="getBudgetLogCheckingList" resultType="com.qs.serve.modules.tbs.entity.dto.TbsBudgetCheckingWithAmount">
select
'costApply' as type,
tbs_cost_apply.id as tar_id,
tbs_cost_apply.code as tar_code,
tbs_cost_apply.charge_theme as tar_title,
-sum(tbs_budget_log.amount) as total_amount,
tbs_cost_apply.supplier_code,
tbs_cost_apply.supplier_name,
tbs_cost_apply.user_code,
tbs_cost_apply.user_name
from tbs_budget_log
left join tbs_cost_apply on tbs_budget_log.cost_apply_id = tbs_cost_apply.id
where
tbs_budget_log.cost_apply_id is not null
and tbs_cost_apply.charge_state = 1
and tbs_budget_log.del_flag = 0
and tbs_cost_apply.del_flag = 0
and opt_type in
<foreach collection="costNumbers" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
AND tbs_budget_log.budget_id in
<foreach collection="selectIds" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
AND tbs_budget_log.schedule_item_budget_id in
<foreach collection="scheduleItemBudgetIds" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
<if test="query.type != null and query.type == 'policy'"> and 1=0 </if>
<if test="query.tarCode != null and query.tarCode != ''"> and tbs_cost_apply.code like concat('%',#{query.tarCode},'%') </if>
<if test="query.tarTitle != null and query.tarTitle != ''"> and tbs_cost_apply.charge_theme like concat('%',#{query.tarTitle},'%') </if>
<if test="query.supplierCode != null and query.supplierCode != ''"> and tbs_cost_apply.supplier_code like concat('%',#{query.supplierCode},'%') </if>
<if test="query.supplierName != null and query.supplierName != ''"> and tbs_cost_apply.supplier_name like concat('%',#{query.supplierName},'%') </if>
<if test="query.userCode != null and query.userCode != ''"> and tbs_cost_apply.user_code like concat('%',#{query.userCode},'%') </if>
<if test="query.userName != null and query.userName != ''"> and tbs_cost_apply.user_name like concat('%',#{query.userName},'%') </if>
group by tbs_budget_log.cost_apply_id
union
select
'policy' as type,
tzc_policy.id as tar_id,
tzc_policy.policy_code as tar_code,
tzc_policy.title as tar_title,
-sum(tbs_budget_log.amount) as total_amount,
tzc_policy.supplier_code,
tzc_policy.supplier_name,
tzc_policy.user_code,
tzc_policy.user_name
from tbs_budget_log
left join tzc_policy on tbs_budget_log.policy_id = tzc_policy.id
where
tbs_budget_log.policy_id is not null
and tzc_policy.policy_status = 1
and tbs_budget_log.del_flag = 0
and tzc_policy.del_flag = 0
and opt_type in
<foreach collection="policyNumbers" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
AND tbs_budget_log.budget_id in
<foreach collection="selectIds" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
AND tbs_budget_log.schedule_item_budget_id in
<foreach collection="scheduleItemBudgetIds" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
<if test="query.type != null and query.type == 'costApply'"> and 1=0 </if>
<if test="query.tarCode != null and query.tarCode != ''"> and tzc_policy.policy_code like concat('%',#{query.tarCode},'%') </if>
<if test="query.tarTitle != null and query.tarTitle != ''"> and tzc_policy.title like concat('%',#{query.tarTitle},'%') </if>
<if test="query.supplierCode != null and query.supplierCode != ''"> and tzc_policy.supplier_code like concat('%',#{query.supplierCode},'%') </if>
<if test="query.supplierName != null and query.supplierName != ''"> and tzc_policy.supplier_name like concat('%',#{query.supplierName},'%') </if>
<if test="query.userCode != null and query.userCode != ''"> and tzc_policy.user_code like concat('%',#{query.userCode},'%') </if>
<if test="query.userName != null and query.userName != ''"> and tzc_policy.user_name like concat('%',#{query.userName},'%') </if>
group by tbs_budget_log.policy_id
</select>
</mapper> </mapper>

15
src/main/resources/mapper/tzc/TzcPolicyMapper.xml

@ -107,6 +107,21 @@
order by create_time desc order by create_time desc
</select> </select>
<select id="listExpireItemIds" resultType="java.lang.Long">
SELECT
tzc_policy_item.id
FROM
tzc_policy_item
left join tzc_policy
on tzc_policy.id = tzc_policy_item.policy_id
WHERE
policy_end_date &lt; now()
and tzc_policy_item.del_flag = 0
and tzc_policy.del_flag = 0
and policy_item_status = 2
and policy_status = 2
</select>
<update id="updateCostExtUserByPolicyIds"> <update id="updateCostExtUserByPolicyIds">
update tzc_policy update tzc_policy
set ext_user_id = #{obj.id},ext_user_code=#{obj.code},ext_user_name=#{obj.name} set ext_user_id = #{obj.id},ext_user_code=#{obj.code},ext_user_name=#{obj.name}

20
src/main/resources/mapper/vtb/VtbFundFlowMapper.xml

@ -98,6 +98,26 @@
GROUP BY center_good_item_id GROUP BY center_good_item_id
</select> </select>
<select id="listMissReleaseActivityId" resultType="java.lang.Long">
select
tbs_activity.id
from tbs_activity
left join tbs_cost_apply on tbs_activity.cost_apply_id = tbs_cost_apply.id
left join (
select activity_id,sum(amount) as log_release_amt from tbs_budget_log
where del_flag = 0 and activity_id is not null and opt_type = 4
group by activity_id
) budget_log on budget_log.activity_id = tbs_activity.id
where tbs_activity.del_flag = 0
and tbs_cost_apply.del_flag = 0
and tbs_cost_apply.charge_state in (1,2,3,7)
and tbs_cost_apply.cancel_flag = 0
and tbs_activity.cancel_flag = 0
and tbs_activity.release_flag = 1
and budget_log.log_release_amt is null
and tbs_activity.release_amount != 0
</select>
</mapper> </mapper>

18
src/main/resources/mapper/vtb/VtbVerfifcationMapper.xml

@ -26,5 +26,23 @@
</foreach> </foreach>
</delete> </delete>
<select id="getActivityVerificationAmt" resultType="java.math.BigDecimal">
select
vtb_info.vtb_amt
from tbs_activity
left join tbs_cost_apply on tbs_activity.cost_apply_id = tbs_cost_apply.id
left join (
select activity_id,sum(amount) as vtb_amt from vtb_verification
where del_flag = 0 and verification_state = 1
and activity_id = #{actId}
group by activity_id
) vtb_info on vtb_info.activity_id = tbs_activity.id
where tbs_activity.del_flag = 0
and tbs_cost_apply.del_flag = 0
and tbs_cost_apply.charge_state in (1,2,3,7)
and tbs_cost_apply.cancel_flag = 0
and tbs_activity.id = #{actId}
</select>
</mapper> </mapper>

Loading…
Cancel
Save