Browse Source

feat: 返利保存调整

master
Yen 3 months ago
parent
commit
c6c6ff5549
  1. 2
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/consts/TzcArgTypes.java
  2. 15
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebate.java
  3. 3
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevels.java
  4. 40
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsArgument.java
  5. 3
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsConfig.java
  6. 3
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebatePeriod.java
  7. 3
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateLevelsConfigParam.java
  8. 3
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebateLevelsParam.java
  9. 12
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/bo/TzcRebatePeriodParam.java
  10. 2
      cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/vo/TzcRebateVo.java
  11. 5
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/TzcRebateApplicationService.java
  12. 46
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplicationServiceImpl.java
  13. 77
      cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateCheckApplicationServiceImpl.java

2
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/consts/TzcArgTypes.java

@ -10,7 +10,7 @@ public enum TzcArgTypes {
PeriodSupplement,
// 坎级返利 扩展
LevelReturn,
// 坎级总目标返利 扩展
// 坎级总目标返利 扩展(期间补偿)
LevelOverallReturn
}

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

@ -104,6 +104,21 @@ public class TzcRebate implements Serializable {
@Length(max = 255,message = "备注长度不能超过255字")
private String remark;
/** 申请人 */
@NotBlank(message = "申请人不能为空")
@Length(max = 32,message = "申请人长度不能超过32字")
private String userId;
/** 用户编码 */
@Length(max = 32,message = "长度不能超过32字")
@TableField(condition = SqlCondition.LIKE)
private String userCode;
/** 用户名称 */
@Length(max = 32,message = "长度不能超过32字")
@TableField(condition = SqlCondition.LIKE)
private String userName;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

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

@ -61,6 +61,9 @@ public class TzcRebateLevels implements Serializable {
@Length(max = 255,message = "备注长度不能超过255字")
private String remark;
/** 前端用于绑定模板id */
private String tmpUk;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

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

@ -9,6 +9,7 @@ import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.qs.serve.common.exception.Assert;
import lombok.Data;
import org.hibernate.validator.constraints.Length;
import org.springframework.format.annotation.DateTimeFormat;
@ -99,5 +100,44 @@ public class TzcRebateLevelsArgument implements Serializable {
@JsonProperty
private String delFlag;
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;
}
}
}

3
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebateLevelsConfig.java

