From bfda22374bb954bb1bee151f1d52847a399836b1 Mon Sep 17 00:00:00 2001 From: "15989082884@163.com" <15989082884@163.com> Date: Fri, 21 Jun 2024 16:11:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E7=89=88=E5=AE=A1=E6=89=B9=E8=BE=85?= =?UTF-8?q?=E5=8A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bir/controller/BirRoiRateController.java | 16 ++ .../bir/entity/so/BirBudgetTargetSo.java | 6 + .../bir/entity/vo/BirBaseDispatchVo.java | 20 ++ .../bir/entity/vo/BirBaseReportVo.java | 30 +++ .../mapper/BirActivityCenterGoodsMapper.java | 6 +- .../bir/service/BirBudgetTargetService.java | 3 + .../BirBudgetTargetImportServiceImpl.java | 4 +- .../impl/BirBudgetTargetServiceImpl.java | 182 ++++++++++++++++++ .../service/impl/BmsSupplierServiceImpl.java | 3 + .../bir/BirActivityCenterGoodsMapper.xml | 75 +++++++- .../mapper/bir/BirBudgetTargetMapper.xml | 21 -- 11 files changed, 341 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/bir/entity/vo/BirBaseDispatchVo.java create mode 100644 src/main/java/com/qs/serve/modules/bir/entity/vo/BirBaseReportVo.java diff --git a/src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java b/src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java index 275880c8..1823a5e5 100644 --- a/src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java +++ b/src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java @@ -157,6 +157,22 @@ public class BirRoiRateController { return R.ok(list); } + /** + * 获取费率 + * @param query + * @return + */ + @RepeatSubmit + @PostMapping("/costYearMonthBaseV2") + public R> getCostRoiOfYearMonthBaseV2(@RequestBody BirBudgetTargetSo query){ + boolean isRestBir = BirHttpUtil.isRestBir(); + if(isRestBir){ + return BirHttpUtil.post("/bir/roiRate/costYearMonthBaseV2",query); + } + List list = birBudgetTargetService.listBaseVo(query); + return R.ok(list); + } + @PostMapping("/buildCustomerCost") public R buildCustomerCost(){ // boolean isRestBir = BirHttpUtil.isRestBir(); diff --git a/src/main/java/com/qs/serve/modules/bir/entity/so/BirBudgetTargetSo.java b/src/main/java/com/qs/serve/modules/bir/entity/so/BirBudgetTargetSo.java index c0438c8b..5665cde4 100644 --- a/src/main/java/com/qs/serve/modules/bir/entity/so/BirBudgetTargetSo.java +++ b/src/main/java/com/qs/serve/modules/bir/entity/so/BirBudgetTargetSo.java @@ -30,6 +30,9 @@ public class BirBudgetTargetSo { @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime yearMonthEnd; + private Integer yearMonthStartQuery; + private Integer yearMonthEndQuery; + private Integer yearStart; private Integer yearEnd; private Integer monthStart; @@ -39,6 +42,8 @@ public class BirBudgetTargetSo { */ private String supplierId; + private String targetId; + /** * 成本中心 */ @@ -64,6 +69,7 @@ public class BirBudgetTargetSo { /**客户-成本中心编码 */ private List supplierIds; + private List supplierCodes; } diff --git a/src/main/java/com/qs/serve/modules/bir/entity/vo/BirBaseDispatchVo.java b/src/main/java/com/qs/serve/modules/bir/entity/vo/BirBaseDispatchVo.java new file mode 100644 index 00000000..1cdf75d7 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/entity/vo/BirBaseDispatchVo.java @@ -0,0 +1,20 @@ +package com.qs.serve.modules.bir.entity.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2024/6/4 + */ +@Data +public class BirBaseDispatchVo { + + /** 年月份 */ + private Integer yearMonthNum; + + /** 实际发货 */ + private BigDecimal dispatchAmt; + +} diff --git a/src/main/java/com/qs/serve/modules/bir/entity/vo/BirBaseReportVo.java b/src/main/java/com/qs/serve/modules/bir/entity/vo/BirBaseReportVo.java new file mode 100644 index 00000000..fe549348 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/entity/vo/BirBaseReportVo.java @@ -0,0 +1,30 @@ +package com.qs.serve.modules.bir.entity.vo; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2024/6/4 + */ +@Data +public class BirBaseReportVo { + + private String year; + + private String month; + + /** 年月份 */ + private Integer yearMonthNum; + + /** 实际发货 */ + private BigDecimal dispatchAmt; + + /** 实际总费用 */ + private BigDecimal totalRealAmt; + + /** 实际总费用率 */ + private BigDecimal totalRealRate; + +} diff --git a/src/main/java/com/qs/serve/modules/bir/mapper/BirActivityCenterGoodsMapper.java b/src/main/java/com/qs/serve/modules/bir/mapper/BirActivityCenterGoodsMapper.java index f5fba225..91713305 100644 --- a/src/main/java/com/qs/serve/modules/bir/mapper/BirActivityCenterGoodsMapper.java +++ b/src/main/java/com/qs/serve/modules/bir/mapper/BirActivityCenterGoodsMapper.java @@ -5,8 +5,10 @@ import com.baomidou.mybatisplus.annotation.InterceptorIgnore; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qs.serve.common.model.consts.DSName; import com.qs.serve.modules.bir.entity.BirActivityCenterGoods; +import com.qs.serve.modules.bir.entity.so.BirBudgetTargetSo; import com.qs.serve.modules.bir.entity.so.BirMonthCusCenterSo; import com.qs.serve.modules.bir.entity.vo.BirActivityCenterGoodsMonthVo; +import com.qs.serve.modules.bir.entity.vo.BirBaseDispatchVo; import com.qs.serve.modules.tbs.entity.TbsActivityCenterGoods; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -38,8 +40,10 @@ public interface BirActivityCenterGoodsMapper extends BaseMapper listMonthCusCenterVo(@Param("query") BirMonthCusCenterSo param); - List list4BirBudgetTarget(); + List list4BirBudgetTarget(@Param("query") BirBudgetTargetSo so); + @InterceptorIgnore(tenantLine = "true") + List list4DispatchSqlserver(@Param("query") BirBudgetTargetSo so); } diff --git a/src/main/java/com/qs/serve/modules/bir/service/BirBudgetTargetService.java b/src/main/java/com/qs/serve/modules/bir/service/BirBudgetTargetService.java index 2a577710..4d65149e 100644 --- a/src/main/java/com/qs/serve/modules/bir/service/BirBudgetTargetService.java +++ b/src/main/java/com/qs/serve/modules/bir/service/BirBudgetTargetService.java @@ -3,6 +3,7 @@ package com.qs.serve.modules.bir.service; import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.bir.entity.BirBudgetTarget; import com.qs.serve.modules.bir.entity.so.BirBudgetTargetSo; +import com.qs.serve.modules.bir.entity.vo.BirBaseReportVo; import com.qs.serve.modules.bir.entity.vo.BirBudgetTargetVo; import java.util.List; @@ -16,5 +17,7 @@ public interface BirBudgetTargetService extends IService { List listVo(BirBudgetTargetSo query); + List listBaseVo(BirBudgetTargetSo query); + } diff --git a/src/main/java/com/qs/serve/modules/bir/service/impl/BirBudgetTargetImportServiceImpl.java b/src/main/java/com/qs/serve/modules/bir/service/impl/BirBudgetTargetImportServiceImpl.java index 020c4dec..e0541e6f 100644 --- a/src/main/java/com/qs/serve/modules/bir/service/impl/BirBudgetTargetImportServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bir/service/impl/BirBudgetTargetImportServiceImpl.java @@ -100,8 +100,8 @@ public class BirBudgetTargetImportServiceImpl extends ServiceImpl birActivityCenterGoodsList = birActivityCenterGoodsMapper.list4BirBudgetTarget(); + BirBudgetTargetSo so = new BirBudgetTargetSo(); + List birActivityCenterGoodsList = birActivityCenterGoodsMapper.list4BirBudgetTarget(so); List targetList = birActivityCenterGoodsList.stream() .map(item->initTargetByBirCenterGoods(item)).collect(Collectors.toList()); diff --git a/src/main/java/com/qs/serve/modules/bir/service/impl/BirBudgetTargetServiceImpl.java b/src/main/java/com/qs/serve/modules/bir/service/impl/BirBudgetTargetServiceImpl.java index c53fcc8c..3cf3fb5b 100644 --- a/src/main/java/com/qs/serve/modules/bir/service/impl/BirBudgetTargetServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bir/service/impl/BirBudgetTargetServiceImpl.java @@ -1,10 +1,22 @@ package com.qs.serve.modules.bir.service.impl; import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.CollectionUtil; +import com.qs.serve.modules.bir.entity.BirActivityCenterGoods; import com.qs.serve.modules.bir.entity.so.BirBudgetTargetSo; +import com.qs.serve.modules.bir.entity.vo.BirBaseDispatchVo; +import com.qs.serve.modules.bir.entity.vo.BirBaseReportVo; import com.qs.serve.modules.bir.entity.vo.BirBudgetTargetVo; +import com.qs.serve.modules.bir.mapper.BirActivityCenterGoodsMapper; +import com.qs.serve.modules.bms.entity.BmsRegion; +import com.qs.serve.modules.bms.entity.BmsRegion2; import com.qs.serve.modules.bms.entity.BmsSupplier; +import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; +import com.qs.serve.modules.bms.service.BmsRegion2Service; +import com.qs.serve.modules.bms.service.BmsRegionService; import com.qs.serve.modules.bms.service.BmsSupplierService; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -36,6 +48,176 @@ import java.util.stream.Collectors; public class BirBudgetTargetServiceImpl extends ServiceImpl implements BirBudgetTargetService { private BmsSupplierService bmsSupplierService; + private BmsSupplierMapper bmsSupplierMapper; + private BmsRegion2Service bmsRegion2Service; + private BmsRegionService bmsRegionService; + private BirActivityCenterGoodsMapper birActivityCenterGoodsMapper; + + @Override + public List listBaseVo(BirBudgetTargetSo query) { + List returnList = new ArrayList<>(); + query.setLoadType(query.getLoadType()-1); + LocalDateTime endMonth = query.getYearMonthEnd(); + LocalDateTime startMonth = query.getYearMonthStart(); + query.setYearMonthStartQuery(startMonth.getYear()*100 + startMonth.getMonthValue()); + query.setYearMonthEndQuery(endMonth.getYear()*100 + endMonth.getMonthValue()); + query.setSelectCenterFlag(0); + if(CollUtil.isNotEmpty(query.getCenterList())){ + query.setSelectCenterFlag(1); + } + if(query.getLoadType()==0) { + BmsSupplier supplier = bmsSupplierService.getById(query.getTargetId()); + if(supplier==null){ + Assert.throwEx("找不到该客户!"); + } + List supplierIds = new ArrayList<>(); + List supplierCodes = new ArrayList<>(); + supplierIds.add(supplier.getId()); + query.setSupplierIds(supplierIds); + supplierCodes.add(supplier.getCode()); + query.setSupplierCodes(supplierCodes); + }else if(query.getLoadType()==1){ + BmsSupplier param4Supplier = new BmsSupplier(); + param4Supplier.setCurrUserId(query.getTargetId()); + List supplierList = bmsSupplierMapper.selectSupplierList(param4Supplier); + List supplierIds = supplierList.stream() + .map(BmsSupplier::getId) + .distinct().collect(Collectors.toList()); + query.setSupplierIds(supplierIds); + + List supplierCodes = supplierList.stream() + .map(BmsSupplier::getCode) + .distinct().collect(Collectors.toList()); + query.setSupplierCodes(supplierCodes); + }else if(query.getLoadType()==2){ + BmsRegion2 targetRegion = bmsRegion2Service.getById(query.getTargetId()); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(BmsSupplier::getBookCode,"001"); + if(targetRegion.getLevel()==1){ + lqw.eq(BmsSupplier::getRegion2First,query.getTargetId()); + }else if(targetRegion.getLevel()==2){ + lqw.eq(BmsSupplier::getRegion2Second,query.getTargetId()); + }else if(targetRegion.getLevel()==3){ + lqw.eq(BmsSupplier::getRegion2Third,query.getTargetId()); + }else{ + Assert.throwEx("行政区域查询失败!"); + } + List supplierList = bmsSupplierService.list(lqw); + List supplierIds = supplierList.stream() + .map(BmsSupplier::getId) + .distinct().collect(Collectors.toList()); + query.setSupplierIds(supplierIds); + List supplierCodes = supplierList.stream() + .map(BmsSupplier::getCode) + .distinct().collect(Collectors.toList()); + query.setSupplierCodes(supplierCodes); + }else if(query.getLoadType()==3){ + BmsRegion targetRegion = bmsRegionService.getById(query.getTargetId()); + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(BmsSupplier::getBookCode,"001"); + + if(targetRegion.getLevel()==1){ + lqw.eq(BmsSupplier::getRegionFirst,query.getTargetId()); + }else if(targetRegion.getLevel()==2){ + lqw.eq(BmsSupplier::getRegionSecond,query.getTargetId()); + }else if(targetRegion.getLevel()==3){ + lqw.eq(BmsSupplier::getRegionThird,query.getTargetId()); + }else{ + Assert.throwEx("销售区域查询失败!"); + } + List supplierList = bmsSupplierService.list(lqw); + List supplierIds = supplierList.stream() + .map(BmsSupplier::getId) + .distinct().collect(Collectors.toList()); + query.setSupplierIds(supplierIds); + List supplierCodes = supplierList.stream() + .map(BmsSupplier::getCode) + .distinct().collect(Collectors.toList()); + query.setSupplierCodes(supplierCodes); + } + + List birActivityCenterGoodsList = new ArrayList<>(); + List birBaseDispatchVoList = new ArrayList<>(); + if(query.getSupplierIds().size()>2000 || query.getSupplierCodes().size()>2000){ + List supplierIds = query.getSupplierIds(); + List supplierCodes = query.getSupplierCodes(); + + List> supplierIdList = CollectionUtil.createList(supplierIds,2000); + List> supplierCodeList = CollectionUtil.createList(supplierCodes,2000); + + for(int i=0;i tempIds = supplierIdList.get(i); + tempIds.add("-99"); + query.setSupplierIds(tempIds); + List tempCodes = supplierCodeList.get(i); + tempCodes.add("-99"); + query.setSupplierCodes(tempCodes); + + List tempActivityCenterGoodsList = birActivityCenterGoodsMapper.list4BirBudgetTarget(query); + List tempBaseDispatchVoList = birActivityCenterGoodsMapper.list4DispatchSqlserver(query); + birActivityCenterGoodsList.addAll(tempActivityCenterGoodsList); + birBaseDispatchVoList.addAll(tempBaseDispatchVoList); + } + + }else{ + //防止传入空数组,导致SQL查出所有客户 + List supplierIds = query.getSupplierIds(); + supplierIds.add("-99"); + query.setSupplierIds(supplierIds); + List supplierCodes = query.getSupplierCodes(); + supplierCodes.add("-99"); + query.setSupplierCodes(supplierCodes); + + birActivityCenterGoodsList = birActivityCenterGoodsMapper.list4BirBudgetTarget(query); + birBaseDispatchVoList = birActivityCenterGoodsMapper.list4DispatchSqlserver(query); + } + + final int TOTAL_MONTH = 12; + for (int y = startMonth.getYear(); y <= endMonth.getYear(); y++) { + for (int m = 1; m <= TOTAL_MONTH; m++) { + //防止多空白行 + if(y == startMonth.getYear() && m < startMonth.getMonthValue()){ + continue; + } + if(y == endMonth.getYear() && m > endMonth.getMonthValue()){ + continue; + } + returnList.add(initBaseVo(birActivityCenterGoodsList,birBaseDispatchVoList, m, y)); + } + } + + return returnList; + } + + private BirBaseReportVo initBaseVo(List birActivityCenterGoodsList, + List birBaseDispatchVoList, int month, int year){ + BirBaseReportVo vo = new BirBaseReportVo(); + vo.setYearMonthNum(year*100 + month); + vo.setDispatchAmt(BigDecimal.ZERO); + vo.setTotalRealAmt(BigDecimal.ZERO); + vo.setTotalRealRate(BigDecimal.ZERO); + vo.setYear(year+""); + vo.setMonth(month+""); + + if(birActivityCenterGoodsList.size()>0){ + BigDecimal totalRealAmt = birActivityCenterGoodsList.stream().filter(a->a.getKeyNum().equals(vo.getYearMonthNum())) + .map(a->a.getSplitUsedAmount()==null?BigDecimal.ZERO:a.getSplitUsedAmount()) + .reduce(BigDecimal.ZERO, BigDecimal::add); + vo.setTotalRealAmt(totalRealAmt); + } + if(birBaseDispatchVoList.size()>0){ + BigDecimal dispatchAmt = birBaseDispatchVoList.stream().filter(a->a.getYearMonthNum().equals(vo.getYearMonthNum())) + .map(a->a.getDispatchAmt()==null?BigDecimal.ZERO:a.getDispatchAmt()) + .reduce(BigDecimal.ZERO, BigDecimal::add); + vo.setDispatchAmt(dispatchAmt); + } + + if(vo.getDispatchAmt().compareTo(BigDecimal.ZERO)!=0){ + vo.setTotalRealRate(vo.getTotalRealAmt().divide(vo.getDispatchAmt(), 2, RoundingMode.DOWN)); + } + + return vo; + } @Override public List listVo(BirBudgetTargetSo query) { diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java index b93f370f..dce84cfb 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java @@ -14,6 +14,7 @@ import com.qs.serve.modules.seeyon.service.impl.SeeYonRequestBaseService; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.tbs.common.TbsCenterType; +import com.qs.serve.modules.third.entity.ThirtyVerification; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.annotations.Param; @@ -119,6 +120,8 @@ public class BmsSupplierServiceImpl extends ServiceImpl - SELECT supplier_id, supplier_name, @@ -220,6 +220,50 @@ SUM ( split_release_amount ) AS split_release_amount FROM bir_activity_center_goods + WHERE + 1=1 + + and supplier_id in + + #{selectId} + + + + and ( + (SUBSTRING ( target_level_path_ids, 1, CHARINDEX( '_', target_level_path_ids ) - 1 ) in + + #{selectId} + + ) + or + ( + target_level_path_ids in + + #{selectId} + + ) + ) + + + AND key_num >= #{query.yearMonthStartQuery} + + + AND key_num <= #{query.yearMonthEndQuery} + + + and ( + 1=0 + + + + or (center_type = #{selectId.centerType} and center_id = + #{selectId.centerId} + ) + + + + ) + GROUP BY supplier_id, supplier_code, @@ -240,5 +284,34 @@ SUBSTRING ( target_level_path_names, 1, CHARINDEX( '_', target_level_path_names ) - 1 ) ELSE target_level_path_names END + + diff --git a/src/main/resources/mapper/bir/BirBudgetTargetMapper.xml b/src/main/resources/mapper/bir/BirBudgetTargetMapper.xml index 5639e37b..cc8132ae 100644 --- a/src/main/resources/mapper/bir/BirBudgetTargetMapper.xml +++ b/src/main/resources/mapper/bir/BirBudgetTargetMapper.xml @@ -108,27 +108,6 @@ - - - - - - - - - - - - - - - - - - - - - )