From 71e265504fe096fdaa9511f60318a3e1a098b653 Mon Sep 17 00:00:00 2001 From: Yen Date: Wed, 13 Sep 2023 16:51:07 +0800 Subject: [PATCH] =?UTF-8?q?=E8=B4=B9=E7=94=A8=E7=94=B3=E8=AF=B7=EF=BC=8C?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=AE=A2=E6=88=B7=E7=BB=B4=E5=BA=A6=E8=B4=B9?= =?UTF-8?q?=E7=8E=87=E6=95=B0=E6=8D=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serve/common/model/enums/MonthValues.java | 40 ++ .../impl/BirCenterRateServiceImpl.java | 1 + .../modules/bms/entity/BmsSupplierTarget.java | 77 ++++ .../bms/mapper/BmsSupplierTargetMapper.java | 14 + .../TbsActivitySlottingFeeController.java | 6 + .../entity/dto/TbsContractCostSubItem.java | 1 + .../service/impl/TbsCostApplyServiceImpl.java | 343 +++++++++++++----- 7 files changed, 391 insertions(+), 91 deletions(-) create mode 100644 src/main/java/com/qs/serve/common/model/enums/MonthValues.java create mode 100644 src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierTarget.java create mode 100644 src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierTargetMapper.java diff --git a/src/main/java/com/qs/serve/common/model/enums/MonthValues.java b/src/main/java/com/qs/serve/common/model/enums/MonthValues.java new file mode 100644 index 00000000..22ac1596 --- /dev/null +++ b/src/main/java/com/qs/serve/common/model/enums/MonthValues.java @@ -0,0 +1,40 @@ +package com.qs.serve.common.model.enums; + +/** + * @author YenHex + * @since 2023/9/13 + */ +public class MonthValues { + + public static final int[] Q1 = {1,2,3}; + public static final int[] Q2 = {4,5,6}; + public static final int[] Q3 = {7,8,9}; + public static final int[] Q4 = {10,11,12}; + + + + public static int[] getQArr(Integer val){ + for (int i = 0; i < Q1.length; i++) { + if(val==Q1[i]){ + return Q1; + } + } + for (int i = 0; i < Q2.length; i++) { + if(val==Q2[i]){ + return Q2; + } + } + for (int i = 0; i < Q3.length; i++) { + if(val==Q3[i]){ + return Q3; + } + } + for (int i = 0; i < Q4.length; i++) { + if(val==Q4[i]){ + return Q4; + } + } + return null; + } + +} diff --git a/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java b/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java index dc5c1340..0fdb30d3 100644 --- a/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bir/service/impl/BirCenterRateServiceImpl.java @@ -62,6 +62,7 @@ public class BirCenterRateServiceImpl implements BirCenterRateService { private TzcPolicyItemMapper tzcPolicyItemMapper; private TbsBudgetLogMapper tbsBudgetLogMapper; + @Override public List findCostCenterDataByCostApplyId(Long costApplyId,Long policyId){ List centerDataList = new ArrayList<>(); if(costApplyId!=null) { diff --git a/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierTarget.java b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierTarget.java new file mode 100644 index 00000000..ac296b86 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bms/entity/BmsSupplierTarget.java @@ -0,0 +1,77 @@ +package com.qs.serve.modules.bms.entity; + +import java.time.LocalDate; +import java.io.Serializable; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonIgnore; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.hibernate.validator.constraints.Length; +import org.springframework.format.annotation.DateTimeFormat; + +import javax.validation.constraints.NotNull; +import javax.validation.constraints.NotBlank; + +/** + * 实体类 + * @author YenHex + * @since 2023-09-13 + */ +@Data +@TableName("bms_supplier_target") +public class BmsSupplierTarget implements Serializable { + + private static final long serialVersionUID = 1L; + + /** */ + @TableId(type = IdType.AUTO) + private Long id; + + /** */ + private Long supplierId; + + /** */ + @Length(max = 255,message = "长度不能超过255字") + private String supplierCode; + + /** */ + @Length(max = 255,message = "长度不能超过255字") + private String supplierName; + + /** 对应tbs_schedule的ID */ + private Long scheduleId; + + /** 对应tbs_schedule_item的ID */ + private Long scheduleItemId; + + /** */ + @Length(max = 255,message = "长度不能超过255字") + private String scheduleItemName; + + /** */ + private BigDecimal targetDispatchAmount; + + /** */ + private BigDecimal targetCostAmount; + + + public static BmsSupplierTarget toNewObject(BmsSupplierTarget source){ + BmsSupplierTarget supplierTarget = new BmsSupplierTarget(); + supplierTarget.setId(source.getId()); + supplierTarget.setSupplierId(source.getSupplierId()); + supplierTarget.setSupplierCode(source.getSupplierCode()); + supplierTarget.setSupplierName(source.getSupplierName()); + supplierTarget.setScheduleId(source.getScheduleId()); + supplierTarget.setScheduleItemId(source.getScheduleItemId()); + supplierTarget.setScheduleItemName(source.getScheduleItemName()); + supplierTarget.setTargetDispatchAmount(source.getTargetDispatchAmount()); + supplierTarget.setTargetCostAmount(source.getTargetCostAmount()); + return supplierTarget; + } + +} + diff --git a/src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierTargetMapper.java b/src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierTargetMapper.java new file mode 100644 index 00000000..6650e584 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bms/mapper/BmsSupplierTargetMapper.java @@ -0,0 +1,14 @@ +package com.qs.serve.modules.bms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.qs.serve.modules.bms.entity.BmsSupplierTarget; + +/** + * Mapper + * @author YenHex + * @date 2023-09-13 + */ +public interface BmsSupplierTargetMapper extends BaseMapper { + +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivitySlottingFeeController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivitySlottingFeeController.java index d11e579e..aee0644a 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivitySlottingFeeController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsActivitySlottingFeeController.java @@ -88,6 +88,12 @@ public class TbsActivitySlottingFeeController { List channelIds = channelList.stream().map(TbsActivityChannel::getChannelId).distinct().collect(Collectors.toList()); List pointIds = pointList.stream().map(TbsActivityChannelPoint::getPointId).distinct().collect(Collectors.toList()); LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.like(StringUtils.hasText(param.getTargetName()),TbsActivitySlottingFee::getTargetName,param.getTargetName()); + lqw.like(StringUtils.hasText(param.getTargetCode()),TbsActivitySlottingFee::getTargetCode,param.getTargetCode()); + lqw.like(StringUtils.hasText(param.getChannelName()),TbsActivitySlottingFee::getChannelName,param.getChannelName()); + lqw.like(StringUtils.hasText(param.getChannelCode()),TbsActivitySlottingFee::getChannelCode,param.getChannelCode()); + lqw.like(StringUtils.hasText(param.getPointName()),TbsActivitySlottingFee::getPointName,param.getPointName()); + lqw.like(StringUtils.hasText(param.getPointCode()),TbsActivitySlottingFee::getPointCode,param.getPointCode()); if (goodsIds.size() > 0) { lqw.in(TbsActivitySlottingFee::getTargetId, goodsIds); lqw.eq(TbsActivitySlottingFee::getTargetType, "spu"); diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsContractCostSubItem.java b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsContractCostSubItem.java index 66526cf4..6cc7eeaf 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsContractCostSubItem.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/dto/TbsContractCostSubItem.java @@ -62,6 +62,7 @@ public class TbsContractCostSubItem { private String qtdCusCenterExpenseRate; // 季度客户所属成本中心目标费用率 private String qtdCusCenterTargetExpenseRate; + // 年度客户所属成本中心费用金额 private String ytdCusCenterCost; // 年度客户所属成本中心发货金额 diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java index 61d06637..7b356eeb 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java @@ -10,22 +10,23 @@ import com.qs.serve.common.framework.manager.AsyncManager; import com.qs.serve.common.model.enums.BudgetLogOptFlag; import com.qs.serve.common.model.consts.BudgetLogRollbackFlag; import com.qs.serve.common.model.dto.R; +import com.qs.serve.common.model.enums.MonthValues; import com.qs.serve.common.util.*; import com.qs.serve.common.util.model.DateFormatString; import com.qs.serve.modules.bir.entity.BirActivityCenterGoods; import com.qs.serve.modules.bir.entity.BirBaseActivity; import com.qs.serve.modules.bir.entity.dto.BirRoiCostDTO; +import com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo; import com.qs.serve.modules.bir.entity.vo.YtdQtdToOAVo; import com.qs.serve.modules.bir.mapper.BirActivityCenterGoodsMapper; import com.qs.serve.modules.bir.mapper.BirBaseActivityMapper; +import com.qs.serve.modules.bir.mapper.BirRoiRateMapper; import com.qs.serve.modules.bir.service.BirCenterRateService; import com.qs.serve.modules.bir.service.BirRoiRateService; -import com.qs.serve.modules.bms.entity.BmsRegion; -import com.qs.serve.modules.bms.entity.BmsRegion2; -import com.qs.serve.modules.bms.entity.BmsSubject; -import com.qs.serve.modules.bms.entity.BmsSupplier; +import com.qs.serve.modules.bms.entity.*; import com.qs.serve.modules.bms.mapper.BmsRegion2Mapper; import com.qs.serve.modules.bms.mapper.BmsRegionMapper; +import com.qs.serve.modules.bms.mapper.BmsSupplierTargetMapper; import com.qs.serve.modules.bms.service.BmsSubjectService; import com.qs.serve.modules.bms.service.BmsSupplierService; import com.qs.serve.modules.erp.entity.dto.ErpDispatchSumVo; @@ -112,6 +113,11 @@ public class TbsCostApplyServiceImpl extends ServiceImpl contracts = costContractMapper.selectList(lqw); if(contracts.size()>0){ - //活动的科目和成本中心 - List tbsActivityCenters = tbsActivityCenterService.listByCostApplyId(Long.parseLong(id)); - String concatCenterCodes = tbsActivityCenters.stream().map(TbsActivityCenter::getCenterCode).collect(Collectors.joining(",")); - String concatCenterNames = tbsActivityCenters.stream().map(TbsActivityCenter::getCenterName).collect(Collectors.joining(",")); - List tbsActivitySubjects = tbsActivitySubjectService.listByCostApplyId(Long.parseLong(id)); - List subjectIds = tbsActivitySubjects.stream().map(a->a.getSubjectId()).collect(Collectors.toList()); - if(subjectIds.size()>0){ - List subjectList = subjectService.listByIds(subjectIds); - String concatSubjectCodes = subjectList.stream().map(BmsSubject::getThirdCode).collect(Collectors.joining(",")); - String concatSubjectNames = subjectList.stream().map(BmsSubject::getThirdName).collect(Collectors.joining(",")); - - data.put("financeAccountCode",concatSubjectCodes); - data.put("financeAccountName",concatSubjectNames); - data.put("accountCode",concatSubjectCodes); - data.put("accountName",concatSubjectNames); - } - - TbsCostContract contract = contracts.get(0); - data.put("payee",contract.getPayee()); - data.put("bankName",contract.getBankName()); - data.put("bankAccount",contract.getBankAccount()); - data.put("sealID",contract.getSealId()); - data.put("sealName",contract.getSealName()); - data.put("sealNum",contract.getSealNum()); - data.put("fileNum",contract.getFileNum()); - - data.put("costCenterNo",concatCenterCodes); - data.put("costCenterName",concatCenterNames); - - data.put("businessCompany",contract.getBusinessCompany()); - data.put("businessCompanyId",contract.getDutyNumber()); - - data.put("contractName",contract.getContractName()); - data.put("applyMoney",contract.getContractAmount()); - data.put("signDate",contract.getSignTime()==null?null:contract.getSignTime().toString()); - data.put("expireDate",contract.getExpireTime()==null?null:contract.getExpireTime().toString()); - data.put("contractContent",contract.getContractCondition()); - String urls = ""; - final String ossPrefix = "https://qsjslservice.oss-cn-guangzhou.aliyuncs.com/"; - if (CollectionUtil.isNotEmpty(contract.getAttachIds())){ - List attachIds = Arrays.asList(contract.getAttachIds()); - List attachList = sysAttachService.listByIds(attachIds); - urls = attachList.stream().map(a->{ - if(a.getPath()!=null){ - try { - String tmp = URLEncoder.encode(a.getPath(), "UTF8").replace("%2F","/"); - return ossPrefix+tmp; - } catch (UnsupportedEncodingException e) { - e.printStackTrace(); - } - } - return ""; - }).collect(Collectors.joining(" , ")); - } - data.put("contractFile",urls); + //构建合同DATA + buildContractSeeyonData(id, data, contracts); }else { Assert.throwEx("请补充合同信息"); } @@ -635,33 +588,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl subList = new ArrayList<>(); //活动明细 - LambdaQueryWrapper actCgLqw = new LambdaQueryWrapper<>(); - actCgLqw.eq(TbsActivityCenterGoods::getCostApplyId, id); - List activityCenterGoodsList = tbsActivityCenterGoodsMapper.selectList(actCgLqw); - for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { - TbsActivity currActivity = null; - for (TbsActivity activity : activityList) { - if(centerGoods.getActivityId().equals(activity.getId())){ - currActivity = activity; - break; - } - } - TbsContractCostSubItem.Activity dataActivity = new TbsContractCostSubItem.Activity(); - dataActivity.setActivityCode(currActivity.getActivityCode()); - dataActivity.setActivityPurpose(currActivity.getActTitle()); - dataActivity.setCostCode(tbsCostApply.getCode()); - dataActivity.setStartDate(currActivity.getActStartDate()==null?null:currActivity.getActStartDate().toString()); - dataActivity.setEndDate(currActivity.getActEndDate()==null?null:currActivity.getActEndDate().toString()); - dataActivity.setWriteOffDate(currActivity.getPreCheckDate()==null?null:currActivity.getPreCheckDate().toString()); - dataActivity.setProductType(GoodsType.getName(centerGoods.getTargetType())); - dataActivity.setProduct(centerGoods.getTargetName()); - dataActivity.setActivityAccountCode(centerGoods.getSubjectCode()); - dataActivity.setActivityAccountName(centerGoods.getSubjectName()); - dataActivity.setActivityCostCenterNo(centerGoods.getCenterCode()); - dataActivity.setActivityCostCenterName(centerGoods.getCenterName()+"("+centerGoods.getCenterType()+")"); - dataActivity.setMoney(centerGoods.getCenterGoodsAmount()); - subList.add(dataActivity); - } + buildActivityCenterGoodsSeeyonData(id, tbsCostApply, activityList, subList); // 付款条件 for (TbsActivityPayCondition payCondition : payConditions) { // TbsActivity currActivity = null; @@ -697,13 +624,240 @@ public class TbsCostApplyServiceImpl extends ServiceImpl cusCenterRates = new ArrayList<>(); - + //构造客户维度的 年度、季度合计 + try { + List cusCenterRateList = buildCusRateMain(supplier); + subList.addAll(cusCenterRateList); + } catch (Exception e) { + log.error("[构造客户维度的 年度、季度合计]异常:{}",e.getMessage()); + } //关联 data.put("sub", subList); } + private void buildActivityCenterGoodsSeeyonData(String id, TbsCostApply tbsCostApply, List activityList, List subList) { + LambdaQueryWrapper actCgLqw = new LambdaQueryWrapper<>(); + actCgLqw.eq(TbsActivityCenterGoods::getCostApplyId, id); + List activityCenterGoodsList = tbsActivityCenterGoodsMapper.selectList(actCgLqw); + for (TbsActivityCenterGoods centerGoods : activityCenterGoodsList) { + TbsActivity currActivity = null; + for (TbsActivity activity : activityList) { + if(centerGoods.getActivityId().equals(activity.getId())){ + currActivity = activity; + break; + } + } + TbsContractCostSubItem.Activity dataActivity = new TbsContractCostSubItem.Activity(); + dataActivity.setActivityCode(currActivity.getActivityCode()); + dataActivity.setActivityPurpose(currActivity.getActTitle()); + dataActivity.setCostCode(tbsCostApply.getCode()); + dataActivity.setStartDate(currActivity.getActStartDate()==null?null:currActivity.getActStartDate().toString()); + dataActivity.setEndDate(currActivity.getActEndDate()==null?null:currActivity.getActEndDate().toString()); + dataActivity.setWriteOffDate(currActivity.getPreCheckDate()==null?null:currActivity.getPreCheckDate().toString()); + dataActivity.setProductType(GoodsType.getName(centerGoods.getTargetType())); + dataActivity.setProduct(centerGoods.getTargetName()); + dataActivity.setActivityAccountCode(centerGoods.getSubjectCode()); + dataActivity.setActivityAccountName(centerGoods.getSubjectName()); + dataActivity.setActivityCostCenterNo(centerGoods.getCenterCode()); + dataActivity.setActivityCostCenterName(centerGoods.getCenterName()+"("+centerGoods.getCenterType()+")"); + dataActivity.setMoney(centerGoods.getCenterGoodsAmount()); + subList.add(dataActivity); + } + } + + private void buildContractSeeyonData(String id, Map data, List contracts) { + //活动的科目和成本中心 + List tbsActivityCenters = tbsActivityCenterService.listByCostApplyId(Long.parseLong(id)); + String concatCenterCodes = tbsActivityCenters.stream().map(TbsActivityCenter::getCenterCode).collect(Collectors.joining(",")); + String concatCenterNames = tbsActivityCenters.stream().map(TbsActivityCenter::getCenterName).collect(Collectors.joining(",")); + List tbsActivitySubjects = tbsActivitySubjectService.listByCostApplyId(Long.parseLong(id)); + List subjectIds = tbsActivitySubjects.stream().map(a->a.getSubjectId()).collect(Collectors.toList()); + if(subjectIds.size()>0){ + List subjectList = subjectService.listByIds(subjectIds); + String concatSubjectCodes = subjectList.stream().map(BmsSubject::getThirdCode).collect(Collectors.joining(",")); + String concatSubjectNames = subjectList.stream().map(BmsSubject::getThirdName).collect(Collectors.joining(",")); + + data.put("financeAccountCode",concatSubjectCodes); + data.put("financeAccountName",concatSubjectNames); + data.put("accountCode",concatSubjectCodes); + data.put("accountName",concatSubjectNames); + } + + TbsCostContract contract = contracts.get(0); + data.put("payee",contract.getPayee()); + data.put("bankName",contract.getBankName()); + data.put("bankAccount",contract.getBankAccount()); + data.put("sealID",contract.getSealId()); + data.put("sealName",contract.getSealName()); + data.put("sealNum",contract.getSealNum()); + data.put("fileNum",contract.getFileNum()); + + data.put("costCenterNo",concatCenterCodes); + data.put("costCenterName",concatCenterNames); + + data.put("businessCompany",contract.getBusinessCompany()); + data.put("businessCompanyId",contract.getDutyNumber()); + + data.put("contractName",contract.getContractName()); + data.put("applyMoney",contract.getContractAmount()); + data.put("signDate",contract.getSignTime()==null?null:contract.getSignTime().toString()); + data.put("expireDate",contract.getExpireTime()==null?null:contract.getExpireTime().toString()); + data.put("contractContent",contract.getContractCondition()); + String urls = ""; + final String ossPrefix = "https://qsjslservice.oss-cn-guangzhou.aliyuncs.com/"; + if (CollectionUtil.isNotEmpty(contract.getAttachIds())){ + List attachIds = Arrays.asList(contract.getAttachIds()); + List attachList = sysAttachService.listByIds(attachIds); + urls = attachList.stream().map(a->{ + if(a.getPath()!=null){ + try { + String tmp = URLEncoder.encode(a.getPath(), "UTF8").replace("%2F","/"); + return ossPrefix+tmp; + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + } + return ""; + }).collect(Collectors.joining(" , ")); + } + data.put("contractFile",urls); + } + + @NotNull + private List buildCusRateMain(BmsSupplier supplier) { + List supplierTargetList = bmsSupplierTargetMapper.selectList( + new LambdaQueryWrapper() + .eq(BmsSupplierTarget::getSupplierId, supplier.getId()) + ); + List scheduleItemIds = supplierTargetList.stream().map(BmsSupplierTarget::getScheduleItemId).collect(Collectors.toList()); + List scheduleIds = supplierTargetList.stream().map(BmsSupplierTarget::getScheduleId).collect(Collectors.toList()); + List scheduleItems = null; + if(scheduleItemIds.size()>0&&scheduleIds.size()>0){ + LambdaQueryWrapper scheduleItemsLqw = new LambdaQueryWrapper<>(); + scheduleItemsLqw.in(TbsScheduleItem::getId,scheduleItemIds); + scheduleItemsLqw.in(TbsScheduleItem::getScheduleId,scheduleIds); + scheduleItems = tbsScheduleItemMapper.selectList(scheduleItemsLqw); + } + //最近12个月 + LocalDate currMonth = LocalDate.now(); + + int currMonthNum = currMonth.getYear()*100 + currMonth.getMonthValue(); + LocalDate startMonth = currMonth.plusMonths(-12); + int startMonthNum = startMonth.getYear()*100 + startMonth.getMonthValue(); + + //发货金额 + List dispatchSumVos = dispatchDataMapper.querySumCost(startMonthNum,currMonthNum,Arrays.asList(supplier.getCode())); + //客户核销金额 + BirRoiCostDTO costDTO = new BirRoiCostDTO(); + costDTO.setStartMonthNum(startMonthNum); + costDTO.setEndMonthNum(currMonthNum); + costDTO.setSupplierId(supplier.getId()); + List costItemVoList = birRoiRateMapper.queryRoiCostItems(costDTO); + //用户季度费率 + List cusCenterRateList = + this.buildCusCenterRate(supplierTargetList, scheduleItems, currMonth, startMonth, dispatchSumVos, costItemVoList); + //用户年费率 + this.buildCusCenterYearRate(supplierTargetList, dispatchSumVos, costItemVoList, cusCenterRateList); + return cusCenterRateList; + } + + /** + * 用户年费率 + * @param supplierTargetList + * @param dispatchSumVos + * @param costItemVoList + * @param cusCenterRateList + */ + private void buildCusCenterYearRate(List supplierTargetList, List dispatchSumVos, List costItemVoList, List cusCenterRateList) { + BigDecimal dispatchAmt = BigDecimal.ZERO; + BigDecimal totalCost = BigDecimal.ZERO; + BigDecimal cusDispatch = BigDecimal.ZERO; + BigDecimal cusCost = BigDecimal.ZERO; + for (ErpDispatchSumVo dispatchSumVo : dispatchSumVos) { + dispatchAmt = dispatchAmt.add(dispatchSumVo.getDispatchSumCost()); + } + for (BirRoiCostItemVo itemVo : costItemVoList) { + totalCost = totalCost.add(itemVo.getCostRealAmt()); + } + for (BmsSupplierTarget supplierTarget : supplierTargetList) { + cusDispatch = cusDispatch.add(supplierTarget.getTargetCostAmount()); + cusCost = cusCost.add(supplierTarget.getTargetCostAmount()); + } + for (TbsContractCostSubItem.CusCenterRate centerRate : cusCenterRateList) { + centerRate.setYtdCusCenterCost(totalCost.toString()); + centerRate.setYtdCusCenterSend(dispatchAmt.toString()); + centerRate.setYtdCusCenterExpenseRate(totalCost.divide(dispatchAmt, RoundingMode.DOWN).toString()); + if(cusCost.compareTo(BigDecimal.ZERO)!=0&&cusDispatch.compareTo(BigDecimal.ZERO)!=0){ + centerRate.setYtdCusCenterTargetExpenseRate(cusCost.divide(cusDispatch,RoundingMode.DOWN).toString()); + } + } + } + + /** + * 创建客户维度的季度费率 + * @param supplierTargetList + * @param scheduleItems + * @param currMonth + * @param startMonth + * @param dispatchSumVos + * @param costItemVoList + */ + private List buildCusCenterRate(List supplierTargetList, + List scheduleItems, + LocalDate currMonth, LocalDate startMonth, + List dispatchSumVos, + List costItemVoList) { + List cusCenterRateList = new ArrayList<>(); + int[] currQ = MonthValues.getQArr(startMonth.getMonthValue()); + if(currQ!=null){ + BigDecimal dispatchAmt = BigDecimal.ZERO; + BigDecimal totalCost = BigDecimal.ZERO; + BigDecimal cusDispatch = BigDecimal.ZERO; + BigDecimal cusCost = BigDecimal.ZERO; + for (int monthVal : currQ) { + int monthNum = currMonth.getYear()*100 + monthVal; + if(dispatchSumVos !=null){ + for (ErpDispatchSumVo dispatchSumVo : dispatchSumVos) { + if(dispatchSumVo.getYearMonth().equals(monthNum)){ + dispatchAmt = dispatchAmt.add(dispatchSumVo.getDispatchSumCost()); + break; + } + } + } + for (BirRoiCostItemVo itemVo : costItemVoList) { + if(itemVo.getYearMonth().equals(monthNum)){ + totalCost = totalCost.add(itemVo.getCostRealAmt()); + } + } + if(scheduleItems !=null){ + for (BmsSupplierTarget supplierTarget : supplierTargetList) { + for (TbsScheduleItem item : scheduleItems) { + //匹配条件 + if(supplierTarget.getScheduleItemId().equals(item.getId())){ + //匹配时间 + int itemMonth = item.getStartDate().getMonthValue(); + if(itemMonth==monthVal){ + cusDispatch = cusDispatch.add(supplierTarget.getTargetCostAmount()); + cusCost = cusCost.add(supplierTarget.getTargetCostAmount()); + break; + } + } + } + } + } + } + TbsContractCostSubItem.CusCenterRate centerRate = new TbsContractCostSubItem.CusCenterRate(); + centerRate.setQtdCusCenterCost(totalCost.toString()); + centerRate.setQtdCusCenterSend(dispatchAmt.toString()); + centerRate.setQtdCusCenterExpenseRate(totalCost.divide(dispatchAmt, RoundingMode.DOWN).toString()); + if(cusCost.compareTo(BigDecimal.ZERO)!=0&&cusDispatch.compareTo(BigDecimal.ZERO)!=0){ + centerRate.setQtdCusCenterTargetExpenseRate(cusCost.divide(cusDispatch,RoundingMode.DOWN).toString()); + } + cusCenterRateList.add(centerRate); + } + return cusCenterRateList; + } + private void buildCommonApplyData(String id, TbsCostApply tbsCostApply, List activityList, BmsSupplier supplier ,SysUser sysUser, Map data) { String actTitles = activityList.stream().map(TbsActivity::getActTitle).collect(Collectors.joining("; ")); data.put("costApplyCode", tbsCostApply.getCode()); @@ -756,7 +910,14 @@ public class TbsCostApplyServiceImpl extends ServiceImpl cusCenterRateList = buildCusRateMain(supplier); + subList.addAll(cusCenterRateList); + } catch (Exception e) { + log.error("【费用申请,创建客户维度费率数据】:{}",e.getMessage()); } //创建商品抬头列表 List tbsActivityGoods = tbsActivityGoodsService.listByCostApplyId(Long.parseLong(id)); @@ -830,7 +991,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl> centerMapList = tbsActivityCenters.stream().collect(Collectors.groupingBy(a->a.getCenterType()+"-"+a.getCenterId())); List centerList = centerMapList.values().stream().map(a->a.get(0)).collect(Collectors.toList()); - + // TODO 有异常 for(TbsActivityCenter center : centerList){ TbsCostSubItem.CostCenterTranStr costCenter = centerRateService.buildCostCenter(center.getCenterType(),center.getCenterId(),center.getCenterName()); subList.add(costCenter);