Browse Source

ROI费率

contract
Yen 2 years ago
parent
commit
9799061803
  1. 14
      src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java
  2. 26
      src/main/java/com/qs/serve/modules/bir/entity/dto/BirRoiCostDTO.java
  3. 6
      src/main/java/com/qs/serve/modules/bir/entity/so/BirCostRoiSo.java
  4. 7
      src/main/java/com/qs/serve/modules/bir/mapper/BirRoiRateMapper.java
  5. 19
      src/main/java/com/qs/serve/modules/bir/service/BirRoiRateService.java
  6. 114
      src/main/java/com/qs/serve/modules/bir/service/impl/BirRoiRateServiceImpl.java
  7. 18
      src/main/java/com/qs/serve/modules/erp/entity/dto/ErpDispatchSumVo.java
  8. 15
      src/main/java/com/qs/serve/modules/erp/mapper/ErpDispatchDataMapper.java
  9. 89
      src/main/resources/mapper/bir/BirRoiRateMapper.xml
  10. 69
      src/main/resources/mapper/erp/ErpDispatchDataMapper.xml

14
src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java

@ -1,11 +1,14 @@
package com.qs.serve.modules.bir.controller; 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.RepeatSubmit;
import com.qs.serve.common.model.annotation.SysLog; import com.qs.serve.common.model.annotation.SysLog;
import com.qs.serve.common.model.dto.PageVo; import com.qs.serve.common.model.dto.PageVo;
import com.qs.serve.common.model.dto.R; import com.qs.serve.common.model.dto.R;
import com.qs.serve.common.model.enums.BizType; import com.qs.serve.common.model.enums.BizType;
import com.qs.serve.common.model.enums.SystemModule; 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.so.BirCostRoiSo;
import com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo; import com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo;
import com.qs.serve.modules.bir.service.BirBaseActivityService; import com.qs.serve.modules.bir.service.BirBaseActivityService;
@ -41,8 +44,14 @@ public class BirRoiRateController {
*/ */
@GetMapping("/test") @GetMapping("/test")
public R<PageVo<BirRoiRate>> getPage(){ public R<PageVo<BirRoiRate>> getPage(){
//移除当年所有
Integer year = 2023;
LambdaQueryWrapper<BirBaseActivity> rmLqw = new LambdaQueryWrapper<>();
rmLqw.likeRight(BirBaseActivity::getKeyNum,year);
activityService.remove(rmLqw);
//重新生成记录
for (int i = 0; i < 12; i++) { for (int i = 0; i < 12; i++) {
activityService.buildReport(2023,i+1); activityService.buildReport(year,i+1);
} }
return R.ok(); return R.ok();
} }
@ -56,7 +65,6 @@ public class BirRoiRateController {
*/ */
@RepeatSubmit @RepeatSubmit
@GetMapping("/costYearMonth") @GetMapping("/costYearMonth")
@SysLog(module = SystemModule.Verification, title = "客户明细帐", biz = BizType.EXPORT)
public R<List<BirRoiCostItemVo>> getCostRoiOfYearMonth(BirCostRoiSo param){ public R<List<BirRoiCostItemVo>> getCostRoiOfYearMonth(BirCostRoiSo param){
List<BirRoiCostItemVo> list = new ArrayList<>(); List<BirRoiCostItemVo> list = new ArrayList<>();
BirRoiCostItemVo itemVo = new BirRoiCostItemVo(); BirRoiCostItemVo itemVo = new BirRoiCostItemVo();
@ -69,7 +77,7 @@ public class BirRoiRateController {
BirRoiCostItemVo itemVo2 = new BirRoiCostItemVo(); BirRoiCostItemVo itemVo2 = new BirRoiCostItemVo();
itemVo2.setYearMonth(202302); itemVo2.setYearMonth(202302);
itemVo.setYearMonthDate(LocalDate.of(2023,2,1)); itemVo2.setYearMonthDate(LocalDate.of(2023,2,1));
itemVo2.setCostAmt(new BigDecimal(100)); itemVo2.setCostAmt(new BigDecimal(100));
itemVo2.setCheckAmt(new BigDecimal(80)); itemVo2.setCheckAmt(new BigDecimal(80));
itemVo2.setReturnAmt(BigDecimal.ONE); itemVo2.setReturnAmt(BigDecimal.ONE);

26
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<String> userIds;
private List<String> supplierIds;
private Integer startMonthNum;
private Integer endMonthNum;
}

6
src/main/java/com/qs/serve/modules/bir/entity/so/BirCostRoiSo.java

@ -17,9 +17,9 @@ public class BirCostRoiSo {
/** /**
* 加载类型 * 加载类型
* 0->客户 * 0->客户
* 1->客户的申请人 * 1->申请人的客户(不含当前客户)
* 2->客户的行政区域 * 2->客户的行政区域(不含当前客户)
* 3->客户的销售区域 * 3->客户的销售区域(不含当前客户)
*/ */
private Integer loadType; private Integer loadType;

7
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.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.bir.entity.BirRoiRate; 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 * Mapper
@ -10,5 +15,7 @@ import com.qs.serve.modules.bir.entity.BirRoiRate;
*/ */
public interface BirRoiRateMapper extends BaseMapper<BirRoiRate> { public interface BirRoiRateMapper extends BaseMapper<BirRoiRate> {
List<BirRoiCostItemVo> queryRoiCostItems(@Param("query") BirRoiCostDTO param);
} }

19
src/main/java/com/qs/serve/modules/bir/service/BirRoiRateService.java

@ -1,7 +1,13 @@
package com.qs.serve.modules.bir.service; package com.qs.serve.modules.bir.service;
import com.baomidou.mybatisplus.extension.service.IService; 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.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<BirRoiRate> { public interface BirRoiRateService extends IService<BirRoiRate> {
/**
* 查询费率
* @param param
* @return
*/
List<BirRoiCostItemVo> queryRoiCostItems(BirRoiCostDTO param);
/**
* 获取费率和ROI
* @param param
* @return
*/
List<BirRoiCostItemVo> getCostRoiOfYearMonth(BirCostRoiSo param);
} }

114
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.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.model.dto.DateSplitDTO; 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.Assert;
import com.qs.serve.common.util.AuthContextUtils;
import com.qs.serve.common.util.DateSplitUtil; 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.entity.SysUser;
import com.qs.serve.modules.sys.mapper.SysUserMapper; import com.qs.serve.modules.sys.mapper.SysUserMapper;
import com.qs.serve.modules.tbs.entity.TbsActivity; 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.BigDecimal;
import java.math.RoundingMode; import java.math.RoundingMode;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -32,5 +43,108 @@ import java.util.stream.Collectors;
@AllArgsConstructor @AllArgsConstructor
public class BirRoiRateServiceImpl extends ServiceImpl<BirRoiRateMapper,BirRoiRate> implements BirRoiRateService { public class BirRoiRateServiceImpl extends ServiceImpl<BirRoiRateMapper,BirRoiRate> implements BirRoiRateService {
private final BmsSupplierMapper bmsSupplierMapper;
private final ErpDispatchDataMapper dispatchDataMapper;
@Override
public List<BirRoiCostItemVo> queryRoiCostItems(BirRoiCostDTO param) {
return baseMapper.queryRoiCostItems(param);
}
@Override
public List<BirRoiCostItemVo> 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<String> supplierCodeList = new ArrayList<>();
LambdaQueryWrapper<BmsSupplier> 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<BmsSupplier> supplierList = bmsSupplierMapper.selectSupplierList(param4Supplier);
List<String> 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<BmsSupplier> supplierList = bmsSupplierMapper.selectList(lqw);
List<String> supplierIds = supplierList.stream().map(BmsSupplier::getId)
.distinct().collect(Collectors.toList());
List<String> supplierCodes = supplierList.stream().map(BmsSupplier::getCode)
.distinct().collect(Collectors.toList());
supplierCodeList.addAll(supplierCodes);
//防止空值
supplierIds.add("0");
costDTO.setSupplierIds(supplierIds);
}
//防止空值
supplierCodeList.add("0");
List<BirRoiCostItemVo> costItemVoList = this.queryRoiCostItems(costDTO);
//发货单
List<ErpDispatchSumVo> 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");
}
} }

18
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;
}

15
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.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.qs.serve.modules.erp.entity.ErpDispatchData; 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 * 发货单数据 Mapper
@ -10,5 +14,16 @@ import com.qs.serve.modules.erp.entity.ErpDispatchData;
*/ */
public interface ErpDispatchDataMapper extends BaseMapper<ErpDispatchData> { public interface ErpDispatchDataMapper extends BaseMapper<ErpDispatchData> {
/**
* 查询发货单合计
* @param startNumber
* @param endNumber
* @param cusCodes
* @return
*/
List<ErpDispatchSumVo> querySumCost(@Param("startNumber")Integer startNumber,
@Param("endNumber")Integer endNumber,
@Param("cusCodes")List<String> cusCodes);
} }

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

@ -0,0 +1,89 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qs.serve.modules.bir.mapper.BirRoiRateMapper">
<resultMap id="birRoiRateMap" type="com.qs.serve.modules.bir.entity.BirRoiRate" >
<result property="id" column="id"/>
<result property="keyNum" column="key_num"/>
<result property="activityAmt" column="activity_amt"/>
<result property="verificationAmt" column="verification_amt"/>
<result property="shipmentQty" column="shipment_qty"/>
<result property="shipmentAmt" column="shipment_amt"/>
<result property="supplierId" column="supplier_id"/>
<result property="supplierCode" column="supplier_code"/>
<result property="supplierName" column="supplier_name"/>
<result property="userId" column="user_id"/>
<result property="userCode" column="user_code"/>
<result property="userName" column="user_name"/>
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="tenantId" column="tenant_id"/>
<result property="delFlag" column="del_flag"/>
</resultMap>
<sql id="birRoiRateSql">
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` </sql>
<resultMap id="BirRoiCostItemVoMap" type="com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo" >
<result property="yearMonth" column="year_month"/>
<result property="yearMonthDate" column="year_month_date"/>
<result property="costAmt" column="cost_amt"/>
<result property="checkAmt" column="check_amt"/>
</resultMap>
<select id="queryRoiCostItems" resultType="com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo" resultMap="BirRoiCostItemVoMap">
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.verification_amt) as check_amt
<where>
and bir_base_activity.key_num &gt;= #{query.startMonthNum}
and bir_base_activity.key_num &lt;= #{query.endMonthNum}
<if test="query.supplierId!=null and query.supplierId!=''">
and supplier_id = #{query.supplierId}
</if>
<if test="query.userId!=null and query.userId!=''">
and supplier_id != #{query.notSupplierId}
and user_id = #{query.userId}
</if>
<if test="query.supplierIds!=null and query.supplierIds.size > 0">
and supplier_id in
<foreach collection="query.supplierIds" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
</if>
<if test="query.userIds!=null and query.userIds.size > 0">
and user_id in
<foreach collection="query.userIds" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
</if>
</where>
FROM
`bir_base_activity`
GROUP BY
`year_month`
ORDER BY
`year_month` desc
</select>
</mapper>

69
src/main/resources/mapper/erp/ErpDispatchDataMapper.xml

@ -0,0 +1,69 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qs.serve.modules.erp.mapper.ErpDispatchDataMapper">
<resultMap id="erpDispatchDataMap" type="com.qs.serve.modules.erp.entity.ErpDispatchData" >
<result property="id" column="id"/>
<result property="place" column="place"/>
<result property="dlCode" column="dl_code"/>
<result property="date" column="date"/>
<result property="cusCode" column="cus_code"/>
<result property="cusName" column="cus_name"/>
<result property="invCode" column="inv_code"/>
<result property="invName" column="inv_name"/>
<result property="invBatch" column="inv_batch"/>
<result property="salesDepCode" column="sales_dep_code"/>
<result property="depName" column="dep_name"/>
<result property="qty" column="qty"/>
<result property="sumMoney" column="sum_money"/>
<result property="volume" column="volume"/>
<result property="netWeight" column="net_weight"/>
<result property="dispatchCost" column="dispatch_cost"/>
<result property="invDispatchCost" column="inv_dispatch_cost"/>
<result property="invTransFee" column="inv_trans_fee"/>
<result property="invProduceCost" column="inv_produce_cost"/>
<result property="createTime" column="create_time"/>
</resultMap>
<sql id="erpDispatchDataSql">
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` </sql>
<select id="querySumCost" resultType="com.qs.serve.modules.erp.entity.dto.ErpDispatchSumVo">
SELECT
DATE_FORMAT(date,'%Y%m') AS `yearMonth`,
SUM(dispatch_cost) as dispatchSumCost
FROM
`erp_dispatch_data`
where
DATE_FORMAT(date,'%Y%m') &gt;= #{startNumber}
and DATE_FORMAT(date,'%Y%m') &lt;= #{endNumber}
and cus_code in
<foreach collection="cusCodes" item ="selectId" index="i" open="(" close=")" separator=",">
#{selectId}
</foreach>
GROUP BY `year_month`
</select>
</mapper>
Loading…
Cancel
Save