Browse Source

费用率处理和计算

contract
15989082884@163.com 2 years ago
parent
commit
91219630b5
  1. 10
      src/main/java/com/qs/serve/modules/bir/entity/BirBaseActivity.java
  2. 97
      src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java
  3. 4
      src/main/java/com/qs/serve/modules/bir/service/impl/BirRoiRateServiceImpl.java
  4. 6
      src/main/resources/mapper/bir/BirBaseActivityMapper.xml
  5. 4
      src/main/resources/mapper/bir/BirRoiRateMapper.xml

10
src/main/java/com/qs/serve/modules/bir/entity/BirBaseActivity.java

@ -94,6 +94,16 @@ public class BirBaseActivity implements Serializable {
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate endDate;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate activityStartDate;
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd",timezone = "GMT+8")
private LocalDate activityEndDate;
private Integer applyStatus;
/** 创建时间 */
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")

97
src/main/java/com/qs/serve/modules/bir/service/impl/BirBaseActivityServiceImpl.java

@ -54,38 +54,52 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
.map(TbsActivity::getId).collect(Collectors.toList());
LambdaQueryWrapper<BirBaseActivity> birBaseActivityLqw = new LambdaQueryWrapper<>();
birBaseActivityLqw.in(BirBaseActivity::getActivityId,ids);
birBaseActivityLqw.eq(BirBaseActivity::getKeyNum,yearMonth);
this.remove(birBaseActivityLqw);
List<Long> costIds = activityList.stream().map(a->a.getCostApplyId()).distinct().collect(Collectors.toList());
LambdaQueryWrapper<TbsCostApply> costApplyLqw = new LambdaQueryWrapper<>();
costApplyLqw.in(TbsCostApply::getId,costIds);
List<TbsCostApply> costApplyList = costApplyMapper.selectList(costApplyLqw);
List<BirBaseActivity> birBaseActivities = new ArrayList<>();
for (TbsActivity activity : activityList) {
BirBaseActivity baseActivity = new BirBaseActivity();
LocalDate actStartDate = activity.getActStartDate();
LocalDate actEndDate = activity.getActEndDate();
TbsCostApply costApply = costApplyList.stream().filter(a->a.getId().equals(activity.getCostApplyId())).findFirst().get();
if(costApply==null){
continue;
}
LocalDate actStartDate = activity.getPreStartDate();
LocalDate actEndDate = activity.getPreEndDate();
int currentActDays = (int) (actEndDate.toEpochDay()-actStartDate.toEpochDay()+1);
BigDecimal amount = activity.getTotalAmount();
List<DateSplitDTO> dateSplitList = DateSplitUtil.getSplitDto(actStartDate,actEndDate);
//活动金额
BigDecimal currentAmount = null;
//核销金额
BigDecimal currentCheckAmount = null;
Integer currItemDays = null;
if(dateSplitList.size()>1){
//当前年月
DateSplitDTO currDateSplit = dateSplitList.stream()
.filter(a->a.getYearMonth().equals(yearMonth))
.collect(Collectors.toList()).get(0);
for(DateSplitDTO dto : dateSplitList) {
BirBaseActivity baseActivity = new BirBaseActivity();
//活动金额
BigDecimal currentAmount = BigDecimal.ZERO;
//核销金额
BigDecimal currentCheckAmount = BigDecimal.ZERO;
Integer currItemDays = 0;
DateSplitDTO currDateSplit = dto;
currItemDays = currDateSplit.getDays();
baseActivity.setStartDate(currDateSplit.getStartDate());
baseActivity.setEndDate(currDateSplit.getEndDate());
if (currDateSplit.getSort().equals(dateSplitList.size())) {
//最后一个月
//活动金额
currentAmount = activity.getTotalAmount();
//核销金额
currentCheckAmount = activity.getUsedAmount();
for (DateSplitDTO splitDTO : dateSplitList) {
//跳过当前年月
if(splitDTO.getYearMonth().equals(yearMonth)){
if (splitDTO.getYearMonth().equals(dto.getYearMonth())) {
continue;
}
//日期占比
@ -101,35 +115,70 @@ public class BirBaseActivityServiceImpl extends ServiceImpl<BirBaseActivityMappe
currentAmount = amount.multiply(dayRate);
currentCheckAmount = activity.getUsedAmount().multiply(dayRate);
}
baseActivity.setKeyNum(dto.getYearMonth());
baseActivity.setActivityId(activity.getId());
baseActivity.setCostApplyId(costApply.getId());
baseActivity.setActivityAmt(currentAmount);
baseActivity.setActivityTotalAmt(activity.getTotalAmount());
baseActivity.setActivityUsedAmt(activity.getUsedAmount());
baseActivity.setVerificationAmt(currentCheckAmount);
baseActivity.setPreActQuantity(activity.getPreActQuantity());
baseActivity.setSupplierId(activity.getSupplierId());
baseActivity.setSupplierCode(activity.getSupplierCode());
baseActivity.setSupplierName(activity.getSupplierName());
baseActivity.setActivityStartDate(actStartDate);
baseActivity.setActivityEndDate(actEndDate);
baseActivity.setUserId(costApply.getUserId());
baseActivity.setMonthDays(currItemDays);
baseActivity.setCostPassFlag(activity.getCostPassFlag());
baseActivity.setTotalDays(currentActDays);
baseActivity.setApplyStatus(costApply.getChargeState());
birBaseActivities.add(baseActivity);
}
}else if (dateSplitList.size()==1){
BirBaseActivity baseActivity = new BirBaseActivity();
//活动金额
BigDecimal currentAmountOne = null;
//核销金额
BigDecimal currentCheckAmountOne = null;
Integer currItemDaysOne = null;
DateSplitDTO dateSplit = dateSplitList.get(0);
baseActivity.setStartDate(dateSplit.getStartDate());
baseActivity.setEndDate(dateSplit.getEndDate());
currentAmount = amount;
currentCheckAmount = activity.getUsedAmount();
currItemDays = dateSplit.getDays();
}else {
Assert.throwEx("dateSplitList is empty");
}
TbsCostApply costApply = costApplyMapper.selectById(activity.getCostApplyId());
baseActivity.setKeyNum(yearMonth);
currentAmountOne = amount;
currentCheckAmountOne = activity.getUsedAmount();
currItemDaysOne = dateSplit.getDays();
baseActivity.setKeyNum(dateSplit.getYearMonth());
baseActivity.setActivityId(activity.getId());
baseActivity.setCostApplyId(costApply.getId());
baseActivity.setActivityAmt(currentAmount);
baseActivity.setActivityAmt(currentAmountOne);
baseActivity.setActivityTotalAmt(activity.getTotalAmount());
baseActivity.setActivityUsedAmt(activity.getUsedAmount());
baseActivity.setVerificationAmt(currentCheckAmount);
baseActivity.setVerificationAmt(currentCheckAmountOne);
baseActivity.setPreActQuantity(activity.getPreActQuantity());
baseActivity.setSupplierId(activity.getSupplierId());
baseActivity.setActivityStartDate(actStartDate);
baseActivity.setActivityEndDate(actEndDate);
baseActivity.setSupplierCode(activity.getSupplierCode());
baseActivity.setSupplierName(activity.getSupplierName());
baseActivity.setUserId(costApply.getUserId());
baseActivity.setMonthDays(currItemDays);
baseActivity.setMonthDays(currItemDaysOne);
baseActivity.setCostPassFlag(activity.getCostPassFlag());
baseActivity.setTotalDays(currentActDays);
baseActivity.setApplyStatus(costApply.getChargeState());
birBaseActivities.add(baseActivity);
}else {
Assert.throwEx("dateSplitList is empty");
}
}
//保存
this.saveBatch(birBaseActivities);
}

4
src/main/java/com/qs/serve/modules/bir/service/impl/BirRoiRateServiceImpl.java

@ -134,6 +134,8 @@ public class BirRoiRateServiceImpl extends ServiceImpl<BirRoiRateMapper,BirRoiRa
lqw.eq(BmsSupplier::getRegion2Second,bmsSupplier.getRegion2Second());
} if (checkNotNullVale(bmsSupplier.getRegion2First())){
lqw.eq(BmsSupplier::getRegion2First,bmsSupplier.getRegion2First());
}else{
lqw.eq(BmsSupplier::getId,"0");
}
}else if(loadType.equals(3)){
//3->客户的销售区域
@ -145,6 +147,8 @@ public class BirRoiRateServiceImpl extends ServiceImpl<BirRoiRateMapper,BirRoiRa
lqw.eq(BmsSupplier::getRegionSecond,bmsSupplier.getRegionSecond());
} if (checkNotNullVale(bmsSupplier.getRegionFirst())){
lqw.eq(BmsSupplier::getRegionFirst,bmsSupplier.getRegionFirst());
}else{
lqw.eq(BmsSupplier::getId,"0");
}
}
if (loadType.equals(2)||loadType.equals(3)){

6
src/main/resources/mapper/bir/BirBaseActivityMapper.xml

@ -87,12 +87,18 @@
FROM tbs_activity
LEFT JOIN bir_base_activity
on bir_base_activity.activity_id = tbs_activity.id
left join `tbs_cost_apply`
on `tbs_activity`.cost_apply_id = `tbs_cost_apply`.id
where
tbs_activity.del_flag = 0
and tbs_cost_apply.charge_state in (1,2,3)
and (
bir_base_activity.activity_id is null
or bir_base_activity.activity_total_amt != tbs_activity.total_amount
or bir_base_activity.activity_used_amt != tbs_activity.used_amount
or bir_base_activity.activity_start_date != tbs_activity.pre_start_date
or bir_base_activity.activity_end_date != tbs_activity.pre_end_date
or bir_base_activity.apply_status != `tbs_cost_apply`.charge_state
)
and (
(tbs_activity.act_start_date between #{startDate} and #{endDate})

4
src/main/resources/mapper/bir/BirRoiRateMapper.xml

@ -50,7 +50,7 @@
SELECT
key_num AS `year_month`,
min( start_date ) AS year_month_date,
sum(bir_base_activity.activity_total_amt) as cost_amt,
sum(bir_base_activity.activity_amt) as cost_amt,
sum(bir_base_activity.verification_amt) as check_amt,
sum(bir_base_activity.pre_act_quantity) as pre_amt
FROM
@ -92,7 +92,7 @@
SELECT
key_num AS `year_month`,
min( start_date ) AS year_month_date,
sum(bir_base_activity.activity_total_amt) as cost_amt,
sum(bir_base_activity.activity_amt) as cost_amt,
sum(bir_base_activity.verification_amt) as check_amt,
sum(bir_base_activity.pre_act_quantity) as pre_amt
FROM

Loading…
Cancel
Save