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

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

@ -1,5 +1,7 @@
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 org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Primary;
@ -34,6 +36,39 @@ public class RedisService {
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<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(){
return getAppId(true);
@ -69,6 +76,11 @@ public class AuthContextUtils {
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){
if(value!=null){
try {

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

@ -91,7 +91,7 @@ public class BirActivityCenterGoodsController {
@GetMapping("/toSyncBirToday")
public R<?> toSyncBirEcro2(){
Long[] ids = new Long[]{0L};
Long[] ids = new Long[]{};
//List<Long> ids = tbsActivityMapper.selectReleaseCostIds();
//Set<Long> ids = tbsActivityCenterGoodsMapper.selectUpdateCostApplyIds();
List<Long> errIds = new ArrayList<>();
@ -155,12 +155,12 @@ public class BirActivityCenterGoodsController {
public R<?> syncBir(Integer idType){
LambdaQueryWrapper<TbsCostApply> lqw = new LambdaQueryWrapper<>();
lqw
.select(TbsCostApply::getId).ne(TbsCostApply::getChargeState,0)
.eq(TbsCostApply::getCancelFlag,0)
.gt(TbsCostApply::getTotalActivity,0)
.ne(TbsCostApply::getTmpState,11)
.le(TbsCostApply::getCreateTime, LocalDate.of(2024,1,1).atStartOfDay())
.ge(TbsCostApply::getCreateTime, LocalDate.of(2024,2,1).atStartOfDay()) ;
.select(TbsCostApply::getId).in(TbsCostApply::getChargeState,1,2,3,7)
//.eq(TbsCostApply::getCancelFlag,0)
//.ne(TbsCostApply::getTotalActivity,0)
.ne(TbsCostApply::getTmpState,20)
.ge(TbsCostApply::getCreateTime, LocalDate.of(2023,9,1).atStartOfDay())
.le(TbsCostApply::getCreateTime, LocalDate.of(2024,1,1).atStartOfDay()) ;
boolean ex = extracted(lqw);
while (!ex){
ex = extracted(lqw);
@ -173,11 +173,13 @@ public class BirActivityCenterGoodsController {
if(CollectionUtil.isEmpty(costIds)){
return true;
}
for (Long costId : costIds) {
for (int i = 0; i < costIds.size(); i++) {
Long costId = costIds.get(i);
centerGoodsService.rebuildBir(Arrays.asList(costId));
tbsCostApplyService.update(new LambdaUpdateWrapper<TbsCostApply>()
.eq(TbsCostApply::getId,costId)
.set(TbsCostApply::getTmpState,11));
.set(TbsCostApply::getTmpState,20));
log.info("{}/{} {}",i,costIds.size(),costId);
}
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.QueryWrapper;
import com.qs.serve.common.model.dto.PageVo;
import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.util.CollectionUtil;
import com.qs.serve.modules.tbs.entity.TbsSchedule;
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.TbsScheduleItemBudgetIdDto;
import com.qs.serve.modules.tbs.entity.dto.TbsScheduleItemWithAmount;
@ -49,6 +51,17 @@ public class BirBudgetScheduleController {
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

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

@ -1,15 +1,11 @@
package com.qs.serve.modules.bir.controller;
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.SysLog;
import com.qs.serve.common.model.dto.PageVo;
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.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.vo.*;
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.entity.TbsActivity;
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.mapper.TbsActivityCenterMapper;
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 lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
/**
* BI报表 ROI费率
@ -58,6 +48,7 @@ public class BirRoiRateController {
private TbsActivityMapper tbsActivityMapper;
private TbsActivityCenterMapper tbsActivityCenterMapper;
private BirBaseActivityService birBaseActivityService;
private BirBudgetTargetService birBudgetTargetService;
/**
* 测试
@ -149,6 +140,18 @@ public class BirRoiRateController {
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

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);
}

17
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));
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);
Map<String,BmsSupplier> supplierMap = bmsSupplierList.stream().collect(Collectors.toMap(BmsSupplier::getId,a->a));
Map<String,BmsRegion> saleRegionMap = null;
Map<String,BmsRegion2> bizRegionMap = null;
if(CollUtil.isNotEmpty(bmsSupplierList)) {
LambdaQueryWrapper<BmsRegion> regionLqw = new LambdaQueryWrapper<>();
regionLqw.in(BmsRegion::getId,bmsSupplierList.stream().map(a->a.getRegionLast()).collect(Collectors.toList()));
regionLqw.in(BmsRegion::getId,bmsSupplierList.stream().map(BmsSupplier::getRegionLast).collect(Collectors.toList()));
List<BmsRegion> saleRegionList = regionMapper.selectList(regionLqw);
Map<String,BmsRegion> saleRegionMap = saleRegionList.stream().collect(Collectors.toMap(BmsRegion::getId,a->a));
saleRegionMap = saleRegionList.stream().collect(Collectors.toMap(BmsRegion::getId, a->a));
LambdaQueryWrapper<BmsRegion2> region2Lqw = new LambdaQueryWrapper<>();
region2Lqw.in(BmsRegion2::getId,bmsSupplierList.stream().map(a->a.getRegion2Last()).collect(Collectors.toList()));
region2Lqw.in(BmsRegion2::getId,bmsSupplierList.stream().map(BmsSupplier::getRegion2Last).collect(Collectors.toList()));
List<BmsRegion2> bizRegionList = region2Mapper.selectList(region2Lqw);
Map<String,BmsRegion2> bizRegionMap = bizRegionList.stream().collect(Collectors.toMap(BmsRegion2::getId,a->a));
bizRegionMap = bizRegionList.stream().collect(Collectors.toMap(BmsRegion2::getId, a->a));
}
//过滤无效的费用申请
LambdaQueryWrapper<TbsCostApply> costLqw = new LambdaQueryWrapper<>();
@ -225,8 +228,10 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe
}
}
if(bacgList.size()>0){
LocalDateTime nowTime = LocalDateTime.now();
for (BirActivityCenterGoods bir : bacgList) {
bir.setId(IdUtil.getSnowflakeNextId());
bir.setUpdateTime(nowTime);
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.RoundingMode;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.Period;
import java.util.ArrayList;
import java.util.List;
@ -52,9 +53,11 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
List<Long> ids = activityList.stream().filter(a->a.getId()!=null)
.map(TbsActivity::getId).collect(Collectors.toList());
LambdaQueryWrapper<BirBaseActivity> birBaseActivityLqw = new LambdaQueryWrapper<>();
birBaseActivityLqw.in(BirBaseActivity::getCostApplyId,costId);
birBaseActivityLqw.eq(BirBaseActivity::getCostApplyId,costId);
super.baseMapper.delete(birBaseActivityLqw);
//防空指针
ids.add(0L);
LambdaQueryWrapper<TbsActivity> activityLqw = new LambdaQueryWrapper<>();
activityLqw.in(TbsActivity::getId,ids);
activityList = tbsActivityMapper.selectList(activityLqw);
@ -174,8 +177,10 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
}
//保存
LocalDateTime nowTime = LocalDateTime.now();
for (BirBaseActivity baseActivity : birBaseActivities) {
baseActivity.setId(IdUtil.getSnowflakeNextId());
baseActivity.setUpdateTime(nowTime);
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.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);
if(!ori.getChannelName().equals(param.getChannelName())){
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);
regionIds.addAll(supplier.listSaleRegionIds());
}
List<HisUserSupplier> hisUserSuppliers = hisUserSupplierService.selectHisSupplier(null,false);
List<Long> supplierIds = hisUserSuppliers.stream().map(HisUserSupplier::getSupplierId).collect(Collectors.toList());
//List<HisUserSupplier> hisUserSuppliers = hisUserSupplierService.selectHisSupplier(null,false);
//List<Long> supplierIds = hisUserSuppliers.stream().map(HisUserSupplier::getSupplierId).collect(Collectors.toList());
List<Long> supplierIds = hisUserSupplierService.selectHisSupplier(null,false);
supplierIds.add(0L);
List<BmsSupplier> supplierList = bmsSupplierService.listByIds(supplierIds);
List<String> firstRegionIds = supplierList.stream().map(a->a.getRegionFirst()).collect(Collectors.toList());

26
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())
.distinct().collect(Collectors.toList());
subjectIds.addAll(subjectIds2);
recursionToSetSelectAble(treeVoList, subjectIds);
recursionToSetSelectAble(treeVoList, subjectIds,null);
}
}
@ -123,30 +123,42 @@ public class BmsSubjectController {
findParentVoAndAddToList(treeVoList,newTreeVoList,pVo);
}
}
/**
* 递归设置可选
* @param treeVoList
* @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)){
return;
}
for (Object object : treeVoList) {
BmsSubjectTreeVo subjectTreeVo = (BmsSubjectTreeVo)object;
if(CollectionUtil.isEmpty(subjectTreeVo.getChildren())){
if(subjectTreeVo.getBizRegionFlag().equals(0)||subjectTreeVo.getSaleRegionFlag().equals(0)){
subjectTreeVo.setApiSelectAble(1);
}else {
if(subjectTreeVo.getPid().equals(0L)){
for (String subjectId : subjectIds) {
if(subjectTreeVo.getId().equals(subjectId)){
subjectTreeVo.setApiSelectAble(1);
break;
}
}
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);
}
}
}
}
if(CollectionUtil.isNotEmpty(subjectTreeVo.getChildren())){
if(parentNode.getApiSelectAble().equals(0)){
recursionToSetSelectAble(subjectTreeVo.getChildren(),subjectIds,subjectTreeVo);
}else {
recursionToSetSelectAble(subjectTreeVo.getChildren(),subjectIds);
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")
public R<PageVo<BmsSupplierContacts>> getPage(BmsSupplierContactsSo param){
List<HisUserSupplier> hisUserSuppliers = hisUserSupplierService.selectHisSupplier(null,false);
List<Long> supplierIds = hisUserSuppliers.stream().map(HisUserSupplier::getSupplierId).collect(Collectors.toList());
//List<HisUserSupplier> hisUserSuppliers = hisUserSupplierService.selectHisSupplier(null,false);
//List<Long> supplierIds = hisUserSuppliers.stream().map(HisUserSupplier::getSupplierId).collect(Collectors.toList());
List<Long> supplierIds = hisUserSupplierService.selectHisSupplier(null,false);
PageUtil.startPage();
BmsSupplierContacts query = CopierUtil.copy(param,new BmsSupplierContacts());
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 pointSelectFlag;
/** 备注 */
@Length(max = 255,message = "备注长度不能超过255字")
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 = "名称不能为空")
@Length(max = 20,message = "名称长度不能超过20字")
@TableField(condition = SqlCondition.LIKE)
private String name;
/** 客户编码 */
@NotBlank(message = "客户编码不能为空")
@Length(max = 20,message = "客户编码长度不能超过20字")
@TableField(condition = SqlCondition.LIKE)
private String code;
@ -211,6 +209,18 @@ public class BmsSupplier implements Serializable {
/** 线下下单 */
private Integer orderOfflineFlag;
/** 统计维护的地址数量 */
@TableField(exist = false)
private Integer countAddr;
/**
* 查询维护的地址
* countAddrFlag=0 表示未维护的收货地址
* countAddrFlag=1 表示已维护的收货地址
*/
@TableField(exist = false)
private Integer countAddrFlag;
/** 当前用户ID */
@TableField(exist = false)
private String currUserId;
@ -364,7 +374,7 @@ public class BmsSupplier implements Serializable {
/*-------------- ----------------- */
@TableField(exist = false)
private List<String> searchInIds;
private List<Long> searchInIds;
/*-------------- ----------------- */
@TableField(exist = false)
@ -396,6 +406,7 @@ public class BmsSupplier implements Serializable {
public HisUserSupplier toHisUserSupplier(String userId,Integer type){
HisUserSupplier userSupplier = new HisUserSupplier();
userSupplier.setQueryValue(this.keyword);
userSupplier.setUserId(userId);
if(this.getUserId()!=null){
userSupplier.setSupplierId(Long.parseLong(this.getId()));
@ -403,6 +414,7 @@ public class BmsSupplier implements Serializable {
if(this.getId()!=null){
userSupplier.setSupplierId(Long.parseLong(this.getId()));
}
userSupplier.setSelectSupplierTypes(this.getSelectSupplierTypes());
userSupplier.setSupplierName(this.getName());
userSupplier.setSupplierCode(this.getCode());
userSupplier.setSaleRegionFirst(this.getRegionFirst());
@ -415,6 +427,8 @@ public class BmsSupplier implements Serializable {
userSupplier.setBizRegionFourthly(this.getRegion2Fourthly());
userSupplier.setSupplierFlag(this.getSupplierFlag());
userSupplier.setType(type);
userSupplier.setCountAddr(this.getCountAddr());
userSupplier.setCountAddrFlag(this.getCountAddrFlag());
userSupplier.setCostFlag(this.costFlag);
return userSupplier;
}
@ -440,6 +454,8 @@ public class BmsSupplier implements Serializable {
userSupplier.setBizRegionFourthly(this.getRegion2Fourthly());
userSupplier.setSupplierFlag(this.getSupplierFlag());
userSupplier.setType(type);
userSupplier.setCountAddr(this.getCountAddr());
userSupplier.setCountAddrFlag(this.getCountAddrFlag());
userSupplier.setCostFlag(this.costFlag);
userSupplier.setStopFlag(this.stopFlag);
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 = "名称不能为空")
@Length(max = 20,message = "名称长度不能超过20字")
private String name;
/** 客户编码 */
@NotBlank(message = "客户编码不能为空")
@Length(max = 20,message = "客户编码长度不能超过20字")
private String code;
/** 父级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 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.extension.plugins.pagination.Page;
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.util.Assert;
import com.qs.serve.common.util.AuthContextUtils;
@ -98,6 +99,14 @@ public class BmsChannelPointServiceImpl extends ServiceImpl<BmsChannelPointMappe
//更新底层的关联表
//hisUserChannelPointService.initSetupByPointId(channelPoint.getId());
}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());
sysBusinessLogService.buildLog4Change(BusinessLogType.Point,
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++) {
if(i==0){
supplier.setRegionFirst(regionIds[i]);
supplier.setRegionSecond(regionIds[i]);
supplier.setRegionThird(regionIds[i]);
}else if(i==1){
supplier.setRegionSecond(regionIds[i]);
}else if(i==2){
@ -289,6 +291,8 @@ public class BmsSupplierServiceImpl extends ServiceImpl<BmsSupplierMapper,BmsSup
for (int i = 0; i < regionIds.length; i++) {
if(i==0){
supplier.setRegion2First(regionIds[i]);
supplier.setRegion2Second(regionIds[i]);
supplier.setRegion2Third(regionIds[i]);
}else if(i==1){
supplier.setRegion2Second(regionIds[i]);
}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);
}
/**
* 辅助查询
* @param query
* @return
*/
@GetMapping("/getAllList")
public R<List<GoodsAccreditResult>> getAllList(GoodsAccreditQuery query){
List<GoodsAccreditResult> data = goodsAccreditService.queryList(query);
return R.ok(data);
}
/**
* ID查询
* @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)){
//保存
if(sku!=null){
skuItem.setErrMsg(skuItem.getErrMsg()==null?"已保存,新增失败;":skuItem.getErrMsg()+"\n已保存,新增失败;");
skuItem.setErrMsg(skuItem.getErrMsg()==null?"编码重复,新增失败;":skuItem.getErrMsg()+"\n编码重复,新增失败;");
throwEx = true;
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 com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
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.model.annotation.SysLog;
import com.qs.serve.common.model.dto.PageVo;
@ -123,6 +124,21 @@ public class GoodsSpuController {
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下单查询
* @param param
@ -627,7 +643,14 @@ public class GoodsSpuController {
isError = true;
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){

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

@ -209,6 +209,9 @@ public class GoodsSpu implements Serializable {
@TableField(exist = false)
private String skuName;
@TableField(exist = false)
private String skuBelong;
@TableField(exist = false)
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);
List<GoodsAccreditResult> queryList(GoodsAccreditQuery query);
void modify(GoodsAccreditBo param);
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
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 productName = query.getName();
String targetCode = query.getTargetCode();
@ -175,81 +267,6 @@ public class GoodsAccreditServiceImpl extends ServiceImpl<GoodsAccreditMapper,Go
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

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());
}
//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
GoodsSpu goodsSpu = goodsSpuMapper.selectById(goodsSku.getSpuId());
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)
public GoodsSpu editTasteSpu(GoodsSpuBo param) {
GoodsSpu spu = CopierUtil.copy(param,new GoodsSpu());
if(param.getId()!=null){
spu.setSpuCode(null);
}
if(StringUtils.hasText(param.getCategoryId())){
GoodsCategory category = goodsCategoryService.getById(param.getCategoryId());
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);
insertSpuSpec(spu.getId());
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")
private LocalDateTime cooperatePauseFlagDate;
/** 统计维护的地址数量 */
@TableField(exist = false)
private Integer countAddr;
/**
* 查询维护的地址
* countAddrFlag=0 表示未维护的收货地址
* countAddrFlag=1 表示已维护的收货地址
*/
@TableField(exist = false)
private Integer countAddrFlag;
@TableField(exist = false)
private String queryAddress;
@ -135,6 +146,12 @@ public class HisUserSupplier implements Serializable {
@TableField(exist = false)
private List<String> selectUserIds;
/**
* 对应是supplierFlag
*/
@TableField(exist = false)
private List<Integer> selectSupplierTypes;
@TableField(exist = false)
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;
/** 统计维护的地址数量 */
@TableField(exist = false)
private Integer countAddr;
/**
* 查询维护的地址
* countAddrFlag=0 表示未维护的收货地址
* countAddrFlag=1 表示已维护的收货地址
*/
@TableField(exist = false)
private Integer countAddrFlag;
/** 闭户日期 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@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;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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.his.entity.HisUserSupplier;
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<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> {
List<HisUserSupplier> selectHisSupplier(BmsSupplier param,boolean usePage);
List<Long> selectHisSupplier(BmsSupplier param,boolean usePage);
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;
@Override
public List<HisUserSupplier> selectHisSupplier(BmsSupplier param, boolean usePage) {
public List<Long> selectHisSupplier(BmsSupplier param, boolean usePage) {
if(param==null){
param = new BmsSupplier();
}
@ -69,27 +69,29 @@ public class HisUserSupplierServiceImpl extends ServiceImpl<HisUserSupplierMappe
return new ArrayList<>();
}
HisUserSupplier userSupplier = param.toHisUserSupplier(null,null);
userSupplier.setSelectUserIds(userIds);
QueryWrapper<HisUserSupplier> lqw = new QueryWrapper<>(userSupplier);
lqw.select("distinct his_user_supplier.supplier_id");
if(StringUtils.hasText(param.getKeyword())){
lqw.lambda().like(HisUserSupplier::getSupplierCode,param.getKeyword());
lqw.lambda().like(HisUserSupplier::getSupplierName,param.getKeyword());
}
if(CollectionUtil.isNotEmpty(param.getSelectSupplierTypes())){
lqw.lambda().in(HisUserSupplier::getSupplierFlag,param.getSelectSupplierTypes());
}
lqw.lambda().in(HisUserSupplier::getUserId,userIds)
.ne(HisUserSupplier::getSupplierId,0);
// lqw.select("distinct his_user_supplier.supplier_id");
// if(StringUtils.hasText(param.getKeyword())){
// lqw.lambda().like(HisUserSupplier::getSupplierCode,param.getKeyword());
// lqw.lambda().like(HisUserSupplier::getSupplierName,param.getKeyword());
// }
// if(CollectionUtil.isNotEmpty(param.getSelectSupplierTypes())){
// lqw.lambda().in(HisUserSupplier::getSupplierFlag,param.getSelectSupplierTypes());
// }
// lqw.lambda().in(HisUserSupplier::getUserId,userIds)
// .ne(HisUserSupplier::getSupplierId,0);
if(usePage){
PageUtil.startPage();
}
return this.list(lqw);
return baseMapper.selectSupplierIdByQuery(userSupplier,lqw);
//return this.list(lqw).stream().map(a->a.getSupplierId()).collect(Collectors.toList());
}
@Override
public List<BmsSupplier> selectListSupplier(BmsSupplier param) {
List<HisUserSupplier> hisUserSuppliers = selectHisSupplier(param,false);
List<String> supplierIds = hisUserSuppliers.stream().map(a->a.getSupplierId().toString()).collect(Collectors.toList());
List<Long> supplierIds = selectHisSupplier(param,false);
//List<String> supplierIds = hisUserSuppliers.stream().map(a->a.getSupplierId().toString()).collect(Collectors.toList());
if(supplierIds.size()>0) {
param.setSearchInIds(supplierIds);
List<BmsSupplier> supplierList = bmsSupplierService.selectSupplierList(param);
@ -101,12 +103,12 @@ public class HisUserSupplierServiceImpl extends ServiceImpl<HisUserSupplierMappe
@Override
public PageVo<BmsSupplier> selectPageSupplier(BmsSupplier param) {
List<HisUserSupplier> hisUserSuppliers = selectHisSupplier(param,true);
List<String> supplierIds = hisUserSuppliers.stream().map(a->a.getSupplierId().toString()).collect(Collectors.toList());
List<Long> supplierIds = selectHisSupplier(param,true);
//List<String> supplierIds = hisUserSuppliers.stream().map(a->a.getSupplierId().toString()).collect(Collectors.toList());
if(supplierIds.size()>0) {
param.setSearchInIds(supplierIds);
List<BmsSupplier> supplierList = bmsSupplierService.selectSupplierList(param);
return R.buildPageHelperList(hisUserSuppliers,supplierList);
return R.buildPageHelperList(supplierIds,supplierList);
}else{
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 java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import static com.qs.serve.modules.tbs.common.TbsSeeYonConst.ERP_ORDER_STATUS;
@ -170,6 +171,14 @@ public class OmsOrderApi {
addrIds.add(0L);
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) {
omsOrderService.checkMsOrderStatus(order);
@ -185,10 +194,7 @@ public class OmsOrderApi {
}
}
LambdaQueryWrapper<OmsOrderItem> lqw = new LambdaQueryWrapper<>();
lqw.eq(OmsOrderItem::getOrderId,order.getId());
List<OmsOrderItem> items = omsOrderItemService.list(lqw);
order.setOrderItems(items);
order.setOrderItems(itemsMap.get(order.getId()));
}
return R.byPageHelperList(list);
@ -254,6 +260,8 @@ public class OmsOrderApi {
GoodsSku goodsSku = goodsSkuService.getById(orderItem.getSkuId());
if(goodsSku!=null){
orderItem.setSkuSpecialFlag(goodsSku.getSpecialFlag());
orderItem.setSkuBelong(goodsSku.getBelong());
orderItem.setSkuAddCode(goodsSku.getSkuAddCode());
}
}
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)
private Object spuInfo;
/** skuBelong */
@TableField(exist = false)
private Object skuBelong;
/** skuBelong */
@TableField(exist = false)
private Object skuAddCode;
/** 分类 */
@TableField(exist = false)
private Object categoryInfo;

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

@ -26,6 +26,9 @@ public class OmsOrderBo {
/** 品牌规则ID */
private Long brandRuleId;
/** CD单据备注 */
private String cdOrderRemark;
/** 购物车ID(购物车方式下单) */
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;
/** CD单据备注 */
private String cdOrderRemark;
/** 收货地址 */
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.setOrderSource(omsOrderBo.getOrderSource());
CreateOrderParam createOrderParam = omsOrderBo.getCreateOrderParam();
createOrderParam.setCdOrderRemark(omsOrderBo.getCdOrderRemark());
OmsOrder order = this.buildOmsOrder(confirmOrder, createOrderParam);
if(omsOrderBo.getInstantFlag()!=null&&omsOrderBo.getInstantFlag().equals(1)){
this.buildPriceOrder(order.getId()+"",null);

84
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.service.PayPaymentItemService;
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.SysPostUserService;
import com.qs.serve.modules.sys.service.SysSyncLogService;
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.extern.slf4j.Slf4j;
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.service.PayPaymentService;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.math.BigDecimal;
import java.time.LocalDate;
@ -63,6 +68,7 @@ public class PayPaymentController {
private PaySupplierMapper paySupplierMapper;
private DateCheckApplyService dateCheckApplyService;
private SysConfigService configService;
private SysSyncLogService sysSyncLogService;
/**
* 客户费用列表
@ -228,10 +234,28 @@ public class PayPaymentController {
@PostMapping("/unPayment")
@SysLog(module = SystemModule.Payment, title = "支付", biz = BizType.INSERT)
@PreAuthorize("hasRole('pay:payment:pay')")
public R<PayPayment> unPayment(@RequestBody @Valid PayPaymentBo param){
PayPayment payPayment = payPaymentService.unpayment(param);
public R<PayPayment> unPayment(@RequestBody @Valid PayPaymentBo param, HttpServletRequest request){
SysSyncLog syncLog = new SysSyncLog();
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,10 +266,26 @@ public class PayPaymentController {
@PostMapping("/cancelUnPayment")
@SysLog(module = SystemModule.Payment, title = "支付", biz = BizType.INSERT)
@PreAuthorize("hasRole('pay:payment:pay')")
public R<PayPayment> cancelUnPayment(@RequestBody String verificationCode){
public R<PayPayment> cancelUnPayment(@RequestBody String verificationCode, HttpServletRequest request){
SysSyncLog syncLog = new SysSyncLog();
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,10 +295,27 @@ public class PayPaymentController {
@PostMapping("/save")
@SysLog(module = SystemModule.Payment, title = "支付", biz = BizType.INSERT)
@PreAuthorize("hasRole('pay:payment:pay')")
public R<PayPayment> save(@RequestBody @Valid PayPaymentBo param){
PayPayment payPayment = payPaymentService.payment(param);
public R<PayPayment> save(@RequestBody @Valid PayPaymentBo param, HttpServletRequest request){
SysSyncLog syncLog = new SysSyncLog();
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,10 +325,25 @@ public class PayPaymentController {
@RequestMapping(value = "/cancel/{id}",method = {RequestMethod.GET,RequestMethod.DELETE})
@SysLog(module = SystemModule.Payment, title = "取消支付", biz = BizType.DELETE)
@PreAuthorize("hasRole('pay:payment:cancel')")
public R<?> cancelById(@PathVariable("id") String erpId){
public R<?> cancelById(@PathVariable("id") String erpId, HttpServletRequest request){
SysSyncLog syncLog = new SysSyncLog();
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.eq(PayPaymentItem::getVerificationId,vtb.getId());
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){
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);
/**
* 检验协议类编码是否存在
* @param templateCode
* @return
*/
Boolean checkConstCodeExist(String templateCode);
/**
* 校验OA节点状态用于调整校验
* @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.Map;
import static com.qs.serve.modules.tbs.common.TbsSeeYonConst.API_PROCESS_GET_CONST;
/**
* @author YenHex
* @since 2022/11/30
@ -164,6 +166,18 @@ public class SeeYonRequestServiceImpl implements SeeYonRequestService {
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
public SyAffairStateResult checkAffairState(String key, String memberId, String templateCode) {
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.extension.service.impl.ServiceImpl;
import com.qs.serve.common.util.Assert;
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.common.util.*;
import com.qs.serve.modules.bir.consts.BirActivityCenterGoodsUtil;
import com.qs.serve.modules.bms.entity.BmsSupplier;
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.tbs.entity.TbsCostApply;
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 TbsCostTodoMapper tbsCostTodoMapper;
private final BmsSupplierMapper supplierMapper;
private final SeeYonRequestService seeYonService;
@Override
@Transactional(rollbackFor = Exception.class)
public void deleteCostApply(Long costApplyId,String remark) {
if(!StringUtils.hasText(remark)||remark.length()<6){
Assert.throwEx("请详细注明删除备注");
}
TbsCostApply costApply = tbsCostApplyMapper.selectById(costApplyId);
BmsSupplier supplier = supplierMapper.selectById(costApply.getSupplierId());
@ -65,6 +68,13 @@ public class SysDeleteLogServiceImpl extends ServiceImpl<SysDeleteLogMapper,SysD
deleteLogList.add(deleteLog);
}
if(costApply.getContractFlag().equals(1)){
boolean checkExist = seeYonService.checkConstCodeExist(costApply.getCode());
if(!checkExist){
Assert.throwEx("流程在OA已存在,优先删除OA数据,再调用该接口");
}
}
//远程删除ERP
String url = "http://59.37.164.96:2505/api/cms/cost/deletion";
CostDeletion costDeletion = new CostDeletion();
@ -108,6 +118,8 @@ public class SysDeleteLogServiceImpl extends ServiceImpl<SysDeleteLogMapper,SysD
tbsCostApplyRemoveMapper.pay_payment(costApplyId);
tbsCostApplyRemoveMapper.pay_payment_item(costApplyId);
tbsCostApplyRemoveMapper.tbs_budget_log(costApplyId);
//移除CA订单
tbsCostApplyRemoveMapper.tbs_budget_log_policy(costApplyId);
tbsCostApplyRemoveMapper.tbs_budget_cost_item(costApplyId);
tbsCostApplyRemoveMapper.tbs_budget_cost_item_split(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.setPathNames(pPathName+"_"+post.getPostName());
}
this.updateById(post);
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) {
LambdaQueryWrapper<SysPostUser> lqw = new LambdaQueryWrapper<>();
lqw.likeRight(SysPostUser::getPathIds,postUser.getPathIds()+"_");
lqw.select(SysPostUser::getUserId,SysPostUser::getId);
//lqw.select(SysPostUser::getUserId,SysPostUser::getId);
List<SysPostUser> sysPostUsers = this.list(lqw);
for (SysPostUser childUser : sysPostUsers) {
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_PROCESS_CREATE = "/process/create";
String API_PROCESS_GET_CONST = "/process/getConst";
String API_PROCESS_CREATE_NEW = "/process/newCreate";
String API_PROCESS_CREATE_CALLBACK = "/process/createCallback";
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
* @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();
budgetLog.setBudgetId(item.getBudgetId());
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 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){
String goodsType = defaultCenterBo.getActivityGoodsType();
List<Long> goodsIds = defaultCenterBo.getGoodsIds();
goodsIds = goodsIds.stream().filter(Objects::nonNull).collect(Collectors.toList());
Long subjectId = defaultCenterBo.getSubjectId();
Long supplierId = defaultCenterBo.getSupplierId();
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<>();
lqwCon.in(TbsBudgetCondition::getBudgetId,budgetIds);
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.mapper.TbsBudgetLogMapper;
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.TbsScheduleItemBudgetService;
import lombok.AllArgsConstructor;
@ -46,6 +47,7 @@ import java.util.stream.Collectors;
@RequestMapping("tbs/budgetLog")
public class TbsBudgetLogController {
private TbsBudgetReleaseApplicationService tbsBudgetReleaseApplicationService;
private TbsBudgetLogService tbsBudgetLogService;
private TbsBudgetService tbsBudgetService;
private TbsBudgetLogMapper tbsBudgetLogMapper;
@ -53,6 +55,27 @@ public class TbsBudgetLogController {
private TbsScheduleItemBudgetService tbsScheduleItemBudgetService;
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

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.service.SysAttachService;
import com.qs.serve.modules.tbs.entity.bo.TbsCostContractBo;
import com.qs.serve.modules.tbs.service.TbsCostContractApplication;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize;
@ -41,6 +42,14 @@ public class TbsCostContractController {
private TbsCostContractService tbsCostContractService;
private SysAttachService attachService;
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;
/**
* 周期项的预算ID用于查询`审批中`的使用情况
*/
private List<Long> scheduleItemBudgetIds;
/**
* 品牌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;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tbs.entity.TbsActivityChannelPoint;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
* 活动网点项 Mapper
@ -10,5 +13,26 @@ import com.qs.serve.modules.tbs.entity.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;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tbs.entity.TbsActivityPayCondition;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import java.util.List;
/**
* 活动支付条件 Mapper
* @author YenHex
@ -13,6 +17,27 @@ import org.apache.ibatis.annotations.Update;
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}")
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.qs.serve.modules.tbs.entity.TbsActivitySubject;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
* 活动科目项 Mapper
@ -10,5 +12,24 @@ import com.qs.serve.modules.tbs.entity.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.qs.serve.modules.tbs.entity.TbsBudgetLog;
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.TbsScheduleItemBudgetIdDto;
import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch;
@ -70,5 +71,21 @@ public interface TbsBudgetLog2Mapper extends BaseMapper<TbsBudgetLog> {
@InterceptorIgnore(tenantLine = "true")
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;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.tbs.entity.TbsBudgetLog;
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 )")
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}")
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}")
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 " +
"and tbs_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_type = #{centerType} " +
"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.extension.service.IService;
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.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.dto.*;
import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch;
import java.time.LocalDate;
@ -46,6 +43,13 @@ public interface TbsScheduleItemBudgetService extends IService<TbsScheduleItemBu
*/
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 TbsActivityChannelService activityChannelService;
private final TbsActivityChannelPointService activityChannelPointService;
private final TbsActivityChannelPointMapper tbsActivityChannelPointMapper;
private final TbsActivityTemplateMapper activityTemplateMapper;
private final TbsCostApplyMapper costApplyMapper;
private final TbsActivitySlottingFeeService activitySlottingFeeService;
@ -194,6 +195,7 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
// LocalDate preDay = DateUtils.beSetDate(activity.getActEndDate(),days);
// activity.setPreCheckDate(preDay);
this.saveOrUpdate(activity);
//统计费用信息
this.updateCostTotal(costApply.getId());
if(isUpdate){
@ -252,6 +254,10 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
if(activityChannelPointList.size()>0){
activityChannelPointService.saveBatch(activityChannelPointList);
}
Long actId = tbsActivityChannelPointMapper.checkSubjectPoint(activity.getId());
if(actId!=null){
Assert.throwEx("活动["+activity.getActivityCode() + "]因科目类型,必须选网点");
}
//保存
activityGoodsService.saveBatch(activityGoodsList);
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.mapper.TbsBudgetMapper;
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 lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -34,6 +35,7 @@ import java.util.List;
@AllArgsConstructor
public class TbsBudgetApplyOperationServiceImpl implements SeeYonOperationService {
private final TbsBudgetService budgetService;
private final TbsBudgetMapper budgetMapper;
private final TbsBudgetLogService budgetLogService;
private final TbsScheduleItemBudgetService scheduleItemBudgetService;
@ -102,6 +104,7 @@ public class TbsBudgetApplyOperationServiceImpl implements SeeYonOperationServic
budgetLogService.saveBatch(budgetLogList);
}
budgetMapper.updateConFlag();
budgetService.syncMissSchItem();
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());
budgetBatchService.updateById(budgetBatch);
tbsBudgetMapper.updateConFlag();
tbsBudgetService.syncMissSchItem();
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())
||StringUtils.hasText(paramItem.getSeriesNames())
||StringUtils.hasText(paramItem.getBrandNames());
newBudget.setConditionFlag(conditionFlag?0:1);
newBudget.setConditionFlag(conditionFlag?1:0);
newBudget.setUserId(sysUser.getId());
newBudget.setUserCode(sysUser.getCode());
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
public class TbsBudgetChangeOperationServiceImpl implements SeeYonOperationService {
private TbsBudgetService budgetService;
private TbsBudgetMapper budgetMapper;
private TbsBudgetChangeMapper budgetChangeMapper;
private TbsBudgetConditionService tbsBudgetConditionService;
@ -142,6 +143,7 @@ public class TbsBudgetChangeOperationServiceImpl implements SeeYonOperationServi
}
}
budgetMapper.updateConFlag();
budgetService.syncMissSchItem();
}
/**

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

@ -1,5 +1,6 @@
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.QueryWrapper;
import com.qs.serve.common.util.CollectionUtil;
@ -131,12 +132,14 @@ public class TbsBudgetManagerServiceImpl implements TbsBudgetManagerService {
List<TbsActivityGoods> activityGoodsList = goodsListMap.get(activityId);
for (TbsActivityGoods goods : activityGoodsList) {
boolean isMatch = false;
if(CollUtil.isNotEmpty(budgetConditionList)){
for (TbsBudgetCondition condition : budgetConditionList) {
if(goods.getTargetLevelPathIds().contains(condition.getTargetLevelPathIds())){
isMatch = true;
break;
}
}
}
if(!isMatch){
String msg = "品类不匹配["+goods.getTargetCode()+"]"+goods.getTargetName();
msgVoList.add(new TbsBudgetMatchMsgVo(budget,activity,msg));

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.framework.manager.AsyncFactory;
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.enums.BudgetLogOptFlag;
import com.qs.serve.common.util.*;
@ -83,6 +84,7 @@ public class TbsBudgetServiceImpl extends ServiceImpl<TbsBudgetMapper,TbsBudget>
private final VtbFundFlowService vtbFundFlowService;
private final TbsActivityTemplateMapper tbsActivityTemplateMapper;
private RedisService redisService;
private SysAttachService attachService;
private SeeYonRequestService seeYonService;
private ProjectProperties projectProperties;
@ -90,10 +92,12 @@ public class TbsBudgetServiceImpl extends ServiceImpl<TbsBudgetMapper,TbsBudget>
@Override
public void commitApply(Long id) {
TbsBudget tbsBudget = this.getById(id);
redisService.throwResLock(TbsBudget.class.getSimpleName(),id.toString());
seeYonService.testConnection();
String templateCode = TbsSeeYonConst.BudgetApplyConf.Code();
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId());
TbsBudget tbsBudget = this.getById(id);
if(tbsBudget.getBudgetState().equals(1)){
Assert.throwEx("已开启");
}
@ -199,7 +203,7 @@ public class TbsBudgetServiceImpl extends ServiceImpl<TbsBudgetMapper,TbsBudget>
budget.setAttachIds(budgetBo.getAttachIds());
//设置指定模板
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){
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);
//2已发
if(ctpAffair!=null&&ctpAffair.getState().equals(2)){
String costId = ctpAffair.getCostApplyId();
if(costId!=null){
TbsCostApply costApply1 = costApplyService.getById(costId);
Date date = Date.from(costApply1.getSubmitTime().atZone(ZoneId.systemDefault()).toInstant());
ctpAffair.setCommentTime(date);
}
// String costId = ctpAffair.getCostApplyId();
// if(costId!=null){
// TbsCostApply costApply1 = costApplyService.getById(costId);
// Date date = Date.from(costApply1.getSubmitTime().atZone(ZoneId.systemDefault()).toInstant());
// ctpAffair.setCommentTime(date);
// }
}
for (SysUser user : userList) {
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)){
Assert.throwEx("该记录的费用已异动");
}
if(orgCost.getContractFlag().equals(1)){
Assert.throwEx("协议类不支持异动");
}
boolean isExtUser = orgCost.getExtUserId()!=null&&userId.equals(orgCost.getExtUserId());
if(!userId.equals(orgCost.getUserId())&&!isExtUser){
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.framework.manager.AsyncFactory;
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.enums.BudgetLogOptFlag;
import com.qs.serve.common.model.consts.BudgetLogRollbackFlag;
@ -88,6 +89,8 @@ import java.util.stream.Collectors;
@AllArgsConstructor
public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsCostApply> implements TbsCostApplyService {
private RedisService redisService;
private TbsActivityChannelPointMapper tbsActivityChannelPointMapper;
private VtbVerificationMapper vtbVerificationMapper;
private TbsBudgetApplicationService budgetApplicationService;
private TbsBudgetCostItemService budgetCostItemService;
@ -163,6 +166,9 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
&&!costApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){
Assert.throwEx("当前单据状态不可作废");
}
if(costApply.getContractFlag().equals(1)){
Assert.throwEx("协议类不支持作废");
}
LambdaQueryWrapper<VtbVerification> vtbLqw = new LambdaQueryWrapper<>();
vtbLqw.eq(VtbVerification::getCostApplyId,id);
vtbLqw.and(
@ -495,8 +501,9 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
@Override
@Transactional(rollbackFor = Exception.class)
public void commitApply(String id) {
seeYonService.testConnection();
TbsCostApply tbsCostApply = this.getById(id);
redisService.throwResLock(TbsCostApply.class.getSimpleName(),id);
seeYonService.testConnection();
if(!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_0_unPublish.getCode())
&&!tbsCostApply.getChargeState().equals(TbsCostApplyState.State_4_refused.getCode())){
Assert.throwEx("操作失败,申请费用状态不支持");
@ -513,6 +520,13 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
actLqw.eq(TbsActivity::getCostApplyId,id);
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 (activityList.size()>1){
@ -531,6 +545,12 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
List<TbsActivityPayCondition> payConditions = null;
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<>();
contractLambdaQueryWrapper.eq(TbsCostContract::getCostApplyId,id);
List<TbsCostContract> contractList = costContractMapper.selectList(contractLambdaQueryWrapper);
@ -671,6 +691,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
}
if(flowIdResult==null||flowIdResult.getStatus()!=200){
assert flowIdResult != null;
Assert.throwEx("远程服务调用失败:"+flowIdResult.getMsg());
}
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.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
import com.qs.serve.common.model.enums.BudgetLogOptFlag;
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.TbsBudgetCondition;
import com.qs.serve.modules.tbs.entity.TbsBudgetLog;
import com.qs.serve.modules.tbs.entity.dto.*;
import com.qs.serve.modules.tbs.entity.so.TbsScheduleItemSearch;
import com.qs.serve.modules.tbs.mapper.*;
@ -349,5 +352,47 @@ public class TbsScheduleItemBudgetServiceImpl extends ServiceImpl<TbsScheduleIte
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
public class PortalOfCostApplication {
private TbsCostContractApplication costContractApplication;
private SysUserCodeMathMapper userCodeMathMapper;
private final SysSyncLogService sysSyncLogService;
private SysTableTempMapper sysTableTempMapper;
@ -187,6 +188,7 @@ public class PortalOfCostApplication {
*/
@Transactional(rollbackFor = Exception.class)
public void createCostProcessByPolicy(ProcessCreatePolicyCostBo createBo){
LocalDateTime nowTime = LocalDateTime.now();
SysUser user = userService.getByAccount(createBo.getUserCode());
if(user==null){Assert.throwEx("用户不存在,请重新编辑");}
TzcPolicyItem policyItem = policyItemServiceService.getByPolicyItemCode(createBo.getPolicyItemCode());
@ -194,6 +196,9 @@ public class PortalOfCostApplication {
if(!policyItem.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_2_SyncSuccess)){
Assert.throwEx("政策项状态异常或未完成同步");
}
if(nowTime.isBefore(policyItem.getPolicyEndDate().atStartOfDay())){
Assert.throwEx("政策活动已截止于"+policyItem.getPolicyEndDate());
}
if(CollectionUtil.isEmpty(createBo.getGoodsList()) || createBo.getGoodsList().size()==0){
Assert.throwEx("商品数据不能为空");
}
@ -215,7 +220,6 @@ public class PortalOfCostApplication {
//常用参数
final String GOODS_TYPE = "sku";
final BigDecimal OneHundred = new BigDecimal("100");
LocalDateTime nowTime = LocalDateTime.now();
LocalDate nowDate = LocalDate.now();
Long supplierId = Long.parseLong(supplier.getId());
BigDecimal totalAmount = createBo.getTotalAmount();
@ -1150,11 +1154,13 @@ public class PortalOfCostApplication {
paymentItemService.save(paymentItem);
verificationSubjectService.save(verificationSubject);
}
if(subjectSurplus.compareTo(BigDecimal.ZERO)>0){
Assert.throwEx("余额不足");
}
// 修复没有vtbFundFlow异常,并修复活动状态
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){
TzcPolicy tzcPolicy = tzcPolicyService.getById(id);
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());
tzcPolicy.setPolicyItemList(policyItemList);
}
@ -450,7 +459,7 @@ public class TzcPolicyController {
* @param id
* @return
*/
@PostMapping("/cancellation/{id}")
@DeleteMapping("/cancellation/{id}")
public R<?> cancellation(@PathVariable Long id){
List<TzcPolicyItem> tzcPolicyItemList = tzcPolicyItemService.listByPolicyId(id);
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.util.*;
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.SysUserService;
import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget;
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.entity.TzcPolicy;
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 javax.validation.Valid;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@ -42,6 +46,7 @@ import java.util.stream.Collectors;
@RequestMapping("tzc/policyItem")
public class TzcPolicyItemController {
private SysUserService sysUserService;
private TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper;
private TzcPolicyItemService tzcPolicyItemService;
private TzcPolicyGoodsService tzcPolicyGoodsService;
@ -49,6 +54,17 @@ public class TzcPolicyItemController {
private SysAttachService attachService;
private TzcPolicyApplicationService policyApplicationService;
/**
* 释放政策
* @param policyItemId
* @return
*/
@GetMapping("/releaseDev")
public R<?> releasePcy(Long policyItemId){
policyApplicationService.syncExpireRelease();
return R.ok();
}
/**
* 释放政策
* @param policyItemId
@ -56,7 +72,19 @@ public class TzcPolicyItemController {
*/
@GetMapping("/releasePolicyByItemId")
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();
}
@ -75,7 +103,15 @@ public class TzcPolicyItemController {
policy = tzcPolicyService.getById(param.getPolicyId());
}
LocalDateTime nowTime = LocalDateTime.now();
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());
policyItem.setPolicyGoodsList(policyGoodsList);
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 = "已用金额不能为空")
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 */
@NotNull(message = "客户id不能为空")
private Long supplierId;
@ -216,6 +234,12 @@ public class TzcPolicyItem implements Serializable {
@TableField(exist = false)
private List<?> matchBudgetList;
/**
* 是否过期
*/
@TableField(exist = false)
private Integer expireFlag;
public void initSetNull(){
this.setId(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);
/**
* 获取需要释放的Item
* @return
*/
List<Long> listExpireItemIds();
/**
* 替换继承人
* @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;
import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.tbs.entity.dto.TbsBudgetCostResult;
import com.qs.serve.modules.tbs.entity.vo.TbsBudgetTableVo;
import com.qs.serve.modules.tzc.entity.TzcPolicyItem;
@ -21,7 +22,18 @@ public interface TzcPolicyApplicationService {
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;
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.properties.ProjectApisProperties;
import com.qs.serve.common.config.properties.ProjectProperties;
import com.qs.serve.common.framework.manager.AsyncFactory;
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.consts.BudgetLogRollbackFlag;
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.dto.PolicyItemDto;
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.TzcPolicyGoodsService;
import com.qs.serve.modules.tzc.service.TzcPolicyItemService;
import com.qs.serve.modules.tzc.service.TzcPolicyService;
import com.qs.serve.modules.vtb.common.VtbFundFlowType;
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 lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@ -82,6 +86,8 @@ import java.util.stream.Collectors;
@AllArgsConstructor
public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationService {
private RedisService redisService;
private TzcPolicyMapper tzcPolicyMapper;
private TzcPolicyService tzcPolicyService;
private TzcPolicyItemService tzcPolicyItemService;
private TzcPolicyItemMapper tzcPolicyItemMapper;
@ -107,6 +113,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
private ProjectApisProperties projectApisProperties;
private final VtbFundFlowService vtbFundFlowService;
@Override
public void syncPolicy(Long policyId) {
LambdaQueryWrapper<TzcPolicyItem> wrapper = new LambdaQueryWrapper<>();
@ -119,9 +126,84 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
}
@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.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_3_Finished)){
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);
if(!policyItem.getPolicyItemStatus().equals(TzPolicyItemStatus.Status_2_SyncSuccess)){
Assert.throwEx("政策项的状态不支持");
}
Long policyId = policyItem.getPolicyId();
@ -129,7 +211,11 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
if(!policy.getPolicyStatus().equals(TzcPolicyStatus.Status_2_PassSuccess)){
Assert.throwEx("政策的状态不支持");
}
//查询已转移金额,金额为正数
BigDecimal usedAmt = tzcPolicyItemMapper.sumPolicyItemTranAmt(policyItem.getId());
if(policyItem.getUsedAmount().compareTo(usedAmt)!=0){
Assert.throwEx("政策的已用金额异常");
}
BigDecimal surplusAmt = policyItem.getDiscountMax().subtract(usedAmt);
if(surplusAmt.compareTo(BigDecimal.ZERO)>0){
LambdaQueryWrapper<TbsBudgetLog> tbsLogLqw = new LambdaQueryWrapper<>();
@ -165,7 +251,13 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
budgetLog.setOptType(optFlag.getCode());
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);
tzcPolicyItemService.updateById(policyItem);
@ -175,7 +267,7 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
boolean allFinished = true;
for (TzcPolicyItem item : listByPolicyId) {
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);
tzcPolicyItemService.updateById(item);
continue;
@ -289,8 +381,10 @@ public class TzcPolicyApplicationServiceImpl implements TzcPolicyApplicationServ
@Override
@Transactional(rollbackFor = Exception.class)
public void commitPolicy(Long policyId){
seeYonService.testConnection();
TzcPolicy tzcPolicy = tzcPolicyService.getById(policyId);
redisService.throwResLock(TzcPolicy.class.getSimpleName(),tzcPolicy.getId()+"");
seeYonService.testConnection();
Integer tzcPolicyStatus = tzcPolicy.getPolicyStatus();
if(!tzcPolicy.allowEditFlag()){
Assert.throwEx("操作失败,政策状态不支持");

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

@ -335,7 +335,7 @@ public class VtbVerificationController {
* @param commitBo
* @return
*/
@LimitSubmit(interval = 3000)
@LimitSubmit(interval = 30000)
@PostMapping("/commit")
@SysLog(module = SystemModule.Verification, title = "核销", biz = BizType.UPDATE)
@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;
import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.common.model.AmountDTO;
import com.qs.serve.modules.vtb.entity.VtbFundFlow;
@ -14,6 +15,9 @@ import java.util.List;
*/
public interface VtbFundFlowMapper extends BaseMapper<VtbFundFlow> {
@InterceptorIgnore(tenantLine = "1")
List<Long> listMissReleaseActivityId();
/**
* 统计金额
* @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);
/**
* 获取活动核销金额
* @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.framework.manager.AsyncFactory;
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.enums.BudgetLogOptFlag;
import com.qs.serve.common.model.dto.R;
@ -103,6 +104,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
private final SysSyncLogService sysSyncLogService;
private final ProjectApisProperties projectApisProperties;
private final RedisService redisService;
private final VtbVerificationChannelService verificationChannelService;
private final VtbVerificationChannelPointService verificationChannelPointService;
@ -475,6 +477,12 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
}
log.warn("费用释放 activityId:{} url:{}",activityId,url);
SysUser sysUser = sysUserService.getByAccount(userCode);
if(userCode.equals("0")){
sysUser = new SysUser();
sysUser.setCode("0");
sysUser.setName("系统执行");
sysUser.setId("0");
}
if(sysUser==null){
Assert.throwEx("用户编码不存在:"+userCode);
}
@ -668,10 +676,10 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
@Override
@Transactional(rollbackFor = Exception.class)
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.checkSyAccount();
TbsActivity activity = activityService.getById(verificationBo.getActivityId());
//自定义成本中心核销
List<VtbVerificationSubjectCenterBo> subjectCenterBoList = verificationBo.getSubjectCenterList();
boolean isCenterCheck = CollectionUtil.isNotEmpty(subjectCenterBoList);
@ -844,6 +852,7 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
}
verification.setAmount(totalAmount);
verification.setAmountRecord(totalAmount);
//保存
this.saveOrUpdate(verification);
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(){

2
src/main/resources/application.yml

@ -58,7 +58,7 @@ logging:
ROOT: info
com.qs.serve: debug
#com.qs.serve.modules.his: info
com.qs.serve.modules.sys: debug
com.qs.serve.modules.sys: info
com.qs.serve.modules.tag: info
org.xnio.nio: 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>
<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>
<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.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.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.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>
@ -103,6 +108,7 @@
<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.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.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>

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

@ -36,7 +36,8 @@
goods_sku.sku_name as sku_name,
goods_sku.id as sku_id,
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>

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

@ -70,4 +70,36 @@
bms_supplier_visit_address.id
</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>

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

@ -114,6 +114,7 @@
group by tbs_budget_log.schedule_item_budget_id
</select>
<select id="getCostCheckingList" resultType="com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount">
select
tbs_budget_log.budget_id as id,
@ -137,5 +138,90 @@
group by tbs_budget_log.schedule_item_budget_id
</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>

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

@ -107,6 +107,21 @@
order by create_time desc
</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 tzc_policy
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
</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>

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

@ -26,5 +26,23 @@
</foreach>
</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>

Loading…
Cancel
Save