|
|
@ -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<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"); |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|