Browse Source

台帐

contract
15989082884@163.com 2 years ago
parent
commit
72ff1773b4
  1. 31
      src/main/java/com/qs/serve/modules/bir/controller/BirRoiRateController.java
  2. 2
      src/main/java/com/qs/serve/modules/bir/entity/vo/BirAccountReportVo.java
  3. 14
      src/main/java/com/qs/serve/modules/bir/entity/vo/BirCenterCostRateItem.java
  4. 4
      src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java
  5. 263
      src/main/java/com/qs/serve/modules/bir/service/impl/BirReportAccountBookServiceImpl.java
  6. 4
      src/main/java/com/qs/serve/modules/goods/entity/dto/TbsCenterDto.java
  7. 1
      src/main/resources/mapper/bir/BirActivityCenterGoodsMapper.xml

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

@ -8,16 +8,16 @@ 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.common.util.Assert;
import com.qs.serve.common.util.AuthContextUtils;
import com.qs.serve.common.util.StringUtils;
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.BirCenterCostRateItem;
import com.qs.serve.modules.bir.entity.vo.BirCenterCostRateMain;
import com.qs.serve.modules.bir.entity.vo.BirRoiCostItemVo;
import com.qs.serve.modules.bir.entity.vo.BirRoiVo;
import com.qs.serve.modules.bir.entity.vo.*;
import com.qs.serve.modules.bir.service.BirActivityCenterGoodsService;
import com.qs.serve.modules.bir.service.BirBaseActivityService;
import com.qs.serve.modules.bir.service.BirReportAccountBookService;
import com.qs.serve.modules.tbs.common.TbsCenterType;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
@ -95,9 +95,32 @@ public class BirRoiRateController {
*/
@GetMapping("/standingBook")
public R<?> standingBookByCall(String type,String year){
if(!StringUtils.hasText(year) || !StringUtils.hasText(type)){
Assert.throwEx("参数不能为空!");
}
return R.ok(birReportAccountBookService.getReportAccountBookData(type,year));
}
/**
* 台账
* @return
*/
@GetMapping("/standingBookExport")
public R<?> standingBookExport(String year){
if(!StringUtils.hasText(year)){
Assert.throwEx("参数不能为空!");
}
List<BirAccountReportVo> vos = new ArrayList<>();
BirAccountReportVo center = birReportAccountBookService.getReportAccountBookData(TbsCenterType.center.name(),year);
BirAccountReportVo customer = birReportAccountBookService.getReportAccountBookData(TbsCenterType.customer.name(),year);
BirAccountReportVo saleRegion = birReportAccountBookService.getReportAccountBookData(TbsCenterType.saleRegion.name(),year);
BirAccountReportVo bizRegion = birReportAccountBookService.getReportAccountBookData(TbsCenterType.bizRegion.name(),year);
vos.add(center);
vos.add(customer);
vos.add(saleRegion);
vos.add(bizRegion);
return R.ok(vos);
}
/**
* 获取费率

2
src/main/java/com/qs/serve/modules/bir/entity/vo/BirAccountReportVo.java

@ -18,4 +18,6 @@ public class BirAccountReportVo {
private BudgetPlanVo budgetPlanVo;
private List<List<BirCenterCostRateMain>> itemList;
private String type;
}

14
src/main/java/com/qs/serve/modules/bir/entity/vo/BirCenterCostRateItem.java

@ -3,6 +3,8 @@ package com.qs.serve.modules.bir.entity.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.Map;
/**
@ -96,4 +98,16 @@ public class BirCenterCostRateItem {
this.targetRoiRate = map.get(headerPrefix+"目标费用率")==null?BigDecimal.ZERO:((BigDecimal) map.get(headerPrefix+"目标费用率")).multiply(BigDecimal.valueOf(100L));
}
public BirCenterCostRateItem(List<BirCenterCostRateItem> itemData){
this.budgetAmt = itemData.stream().map(a->a.getBudgetAmt()).reduce(BigDecimal.ZERO,BigDecimal::add);
this.usedBudgetAmt = itemData.stream().map(a->a.getUsedBudgetAmt()).reduce(BigDecimal.ZERO,BigDecimal::add);
this.unUsedBudgetAmt = itemData.stream().map(a->a.getUnUsedBudgetAmt()).reduce(BigDecimal.ZERO,BigDecimal::add);
this.targetDispatchAmt = itemData.stream().map(a->a.getTargetDispatchAmt()).reduce(BigDecimal.ZERO,BigDecimal::add);
this.realDispatchAmt = itemData.stream().map(a->a.getRealDispatchAmt()).reduce(BigDecimal.ZERO,BigDecimal::add);
this.realRoiRate = this.realDispatchAmt.compareTo(BigDecimal.ZERO)==0?
BigDecimal.ZERO:this.usedBudgetAmt.divide(this.realDispatchAmt,4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L));
this.targetRoiRate = this.targetDispatchAmt.compareTo(BigDecimal.ZERO)==0?
BigDecimal.ZERO:this.budgetAmt.divide(this.targetDispatchAmt,4, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100L));
}
}

4
src/main/java/com/qs/serve/modules/bir/service/impl/BirActivityCenterGoodsServiceImpl.java

@ -83,7 +83,7 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe
Map<Long,List<TbsActivityCenterGoods>> collectMap = activityCenterGoodsAllList.stream()
.collect(Collectors.groupingBy(TbsActivityCenterGoods::getActivityId));
//TODO查询费用释放
// TODO查询费用释放
VtbFundFlow flow = new VtbFundFlow();
flow.setFundType(VtbFundFlowType.Release);
flow.setSelectActivityIds(new ArrayList<>(collectMap.keySet()));
@ -304,7 +304,7 @@ public class BirActivityCenterGoodsServiceImpl extends ServiceImpl<BirActivityCe
BigDecimal currentReleaseAmount = activityReleaseAmt==null?BigDecimal.ZERO:
activityReleaseAmt
.multiply(activityCenterGoods.getCenterGoodsRate())
.multiply(activityCenterGoods.getCenterGoodsRate())
.multiply(activityCenterGoods.getCenterRate())
.divide(new BigDecimal("10000"),BigDecimal.ROUND_DOWN);
//当前CenterGoods分割项金额
BigDecimal currentSplitAmount = activityCenterGoods.getCenterGoodsAmount();

263
src/main/java/com/qs/serve/modules/bir/service/impl/BirReportAccountBookServiceImpl.java

@ -1,5 +1,6 @@
package com.qs.serve.modules.bir.service.impl;
import cn.hutool.core.util.ArrayUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.qs.serve.common.model.dto.HeaderOption;
@ -70,151 +71,201 @@ public class BirReportAccountBookServiceImpl implements BirReportAccountBookServ
BirAccountReportVo vo = new BirAccountReportVo();
List<List<BirCenterCostRateMain>> itemDataList = new ArrayList<>();
vo.setType(type);
List<String> headerList = tbsScheduleItemMapper.getItemNames(year);
if(headerList.size()==0){
return vo;
List<List<BirCenterCostRateMain>> itemDataList = buildCostData(type,year,headerList);
if(itemDataList.size()>0) {
List<BirCenterCostRateMain> forSumItemData = itemDataList.stream().flatMap(List::stream).collect(Collectors.toList());
BirCenterCostRateMain allMainItem = buildSumData(forSumItemData);
allMainItem.getCenter2().setCenterName("合计");
if (type.equals(TbsCenterType.saleRegion.name()) || type.equals(TbsCenterType.bizRegion.name())) {
itemDataList.forEach(item -> {
BirCenterCostRateMain mainItem = buildSumData(item);
item.add(mainItem);
});
}
itemDataList.add(Arrays.asList(allMainItem));
}
if(type.equals(TbsCenterType.saleRegion.name())){
List<BmsRegion> bmsRegionList = bmsRegionService.list();
Map<String,BmsRegion> bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion::getId, Function.identity()));
LambdaQueryWrapper<TbsBudgetPlan> lqw = new LambdaQueryWrapper<>();
lqw.eq(TbsBudgetPlan::getBudgetYear,year);
TbsBudgetPlan tbsBudgetPlan = tbsBudgetPlanService.getOne(lqw);
List<Map<String,Object>> itemList = birReportAccountBookMapper.reportAccountBookRegion(year);
BudgetPlanVo budgetPlanVo = new BudgetPlanVo();
CopierUtil.copy(tbsBudgetPlan,budgetPlanVo);
Map<String,List<BirCenterCostRateMain>> mainList = itemList.stream().map(i->{
BirCenterCostRateMain main = new BirCenterCostRateMain();
BmsRegion center2 = bmsRegionMap.get(i.get("center_id"));
if(center2==null){
return main;
}else{
main.setCenter2(new TbsCenterDto(center2));
}
BigDecimal plannedAmount = tbsBudgetLogMapper.countPlannedBudgetAmount();
budgetPlanVo.setPlannedAmount(plannedAmount);
BmsRegion center1 = bmsRegionMap.get(center2.getPid());
if(center1==null){
main.setCenter1(new TbsCenterDto(center2));
}else{
main.setCenter1(new TbsCenterDto(center1));
}
BigDecimal usedAmount = tbsBudgetLogMapper.countUsedBudgetAmount();
budgetPlanVo.setUsedAmout(usedAmount);
List<BirCenterCostRateItem> seasonList = headerList.stream().map(a-> new BirCenterCostRateItem(i,"【"+a+"】")).collect(Collectors.toList());
main.setSeasonList(seasonList);
main.setYearInfo(new BirCenterCostRateItem(i,"【全年】"));
BigDecimal realSaleAmount = erpDispatchDataMapper.querySumCostAmt(Integer.parseInt(year+"01"),Integer.parseInt(year+"12"),null);
budgetPlanVo.setRealSaleAmount(realSaleAmount);
return main;
}).filter(a->a.getCenter2()!=null).collect(Collectors.groupingBy(a->a.getCenter1().getId()));
vo.setHeaderList(headerList);
vo.setItemList(itemDataList);
vo.setBudgetPlanVo(budgetPlanVo);
return vo;
}
itemDataList.addAll(mainList.values());
}else if(type.equals(TbsCenterType.bizRegion.name())){
List<BmsRegion2> bmsRegionList = bmsRegion2Service.list();
Map<String,BmsRegion2> bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion2::getId, Function.identity()));
private BirCenterCostRateMain buildSumData(List<BirCenterCostRateMain> item){
BirCenterCostRateMain mainItem = new BirCenterCostRateMain();
//年度合计
List<BirCenterCostRateItem> yearInfos = item.stream().map(a->a.getYearInfo()).collect(Collectors.toList());
BirCenterCostRateItem sumYearInfo = new BirCenterCostRateItem(yearInfos);
mainItem.setYearInfo(sumYearInfo);
List<BirCenterCostRateItem> sumSeasonInfoList = new ArrayList<>();
//周期合计
for(int i=0;i<item.get(0).getSeasonList().size();i++) {
int finalI = i;
List<BirCenterCostRateItem> seasonInfos = item.stream().map(a->a.getSeasonList().get(finalI)).collect(Collectors.toList());
BirCenterCostRateItem seasonInfo = new BirCenterCostRateItem(seasonInfos);
sumSeasonInfoList.add(seasonInfo);
}
List<Map<String,Object>> itemList = birReportAccountBookMapper.reportAccountBookBizRegion(year);
mainItem.setSeasonList(sumSeasonInfoList);
Map<String,List<BirCenterCostRateMain>> mainList = itemList.stream().map(i->{
BirCenterCostRateMain main = new BirCenterCostRateMain();
//成本中心设置
TbsCenterDto sumCenterDto = CopierUtil.copy(item.get(0).getCenter2(),new TbsCenterDto());
sumCenterDto.setCenterName("合计"+sumCenterDto.getCenterName());
BmsRegion2 center2 = bmsRegionMap.get(i.get("center_id"));
if(center2==null){
return main;
}else{
main.setCenter2(new TbsCenterDto(center2));
main.setCenter1(new TbsCenterDto(center2));
}
mainItem.setCenter2(sumCenterDto);
return mainItem;
}
List<BirCenterCostRateItem> seasonList = headerList.stream().map(a-> new BirCenterCostRateItem(i,"【"+a+"】")).collect(Collectors.toList());
main.setSeasonList(seasonList);
main.setYearInfo(new BirCenterCostRateItem(i,"【全年】"));
private List<List<BirCenterCostRateMain>> buildCostData(String type,String year,List<String> headerList){
List<List<BirCenterCostRateMain>> itemDataList = new ArrayList<>();
if(headerList.size()>0) {
return main;
}).filter(a->a.getCenter2()!=null).collect(Collectors.groupingBy(a->a.getCenter1().getId()));
if (type.equals(TbsCenterType.saleRegion.name())) {
List<BmsRegion> bmsRegionList = bmsRegionService.list();
Map<String, BmsRegion> bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion::getId, Function.identity()));
itemDataList.addAll(mainList.values());
}else if(type.equals(TbsCenterType.customer.name())){
List<Map<String, Object>> itemList = birReportAccountBookMapper.reportAccountBookRegion(year);
List<Map<String,Object>> itemList = birReportAccountBookMapper.reportAccountBookCustomer(year);
List<String> supperIds = itemList.stream().map(i->i.get("center_id").toString()).collect(Collectors.toList());
Map<String, List<BirCenterCostRateMain>> mainList = itemList.stream().map(i -> {
BirCenterCostRateMain main = new BirCenterCostRateMain();
LambdaQueryWrapper<BmsSupplier> lqw = new LambdaQueryWrapper<>();
lqw.in(BmsSupplier::getId,supperIds);
List<BmsSupplier> supplierList = bmsSupplierService.list(lqw);
Map<String,BmsSupplier> supplierMap = supplierList.stream().collect(Collectors.toMap(BmsSupplier::getId, Function.identity()));
BmsRegion center2 = bmsRegionMap.get(i.get("center_id"));
if (center2 == null) {
return main;
} else {
main.setCenter2(new TbsCenterDto(center2));
}
BmsRegion center1 = bmsRegionMap.get(center2.getPid());
if (center1 == null) {
main.setCenter1(new TbsCenterDto(center2));
} else {
main.setCenter1(new TbsCenterDto(center1));
}
List<BirCenterCostRateMain> mainList = itemList.stream().map(i->{
BirCenterCostRateMain main = new BirCenterCostRateMain();
List<BirCenterCostRateItem> seasonList = headerList.stream().map(a -> new BirCenterCostRateItem(i, "【" + a + "】")).collect(Collectors.toList());
main.setSeasonList(seasonList);
main.setYearInfo(new BirCenterCostRateItem(i, "【全年】"));
BmsSupplier supplier = supplierMap.get(i.get("center_id"));
if(supplier==null){
return main;
}else{
main.setCenter2(new TbsCenterDto(supplier));
main.setCenter1(new TbsCenterDto(supplier));
}
}).filter(a -> a.getCenter2() != null).collect(Collectors.groupingBy(a -> a.getCenter1().getId()));
itemDataList.addAll(mainList.values());
} else if (type.equals(TbsCenterType.bizRegion.name())) {
List<BmsRegion2> bmsRegionList = bmsRegion2Service.list();
Map<String, BmsRegion2> bmsRegionMap = bmsRegionList.stream().collect(Collectors.toMap(BmsRegion2::getId, Function.identity()));
List<BirCenterCostRateItem> seasonList = headerList.stream().map(a-> new BirCenterCostRateItem(i,"【"+a+"】")).collect(Collectors.toList());
main.setSeasonList(seasonList);
main.setYearInfo(new BirCenterCostRateItem(i,"【全年】"));
List<Map<String, Object>> itemList = birReportAccountBookMapper.reportAccountBookBizRegion(year);
return main;
}).filter(a->a.getCenter2()!=null).collect(Collectors.toList());
itemDataList.add(mainList);
Map<String, List<BirCenterCostRateMain>> mainList = itemList.stream().map(i -> {
BirCenterCostRateMain main = new BirCenterCostRateMain();
}else if(type.equals(TbsCenterType.center.name())){
List<Map<String,Object>> itemList = birReportAccountBookMapper.reportAccountBookCenter(year);
List<String> centerIds = itemList.stream().map(i->i.get("center_id").toString()).collect(Collectors.toList());
BmsRegion2 center2 = bmsRegionMap.get(i.get("center_id"));
if (center2 == null) {
return main;
} else {
main.setCenter2(new TbsCenterDto(center2));
main.setCenter1(new TbsCenterDto(center2));
}
LambdaQueryWrapper<BmsCostCenter> lqw = new LambdaQueryWrapper<>();
lqw.in(BmsCostCenter::getId,centerIds);
List<BmsCostCenter> bmsCostCenterList = bmsCostCenterService.list(lqw);
Map<String,BmsCostCenter> bmsCostCenterMap = bmsCostCenterList.stream().collect(Collectors.toMap(a->a.getId().toString(), Function.identity()));
List<BirCenterCostRateMain> mainList = itemList.stream().map(i->{
BirCenterCostRateMain main = new BirCenterCostRateMain();
List<BirCenterCostRateItem> seasonList = headerList.stream().map(a -> new BirCenterCostRateItem(i, "【" + a + "】")).collect(Collectors.toList());
main.setSeasonList(seasonList);
main.setYearInfo(new BirCenterCostRateItem(i, "【全年】"));
BmsCostCenter costCenter = bmsCostCenterMap.get(i.get("center_id"));
if(costCenter==null){
return main;
}else{
main.setCenter2(new TbsCenterDto(costCenter));
main.setCenter1(new TbsCenterDto(costCenter));
}
List<BirCenterCostRateItem> seasonList = headerList.stream().map(a-> new BirCenterCostRateItem(i,"【"+a+"】")).collect(Collectors.toList());
main.setSeasonList(seasonList);
main.setYearInfo(new BirCenterCostRateItem(i,"【全年】"));
return main;
}).filter(a->a.getCenter2()!=null).collect(Collectors.toList());
itemDataList.add(mainList);
}
}).filter(a -> a.getCenter2() != null).collect(Collectors.groupingBy(a -> a.getCenter1().getId()));
LambdaQueryWrapper<TbsBudgetPlan> lqw = new LambdaQueryWrapper<>();
lqw.eq(TbsBudgetPlan::getBudgetYear,year);
TbsBudgetPlan tbsBudgetPlan = tbsBudgetPlanService.getOne(lqw);
itemDataList.addAll(mainList.values());
} else if (type.equals(TbsCenterType.customer.name())) {
BudgetPlanVo budgetPlanVo = new BudgetPlanVo();
CopierUtil.copy(tbsBudgetPlan,budgetPlanVo);
List<Map<String, Object>> itemList = birReportAccountBookMapper.reportAccountBookCustomer(year);
List<String> supperIds = itemList.stream().map(i -> i.get("center_id").toString()).collect(Collectors.toList());
LambdaQueryWrapper<BmsSupplier> lqw = new LambdaQueryWrapper<>();
lqw.in(BmsSupplier::getId, supperIds);
List<BmsSupplier> supplierList = bmsSupplierService.list(lqw);
Map<String, BmsSupplier> supplierMap = supplierList.stream().collect(Collectors.toMap(BmsSupplier::getId, Function.identity()));
BigDecimal plannedAmount = tbsBudgetLogMapper.countPlannedBudgetAmount();
budgetPlanVo.setPlannedAmount(plannedAmount);
BigDecimal usedAmount = tbsBudgetLogMapper.countUsedBudgetAmount();
budgetPlanVo.setUsedAmout(usedAmount);
List<BirCenterCostRateMain> mainList = itemList.stream().map(i -> {
BirCenterCostRateMain main = new BirCenterCostRateMain();
BigDecimal realSaleAmount = erpDispatchDataMapper.querySumCostAmt(Integer.parseInt(year+"01"),Integer.parseInt(year+"12"),null);
budgetPlanVo.setRealSaleAmount(realSaleAmount);
BmsSupplier supplier = supplierMap.get(i.get("center_id"));
if (supplier == null) {
return main;
} else {
main.setCenter2(new TbsCenterDto(supplier));
main.setCenter1(new TbsCenterDto(supplier));
}
vo.setHeaderList(headerList);
vo.setItemList(itemDataList);
vo.setBudgetPlanVo(budgetPlanVo);
return vo;
List<BirCenterCostRateItem> seasonList = headerList.stream().map(a -> new BirCenterCostRateItem(i, "【" + a + "】")).collect(Collectors.toList());
main.setSeasonList(seasonList);
main.setYearInfo(new BirCenterCostRateItem(i, "【全年】"));
return main;
}).filter(a -> a.getCenter2() != null).collect(Collectors.toList());
itemDataList.add(mainList);
} else if (type.equals(TbsCenterType.center.name())) {
List<Map<String, Object>> itemList = birReportAccountBookMapper.reportAccountBookCenter(year);
List<String> centerIds = itemList.stream().map(i -> i.get("center_id").toString()).collect(Collectors.toList());
LambdaQueryWrapper<BmsCostCenter> lqw = new LambdaQueryWrapper<>();
lqw.in(BmsCostCenter::getId, centerIds);
List<BmsCostCenter> bmsCostCenterList = bmsCostCenterService.list(lqw);
Map<String, BmsCostCenter> bmsCostCenterMap = bmsCostCenterList.stream().collect(Collectors.toMap(a -> a.getId().toString(), Function.identity()));
List<BirCenterCostRateMain> mainList = itemList.stream().map(i -> {
BirCenterCostRateMain main = new BirCenterCostRateMain();
BmsCostCenter costCenter = bmsCostCenterMap.get(i.get("center_id"));
if (costCenter == null) {
return main;
} else {
main.setCenter2(new TbsCenterDto(costCenter));
main.setCenter1(new TbsCenterDto(costCenter));
}
List<BirCenterCostRateItem> seasonList = headerList.stream().map(a -> new BirCenterCostRateItem(i, "【" + a + "】")).collect(Collectors.toList());
main.setSeasonList(seasonList);
main.setYearInfo(new BirCenterCostRateItem(i, "【全年】"));
return main;
}).filter(a -> a.getCenter2() != null).collect(Collectors.toList());
itemDataList.add(mainList);
}
return itemDataList;
}else{
return itemDataList;
}
}
}

4
src/main/java/com/qs/serve/modules/goods/entity/dto/TbsCenterDto.java

@ -36,6 +36,10 @@ public class TbsCenterDto {
@NotNull(message = "费用占比率不能为空")
private BigDecimal centerAmount;
public TbsCenterDto(){
}
public TbsCenterDto(String id, String centerCode, String centerName, String centerType,LocalDateTime createTime) {
this.id = id;
this.centerCode = centerCode;

1
src/main/resources/mapper/bir/BirActivityCenterGoodsMapper.xml

@ -110,6 +110,7 @@
bir_activity_center_goods.activity_id is null
or bir_activity_center_goods.activity_total_amount != tbs_activity.total_amount
or bir_activity_center_goods.activity_total_check_amount != tbs_activity.used_amount
or bir_activity_center_goods.activity_total_release_amount != tbs_activity.release_amount
or bir_activity_center_goods.pre_start_date != tbs_activity.pre_start_date
or bir_activity_center_goods.pre_end_date != tbs_activity.pre_end_date
or bir_activity_center_goods.activity_finished_flag != `tbs_activity`.finished_flag

Loading…
Cancel
Save