From 9799061803b1ace86adbf2d6c96334735b9c3d9f Mon Sep 17 00:00:00 2001 From: Yen Date: Wed, 7 Jun 2023 11:17:44 +0800 Subject: [PATCH] =?UTF-8?q?ROI=E8=B4=B9=E7=8E=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bir/controller/BirRoiRateController.java | 14 ++- .../modules/bir/entity/dto/BirRoiCostDTO.java | 26 ++++ .../modules/bir/entity/so/BirCostRoiSo.java | 6 +- .../modules/bir/mapper/BirRoiRateMapper.java | 7 ++ .../bir/service/BirRoiRateService.java | 19 +++ .../service/impl/BirRoiRateServiceImpl.java | 114 ++++++++++++++++++ .../erp/entity/dto/ErpDispatchSumVo.java | 18 +++ .../erp/mapper/ErpDispatchDataMapper.java | 15 +++ .../resources/mapper/bir/BirRoiRateMapper.xml | 89 ++++++++++++++ .../mapper/erp/ErpDispatchDataMapper.xml | 69 +++++++++++ 10 files changed, 371 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/bir/entity/dto/BirRoiCostDTO.java create mode 100644 src/main/java/com/qs/serve/modules/erp/entity/dto/ErpDispatchSumVo.java create mode 100644 src/main/resources/mapper/bir/BirRoiRateMapper.xml create mode 100644 src/main/resources/mapper/erp/ErpDispatchDataMapper.xml 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 cb0f990b..b1254d35 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 @@ -1,11 +1,14 @@ package com.qs.serve.modules.bir.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.qs.serve.common.model.annotation.RepeatSubmit; import com.qs.serve.common.model.annotation.SysLog; import com.qs.serve.common.model.dto.PageVo; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.SystemModule; +import com.qs.serve.modules.bir.entity.BirBaseActivity; import com.qs.serve.modules.bir.entity.so.BirCostRoiSo; import com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo; import com.qs.serve.modules.bir.service.BirBaseActivityService; @@ -41,8 +44,14 @@ public class BirRoiRateController { */ @GetMapping("/test") public R> getPage(){ + //移除当年所有 + Integer year = 2023; + LambdaQueryWrapper rmLqw = new LambdaQueryWrapper<>(); + rmLqw.likeRight(BirBaseActivity::getKeyNum,year); + activityService.remove(rmLqw); + //重新生成记录 for (int i = 0; i < 12; i++) { - activityService.buildReport(2023,i+1); + activityService.buildReport(year,i+1); } return R.ok(); } @@ -56,7 +65,6 @@ public class BirRoiRateController { */ @RepeatSubmit @GetMapping("/costYearMonth") - @SysLog(module = SystemModule.Verification, title = "客户明细帐", biz = BizType.EXPORT) public R> getCostRoiOfYearMonth(BirCostRoiSo param){ List list = new ArrayList<>(); BirRoiCostItemVo itemVo = new BirRoiCostItemVo(); @@ -69,7 +77,7 @@ public class BirRoiRateController { BirRoiCostItemVo itemVo2 = new BirRoiCostItemVo(); itemVo2.setYearMonth(202302); - itemVo.setYearMonthDate(LocalDate.of(2023,2,1)); + itemVo2.setYearMonthDate(LocalDate.of(2023,2,1)); itemVo2.setCostAmt(new BigDecimal(100)); itemVo2.setCheckAmt(new BigDecimal(80)); itemVo2.setReturnAmt(BigDecimal.ONE); diff --git a/src/main/java/com/qs/serve/modules/bir/entity/dto/BirRoiCostDTO.java b/src/main/java/com/qs/serve/modules/bir/entity/dto/BirRoiCostDTO.java new file mode 100644 index 00000000..f77b3341 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/bir/entity/dto/BirRoiCostDTO.java @@ -0,0 +1,26 @@ +package com.qs.serve.modules.bir.entity.dto; + +import lombok.Data; + +import java.util.List; + +/** + * @author YenHex + * @since 2023/6/7 + */ +@Data +public class BirRoiCostDTO { + + private String userId; + private String supplierId; + private String notSupplierId; + + private List userIds; + private List supplierIds; + + + private Integer startMonthNum; + + private Integer endMonthNum; + +} diff --git a/src/main/java/com/qs/serve/modules/bir/entity/so/BirCostRoiSo.java b/src/main/java/com/qs/serve/modules/bir/entity/so/BirCostRoiSo.java index 7c52b2d1..8d3d3b58 100644 --- a/src/main/java/com/qs/serve/modules/bir/entity/so/BirCostRoiSo.java +++ b/src/main/java/com/qs/serve/modules/bir/entity/so/BirCostRoiSo.java @@ -17,9 +17,9 @@ public class BirCostRoiSo { /** * 加载类型 * 0->客户 - * 1->客户的申请人 - * 2->客户的行政区域 - * 3->客户的销售区域 + * 1->申请人的客户(不含当前客户) + * 2->客户的行政区域(不含当前客户) + * 3->客户的销售区域(不含当前客户) */ private Integer loadType; diff --git a/src/main/java/com/qs/serve/modules/bir/mapper/BirRoiRateMapper.java b/src/main/java/com/qs/serve/modules/bir/mapper/BirRoiRateMapper.java index 1e434b99..bd8e9517 100644 --- a/src/main/java/com/qs/serve/modules/bir/mapper/BirRoiRateMapper.java +++ b/src/main/java/com/qs/serve/modules/bir/mapper/BirRoiRateMapper.java @@ -2,6 +2,11 @@ package com.qs.serve.modules.bir.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qs.serve.modules.bir.entity.BirRoiRate; +import com.qs.serve.modules.bir.entity.dto.BirRoiCostDTO; +import com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * Mapper @@ -10,5 +15,7 @@ import com.qs.serve.modules.bir.entity.BirRoiRate; */ public interface BirRoiRateMapper extends BaseMapper { + List queryRoiCostItems(@Param("query") BirRoiCostDTO param); + } diff --git a/src/main/java/com/qs/serve/modules/bir/service/BirRoiRateService.java b/src/main/java/com/qs/serve/modules/bir/service/BirRoiRateService.java index ae5f5542..8e19051e 100644 --- a/src/main/java/com/qs/serve/modules/bir/service/BirRoiRateService.java +++ b/src/main/java/com/qs/serve/modules/bir/service/BirRoiRateService.java @@ -1,7 +1,13 @@ package com.qs.serve.modules.bir.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.qs.serve.common.model.dto.R; import com.qs.serve.modules.bir.entity.BirRoiRate; +import com.qs.serve.modules.bir.entity.dto.BirRoiCostDTO; +import com.qs.serve.modules.bir.entity.so.BirCostRoiSo; +import com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo; + +import java.util.List; /** * 服务接口 @@ -10,6 +16,19 @@ import com.qs.serve.modules.bir.entity.BirRoiRate; */ public interface BirRoiRateService extends IService { + /** + * 查询费率 + * @param param + * @return + */ + List queryRoiCostItems(BirRoiCostDTO param); + + /** + * 获取费率和ROI + * @param param + * @return + */ + List getCostRoiOfYearMonth(BirCostRoiSo param); } diff --git a/src/main/java/com/qs/serve/modules/bir/service/impl/BirRoiRateServiceImpl.java b/src/main/java/com/qs/serve/modules/bir/service/impl/BirRoiRateServiceImpl.java index 6f17168b..41c5a96c 100644 --- a/src/main/java/com/qs/serve/modules/bir/service/impl/BirRoiRateServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bir/service/impl/BirRoiRateServiceImpl.java @@ -3,8 +3,18 @@ package com.qs.serve.modules.bir.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.model.dto.DateSplitDTO; +import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.Assert; +import com.qs.serve.common.util.AuthContextUtils; import com.qs.serve.common.util.DateSplitUtil; +import com.qs.serve.modules.bir.entity.dto.BirRoiCostDTO; +import com.qs.serve.modules.bir.entity.so.BirCostRoiSo; +import com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo; +import com.qs.serve.modules.bms.entity.BmsSupplier; +import com.qs.serve.modules.bms.mapper.BmsSupplierMapper; +import com.qs.serve.modules.erp.entity.ErpDispatchData; +import com.qs.serve.modules.erp.entity.dto.ErpDispatchSumVo; +import com.qs.serve.modules.erp.mapper.ErpDispatchDataMapper; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.mapper.SysUserMapper; import com.qs.serve.modules.tbs.entity.TbsActivity; @@ -19,6 +29,7 @@ import com.qs.serve.modules.bir.mapper.BirRoiRateMapper; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -32,5 +43,108 @@ import java.util.stream.Collectors; @AllArgsConstructor public class BirRoiRateServiceImpl extends ServiceImpl implements BirRoiRateService { + private final BmsSupplierMapper bmsSupplierMapper; + private final ErpDispatchDataMapper dispatchDataMapper; + + @Override + public List queryRoiCostItems(BirRoiCostDTO param) { + return baseMapper.queryRoiCostItems(param); + } + + @Override + public List getCostRoiOfYearMonth(BirCostRoiSo param) { + Integer loadType = param.getLoadType(); + String supplierId = param.getSupplierId(); + //最近12个月 + LocalDate currMonth = LocalDate.now(); + int currMonthNum = currMonth.getYear()*100 + currMonth.getMonthValue(); + LocalDate startMonth = currMonth.plusMonths(-12); + int startMonthNum = startMonth.getYear()*100 + startMonth.getMonthValue(); + BirRoiCostDTO costDTO = new BirRoiCostDTO(); + costDTO.setStartMonthNum(startMonthNum); + costDTO.setEndMonthNum(currMonthNum); + BmsSupplier bmsSupplier = bmsSupplierMapper.selectById(supplierId); + List supplierCodeList = new ArrayList<>(); + + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.ne(BmsSupplier::getId,supplierId); + lqw.select(BmsSupplier::getId,BmsSupplier::getCode); + if(loadType.equals(0)){ + //0->客户 + supplierCodeList.add(bmsSupplier.getCode()); + costDTO.setSupplierId(supplierId); + }else if (loadType.equals(1)){ + //1->申请人的客户(不含当前客户) + String userId = AuthContextUtils.getSysUserId(); + costDTO.setNotSupplierId(supplierId); + costDTO.setUserId(userId); + //加载用户的其它供应商编码 + BmsSupplier param4Supplier = new BmsSupplier(); + param4Supplier.setUserId(userId); + List supplierList = bmsSupplierMapper.selectSupplierList(param4Supplier); + List supplierCodes = supplierList.stream() + .filter(a->!a.getId().equals(supplierId)).map(BmsSupplier::getCode) + .distinct().collect(Collectors.toList()); + supplierCodeList.addAll(supplierCodes); + }else if(loadType.equals(2)){ + //2->客户的行政区域(不含当前客户) + if(checkNotNullVale(bmsSupplier.getRegion2Fourthly())){ + lqw.eq(BmsSupplier::getRegion2Fourthly,bmsSupplier.getRegion2Fourthly()); + }else if (checkNotNullVale(bmsSupplier.getRegion2Third())){ + lqw.eq(BmsSupplier::getRegion2Third,bmsSupplier.getRegion2Third()); + } if (checkNotNullVale(bmsSupplier.getRegion2Second())){ + lqw.eq(BmsSupplier::getRegion2Second,bmsSupplier.getRegion2Second()); + } if (checkNotNullVale(bmsSupplier.getRegion2First())){ + lqw.eq(BmsSupplier::getRegion2First,bmsSupplier.getRegion2First()); + } + }else if(loadType.equals(3)){ + //3->客户的销售区域(不含当前客户) + if(checkNotNullVale(bmsSupplier.getRegionFourthly())){ + lqw.eq(BmsSupplier::getRegionFourthly,bmsSupplier.getRegionFourthly()); + }else if (checkNotNullVale(bmsSupplier.getRegionThird())){ + lqw.eq(BmsSupplier::getRegionThird,bmsSupplier.getRegionThird()); + } if (checkNotNullVale(bmsSupplier.getRegionSecond())){ + lqw.eq(BmsSupplier::getRegionSecond,bmsSupplier.getRegionSecond()); + } if (checkNotNullVale(bmsSupplier.getRegionFirst())){ + lqw.eq(BmsSupplier::getRegionFirst,bmsSupplier.getRegionFirst()); + } + } + if (loadType.equals(2)||loadType.equals(3)){ + List supplierList = bmsSupplierMapper.selectList(lqw); + List supplierIds = supplierList.stream().map(BmsSupplier::getId) + .distinct().collect(Collectors.toList()); + List supplierCodes = supplierList.stream().map(BmsSupplier::getCode) + .distinct().collect(Collectors.toList()); + supplierCodeList.addAll(supplierCodes); + //防止空值 + supplierIds.add("0"); + costDTO.setSupplierIds(supplierIds); + } + //防止空值 + supplierCodeList.add("0"); + List costItemVoList = this.queryRoiCostItems(costDTO); + //发货单 + List dispatchSumVos = null; + if(supplierCodeList.size()>1){ + dispatchSumVos = dispatchDataMapper.querySumCost(startMonthNum,currMonthNum,supplierCodeList); + } + for (BirRoiCostItemVo costItemVo : costItemVoList) { + costItemVo.setDispatchAmt(BigDecimal.ZERO); + if(dispatchSumVos!=null){ + for (ErpDispatchSumVo dispatchSumVo : dispatchSumVos) { + if(dispatchSumVo.getYearMonth().equals(costItemVo.getYearMonth())){ + costItemVo.setDispatchAmt(dispatchSumVo.getSumDispatchCost()); + break; + } + } + } + } + return costItemVoList; + } + + private boolean checkNotNullVale(String val){ + return val!=null&&!val.equals("0"); + } + } diff --git a/src/main/java/com/qs/serve/modules/erp/entity/dto/ErpDispatchSumVo.java b/src/main/java/com/qs/serve/modules/erp/entity/dto/ErpDispatchSumVo.java new file mode 100644 index 00000000..107c3822 --- /dev/null +++ b/src/main/java/com/qs/serve/modules/erp/entity/dto/ErpDispatchSumVo.java @@ -0,0 +1,18 @@ +package com.qs.serve.modules.erp.entity.dto; + +import lombok.Data; + +import java.math.BigDecimal; + +/** + * @author YenHex + * @since 2023/6/7 + */ +@Data +public class ErpDispatchSumVo { + + Integer yearMonth; + + BigDecimal sumDispatchCost; + +} diff --git a/src/main/java/com/qs/serve/modules/erp/mapper/ErpDispatchDataMapper.java b/src/main/java/com/qs/serve/modules/erp/mapper/ErpDispatchDataMapper.java index b2a42fe6..5beac3fd 100644 --- a/src/main/java/com/qs/serve/modules/erp/mapper/ErpDispatchDataMapper.java +++ b/src/main/java/com/qs/serve/modules/erp/mapper/ErpDispatchDataMapper.java @@ -2,6 +2,10 @@ package com.qs.serve.modules.erp.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.qs.serve.modules.erp.entity.ErpDispatchData; +import com.qs.serve.modules.erp.entity.dto.ErpDispatchSumVo; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 发货单数据 Mapper @@ -10,5 +14,16 @@ import com.qs.serve.modules.erp.entity.ErpDispatchData; */ public interface ErpDispatchDataMapper extends BaseMapper { + /** + * 查询发货单合计 + * @param startNumber + * @param endNumber + * @param cusCodes + * @return + */ + List querySumCost(@Param("startNumber")Integer startNumber, + @Param("endNumber")Integer endNumber, + @Param("cusCodes")List cusCodes); + } diff --git a/src/main/resources/mapper/bir/BirRoiRateMapper.xml b/src/main/resources/mapper/bir/BirRoiRateMapper.xml new file mode 100644 index 00000000..e7294d39 --- /dev/null +++ b/src/main/resources/mapper/bir/BirRoiRateMapper.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + bir_roi_rate.`id`, + bir_roi_rate.`key_num`, + bir_roi_rate.`activity_amt`, + bir_roi_rate.`verification_amt`, + bir_roi_rate.`shipment_qty`, + bir_roi_rate.`shipment_amt`, + bir_roi_rate.`supplier_id`, + bir_roi_rate.`supplier_code`, + bir_roi_rate.`supplier_name`, + bir_roi_rate.`user_id`, + bir_roi_rate.`user_code`, + bir_roi_rate.`user_name`, + bir_roi_rate.`create_time`, + bir_roi_rate.`update_time`, + bir_roi_rate.`tenant_id`, + bir_roi_rate.`del_flag` + + + + + + + + + + + + + + diff --git a/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml b/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml new file mode 100644 index 00000000..0902d96c --- /dev/null +++ b/src/main/resources/mapper/erp/ErpDispatchDataMapper.xml @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + erp_dispatch_data.`id`, + erp_dispatch_data.`place`, + erp_dispatch_data.`dl_code`, + erp_dispatch_data.`date`, + erp_dispatch_data.`cus_code`, + erp_dispatch_data.`cus_name`, + erp_dispatch_data.`inv_code`, + erp_dispatch_data.`inv_name`, + erp_dispatch_data.`inv_batch`, + erp_dispatch_data.`sales_dep_code`, + erp_dispatch_data.`dep_name`, + erp_dispatch_data.`qty`, + erp_dispatch_data.`sum_money`, + erp_dispatch_data.`volume`, + erp_dispatch_data.`net_weight`, + erp_dispatch_data.`dispatch_cost`, + erp_dispatch_data.`inv_dispatch_cost`, + erp_dispatch_data.`inv_trans_fee`, + erp_dispatch_data.`inv_produce_cost`, + erp_dispatch_data.`create_time` + + + + + + +