@ -46,6 +46,9 @@ public class TzcRebateLevelsConfig implements Serializable {
@Length(max = 255,message = "备注长度不能超过255字")
private String remark;
/** 前端用于绑定模板id */
private String tmpUk;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

3
cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/TzcRebatePeriod.java

@ -79,6 +79,9 @@ public class TzcRebatePeriod implements Serializable {
@Length(max = 255,message = "备注长度不能超过255字")
private String remark;
/** 前端用于绑定模板id */
private String tmpUk;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

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

@ -27,5 +27,8 @@ public class TzcRebateLevelsConfigParam implements Serializable {
/** 坎级设置;格式如:1,3,5 */
private String levelConfigs;
/** 前端用于绑定模板id */
private String tmpUk;
}

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

@ -56,5 +56,8 @@ public class TzcRebateLevelsParam implements Serializable {
@Length(max = 255,message = "备注长度不能超过255字")
private String remark;
/** 前端用于绑定模板id */
private String tmpUk;
}

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

@ -43,20 +43,18 @@ public class TzcRebatePeriodParam implements Serializable {
/** 同期进货金额 */
private BigDecimal samePeriodAmount;
/** 总目标达标补偿
* compensationFlag=1时argumentParam不能为空
*/
private Integer compensationFlag;
/**
* 补偿方案
* 总目标达标补偿
*/
private TzcRebateArgumentParam argumentParam;
private Integer compensationFlag;
/** 补充说明 */
@Length(max = 255,message = "备注长度不能超过255字")
private String remark;
/** 前端用于绑定模板id */
private String tmpUk;
}

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

@ -16,7 +16,7 @@ public class TzcRebateVo extends TzcRebate {
private List<TzcRebateSubjectVo> subjectList;
private List<TzcRebatePeriodVo> periodList;
private List<TzcRebatePeriod> periodList;
private List<TzcRebateLevelsConfig> configList;

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

@ -11,6 +11,11 @@ import com.qs.serve.modules.tzc.entity.vo.TzcRebateVo;
*/
public interface TzcRebateApplicationService {
/**
* 根据id获取返利信息
* @param id
* @return
*/
TzcRebateVo getRebateVoById(Long id);
/**

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

@ -82,9 +82,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
List<TzcRebateSubjectVo> subjectVoList = buildSubjectVoList(subjectList, centerList);
tzcRebateVo.setSubjectList(subjectVoList);
List<TzcRebatePeriodVo> periodVoList = buildPeriodVoList(argumentList, periodList);
tzcRebateVo.setPeriodList(periodVoList);
tzcRebateVo.setPeriodList(periodList);
tzcRebateVo.setGoodsList(goodsList);
tzcRebateVo.setConfigList(configList);
@ -128,22 +126,6 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
return subjectVoList;
}
@NotNull
private List<TzcRebatePeriodVo> buildPeriodVoList(List<TzcRebateLevelsArgument> argumentList, List<TzcRebatePeriod> periodList) {
List<TzcRebatePeriodVo> periodVoList = new ArrayList<>();
for (TzcRebatePeriod period : periodList) {
TzcRebatePeriodVo periodVo = CopierUtil.copy(period,new TzcRebatePeriodVo());
for (TzcRebateLevelsArgument argument : argumentList) {
if(argument.getPeriodId().equals(period.getId())&&
argument.getBusinessType().equals(TzcArgTypes.PeriodSupplement.name())){
periodVo.setArgument(argument);
}
}
periodVoList.add(periodVo);
}
return periodVoList;
}
@Override
@Transactional(rollbackFor = Exception.class)
public TzcRebate modifyRebate(TzcRebateParam param) {
@ -212,8 +194,9 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
for (TzcRebateLevelsConfigParam configParam : param.getConfigList()) {
TzcRebateLevelsConfig config = new TzcRebateLevelsConfig();
config.setRebateId(rebateId);
config.setLevelNum(config.getLevelNum());
config.setLevelConfigs(config.getLevelConfigs());
config.setLevelNum(configParam.getLevelNum());
config.setLevelConfigs(configParam.getLevelConfigs());
config.setTmpUk(configParam.getTmpUk());
tzcRebateLevelsConfigService.save(config);
}
@ -288,14 +271,14 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
*/
public BigDecimal getMaxLevelsAmount(TzcRebateParam param){
int level = 0;
String config = "";
String configString = "";
for (TzcRebateLevelsConfigParam configParam : param.getConfigList()) {
if(configParam.getLevelNum()>level){
level = configParam.getLevelNum();
config = configParam.getLevelConfigs();
configString = configParam.getLevelConfigs();
}
}
String[] configArr = config.split(",");
String[] configArr = configString.split(",");
BigDecimal maxAmount = BigDecimal.ZERO;
for (TzcRebateLevelsParam levelsParam : param.getLevelsList()) {
String lvNum = levelsParam.getLevelNum()+"";
@ -330,6 +313,7 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
levels.setConditionAmount(levelsParam.getConditionAmount());
levels.setExampleRemark(levelsParam.getExampleRemark());
levels.setRemark(levelsParam.getRemark());
levels.setTmpUk(levelsParam.getTmpUk());
tzcRebateLevelsService.save(levels);
Long levelId = levels.getId();
@ -389,15 +373,8 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
period.setSamePeriodAmount(periodParam.getSamePeriodAmount());
period.setCompensationFlag(periodParam.getCompensationFlag());
period.setRemark(periodParam.getRemark());
period.setTmpUk(periodParam.getTmpUk());
tzcRebatePeriodService.save(period);
Long periodId = period.getId();
// 保存返利参数
TzcRebateLevelsArgument argument = buildArgByParam(periodParam.getArgumentParam());
argument.setBusinessType(TzcArgTypes.PeriodSupplement.name());
argument.setLevelId(0L);
argument.setPeriodId(periodId);
tzcRebateLevelsArgumentService.save(argument);
}
}
@ -552,11 +529,6 @@ public class TzcRebateApplicationServiceImpl implements TzcRebateApplicationServ
Assert.throwEx("["+period.getPeriodTitle()+"]与["+period2.getPeriodTitle()+"],时间段存在交集");
}
}
if(ResultFlag.isTrue(period.getCompensationFlag())){
if(period.getArgumentParam()==null){
Assert.throwEx("["+period.getPeriodTitle()+"]返利补偿不能为空");
}
}
}
// 坎级数字必须唯一

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

@ -1,13 +1,20 @@
package com.qs.serve.modules.tzc.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.qs.serve.modules.tbs.common.TbsCostApplyState;
import com.qs.serve.modules.tbs.entity.TbsCostApply;
import com.qs.serve.modules.tbs.service.*;
import com.qs.serve.modules.tzc.consts.TzcArgTypes;
import com.qs.serve.modules.tzc.entity.*;
import com.qs.serve.modules.tzc.entity.bo.TzcRebateLevelsConfigParam;
import com.qs.serve.modules.tzc.entity.bo.TzcRebateLevelsParam;
import com.qs.serve.modules.tzc.service.*;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
@ -48,6 +55,76 @@ public class TzcRebateCheckApplicationServiceImpl implements TzcRebateCheckAppli
List<TzcRebateCenter> centerList = tzcRebateCenterService.list(qw);
List<TzcRebateLevels> levelsList = tzcRebateLevelsService.list(qw);
// 计算最高坎级金额
BigDecimal maxLevelsAmount = getMaxLevelsAmount(levelsList, argumentList, configList);
// 总返利金额
BigDecimal totalAllAmount = maxLevelsAmount.multiply(new BigDecimal(periodList.size()));
// TODO:校验返利参数
// 转化为费用申请
TbsCostApply costApply = new TbsCostApply();
costApply.setCode(rebate.getRebateCode());
costApply.setMatchType(1);
costApply.setChargeTheme(rebate.getRebateName());
costApply.setChargeState(TbsCostApplyState.State_0_unPublish.getCode());
costApply.setSupplierId(rebate.getSupplierId());
costApply.setSupplierName(rebate.getSupplierName());
costApply.setSupplierCode(rebate.getSupplierCode());
costApply.setUserId(rebate.getUserId());
costApply.setUserCode(rebate.getUserCode());
costApply.setUserName(rebate.getUserName());
costApply.setTotalActivity(periodList.size());
costApply.setTotalActivityAmount(totalAllAmount);
costApply.setSubmitTime(LocalDateTime.now());
costApply.setRemark(rebate.getRemark());
}
/**
* 获取最高坎级返回的金额
* @param levelsList
* @param argumentList
* @param configList
* @return
*/
public BigDecimal getMaxLevelsAmount(List<TzcRebateLevels> levelsList,
List<TzcRebateLevelsArgument> argumentList,
List<TzcRebateLevelsConfig> configList){
int level = 0;
String configString = "";
for (TzcRebateLevelsConfig config: configList) {
if(config.getLevelNum()>level){
level = config.getLevelNum();
configString = config.getLevelConfigs();
}
}
String[] configArr = configString.split(",");
BigDecimal maxAmount = BigDecimal.ZERO;
for (TzcRebateLevels levels : levelsList) {
String lvNum = levels.getLevelNum()+"";
for (String levelNum : configArr) {
if(lvNum.equals(levelNum)){
BigDecimal amt1 = BigDecimal.ZERO;
BigDecimal amt2 = BigDecimal.ZERO;
for (TzcRebateLevelsArgument argument : argumentList) {
if(argument.getLevelId().equals(levels.getId())){
if (argument.getBusinessType().equals(TzcArgTypes.LevelReturn.name())){
amt1 = argument.getMaxReturnAmt();
}else if (argument.getBusinessType().equals(TzcArgTypes.LevelOverallReturn.name())){
amt2 = argument.getMaxReturnAmt();
}
}
}
if(amt1.compareTo(amt2)>0){
maxAmount = amt1;
}else {
maxAmount = amt2;
}
}
}
}
return maxAmount;
}
}

Loading…
Cancel
Save