|
@ -18,6 +18,10 @@ import com.qs.serve.modules.tbs.entity.TbsActivity; |
|
|
import com.qs.serve.modules.tbs.entity.TbsActivityCenter; |
|
|
import com.qs.serve.modules.tbs.entity.TbsActivityCenter; |
|
|
import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; |
|
|
import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; |
|
|
import com.qs.serve.modules.tbs.service.TbsActivityCenterGoodsService; |
|
|
import com.qs.serve.modules.tbs.service.TbsActivityCenterGoodsService; |
|
|
|
|
|
import com.qs.serve.modules.vtb.common.VtbFundFlowType; |
|
|
|
|
|
import com.qs.serve.modules.vtb.entity.VtbFundFlow; |
|
|
|
|
|
import com.qs.serve.modules.vtb.entity.dto.VtbFundFlowSumAmtDTO; |
|
|
|
|
|
import com.qs.serve.modules.vtb.mapper.VtbFundFlowMapper; |
|
|
import com.tencentcloudapi.cii.v20201210.models.ResultObject; |
|
|
import com.tencentcloudapi.cii.v20201210.models.ResultObject; |
|
|
import lombok.AllArgsConstructor; |
|
|
import lombok.AllArgsConstructor; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
import lombok.extern.slf4j.Slf4j; |
|
@ -30,6 +34,7 @@ import com.qs.serve.modules.bir.mapper.BirActivityCenterGoodsMapper; |
|
|
import java.math.BigDecimal; |
|
|
import java.math.BigDecimal; |
|
|
import java.time.LocalDate; |
|
|
import java.time.LocalDate; |
|
|
import java.util.ArrayList; |
|
|
import java.util.ArrayList; |
|
|
|
|
|
import java.util.HashMap; |
|
|
import java.util.List; |
|
|
import java.util.List; |
|
|
import java.util.Map; |
|
|
import java.util.Map; |
|
|
import java.util.stream.Collectors; |
|
|
import java.util.stream.Collectors; |
|
@ -52,6 +57,8 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe |
|
|
|
|
|
|
|
|
private final BmsRegion2Mapper region2Mapper; |
|
|
private final BmsRegion2Mapper region2Mapper; |
|
|
|
|
|
|
|
|
|
|
|
private final VtbFundFlowMapper fundFlowMapper; |
|
|
|
|
|
|
|
|
@Override |
|
|
@Override |
|
|
public void buildReport(int year, int month) { |
|
|
public void buildReport(int year, int month) { |
|
|
LocalDate startDate = LocalDate.of(year,month,1); |
|
|
LocalDate startDate = LocalDate.of(year,month,1); |
|
@ -76,6 +83,14 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe |
|
|
Map<Long,List<TbsActivityCenterGoods>> collectMap = activityCenterGoodsAllList.stream() |
|
|
Map<Long,List<TbsActivityCenterGoods>> collectMap = activityCenterGoodsAllList.stream() |
|
|
.collect(Collectors.groupingBy(TbsActivityCenterGoods::getActivityId)); |
|
|
.collect(Collectors.groupingBy(TbsActivityCenterGoods::getActivityId)); |
|
|
|
|
|
|
|
|
|
|
|
//TODO查询费用释放
|
|
|
|
|
|
VtbFundFlow flow = new VtbFundFlow(); |
|
|
|
|
|
flow.setFundType(VtbFundFlowType.Release); |
|
|
|
|
|
flow.setSelectActivityIds(new ArrayList<>(collectMap.keySet())); |
|
|
|
|
|
List<VtbFundFlowSumAmtDTO> actReleaseList = fundFlowMapper.listSumAmount(flow); |
|
|
|
|
|
final Map<Long,BigDecimal> actReleaseMap = new HashMap<>(); |
|
|
|
|
|
actReleaseList.forEach(actRelease -> actReleaseMap.put(actRelease.getActivityId(),actRelease.getTotalAmt())); |
|
|
|
|
|
|
|
|
for (Long activityId : collectMap.keySet()) { |
|
|
for (Long activityId : collectMap.keySet()) { |
|
|
//用于保存的对象列表
|
|
|
//用于保存的对象列表
|
|
|
List<BirActivityCenterGoods> bacgList = new ArrayList<>(); |
|
|
List<BirActivityCenterGoods> bacgList = new ArrayList<>(); |
|
@ -90,20 +105,20 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe |
|
|
for (DateSplitDTO currDateSplit : dateSplitList) { |
|
|
for (DateSplitDTO currDateSplit : dateSplitList) { |
|
|
//获取该项分割金额对象
|
|
|
//获取该项分割金额对象
|
|
|
BirCenterGoodSplitDTO goodSplitDTO = this.buildSplitAmount(activityCenterGoods, |
|
|
BirCenterGoodSplitDTO goodSplitDTO = this.buildSplitAmount(activityCenterGoods, |
|
|
dateSplitList, currDateSplit,currentActDays); |
|
|
dateSplitList, currDateSplit,currentActDays,actReleaseMap); |
|
|
//创建底表对象
|
|
|
//创建底表对象
|
|
|
BirActivityCenterGoods entity = createBirActivityCenterGoodsEntity(costCenterList, |
|
|
BirActivityCenterGoods entity = createBirActivityCenterGoodsEntity(costCenterList, |
|
|
activityCenterGoods, currentActDays, currDateSplit, goodSplitDTO); |
|
|
activityCenterGoods, currentActDays, currDateSplit, goodSplitDTO,actReleaseMap); |
|
|
bacgList.add(entity); |
|
|
bacgList.add(entity); |
|
|
} |
|
|
} |
|
|
}else if (dateSplitList.size()==1){ |
|
|
}else if (dateSplitList.size()==1){ |
|
|
DateSplitDTO currDateSplit = dateSplitList.get(0); |
|
|
DateSplitDTO currDateSplit = dateSplitList.get(0); |
|
|
//获取该项分割金额对象
|
|
|
//获取该项分割金额对象
|
|
|
BirCenterGoodSplitDTO goodSplitDTO = this.buildSplitAmount(activityCenterGoods, |
|
|
BirCenterGoodSplitDTO goodSplitDTO = this.buildSplitAmount(activityCenterGoods, |
|
|
dateSplitList, currDateSplit,currentActDays); |
|
|
dateSplitList, currDateSplit,currentActDays,actReleaseMap); |
|
|
//创建底表对象
|
|
|
//创建底表对象
|
|
|
BirActivityCenterGoods entity = createBirActivityCenterGoodsEntity(costCenterList, |
|
|
BirActivityCenterGoods entity = createBirActivityCenterGoodsEntity(costCenterList, |
|
|
activityCenterGoods, currentActDays, currDateSplit, goodSplitDTO); |
|
|
activityCenterGoods, currentActDays, currDateSplit, goodSplitDTO,actReleaseMap); |
|
|
bacgList.add(entity); |
|
|
bacgList.add(entity); |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
@ -129,7 +144,8 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe |
|
|
TbsActivityCenterGoods activityCenterGoods, |
|
|
TbsActivityCenterGoods activityCenterGoods, |
|
|
Integer currentActDays, |
|
|
Integer currentActDays, |
|
|
DateSplitDTO currDateSplit, |
|
|
DateSplitDTO currDateSplit, |
|
|
BirCenterGoodSplitDTO goodSplitDTO) { |
|
|
BirCenterGoodSplitDTO goodSplitDTO, |
|
|
|
|
|
Map<Long,BigDecimal> actReleaseMap) { |
|
|
BirActivityCenterGoods entity = new BirActivityCenterGoods(); |
|
|
BirActivityCenterGoods entity = new BirActivityCenterGoods(); |
|
|
entity.setActivityCenterGoodsId(activityCenterGoods.getId()); |
|
|
entity.setActivityCenterGoodsId(activityCenterGoods.getId()); |
|
|
entity.setKeyNum(currDateSplit.getYearMonth()); |
|
|
entity.setKeyNum(currDateSplit.getYearMonth()); |
|
@ -138,12 +154,14 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe |
|
|
entity.setEndDate(currDateSplit.getEndDate()); |
|
|
entity.setEndDate(currDateSplit.getEndDate()); |
|
|
entity.setSplitAmount(goodSplitDTO.getCurrentSplitAmount()); |
|
|
entity.setSplitAmount(goodSplitDTO.getCurrentSplitAmount()); |
|
|
entity.setSplitUsedAmount(goodSplitDTO.getCurrentSplitCheckAmount()); |
|
|
entity.setSplitUsedAmount(goodSplitDTO.getCurrentSplitCheckAmount()); |
|
|
|
|
|
entity.setSplitReleaseAmount(goodSplitDTO.getCurrentSplitReleaseAmount()); |
|
|
entity.setCenterGoodsCode(activityCenterGoods.getCenterGoodsCode()); |
|
|
entity.setCenterGoodsCode(activityCenterGoods.getCenterGoodsCode()); |
|
|
entity.setCostApplyId(activityCenterGoods.getCostApplyId()); |
|
|
entity.setCostApplyId(activityCenterGoods.getCostApplyId()); |
|
|
entity.setActivityId(activityCenterGoods.getActivityId()); |
|
|
entity.setActivityId(activityCenterGoods.getActivityId()); |
|
|
entity.setActivityCode(activityCenterGoods.getActivityCode()); |
|
|
entity.setActivityCode(activityCenterGoods.getActivityCode()); |
|
|
entity.setActivityTotalAmount(activityCenterGoods.getActivityAmt()); |
|
|
entity.setActivityTotalAmount(activityCenterGoods.getActivityAmt()); |
|
|
entity.setActivityTotalCheckAmount(activityCenterGoods.getActivityCheckAmt()); |
|
|
entity.setActivityTotalCheckAmount(activityCenterGoods.getActivityCheckAmt()); |
|
|
|
|
|
entity.setActivityTotalReleaseAmount(actReleaseMap.get(activityCenterGoods.getActivityId())); |
|
|
entity.setActivityFinishedFlag(activityCenterGoods.getActivityFinishedFlag()); |
|
|
entity.setActivityFinishedFlag(activityCenterGoods.getActivityFinishedFlag()); |
|
|
entity.setSubjectId(activityCenterGoods.getSubjectId()); |
|
|
entity.setSubjectId(activityCenterGoods.getSubjectId()); |
|
|
entity.setSubjectCode(activityCenterGoods.getSubjectCode()); |
|
|
entity.setSubjectCode(activityCenterGoods.getSubjectCode()); |
|
@ -273,12 +291,21 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe |
|
|
private BirCenterGoodSplitDTO buildSplitAmount(TbsActivityCenterGoods activityCenterGoods, |
|
|
private BirCenterGoodSplitDTO buildSplitAmount(TbsActivityCenterGoods activityCenterGoods, |
|
|
List<DateSplitDTO> dateSplitList , |
|
|
List<DateSplitDTO> dateSplitList , |
|
|
DateSplitDTO currDateSplit, |
|
|
DateSplitDTO currDateSplit, |
|
|
Integer currentActDays){ |
|
|
Integer currentActDays, |
|
|
|
|
|
Map<Long,BigDecimal> actReleaseMap){ |
|
|
|
|
|
//释放金额
|
|
|
|
|
|
BigDecimal activityReleaseAmt = actReleaseMap.get(activityCenterGoods.getActivityId()); |
|
|
//活动相关
|
|
|
//活动相关
|
|
|
BigDecimal activityAmt = activityCenterGoods.getActivityAmt(); |
|
|
BigDecimal activityAmt = activityCenterGoods.getActivityAmt(); |
|
|
BigDecimal activityCheckAmt = activityCenterGoods.getActivityCheckAmt(); |
|
|
BigDecimal activityCheckAmt = activityCenterGoods.getActivityCheckAmt(); |
|
|
//当前CenterGoods项金额
|
|
|
//当前CenterGoods项金额
|
|
|
BigDecimal centerGoodsAmount = activityCenterGoods.getCenterGoodsAmount(); |
|
|
BigDecimal centerGoodsAmount = activityCenterGoods.getCenterGoodsAmount(); |
|
|
|
|
|
//当前CenterGoods项释放金额
|
|
|
|
|
|
BigDecimal currentReleaseAmount = activityReleaseAmt==null?BigDecimal.ZERO: |
|
|
|
|
|
activityReleaseAmt |
|
|
|
|
|
.multiply(activityCenterGoods.getCenterGoodsRate()) |
|
|
|
|
|
.multiply(activityCenterGoods.getCenterGoodsRate()) |
|
|
|
|
|
.divide(new BigDecimal("10000"),BigDecimal.ROUND_DOWN); |
|
|
//当前CenterGoods分割项金额
|
|
|
//当前CenterGoods分割项金额
|
|
|
BigDecimal currentSplitAmount = activityCenterGoods.getCenterGoodsAmount(); |
|
|
BigDecimal currentSplitAmount = activityCenterGoods.getCenterGoodsAmount(); |
|
|
//当前CenterGoods项核销金额(粗略计算)
|
|
|
//当前CenterGoods项核销金额(粗略计算)
|
|
@ -288,7 +315,7 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe |
|
|
.divide(new BigDecimal("10000"),BigDecimal.ROUND_DOWN); |
|
|
.divide(new BigDecimal("10000"),BigDecimal.ROUND_DOWN); |
|
|
//当前CenterGoods分割项核销金额(粗略计算)
|
|
|
//当前CenterGoods分割项核销金额(粗略计算)
|
|
|
BigDecimal currentSplitCheckAmount = currentSplitAmount; |
|
|
BigDecimal currentSplitCheckAmount = currentSplitAmount; |
|
|
|
|
|
BigDecimal currentReleaseSplitAmount = currentCheckAmount; |
|
|
//日期占比
|
|
|
//日期占比
|
|
|
BigDecimal dayRate = new BigDecimal(currDateSplit.getDays() + "") |
|
|
BigDecimal dayRate = new BigDecimal(currDateSplit.getDays() + "") |
|
|
.divide(new BigDecimal(currentActDays + ""), 2, BigDecimal.ROUND_HALF_DOWN); |
|
|
.divide(new BigDecimal(currentActDays + ""), 2, BigDecimal.ROUND_HALF_DOWN); |
|
@ -301,15 +328,18 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe |
|
|
} |
|
|
} |
|
|
currentSplitAmount = currentSplitAmount.subtract(centerGoodsAmount.multiply(dayRate)); |
|
|
currentSplitAmount = currentSplitAmount.subtract(centerGoodsAmount.multiply(dayRate)); |
|
|
currentSplitCheckAmount = currentSplitCheckAmount.subtract(currentCheckAmount.multiply(dayRate)); |
|
|
currentSplitCheckAmount = currentSplitCheckAmount.subtract(currentCheckAmount.multiply(dayRate)); |
|
|
|
|
|
currentReleaseSplitAmount = currentReleaseSplitAmount.subtract(currentReleaseSplitAmount.multiply(dayRate)); |
|
|
break; |
|
|
break; |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
|
currentSplitAmount = centerGoodsAmount.multiply(dayRate); |
|
|
currentSplitAmount = centerGoodsAmount.multiply(dayRate); |
|
|
currentSplitCheckAmount = currentCheckAmount.multiply(dayRate); |
|
|
currentSplitCheckAmount = currentCheckAmount.multiply(dayRate); |
|
|
|
|
|
currentReleaseSplitAmount = currentReleaseSplitAmount.multiply(dayRate); |
|
|
} |
|
|
} |
|
|
BirCenterGoodSplitDTO goodSplitDTO = new BirCenterGoodSplitDTO(); |
|
|
BirCenterGoodSplitDTO goodSplitDTO = new BirCenterGoodSplitDTO(); |
|
|
goodSplitDTO.setCurrentSplitAmount(currentSplitAmount); |
|
|
goodSplitDTO.setCurrentSplitAmount(currentSplitAmount); |
|
|
goodSplitDTO.setCurrentSplitCheckAmount(currentSplitCheckAmount); |
|
|
goodSplitDTO.setCurrentSplitCheckAmount(currentSplitCheckAmount); |
|
|
|
|
|
goodSplitDTO.setCurrentSplitReleaseAmount(currentReleaseSplitAmount); |
|
|
return goodSplitDTO; |
|
|
return goodSplitDTO; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|