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