diff --git a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/dto/TzcRebateCalculateDTO.java b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/dto/TzcRebateCalculateDTO.java index 74a2b21..84ea644 100644 --- a/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/dto/TzcRebateCalculateDTO.java +++ b/cms-modules/cms-policy/cms-policy-api/src/main/java/com/qs/serve/modules/tzc/entity/dto/TzcRebateCalculateDTO.java @@ -40,4 +40,29 @@ public class TzcRebateCalculateDTO { */ private BigDecimal totalReturnAmt; + /** + * 错误信息 + */ + private String errorMsg; + /** + * 调试信息 + */ + private String debugMsg; + + public void appendDebugMsg(String msg) { + if (this.debugMsg == null) { + this.debugMsg = msg; + } else { + this.debugMsg += ";\n" + msg; + } + } + + public void appendErrorMsg(String msg) { + if (this.errorMsg == null) { + this.errorMsg = msg; + } else { + this.errorMsg += ";" + msg; + } + } + } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/ErpDispatchSumPmsVo.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/ErpDispatchSumPmsVo.java index 9dd2c99..07fcd2f 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/ErpDispatchSumPmsVo.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/ErpDispatchSumPmsVo.java @@ -13,6 +13,7 @@ import java.util.List; @Data public class ErpDispatchSumPmsVo { + String activityId; /** * 客户编码 */ @@ -24,26 +25,16 @@ public class ErpDispatchSumPmsVo { BigDecimal totalAmount; - List categoryIds; + List categoryIds; - List spuIds; + List spuIds; - List skuIds; + List skuIds; /** * 按科目分割后的金额 */ - private List subjectDispatchAmountList; + List subjectDispatchAmountList; - @Data - public static class SubjectDispatchSumVo { - - BigDecimal subjectRate; - Long subjectId; - String subjectCode; - String subjectName; - BigDecimal subjectAmount; - - } } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/SubjectDispatchSumVo.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/SubjectDispatchSumVo.java new file mode 100644 index 0000000..fa82b41 --- /dev/null +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/erp/entity/vo/SubjectDispatchSumVo.java @@ -0,0 +1,19 @@ +package com.qs.serve.modules.erp.entity.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2025/5/7 + */ +@Data +public class SubjectDispatchSumVo { + + Long subjectId; + String subjectCode; + String subjectName; + BigDecimal subjectAmount; + +} diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java index 7b0a5ef..ddd2a5d 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController2.java @@ -7,8 +7,10 @@ import com.qs.serve.framework.base.model.dto.CommonIdsParam; import com.qs.serve.framework.base.model.R; import com.qs.serve.common.enums.BizType; import com.qs.serve.common.enums.SystemModule; +import com.qs.serve.framework.base.util.JsonUtil; import com.qs.serve.modules.erp.entity.so.ErpDispatchSumPmsQuery; import com.qs.serve.modules.erp.entity.vo.ErpDispatchSumPmsVo; +import com.qs.serve.modules.erp.entity.vo.SubjectDispatchSumVo; import com.qs.serve.modules.erp.mapper.ErpDispatchDataMapper; import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.service.*; @@ -55,6 +57,7 @@ public class TbsActivityController2 { List result = new ArrayList<>(); for (String s : idArr) { ErpDispatchSumPmsVo vo = this.buildVrpDispatchSumPms(Long.parseLong(s)); + vo.setActivityId(s); result.add(vo); } return R.ok(result); @@ -107,15 +110,24 @@ public class TbsActivityController2 { query.setSkuIds(ids); hasGoods = true; } - ErpDispatchSumPmsVo sumPmsVo = CopierUtil.copy(query,new ErpDispatchSumPmsVo()); + ErpDispatchSumPmsVo sumPmsVo = new ErpDispatchSumPmsVo(); + sumPmsVo.setSupplierCode(query.getSupplierCode()); + sumPmsVo.setStartDate(query.getStartDate()); + sumPmsVo.setEndDate(query.getEndDate()); + sumPmsVo.setCategoryIds(query.getCategoryIds()); + sumPmsVo.setSpuIds(query.getSpuIds()); + sumPmsVo.setSkuIds(query.getSkuIds()); + BigDecimal amt = BigDecimal.ZERO; if (hasGoods){ amt = erpDispatchDataMapper.queryCusAmtByPms(query); + if (amt==null){ + amt = BigDecimal.ZERO; + } List activitySubjects = tbsActivitySubjectService.list(new LambdaQueryWrapper() .eq(TbsActivitySubject::getActivityId,activityId)); - List dispatchSumVoList = new ArrayList<>(); - sumPmsVo.setSubjectDispatchAmountList(dispatchSumVoList); + List dispatchSumVoList = new ArrayList<>(); // 开始平摊逻辑 int size = activitySubjects.size(); if (size > 0) { @@ -137,7 +149,7 @@ public class TbsActivityController2 { remainingAmt = remainingAmt.subtract(allocatedAmt); } - ErpDispatchSumPmsVo.SubjectDispatchSumVo subjectDispatchSumVo = new ErpDispatchSumPmsVo.SubjectDispatchSumVo(); + SubjectDispatchSumVo subjectDispatchSumVo = new SubjectDispatchSumVo(); subjectDispatchSumVo.setSubjectId(subject.getSubjectId()); subjectDispatchSumVo.setSubjectCode(subject.getSubjectCode()); subjectDispatchSumVo.setSubjectName(subject.getSubjectName()); @@ -145,6 +157,7 @@ public class TbsActivityController2 { dispatchSumVoList.add(subjectDispatchSumVo); } } + sumPmsVo.setSubjectDispatchAmountList(dispatchSumVoList); } sumPmsVo.setTotalAmount(amt); return sumPmsVo; diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java index cfe318d..ffbe7e4 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/controller/TzcRebateController.java @@ -46,7 +46,7 @@ public class TzcRebateController { @PostMapping("/getRebateInfo") public R> getRebateByActivityId(@RequestBody List queryList){ - if (queryList == null){ + if (queryList != null){ List result = new ArrayList<>(); for (TzcGetActivityRebateQuery query : queryList) { TzcRebateCalculateDTO dto = tzcRebateApplication4VerificationService.getActivityRebateAmount(query.getActivityId(),query.getDispatchAmount()); diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java index 8966a23..4228789 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4CostServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.tzc.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.utils.CopierUtil; @@ -22,6 +23,7 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -127,7 +129,7 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio activity.setRebatePeriodId(period.getId()); activity.setCostApplyId(costApplyId); activity.setActivityCode(rebate.getRebateCode()+"_"+(i+1)); - activity.setActivityState(TbsActivityState.STATE_1_Finished); + activity.setActivityState(TbsActivityState.STATE_0_Todo); activity.setCostPassFlag(0); activity.setActTitle(rebate.getRebateName()); activity.setSupplierId(rebate.getSupplierId()); @@ -345,6 +347,9 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio .eq(TzcRebateLevels::getSamePeriodFlag, samePeriodFlag) .orderByDesc(TzcRebateLevels::getLevelNum) ); + if (CollUtil.isEmpty(levelsList)){ + dto.appendErrorMsg(samePeriodFlag==0?"未找到匹配无同期的坎级":"未找到匹配有同期的坎级"); + } dto.setSamePeriodLevelList(levelsList); // 命中的最高坎级 for (TzcRebateLevels levels : levelsList) { @@ -357,29 +362,32 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio }else if (levels.getConditionType().equals(1)){ periodAmount = rebatePeriod.getPeriodAmount(); } + BigDecimal targetAmt = periodAmount.multiply(levels.getConditionRate()) + .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP); // 发货金额大于坎级制定的百分比 - boolean ok = dispatchAmt.compareTo( - periodAmount.multiply(levels.getConditionRate()) - .divide(BigDecimal.valueOf(100), 2, RoundingMode.HALF_UP) - )>=0; + boolean ok = dispatchAmt.compareTo(targetAmt)>=0; if (!ok){ - log.debug("命中最高坎级:"+levels.getLevelNum()+",条件比重:"+levels.getConditionRate()+"%"); + dto.appendDebugMsg("跳过坎级:"+levels.getLevelNum()+",条件金额:"+targetAmt+",发货金额:"+dispatchAmt); + log.debug("跳过坎级:{},条件金额:{},发货金额:{}",levels.getLevelNum(),targetAmt,dispatchAmt); continue; } + dto.appendDebugMsg("命中坎级:"+levels.getLevelNum()+",条件金额:"+targetAmt+",发货金额:"+dispatchAmt); dto.setMaxLevels(levels); return dto; }else if (levels.getConditionSelect().equals(1)){ // 发货金额大于坎级制定的固定金额 boolean ok = dispatchAmt.compareTo(levels.getConditionAmount())>=0; if (!ok){ - log.debug("命中最高坎级:"+levels.getLevelNum()+",条件固定金额:"+levels.getConditionAmount()); + dto.appendDebugMsg("跳过坎级:"+levels.getLevelNum()+",条件金额:"+levels.getConditionAmount()+",发货金额:"+dispatchAmt); + log.debug("跳过坎级:{},条件金额:{},发货金额:{}",levels.getLevelNum(),levels.getConditionAmount(),dispatchAmt); continue; } + dto.appendDebugMsg("命中坎级:"+levels.getLevelNum()+",条件固定金额:"+levels.getConditionAmount()+",发货金额:"+dispatchAmt); dto.setMaxLevels(levels); return dto; } } - return null; + return dto; } @Override @@ -387,11 +395,10 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio BigDecimal dispatchAmt, BigDecimal sameDispatchAmt, TzcArgTypes argType) { - if (dto==null){ - log.debug("没有命中坎级"); + TzcRebateLevels levels = dto.getMaxLevels(); + if (levels==null){ return null; } - TzcRebateLevels levels = dto.getMaxLevels(); List allRebateLvList = dto.getSamePeriodLevelList(); TzcRebateLevelsConfig levelsConfig = tzcRebateLevelsConfigService.getOne( @@ -403,9 +410,12 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio String[] configArr; if (levelsConfig==null){ log.warn("没有坎级配置:"+levels.getLevelNum()+";返利ID:"+levels.getRebateId()); + dto.appendDebugMsg("没有坎级配置:"+levels.getLevelNum()+";返利ID:"+levels.getRebateId()); configArr = new String[]{levels.getLevelNum()+""}; }else { log.debug("读取坎级配置,坎级:"+levels.getLevelNum()); + dto.appendDebugMsg("读取坎级("+levels.getLevelNum()+")配置 ,配置叠级:" + + String.join(",", levelsConfig.getLevelConfigs())); configArr = levelsConfig.getLevelConfigs(); } // 获取命中的坎级 @@ -467,6 +477,7 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio }else { rebateLevelsDTO.setReturnAmt(BigDecimal.ZERO); log.warn("返利参数TzcRebateLevelsArgument-ID:{},返利金额小于0",currentArgument.getId()); + dto.appendErrorMsg("返利参数TzcRebateLevelsArgument-ID:"+currentArgument.getId()+",返利金额小于0"); } } } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java index 0623a1d..940c973 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tzc/service/impl/TzcRebateApplication4VerificationServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.tzc.service.impl; +import cn.hutool.core.collection.CollUtil; import com.qs.serve.modules.tbs.entity.TbsActivity; import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; import com.qs.serve.modules.tbs.service.*; @@ -53,14 +54,15 @@ public class TzcRebateApplication4VerificationServiceImpl implements TzcRebateAp TbsActivity activity = tbsActivityMapper.selectById(activityId); TzcRebatePeriod rebatePeriod = tzcRebatePeriodService.getById(activity.getRebatePeriodId()); BigDecimal sameDispatchAmt = rebatePeriod.getSamePeriodAmount(); + //BigDecimal sameDispatchAmt = BigDecimal.ZERO; // 获取最高命中的坎级 TzcRebateCalculateDTO calculateDTO = tzcRebateApplication4CostService.getHitRebateMaxLevel( - dispatchAmt, sameDispatchAmt, activity.getRebatePeriodId()); - if (calculateDTO != null){ - calculateDTO.setActivityId(activityId); - List levelAmountList = tzcRebateApplication4CostService.calculateRebate( - calculateDTO,dispatchAmt, sameDispatchAmt, TzcArgTypes.LevelReturn); - BigDecimal totalReturnAmt = BigDecimal.ZERO; + dispatchAmt, sameDispatchAmt, activity.getRebatePeriodId()); + calculateDTO.setActivityId(activityId); + List levelAmountList = tzcRebateApplication4CostService.calculateRebate( + calculateDTO,dispatchAmt, sameDispatchAmt, TzcArgTypes.LevelReturn); + BigDecimal totalReturnAmt = BigDecimal.ZERO; + if (CollUtil.isNotEmpty(levelAmountList)){ // 计算已用的优惠 for (TzcRebateLevelAmountDTO amountDTO : levelAmountList) { // 返利金额 @@ -74,12 +76,12 @@ public class TzcRebateApplication4VerificationServiceImpl implements TzcRebateAp if (returnAmt.compareTo(surplusReturnAmt) > 0){ amountDTO.setReturnAmt(surplusReturnAmt); } - totalReturnAmt.add(amountDTO.getReturnAmt()); + totalReturnAmt = totalReturnAmt.add(amountDTO.getReturnAmt()); amountDTO.setVerificationAmt(verificationAmt); } - calculateDTO.setTotalReturnAmt(totalReturnAmt); - calculateDTO.setLevelAmountList(levelAmountList); } + calculateDTO.setTotalReturnAmt(totalReturnAmt); + calculateDTO.setLevelAmountList(levelAmountList); return calculateDTO; } diff --git a/cms-modules/cms-system/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml b/cms-modules/cms-system/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml index 502d9a9..f0dced9 100644 --- a/cms-modules/cms-system/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml +++ b/cms-modules/cms-system/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml @@ -128,13 +128,13 @@ SUM(d.sum_money) as totalAmount FROM `erp_dispatch_data` d - left JOIN goods_sku ON d.invCode = goods_sku.sku_code + left JOIN goods_sku ON d.inv_code = goods_sku.sku_code left join goods_spu ON goods_sku.spu_id = goods_spu.id where d.place = '001' and d.date >= #{query.startDate} and d.date <= #{query.endDate} - and d.cus_code = #{query.customerCode} + and d.cus_code = #{query.supplierCode} and goods_spu.category_first in