Browse Source

feat: 返利保存调整

master
Yen 3 months ago
parent
commit
8853dd9475
  1. 31
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebate.java
  2. 24
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateCenter.java
  3. 22
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateGoods.java
  4. 21
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java
  5. 25
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsArgument.java
  6. 41
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateArgumentParam.java
  7. 20
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateLevelsVo.java
  8. 2
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateVo.java
  9. 1
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java
  10. 5
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java
  11. 6
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplicationService.java
  12. 21
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateCheckApplicationService.java
  13. 210
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java
  14. 53
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateCheckApplicationServiceImpl.java

31
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebate.java

@ -134,36 +134,5 @@ public class TzcRebate implements Serializable {
@JsonProperty @JsonProperty
private String delFlag; private String delFlag;
public static TzcRebate toNewObject(TzcRebate source){
TzcRebate rebate = new TzcRebate();
rebate.setId(source.getId());
rebate.setTemplateId(source.getTemplateId());
rebate.setTemplateName(source.getTemplateName());
rebate.setRebateCode(source.getRebateCode());
rebate.setRebateName(source.getRebateName());
rebate.setActivityStartTime(source.getActivityStartTime());
rebate.setActivityEndTime(source.getActivityEndTime());
rebate.setAutoDispatchFlag(source.getAutoDispatchFlag());
rebate.setCheckModel(source.getCheckModel());
rebate.setCheckMaxAmount(source.getCheckMaxAmount());
rebate.setCheckAutoDateType(source.getCheckAutoDateType());
rebate.setCheckStartDate(source.getCheckStartDate());
rebate.setCheckEndDate(source.getCheckEndDate());
rebate.setSupplierId(source.getSupplierId());
rebate.setSupplierCode(source.getSupplierCode());
rebate.setSupplierName(source.getSupplierName());
rebate.setRebateAmount(source.getRebateAmount());
rebate.setOverlayFlag(source.getOverlayFlag());
rebate.setRemark(source.getRemark());
rebate.setCreateTime(source.getCreateTime());
rebate.setUpdateTime(source.getUpdateTime());
rebate.setTenantId(source.getTenantId());
rebate.setCreateBy(source.getCreateBy());
rebate.setUpdateBy(source.getUpdateBy());
rebate.setDelFlag(source.getDelFlag());
return rebate;
}
} }

24
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateCenter.java

@ -109,29 +109,5 @@ public class TzcRebateCenter implements Serializable {
@Length(max = 200,message = "模板唯一健长度不能超过200字") @Length(max = 200,message = "模板唯一健长度不能超过200字")
private String tmpUk; private String tmpUk;
public static TzcRebateCenter toNewObject(TzcRebateCenter source){
TzcRebateCenter rebateCenter = new TzcRebateCenter();
rebateCenter.setId(source.getId());
rebateCenter.setRebateId(source.getRebateId());
rebateCenter.setRebateSubjectId(source.getRebateSubjectId());
rebateCenter.setSubjectId(source.getSubjectId());
rebateCenter.setCenterAmount(source.getCenterAmount());
rebateCenter.setCenterRate(source.getCenterRate());
rebateCenter.setCenterType(source.getCenterType());
rebateCenter.setCenterId(source.getCenterId());
rebateCenter.setCenterCode(source.getCenterCode());
rebateCenter.setCenterName(source.getCenterName());
rebateCenter.setRemark(source.getRemark());
rebateCenter.setCreateTime(source.getCreateTime());
rebateCenter.setUpdateTime(source.getUpdateTime());
rebateCenter.setTenantId(source.getTenantId());
rebateCenter.setCreateBy(source.getCreateBy());
rebateCenter.setUpdateBy(source.getUpdateBy());
rebateCenter.setDelFlag(source.getDelFlag());
rebateCenter.setTmpUk(source.getTmpUk());
return rebateCenter;
}
} }

22
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateGoods.java

