From 37e2fa0430714ae7224f842056f3f78a22635043 Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 26 May 2025 10:13:14 +0800 Subject: [PATCH] =?UTF-8?q?feat(rebate):=20=E8=87=AA=E5=8A=A8=E8=BF=94?= =?UTF-8?q?=E5=88=A9=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/UnifiedExceptionHandler.java | 15 +--- .../controller/TbsActivityController2.java | 72 +++++++++++++++++++ .../modules/tbs/entity/TbsCostApply.java | 5 ++ .../modules/tbs/mapper/TbsActivityMapper.java | 6 ++ .../tbs/service/TbsActivityService.java | 5 ++ .../TzcRebateApplication4CostServiceImpl.java | 14 +++- .../controller/VtbVerificationController.java | 7 +- .../vtb/entity/VtbVerificationBatch.java | 4 ++ .../modules/vtb/event/VtbRebateAutoEvent.java | 29 ++++++++ .../listener/VtbRebateAutoEventListener.java | 29 ++++++++ .../vtb/service/VtbVerificationService.java | 2 +- .../impl/VtbVerificationServiceImpl.java | 4 +- .../mapper/bir/TbsActivityMapper.xml | 19 +++++ 13 files changed, 191 insertions(+), 20 deletions(-) create mode 100644 cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/event/VtbRebateAutoEvent.java create mode 100644 cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/listener/VtbRebateAutoEventListener.java create mode 100644 cms-modules/cms-system/src/main/resources/mapper/bir/TbsActivityMapper.xml diff --git a/cms-common/src/main/java/com/qs/serve/common/exception/UnifiedExceptionHandler.java b/cms-common/src/main/java/com/qs/serve/common/exception/UnifiedExceptionHandler.java index a541bc6..2332ee0 100644 --- a/cms-common/src/main/java/com/qs/serve/common/exception/UnifiedExceptionHandler.java +++ b/cms-common/src/main/java/com/qs/serve/common/exception/UnifiedExceptionHandler.java @@ -41,19 +41,8 @@ public class UnifiedExceptionHandler { return new R(e.getCode(),e.getMessage()); } - @ExceptionHandler(value = NullPointerException.class) - @ResponseBody - public R handleBindException(NullPointerException e,HttpServletRequest request) { - StringBuilder stringBuilder = new StringBuilder(); - for (StackTraceElement element : e.getStackTrace()) { - if (element.getClassName().contains("qs")){ - stringBuilder.append(element.getClassName()+":"+element.getLineNumber()+"\n"); - } - } - log.error("\n空指针:{} \n{}",request.getRequestURI(),stringBuilder); - e.printStackTrace(); - return R.error("数据不存在或被移除"); - } + + // @ExceptionHandler({ // AccessDeniedException.class 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 e399d60..c6ac6c5 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 @@ -14,12 +14,20 @@ 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.mapper.TbsActivityMapper; import com.qs.serve.modules.tbs.service.*; import com.qs.serve.modules.tzc.entity.TzcRebatePeriod; +import com.qs.serve.modules.tzc.entity.dto.TzcRebateCalculateDTO; +import com.qs.serve.modules.tzc.service.TzcRebateApplication4VerificationService; import com.qs.serve.modules.tzc.service.TzcRebatePeriodService; +import com.qs.serve.modules.vtb.entity.bo.VtbVerificationBo; +import com.qs.serve.modules.vtb.entity.bo.VtbVerificationSubjectBo; +import com.qs.serve.modules.vtb.entity.bo.VtbVerificationSubjectCommitBo; +import com.qs.serve.modules.vtb.event.VtbRebateAutoEvent; import com.qs.serve.modules.vtb.service.VtbFundFlowService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.ApplicationEventPublisher; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; @@ -49,6 +57,70 @@ public class TbsActivityController2 { private final TbsActivitySubjectService tbsActivitySubjectService; private final ErpDispatchDataMapper erpDispatchDataMapper; private final TzcRebatePeriodService tzcRebatePeriodService; + private final TbsActivityMapper tbsActivityMapper; + private final TzcRebateApplication4VerificationService tzcRebateApplication4VerificationService; + private final ApplicationEventPublisher eventPublisher; + + + public void createAutoEvent(){ + List rebateAutoActIds = tbsActivityMapper.listRebateAutoActIds(); + for (Long actId : rebateAutoActIds) { + createAutoEvent(actId); + } + } + + /** + * 创建返利自动核销事件 + * @param activityId + */ + @GetMapping("/createRebateAutoEvent/{actId}") + public void createAutoEvent(@PathVariable("actId") Long activityId){ + TbsActivity activity = tbsActivityService.getById(activityId); + TbsCostApply costApply = tbsCostApplyService.getById(activity.getCostApplyId()); + // 通过周期查询发货金额 + ErpDispatchSumPmsVo erpDispatchSumPmsVo = tbsActivityService.getDispatchSumByActivity(activity); + BigDecimal dispatchAmount = erpDispatchSumPmsVo.getTotalAmount(); + // 此次核销金额 + TzcRebateCalculateDTO calculateDTO = tzcRebateApplication4VerificationService.getActivityRebateAmount(activityId,dispatchAmount); + BigDecimal vtbAmt = calculateDTO.getTotalReturnAmt(); + if (vtbAmt.compareTo(BigDecimal.ZERO)==0){ + // 没有返利金额 + return; + } + // 计算返利金额 + VtbVerificationBo commitBo = new VtbVerificationBo(); + commitBo.setActivityId(activityId); + commitBo.setAttachIds(null); + commitBo.setRemark("返利核销自动:"+calculateDTO.getDebugMsg()); + commitBo.setChannelList(null); + commitBo.setPointList(null); + List activitySubjects = tbsActivitySubjectService.listByActivityId(activityId); + List subjectBoList = new ArrayList<>(); + + // 平均每个科目金额 + BigDecimal avgAmt = vtbAmt.divide(BigDecimal.valueOf(activitySubjects.size()), 2,RoundingMode.DOWN); + // 剩余金额,计算最后一项金额 + BigDecimal surplusAmt = vtbAmt; + for (int i = 0; i < activitySubjects.size(); i++) { + VtbVerificationSubjectBo subjectBo = new VtbVerificationSubjectBo(); + subjectBo.setSubjectId(activitySubjects.get(i).getSubjectId()); + subjectBo.setCountSession(0); + subjectBo.setCountPerson(0); + if (i==activitySubjects.size()-1){ + subjectBo.setAmount(surplusAmt); + }else { + subjectBo.setAmount(avgAmt); + surplusAmt = surplusAmt.subtract(avgAmt); + } + } + + commitBo.setSubjectList(subjectBoList); + commitBo.setPayConditionId(0L); + commitBo.setPayWayId(0L); + // 不释放 + commitBo.setInputReleaseFlag(0); + eventPublisher.publishEvent(new VtbRebateAutoEvent(this, commitBo, costApply.getUserId())); + } /** * 获取返利年度的活动ID diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java index f62557b..074e676 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java @@ -246,6 +246,11 @@ public class TbsCostApply implements Serializable { private Integer tmpState; + /** + * 自动核销状态:0-无需自动核销;1-需自动核销;2-已自动核销 + */ + private Integer autoCheckState; + @TableField(exist = false) private String affairId; diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityMapper.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityMapper.java index 7cd8b6e..ad9d938 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityMapper.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/mapper/TbsActivityMapper.java @@ -16,6 +16,12 @@ import java.util.Map; */ public interface TbsActivityMapper extends BaseMapper { + /** + * 获取所有返利自动核销的活动id + * @return + */ + List listRebateAutoActIds(); + /** * 获取系统配置的活动预计核销日期(以活动结束时间后的第几天为预计核销日期) * @return diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityService.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityService.java index 7d46089..9d8adb6 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityService.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/tbs/service/TbsActivityService.java @@ -15,6 +15,11 @@ import java.util.List; */ public interface TbsActivityService extends IService { + /** + * 获取客户的发货金额(通过活动期间和平类加载) + * @param activity + * @return + */ ErpDispatchSumPmsVo getDispatchSumByActivity(TbsActivity activity); /** 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 b49c994..a5f923e 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 @@ -97,8 +97,18 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio tbsActivitySubjectService.remove(delQw); } + + // 转化为费用申请 TbsCostApply costApply = new TbsCostApply(); + boolean needComp = false; + for (TzcRebatePeriod period : periodList) { + if (period.getCompensationFlag().equals(1)){ + needComp = true; + break; + } + } + costApply.setAutoCheckState(needComp?rebate.getCheckModel():0); costApply.setRebateId(rebateId); costApply.setCode(rebate.getRebateCode()); costApply.setTemplateId(rebate.getTemplateId()); @@ -523,7 +533,7 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio if (currentArgument.getSumAddFlag().equals(0)){ BigDecimal rs = dispatchAmt.multiply(currentArgument.getReturnRate()) .divide(BigDecimal.valueOf(100),2,RoundingMode.HALF_UP); - if (rs.compareTo(currentArgument.getMaxReturn())>0){ + if (currentArgument.getMaxReturn()!=null && rs.compareTo(currentArgument.getMaxReturn())>0){ rs = currentArgument.getMaxReturn(); } rebateLevelsDTO.setReturnAmt(rs); @@ -536,7 +546,7 @@ public class TzcRebateApplication4CostServiceImpl implements TzcRebateApplicatio if (rs.compareTo(BigDecimal.ZERO)>0){ rebateLevelsDTO.setDebugMsg("基于增量("+rs+") " + "= (发货金额["+dispatchAmt+"] - 同比发货金额["+sameDispatchAmt+"]) * 返利比例["+currentArgument.getReturnRate()+"%];最高返利"+currentArgument.getMaxReturn()); - if (rs.compareTo(currentArgument.getMaxReturn())>0){ + if (currentArgument.getMaxReturn()!=null && rs.compareTo(currentArgument.getMaxReturn())>0){ rs = currentArgument.getMaxReturn(); } rebateLevelsDTO.setReturnAmt(rs); diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java index deda7e9..fbda34e 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/controller/VtbVerificationController.java @@ -27,6 +27,7 @@ import com.qs.serve.modules.tbs.common.TbsSeeYonConst; import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; import com.qs.serve.modules.tbs.entity.vo.CtpAffairVo; +import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; import com.qs.serve.modules.tbs.service.*; import com.qs.serve.modules.vtb.common.VtbVerificationState; import com.qs.serve.modules.vtb.entity.*; @@ -76,6 +77,7 @@ public class VtbVerificationController { private VtbVerificationYardItemService vtbVerificationYardItemService; private VtbVerificationOperationServiceImpl vtbVerificationOperationService; private VtbVerificationApplication2 vtbVerificationApplication2; + private TbsActivityMapper tbsActivityMapper; @GetMapping("/tryToAccessOa") public R tryToAccessOa() { @@ -250,7 +252,7 @@ public class VtbVerificationController { public R commit(@RequestBody @Valid VtbVerificationSubjectCommitBo commitBo){ seeYonService.testConnection(); VtbVerificationBo param = CopierUtil.copy(commitBo,new VtbVerificationBo()); - vtbVerificationService.commit(param); + vtbVerificationService.commit(param,AuthContextUtils.getSysUserId()); return R.ok(); } @@ -265,7 +267,7 @@ public class VtbVerificationController { public R commit(@RequestBody @Valid VtbVerificationCenterCommitBo commitBo){ //seeYonService.testConnection(); VtbVerificationBo param = CopierUtil.copy(commitBo,new VtbVerificationBo()); - vtbVerificationService.commit(param); + vtbVerificationService.commit(param,AuthContextUtils.getSysUserId()); return R.ok(); } @@ -525,5 +527,6 @@ public class VtbVerificationController { return R.ok(); } + } diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationBatch.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationBatch.java index c29f82a..c8638f1 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationBatch.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationBatch.java @@ -158,6 +158,10 @@ public class VtbVerificationBatch implements Serializable { private String wayTitle; + /** + * 自动核销状态:0-无需自动核销;1-需自动核销; + */ + private Integer autoCheckState; /** 核销明细列表 */ @TableField(exist = false) diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/event/VtbRebateAutoEvent.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/event/VtbRebateAutoEvent.java new file mode 100644 index 0000000..48694ce --- /dev/null +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/event/VtbRebateAutoEvent.java @@ -0,0 +1,29 @@ +package com.qs.serve.modules.vtb.event; + +import com.qs.serve.modules.vtb.entity.bo.VtbVerificationBo; +import org.springframework.context.ApplicationEvent; + +/** + * @author YenHex + * @since 2025/5/26 + */ +public class VtbRebateAutoEvent extends ApplicationEvent { + + private VtbVerificationBo verificationBo; + private String userId; + + public VtbRebateAutoEvent(Object source, VtbVerificationBo verificationBo, String userId) { + super(source); + this.userId = userId; + this.verificationBo = verificationBo; + } + + public VtbVerificationBo getVerificationBo() { + return verificationBo; + } + + public String getUserId() { + return userId; + } + +} diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/listener/VtbRebateAutoEventListener.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/listener/VtbRebateAutoEventListener.java new file mode 100644 index 0000000..98a180a --- /dev/null +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/listener/VtbRebateAutoEventListener.java @@ -0,0 +1,29 @@ +package com.qs.serve.modules.vtb.listener; + +import com.qs.serve.modules.sys.common.AuthContextUtils; +import com.qs.serve.modules.vtb.entity.bo.VtbVerificationBo; +import com.qs.serve.modules.vtb.event.VtbRebateAutoEvent; +import com.qs.serve.modules.vtb.service.VtbVerificationService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.context.event.EventListener; +import org.springframework.stereotype.Component; + +/** + * @author YenHex + * @since 2025/5/26 + */ +@Slf4j +@Component +@RequiredArgsConstructor +public class VtbRebateAutoEventListener { + + private final VtbVerificationService vtbVerificationService; + + @EventListener + public void handleVtbRebateAutoEvent(VtbRebateAutoEvent event) { + VtbVerificationBo verificationBo = event.getVerificationBo(); + vtbVerificationService.commit(verificationBo,event.getUserId()); + } + +} diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java index 008e6df..772d7b3 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/VtbVerificationService.java @@ -70,7 +70,7 @@ public interface VtbVerificationService extends IService { * 提交审批 * @param vtbVerificationBo */ - void commit(VtbVerificationBo vtbVerificationBo); + void commit(VtbVerificationBo vtbVerificationBo,String userId); /** diff --git a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java index 5f2ac5d..5c6e953 100644 --- a/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java +++ b/cms-modules/cms-system/src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java @@ -731,10 +731,10 @@ public class VtbVerificationServiceImpl extends ServiceImpl + + + + + + + +