14 changed files with 214 additions and 69 deletions
@ -0,0 +1,172 @@ |
|||||
|
package com.qs.serve.modules.tbs.controller; |
||||
|
|
||||
|
import cn.hutool.core.collection.CollUtil; |
||||
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
|
import com.qs.serve.common.annotation.SysLog; |
||||
|
import com.qs.serve.common.enums.BizType; |
||||
|
import com.qs.serve.common.enums.SystemModule; |
||||
|
import com.qs.serve.framework.base.model.R; |
||||
|
import com.qs.serve.framework.base.model.dto.CommonIdsParam; |
||||
|
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.TbsActivity; |
||||
|
import com.qs.serve.modules.tbs.entity.TbsActivitySubject; |
||||
|
import com.qs.serve.modules.tbs.entity.TbsCostApply; |
||||
|
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.VtbVerificationBatchBo; |
||||
|
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.VtbVerificationSubjectCenterBo; |
||||
|
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.jetbrains.annotations.Nullable; |
||||
|
import org.springframework.context.ApplicationEventPublisher; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
import java.math.BigDecimal; |
||||
|
import java.math.RoundingMode; |
||||
|
import java.util.ArrayList; |
||||
|
import java.util.List; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
/** |
||||
|
* 预算 费用活动 |
||||
|
* @module 预算 |
||||
|
* @service 费用活动 |
||||
|
* @author YenHex |
||||
|
* @since 2022-11-08 |
||||
|
*/ |
||||
|
@Slf4j |
||||
|
@AllArgsConstructor |
||||
|
@RestController |
||||
|
@RequestMapping("tbs/activity") |
||||
|
public class TbsActivityCheckController { |
||||
|
|
||||
|
private final VtbFundFlowService vtbFundFlowService; |
||||
|
private final TbsActivityService tbsActivityService; |
||||
|
private final TbsCostApplyService tbsCostApplyService; |
||||
|
private final TbsCostApplyPart1Service tbsCostApplyPart1Service; |
||||
|
private final TbsActivityApplicationService tbsActivityApplicationService; |
||||
|
private final TbsActivityGoodsService tbsActivityGoodsService; |
||||
|
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<Long> 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()); |
||||
|
VtbVerificationBo commitBo = createVerificationBo(activity); |
||||
|
if (commitBo == null) return; |
||||
|
eventPublisher.publishEvent(new VtbRebateAutoEvent(this, commitBo, costApply.getUserId())); |
||||
|
} |
||||
|
|
||||
|
@Nullable |
||||
|
private VtbVerificationBo createVerificationBo(TbsActivity activity) { |
||||
|
Long activityId = activity.getId(); |
||||
|
// 通过周期查询发货金额
|
||||
|
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 null; |
||||
|
} |
||||
|
// 计算返利金额
|
||||
|
VtbVerificationBo commitBo = new VtbVerificationBo(); |
||||
|
commitBo.setActivityId(activityId); |
||||
|
commitBo.setAttachIds(null); |
||||
|
commitBo.setRemark("返利核销自动:"+calculateDTO.getDebugMsg()); |
||||
|
commitBo.setChannelList(null); |
||||
|
commitBo.setPointList(null); |
||||
|
List<TbsActivitySubject> activitySubjects = tbsActivitySubjectService.listByActivityId(activityId); |
||||
|
List<VtbVerificationSubjectBo> 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); |
||||
|
commitBo.setAutoFlag(1); |
||||
|
return commitBo; |
||||
|
} |
||||
|
|
||||
|
/** |
||||
|
* 年度返利批量自动核销事件 |
||||
|
* @param costApplyId |
||||
|
*/ |
||||
|
@GetMapping("/createBatchRebateAutoEvent/{costApplyId}") |
||||
|
public void createBatchRebateAutoEvent(@PathVariable("costApplyId") Long costApplyId){ |
||||
|
TbsCostApply costApply = tbsCostApplyService.getById(costApplyId); |
||||
|
LambdaQueryWrapper<TbsActivity> lqw = new LambdaQueryWrapper<>(); |
||||
|
lqw.eq(TbsActivity::getCostApplyId,costApplyId) |
||||
|
.eq(TbsActivity::getActivityState,0) |
||||
|
.eq(TbsActivity::getAutoCheckState,1); |
||||
|
List<TbsActivity> activityList = tbsActivityService.list(lqw); |
||||
|
List<VtbVerificationBo> verificationBoList = new ArrayList<>(); |
||||
|
BigDecimal totalAmount = BigDecimal.ZERO; |
||||
|
for (TbsActivity activity : activityList) { |
||||
|
VtbVerificationBo verificationBo = this.createVerificationBo(activity); |
||||
|
if (verificationBo==null){ |
||||
|
continue; |
||||
|
} |
||||
|
verificationBoList.add(verificationBo); |
||||
|
for (VtbVerificationSubjectCenterBo centerBo : verificationBo.getSubjectCenterList()) { |
||||
|
|
||||
|
} |
||||
|
} |
||||
|
VtbVerificationBatchBo batchBo = new VtbVerificationBatchBo(); |
||||
|
batchBo.setVerificationList(verificationBoList); |
||||
|
batchBo.setRemark("年度返利核销"); |
||||
|
//batchBo.setPayWayId(0);
|
||||
|
batchBo.setCostApplyId(costApplyId); |
||||
|
//batchBo.setTotalAmount();
|
||||
|
batchBo.setRebateOfYearFlag(1); |
||||
|
|
||||
|
} |
||||
|
|
||||
|
|
||||
|
} |
||||
|
|
Loading…
Reference in new issue