@ -104,27 +104,5 @@ public class TzcRebateGoods implements Serializable {
@JsonProperty @JsonProperty
private String delFlag; private String delFlag;
public static TzcRebateGoods toNewObject(TzcRebateGoods source){
TzcRebateGoods rebateGoods = new TzcRebateGoods();
rebateGoods.setId(source.getId());
rebateGoods.setRebateId(source.getRebateId());
rebateGoods.setRebateCode(source.getRebateCode());
rebateGoods.setTargetType(source.getTargetType());
rebateGoods.setTargetId(source.getTargetId());
rebateGoods.setTargetCode(source.getTargetCode());
rebateGoods.setTargetName(source.getTargetName());
rebateGoods.setTargetLevelPathIds(source.getTargetLevelPathIds());
rebateGoods.setTargetLevelPathNames(source.getTargetLevelPathNames());
rebateGoods.setRemark(source.getRemark());
rebateGoods.setCreateTime(source.getCreateTime());
rebateGoods.setUpdateTime(source.getUpdateTime());
rebateGoods.setTenantId(source.getTenantId());
rebateGoods.setCreateBy(source.getCreateBy());
rebateGoods.setUpdateBy(source.getUpdateBy());
rebateGoods.setDelFlag(source.getDelFlag());
return rebateGoods;
}
} }

21
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java

@ -91,26 +91,5 @@ public class TzcRebateLevels implements Serializable {
@JsonProperty @JsonProperty
private String delFlag; private String delFlag;
public static TzcRebateLevels toNewObject(TzcRebateLevels source){
TzcRebateLevels rebateLevels = new TzcRebateLevels();
rebateLevels.setId(source.getId());
rebateLevels.setRebateId(source.getRebateId());
rebateLevels.setLevelNum(source.getLevelNum());
rebateLevels.setConditionType(source.getConditionType());
rebateLevels.setConditionSelect(source.getConditionSelect());
rebateLevels.setConditionRate(source.getConditionRate());
rebateLevels.setConditionAmount(source.getConditionAmount());
rebateLevels.setExampleRemark(source.getExampleRemark());
rebateLevels.setRemark(source.getRemark());
rebateLevels.setCreateTime(source.getCreateTime());
rebateLevels.setUpdateTime(source.getUpdateTime());
rebateLevels.setTenantId(source.getTenantId());
rebateLevels.setCreateBy(source.getCreateBy());
rebateLevels.setUpdateBy(source.getUpdateBy());
rebateLevels.setDelFlag(source.getDelFlag());
return rebateLevels;
}
} }

25
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsArgument.java

@ -99,30 +99,5 @@ public class TzcRebateLevelsArgument implements Serializable {
@JsonProperty @JsonProperty
private String delFlag; private String delFlag;
public static TzcRebateLevelsArgument toNewObject(TzcRebateLevelsArgument source){
TzcRebateLevelsArgument rebateLevelsArgument = new TzcRebateLevelsArgument();
rebateLevelsArgument.setId(source.getId());
rebateLevelsArgument.setLevelId(source.getLevelId());
rebateLevelsArgument.setBusinessType(source.getBusinessType());
rebateLevelsArgument.setPeriodId(source.getPeriodId());
rebateLevelsArgument.setSumAddFlag(source.getSumAddFlag());
rebateLevelsArgument.setRateAmtFlag(source.getRateAmtFlag());
rebateLevelsArgument.setSumReturnRate(source.getSumReturnRate());
rebateLevelsArgument.setSumReturnFixed(source.getSumReturnFixed());
rebateLevelsArgument.setSumMaxReturn(source.getSumMaxReturn());
rebateLevelsArgument.setAddReturnRate(source.getAddReturnRate());
rebateLevelsArgument.setAddReturnFixed(source.getAddReturnFixed());
rebateLevelsArgument.setAddMaxReturn(source.getAddMaxReturn());
rebateLevelsArgument.setRemark(source.getRemark());
rebateLevelsArgument.setCreateTime(source.getCreateTime());
rebateLevelsArgument.setUpdateTime(source.getUpdateTime());
rebateLevelsArgument.setTenantId(source.getTenantId());
rebateLevelsArgument.setCreateBy(source.getCreateBy());
rebateLevelsArgument.setUpdateBy(source.getUpdateBy());
rebateLevelsArgument.setDelFlag(source.getDelFlag());
return rebateLevelsArgument;
}
} }

41
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateArgumentParam.java

@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonProperty;
import com.qs.serve.common.exception.Assert;
import lombok.Data; import lombok.Data;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat; import org.springframework.format.annotation.DateTimeFormat;
@ -46,5 +47,45 @@ public class TzcRebateArgumentParam implements Serializable {
/** 增量最高返利金额 */ /** 增量最高返利金额 */
private BigDecimal addMaxReturn; private BigDecimal addMaxReturn;
public void check(String businessType) {
if (this.sumAddFlag == null) {
Assert.throwEx(businessType+":目标销量维度不能为空");
}
if (this.rateAmtFlag == null) {
Assert.throwEx(businessType+":选择的策略不能为空");
}
if (this.sumAddFlag == 0) {
if (this.rateAmtFlag == 0 && this.sumReturnRate == null){
Assert.throwEx(businessType+":总量返利百分比不能为空");
}
if (this.rateAmtFlag == 1 && this.sumReturnFixed == null){
Assert.throwEx(businessType+":总量返利固定金额不能为空");
}
if(sumMaxReturn==null){
Assert.throwEx(businessType+":总量最高返利金额不能为空");
}
}else if (this.sumAddFlag == 1) {
if (this.rateAmtFlag == 0 && this.addReturnRate == null){
Assert.throwEx(businessType+":增量返利百分比不能为空");
}
if (this.rateAmtFlag == 1 && this.addReturnFixed == null){
Assert.throwEx(businessType+":增量返利固定金额不能为空");
}
if(addMaxReturn==null){
Assert.throwEx(businessType+":增量最高返利金额不能为空");
}
}
}
public BigDecimal getMaxReturnAmt(){
if (this.sumAddFlag == 0) {
return this.sumMaxReturn;
}else if (this.sumAddFlag == 1) {
return this.addMaxReturn;
}else {
return null;
}
}
} }

20
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateLevelsVo.java

@ -0,0 +1,20 @@
package com.qs.serve.modules.tzc.entity.vo;
import com.qs.serve.modules.tzc.entity.TzcRebateLevels;
import com.qs.serve.modules.tzc.entity.TzcRebateLevelsArgument;
import lombok.Data;
/**
* @author YenHex
* @since 2025/4/24
*/
@Data
public class TzcRebateLevelsVo extends TzcRebateLevels {
/** 返利-参数 */
private TzcRebateLevelsArgument targetArgument;
/** 总目标返利-参数 */
private TzcRebateLevelsArgument overallTargetArgument;
}

2
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateVo.java

@ -20,4 +20,6 @@ public class TzcRebateVo extends TzcRebate {
private List<TzcRebateLevelsConfig> configList; private List<TzcRebateLevelsConfig> configList;
private List<TzcRebateLevelsVo> levelsList;
} }

1
cms-modules/cms-system/src/main/java/com/qs/serve/modules/bms/controller/BmsSupplierController.java

@ -1068,6 +1068,7 @@ public class BmsSupplierController {
if(bmsRegionNames.size()>0){ if(bmsRegionNames.size()>0){
LambdaQueryWrapper<BmsRegion> bmsRegionLambdaQueryWrapper = new LambdaQueryWrapper<>(); LambdaQueryWrapper<BmsRegion> bmsRegionLambdaQueryWrapper = new LambdaQueryWrapper<>();
bmsRegionLambdaQueryWrapper.in(BmsRegion::getName,bmsRegionNames); bmsRegionLambdaQueryWrapper.in(BmsRegion::getName,bmsRegionNames);
bmsRegionLambdaQueryWrapper.eq(BmsRegion::getStopFlag,0);
regionList = bmsRegionService.list(bmsRegionLambdaQueryWrapper); regionList = bmsRegionService.list(bmsRegionLambdaQueryWrapper);
List<String> existBmsRegionName = regionList.stream().map(a->a.getName()).collect(Collectors.toList()); List<String> existBmsRegionName = regionList.stream().map(a->a.getName()).collect(Collectors.toList());
if(regionList.size()<bmsRegionNames.size()){ if(regionList.size()<bmsRegionNames.size()){

5
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java

@ -10,6 +10,7 @@ import com.qs.serve.common.utils.StringUtils;
import com.qs.serve.framework.base.model.PageVo; import com.qs.serve.framework.base.model.PageVo;
import com.qs.serve.framework.base.model.R; import com.qs.serve.framework.base.model.R;
import com.qs.serve.modules.tzc.entity.bo.TzcRebateParam; import com.qs.serve.modules.tzc.entity.bo.TzcRebateParam;
import com.qs.serve.modules.tzc.entity.vo.TzcRebateVo;
import com.qs.serve.modules.tzc.service.TzcRebateApplicationService; import com.qs.serve.modules.tzc.service.TzcRebateApplicationService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
@ -56,8 +57,8 @@ public class TzcRebateController {
* @return * @return
*/ */
@GetMapping("/getById/{id}") @GetMapping("/getById/{id}")
public R<TzcRebate> getById(@PathVariable("id") String id){ public R<TzcRebateVo> getById(@PathVariable("id") Long id){
TzcRebate tzcRebate = tzcRebateService.getById(id); TzcRebateVo tzcRebate = tzcRebateApplicationService.getRebateVoById(id);
return R.ok(tzcRebate); return R.ok(tzcRebate);
} }

6
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplicationService.java

@ -20,11 +20,5 @@ public interface TzcRebateApplicationService {
*/ */
TzcRebate modifyRebate(TzcRebateParam param); TzcRebate modifyRebate(TzcRebateParam param);
/**
* 提交返利到OA
* @param id
*/
void commitRebate(Long id);
} }

21
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateCheckApplicationService.java

@ -0,0 +1,21 @@
package com.qs.serve.modules.tzc.service;
import com.qs.serve.modules.tzc.entity.TzcRebate;
import com.qs.serve.modules.tzc.entity.bo.TzcRebateParam;
import com.qs.serve.modules.tzc.entity.vo.TzcRebateVo;
/**
* 返利信息 服务接口
* @author YenHex
* @date 2025-04-15
*/
public interface TzcRebateCheckApplicationService {
/**
* 提交返利到OA
* @param id
*/
void commitRebate(Long id);
}

210
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java

@ -18,6 +18,7 @@ import com.qs.serve.modules.tbs.service.TbsCenterDtoService;
import com.qs.serve.modules.tzc.consts.TzcArgTypes; import com.qs.serve.modules.tzc.consts.TzcArgTypes;
import com.qs.serve.modules.tzc.entity.*; import com.qs.serve.modules.tzc.entity.*;
import com.qs.serve.modules.tzc.entity.bo.*; import com.qs.serve.modules.tzc.entity.bo.*;
import com.qs.serve.modules.tzc.entity.vo.TzcRebateLevelsVo;
import com.qs.serve.modules.tzc.entity.vo.TzcRebatePeriodVo; import com.qs.serve.modules.tzc.entity.vo.TzcRebatePeriodVo;
import com.qs.serve.modules.tzc.entity.vo.TzcRebateSubjectVo; import com.qs.serve.modules.tzc.entity.vo.TzcRebateSubjectVo;
import com.qs.serve.modules.tzc.entity.vo.TzcRebateVo; import com.qs.serve.modules.tzc.entity.vo.TzcRebateVo;
@ -31,6 +32,7 @@ import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -72,18 +74,43 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
List<TzcRebateGoods> goodsList = tzcRebateGoodsService.list(qw); List<TzcRebateGoods> goodsList = tzcRebateGoodsService.list(qw);
List<TzcRebateLevelsConfig> configList = tzcRebateLevelsConfigService.list(qw); List<TzcRebateLevelsConfig> configList = tzcRebateLevelsConfigService.list(qw);
List<TzcRebateCenter> centerList = tzcRebateCenterService.list(qw); List<TzcRebateCenter> centerList = tzcRebateCenterService.list(qw);
List<TzcRebateLevels> levelsList = tzcRebateLevelsService.list(qw);
List<TzcRebateLevelsVo> levelsVoList = buildLevelVoList(argumentList, levelsList);
tzcRebateVo.setLevelsList(levelsVoList);
List<TzcRebateSubjectVo> subjectVoList = buildSubjectVoList(subjectList, centerList); List<TzcRebateSubjectVo> subjectVoList = buildSubjectVoList(subjectList, centerList);
tzcRebateVo.setSubjectList(subjectVoList); tzcRebateVo.setSubjectList(subjectVoList);
List<TzcRebatePeriodVo> periodVoList = buildPeriodVoList(argumentList, periodList); List<TzcRebatePeriodVo> periodVoList = buildPeriodVoList(argumentList, periodList);
tzcRebateVo.setPeriodList(periodVoList); tzcRebateVo.setPeriodList(periodVoList);
tzcRebateVo.setGoodsList(goodsList); tzcRebateVo.setGoodsList(goodsList);
tzcRebateVo.setConfigList(configList); tzcRebateVo.setConfigList(configList);
return tzcRebateVo; return tzcRebateVo;
} }
@NotNull
private List<TzcRebateLevelsVo> buildLevelVoList(List<TzcRebateLevelsArgument> argumentList, List<TzcRebateLevels> levelsList) {
List<TzcRebateLevelsVo> levelsVoList = new ArrayList<>();
for (TzcRebateLevels levels : levelsList) {
TzcRebateLevelsVo levelsVo = CopierUtil.copy(levels,new TzcRebateLevelsVo());
for (TzcRebateLevelsArgument argument : argumentList) {
if(argument.getLevelId().equals(levels.getId())){
if (argument.getBusinessType().equals(TzcArgTypes.LevelReturn.name())){
levelsVo.setTargetArgument(argument);
}else if (argument.getBusinessType().equals(TzcArgTypes.LevelOverallReturn.name())){
levelsVo.setOverallTargetArgument(argument);
}else {
Assert.throwEx("坎级参数类型错误");
}
}
}
}
return levelsVoList;
}
@NotNull @NotNull
private List<TzcRebateSubjectVo> buildSubjectVoList(List<TzcRebateSubject> subjectList, List<TzcRebateCenter> centerList) { private List<TzcRebateSubjectVo> buildSubjectVoList(List<TzcRebateSubject> subjectList, List<TzcRebateCenter> centerList) {
List<TzcRebateSubjectVo> subjectVoList = new ArrayList<>(); List<TzcRebateSubjectVo> subjectVoList = new ArrayList<>();
@ -136,9 +163,15 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
rebateCode = "FL"+CodeGenUtil.generate(CodeGenUtil.SourceKey.TZC_REBATE); rebateCode = "FL"+CodeGenUtil.generate(CodeGenUtil.SourceKey.TZC_REBATE);
} }
// 校验返利参数 // 校验返利参数(取消判断金额)
this.validRebateParam(param); this.validRebateParam(param);
// 获取最高坎级返回的金额
BigDecimal maxAmount = this.getMaxLevelsAmount(param);
// 计算和平摊到科目和成本中心(不再读取前端的金额)
List<TzcRebateSubjectParam> subjectParamList = param.getSubjectList();
this.calculateSubjectAndCenter(subjectParamList, maxAmount);
if (isUpdate){ if (isUpdate){
//删除旧数据 //删除旧数据
this.removeOldRebateDataById(rebateId); this.removeOldRebateDataById(rebateId);
@ -156,7 +189,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
rebateId = rebate.getId(); rebateId = rebate.getId();
// 返利的商品 // 返利的商品
List<TzcRebateGoods> tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsList()); List<TzcRebateGoods> tzcRebateGoodsList = this.buildRebateGoodsList(param.getGoodsType(),param.getGoodsList());
// 返利的商品,关联主表id和code // 返利的商品,关联主表id和code
for (TzcRebateGoods rebateGoods : tzcRebateGoodsList) { for (TzcRebateGoods rebateGoods : tzcRebateGoodsList) {
rebateGoods.setRebateId(rebate.getId()); rebateGoods.setRebateId(rebate.getId());
@ -187,6 +220,100 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
return rebate; return rebate;
} }
/**
* 计算和平摊到科目和成本中心不再读取前端的金额
* 均摊TzcRebateSubjectParam的subjectAmount
* 根据subjectAmount和centerRate均摊到TzcRebateCenterParam的centerAmount
* @param subjectParamList
* @param maxAmount
*/
private void calculateSubjectAndCenter(List<TzcRebateSubjectParam> subjectParamList, BigDecimal maxAmount) {
int subjectSize = subjectParamList.size();
BigDecimal totalRate = BigDecimal.ZERO;
// 计算总的比例
for (TzcRebateSubjectParam subjectParam : subjectParamList) {
totalRate = totalRate.add(subjectParam.getSubjectRate());
}
BigDecimal remainingAmount = maxAmount;
for (int i = 0; i < subjectSize; i++) {
TzcRebateSubjectParam subjectParam = subjectParamList.get(i);
BigDecimal subjectRate = subjectParam.getSubjectRate();
BigDecimal subjectAmount;
if (i == subjectSize - 1) {
// 最后一个科目获得剩余金额
subjectAmount = remainingAmount;
} else {
subjectAmount = maxAmount.multiply(subjectRate).divide(totalRate, 2, BigDecimal.ROUND_HALF_UP);
remainingAmount = remainingAmount.subtract(subjectAmount);
}
subjectParam.setSubjectAmount(subjectAmount);
// 处理成本中心
List<TzcRebateCenterParam> centerList = subjectParam.getCenterList();
int centerSize = centerList.size();
BigDecimal totalCenterRate = BigDecimal.ZERO;
// 计算成本中心的总比例
for (TzcRebateCenterParam centerParam : centerList) {
totalCenterRate = totalCenterRate.add(centerParam.getCenterRate());
}
BigDecimal remainingCenterAmount = subjectAmount;
for (int j = 0; j < centerSize; j++) {
TzcRebateCenterParam centerParam = centerList.get(j);
BigDecimal centerRate = centerParam.getCenterRate();
BigDecimal centerAmount;
if (j == centerSize - 1) {
// 最后一个成本中心获得剩余金额
centerAmount = remainingCenterAmount;
} else {
centerAmount = subjectAmount.multiply(centerRate).divide(totalCenterRate, 2, BigDecimal.ROUND_HALF_UP);
remainingCenterAmount = remainingCenterAmount.subtract(centerAmount);
}
centerParam.setCenterAmount(centerAmount);
}
}
}
/**
* 获取最高坎级返回的金额
* @param param
* @return
*/
public BigDecimal getMaxLevelsAmount(TzcRebateParam param){
int level = 0;
String config = "";
for (TzcRebateLevelsConfigParam configParam : param.getConfigList()) {
if(configParam.getLevelNum()>level){
level = configParam.getLevelNum();
config = configParam.getLevelConfigs();
}
}
String[] configArr = config.split(",");
BigDecimal maxAmount = BigDecimal.ZERO;
for (TzcRebateLevelsParam levelsParam : param.getLevelsList()) {
String lvNum = levelsParam.getLevelNum()+"";
for (String levelNum : configArr) {
if(lvNum.equals(levelNum)){
BigDecimal amt1 = levelsParam.getTargetArgument().getMaxReturnAmt();
BigDecimal amt2 = levelsParam.getOverallTargetArgument().getMaxReturnAmt();
if(amt1.compareTo(amt2)>0){
maxAmount = amt1;
}else {
maxAmount = amt2;
}
}
}
}
return maxAmount;
}
/** /**
* 保存坎级和设置参数 * 保存坎级和设置参数
* @param param * @param param
@ -343,27 +470,32 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
} }
@NotNull @NotNull
private List<TzcRebateGoods> buildRebateGoodsList(List<TzcRebateGoodsParam> goodsList) { private List<TzcRebateGoods> buildRebateGoodsList(String goodsTypeAll,List<TzcRebateGoodsParam> goodsList) {
List<TzcRebateGoods> tzcRebateGoodsList = new ArrayList<>(); List<TzcRebateGoods> tzcRebateGoodsList = new ArrayList<>();
// 方式一:支持多种
// Map<String,List<TzcRebateGoodsParam>> goodsListMap = goodsList.stream() // Map<String,List<TzcRebateGoodsParam>> goodsListMap = goodsList.stream()
// .collect(Collectors.groupingBy(TzcRebateGoodsParam::getGoodsType)); // .collect(Collectors.groupingBy(TzcRebateGoodsParam::getGoodsType));
// for (Map.Entry<String, List<TzcRebateGoodsParam>> entry : goodsListMap.entrySet()) { // 方式二:只支持一种,兼容旧活动接口参数
// String goodsType = entry.getKey(); Map<String,List<TzcRebateGoodsParam>> goodsListMap = new HashMap<>();
// List<TzcRebateGoodsParam> goodsParamList = entry.getValue(); goodsListMap.put(goodsTypeAll,goodsList);
// List<GoodsTargetInfo> goodsTargetList = goodsApplicationService.getGoodsTargetInfo(goodsType,goodsParamList.stream()
// .map(TzcRebateGoodsParam::getGoodsId).collect(Collectors.toList())); for (Map.Entry<String, List<TzcRebateGoodsParam>> entry : goodsListMap.entrySet()) {
// for (GoodsTargetInfo targetInfo : goodsTargetList) { String goodsType = entry.getKey();
// TzcRebateGoods rebateGoods = CopierUtil.copy(targetInfo,new TzcRebateGoods()); List<TzcRebateGoodsParam> goodsParamList = entry.getValue();
// for (TzcRebateGoodsParam goodsParam : goodsParamList) { List<GoodsTargetInfo> goodsTargetList = goodsApplicationService.getGoodsTargetInfo(goodsType,goodsParamList.stream()
// if(goodsParam.getGoodsId().equals(targetInfo.getTargetId())){ .map(TzcRebateGoodsParam::getGoodsId).collect(Collectors.toList()));
// rebateGoods.setTmpUk(goodsParam.getTmpUk()); for (GoodsTargetInfo targetInfo : goodsTargetList) {
// rebateGoods.setRemark(goodsParam.getRemark()); TzcRebateGoods rebateGoods = CopierUtil.copy(targetInfo,new TzcRebateGoods());
// break; for (TzcRebateGoodsParam goodsParam : goodsParamList) {
// } if(goodsParam.getGoodsId().equals(targetInfo.getTargetId())){
// } rebateGoods.setTmpUk(goodsParam.getTmpUk());
// tzcRebateGoodsList.add(rebateGoods); rebateGoods.setRemark(goodsParam.getRemark());
// } break;
// } }
}
tzcRebateGoodsList.add(rebateGoods);
}
}
return tzcRebateGoodsList; return tzcRebateGoodsList;
} }
@ -381,9 +513,9 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
if(centerParam.getCenterRate().compareTo(BigDecimal.ZERO)<0){ if(centerParam.getCenterRate().compareTo(BigDecimal.ZERO)<0){
Assert.throwEx("成本中心占比不能小于0"); Assert.throwEx("成本中心占比不能小于0");
} }
if(centerParam.getCenterAmount().compareTo(BigDecimal.ZERO)<0){ // if(centerParam.getCenterAmount().compareTo(BigDecimal.ZERO)<0){
Assert.throwEx("成本中心额度不能小于0"); // Assert.throwEx("成本中心额度不能小于0");
} // }
totalCenterRate = totalCenterRate.add(centerParam.getCenterRate()); totalCenterRate = totalCenterRate.add(centerParam.getCenterRate());
totalCenterAmount = totalCenterAmount.add(centerParam.getCenterAmount()); totalCenterAmount = totalCenterAmount.add(centerParam.getCenterAmount());
} }
@ -396,9 +528,9 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
if(subjectParam.getSubjectRate().compareTo(BigDecimal.ZERO)<0){ if(subjectParam.getSubjectRate().compareTo(BigDecimal.ZERO)<0){
Assert.throwEx("科目占比不能小于0"); Assert.throwEx("科目占比不能小于0");
} }
if(subjectParam.getSubjectAmount().compareTo(BigDecimal.ZERO)<0){ // if(subjectParam.getSubjectAmount().compareTo(BigDecimal.ZERO)<0){
Assert.throwEx("科目额度不能小于0"); // Assert.throwEx("科目额度不能小于0");
} // }
totalRate = totalRate.add(subjectParam.getSubjectRate()); totalRate = totalRate.add(subjectParam.getSubjectRate());
totalAmount = totalAmount.add(subjectParam.getSubjectAmount()); totalAmount = totalAmount.add(subjectParam.getSubjectAmount());
@ -406,9 +538,9 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
if(totalRate.compareTo(oneHundred)!=0){ if(totalRate.compareTo(oneHundred)!=0){
Assert.throwEx("科目占比合计["+totalRate+"%]不为100%"); Assert.throwEx("科目占比合计["+totalRate+"%]不为100%");
} }
if(totalAmount.compareTo(param.getRebateAmount())!=0){ // if(totalAmount.compareTo(param.getRebateAmount())!=0){
Assert.throwEx("科目额度合计异常金额:"+totalAmount+"元"); // Assert.throwEx("科目额度合计异常金额:"+totalAmount+"元");
} // }
List<TzcRebatePeriodParam> periodList = param.getPeriodList(); List<TzcRebatePeriodParam> periodList = param.getPeriodList();
for (int i = 0; i < periodList.size(); i++) { for (int i = 0; i < periodList.size(); i++) {
@ -427,6 +559,21 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
} }
} }
// 坎级数字必须唯一
if(CollUtil.isNotEmpty(param.getLevelsList())){
Map<Integer,List<TzcRebateLevelsParam>> map = param.getLevelsList().stream()
.collect(Collectors.groupingBy(TzcRebateLevelsParam::getLevelNum));
for (Map.Entry<Integer, List<TzcRebateLevelsParam>> entry : map.entrySet()) {
List<TzcRebateLevelsParam> levelsList = entry.getValue();
if(levelsList.size()>1){
Assert.throwEx("坎级数字["+entry.getKey()+"]不能重复");
}
TzcRebateLevelsParam levels = levelsList.get(0);
levels.getTargetArgument().check("返利");
levels.getOverallTargetArgument().check("总目标返利");
}
}
// 校验坎级叠加 // 校验坎级叠加
if(ResultFlag.isTrue(param.getOverlayFlag())){ if(ResultFlag.isTrue(param.getOverlayFlag())){
if(CollUtil.isEmpty(param.getConfigList())){ if(CollUtil.isEmpty(param.getConfigList())){
@ -435,9 +582,4 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
} }
} }
@Override
public void commitRebate(Long id) {
}
} }

53
cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateCheckApplicationServiceImpl.java

@ -0,0 +1,53 @@
package com.qs.serve.modules.tzc.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qs.serve.modules.tbs.service.*;
import com.qs.serve.modules.tzc.entity.*;
import com.qs.serve.modules.tzc.service.*;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @author YenHex
* @since 2025/4/24
*/
@Slf4j
@Service
@AllArgsConstructor
public class TzcRebateCheckApplicationServiceImpl implements TzcRebateCheckApplicationService {
private final TzcRebateService tzcRebateService;
private final TzcRebateSubjectService tzcRebateSubjectService;
private final TzcRebateCenterService tzcRebateCenterService;
private final TzcRebatePeriodService tzcRebatePeriodService;
private final TzcRebateLevelsArgumentService tzcRebateLevelsArgumentService;
private final TzcRebateGoodsService tzcRebateGoodsService;
private final TzcRebateLevelsConfigService tzcRebateLevelsConfigService;
private final TzcRebateLevelsService tzcRebateLevelsService;
private final TbsCostApplyService tbsCostApplyService;
private final TbsActivityService tbsActivityService;
private final TbsActivityCenterService tbsActivityCenterService;
private final TbsActivitySubjectService tbsActivitySubjectService;
private final TbsActivityGoodsService tbsActivityGoodsService;
private final TbsActivityCenterGoodsService tbsActivityCenterGoodsService;
@Override
public void commitRebate(Long id) {
TzcRebate rebate = tzcRebateService.getById(id);
QueryWrapper qw = new QueryWrapper<>();
qw.eq("rebate_id", id);
List<TzcRebateLevelsArgument> argumentList = tzcRebateLevelsArgumentService.list(qw);
List<TzcRebateSubject> subjectList = tzcRebateSubjectService.list(qw);
List<TzcRebatePeriod> periodList = tzcRebatePeriodService.list(qw);
List<TzcRebateGoods> goodsList = tzcRebateGoodsService.list(qw);
List<TzcRebateLevelsConfig> configList = tzcRebateLevelsConfigService.list(qw);
List<TzcRebateCenter> centerList = tzcRebateCenterService.list(qw);
List<TzcRebateLevels> levelsList = tzcRebateLevelsService.list(qw);
}
}
Loading…
Cancel
Save