From a27a036e02b88abd40e4ce719bd4a932dc77b47e Mon Sep 17 00:00:00 2001 From: Yen Date: Fri, 18 Nov 2022 16:36:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0excel=E5=AF=BC=E5=85=A5?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E9=A2=84=E7=AE=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mvc/HttpServletRequestFilter.java | 2 +- .../tbs/controller/TbsBudgetController.java | 58 +++---- .../tbs/entity/bo/TbsBudgetExcelBatchDto.java | 20 +++ .../tbs/entity/bo/TbsBudgetExcelBo.java | 3 - .../modules/tbs/service/TbsBudgetService.java | 7 + .../service/impl/TbsBudgetServiceImpl.java | 154 +++++++++++++++++- 6 files changed, 194 insertions(+), 50 deletions(-) create mode 100644 src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetExcelBatchDto.java diff --git a/src/main/java/com/qs/serve/common/framework/mvc/HttpServletRequestFilter.java b/src/main/java/com/qs/serve/common/framework/mvc/HttpServletRequestFilter.java index ec6de66b..8023d743 100644 --- a/src/main/java/com/qs/serve/common/framework/mvc/HttpServletRequestFilter.java +++ b/src/main/java/com/qs/serve/common/framework/mvc/HttpServletRequestFilter.java @@ -65,7 +65,7 @@ public class HttpServletRequestFilter implements Filter{ String method = request.getMethod(); String queryStr = request.getQueryString(); String reqBody = ""; - if (ServletUtils.isJsonRequest(request)) { + if (ServletUtils.isJsonRequest(request)&&requestWrapper!=null) { reqBody = requestWrapper.getBody(); } StringBuffer buffer = new StringBuffer("["+method+"] "+url + " IP: "+ServletUtils.getIp(request)); diff --git a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java index 7c48c6a7..64664036 100644 --- a/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java +++ b/src/main/java/com/qs/serve/modules/tbs/controller/TbsBudgetController.java @@ -9,12 +9,11 @@ import com.qs.serve.common.model.enums.SystemModule; import com.qs.serve.common.util.PageUtil; import com.qs.serve.common.util.CopierUtil; import com.qs.serve.common.util.StringUtils; +import com.qs.serve.common.util.ValidateTools; import com.qs.serve.modules.tbs.common.TbsGoodsType; import com.qs.serve.modules.tbs.entity.TbsBudgetCondition; import com.qs.serve.modules.tbs.entity.TbsScheduleItemBudget; -import com.qs.serve.modules.tbs.entity.bo.TbsBudgetExcelBo; -import com.qs.serve.modules.tbs.entity.bo.TbsBudgetStateBo; -import com.qs.serve.modules.tbs.entity.bo.TbsScheduleItemBudgetBo; +import com.qs.serve.modules.tbs.entity.bo.*; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetVo; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.service.TbsBudgetConditionService; @@ -25,7 +24,6 @@ import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import com.qs.serve.modules.tbs.entity.so.TbsBudgetSo; -import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBo; import com.qs.serve.modules.tbs.entity.TbsBudget; import com.qs.serve.modules.tbs.service.TbsBudgetService; @@ -81,7 +79,7 @@ public class TbsBudgetController { List list = tbsBudgetService.listByIds(budgetIds); List voList = new ArrayList<>(); for (TbsBudget budget : list) { - TbsBudgetVo budgetVo = toVoEntity(budget); + TbsBudgetVo budgetVo = tbsBudgetService.toVoEntity(budget); voList.add(budgetVo); } return R.byPageHelperList(list,voList); @@ -99,7 +97,7 @@ public class TbsBudgetController { @PreAuthorize("hasRole('tbs:budget:query')") public R getById(@PathVariable("id") String id){ TbsBudget budget = tbsBudgetService.getById(id); - return R.ok(toVoEntity(budget)); + return R.ok(tbsBudgetService.toVoEntity(budget)); } /** @@ -118,36 +116,6 @@ public class TbsBudgetController { return R.ok(); } - private TbsBudgetVo toVoEntity(TbsBudget budget){ - LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); - lqw.eq(TbsBudgetCondition::getBudgetId,budget.getId()); - List budgetConditions = tbsBudgetConditionService.list(lqw); - Map> listMap = budgetConditions.stream().collect(Collectors.groupingBy(TbsBudgetCondition::getTargetType)); - TbsBudgetVo budgetVo = CopierUtil.copy(budget,new TbsBudgetVo()); - budgetVo.setBrandConditions(listMap.get(TbsGoodsType.brand.name())); - budgetVo.setCategoryConditions(listMap.get(TbsGoodsType.category.name())); - budgetVo.setSeriesConditions(listMap.get(TbsGoodsType.series.name())); - List skuCondition = listMap.get(TbsGoodsType.sku.name()); - if(skuCondition!=null){ - for (TbsBudgetCondition budgetCondition : skuCondition) { - try { - String[] names = budgetCondition.getTargetLevelPathNames().split("_"); - budgetCondition.setSkuName(names[names.length-1]); - budgetCondition.setSpuName(names[names.length-2]); - } catch (Exception e) { - log.error("格式错误:{}",budgetCondition.getTargetLevelPathNames()); - } - } - } - budgetVo.setSkuConditions(skuCondition); - budgetVo.setSpuConditions(listMap.get(TbsGoodsType.spu.name())); - LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); - lqw2.eq(TbsScheduleItemBudget::getBudgetId,budget.getId()); - List scheduleItemBudgets = tbsScheduleItemBudgetService.list(lqw2); - budgetVo.setScheduleItem(scheduleItemBudgets); - return budgetVo; - } - /** * 更新状态 * @param param @@ -202,11 +170,25 @@ public class TbsBudgetController { @PostMapping("/import") @SysLog(module = SystemModule.Budget, title = "预算", biz = BizType.INSERT) @PreAuthorize("hasRole('tbs:budget:insert')") - public R importBo(@RequestBody @Valid TbsBudgetExcelBo budgetBo){ - tbsBudgetService.modifyByExcel(budgetBo); + public R importBo(@RequestBody @Valid TbsBudgetExcelBatchDto budgetBo){ + ValidateTools.valid(budgetBo.getItems()); + for (TbsBudgetExcelBo item : budgetBo.getItems()) { + tbsBudgetService.modifyByExcel(item); + } return R.ok(); } + /** + * 导出 + * @param ids + * @return + */ + @GetMapping("/export/{ids}") + public R> exportVo(@PathVariable("ids") String ids){ + List idsLong = StringUtils.splitIdLong(ids); + return R.ok(tbsBudgetService.listBudgetExcel(idsLong)); + } + /** * 删除 * @param ids diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetExcelBatchDto.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetExcelBatchDto.java new file mode 100644 index 00000000..c1a13c7b --- /dev/null +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetExcelBatchDto.java @@ -0,0 +1,20 @@ +package com.qs.serve.modules.tbs.entity.bo; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.List; + +/** + * 预算 Bo + * @author YenHex + * @since 2022-11-12 + */ +@Data +public class TbsBudgetExcelBatchDto implements Serializable { + + List items; + +} + diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetExcelBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetExcelBo.java index dfc3e901..a80e45d1 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetExcelBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetExcelBo.java @@ -38,9 +38,6 @@ public class TbsBudgetExcelBo implements Serializable { /** 成本中心编码 */ private String centerCode; - /** 区域等级 */ - private Integer centerRegionLevel; - /** 品牌名称列表 */ private List brandNames; diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java index 8d5cedbf..0b004375 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsBudgetService.java @@ -4,6 +4,9 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.tbs.entity.TbsBudget; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBo; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetExcelBo; +import com.qs.serve.modules.tbs.entity.vo.TbsBudgetVo; + +import java.util.List; /** * 预算 服务接口 @@ -22,5 +25,9 @@ public interface TbsBudgetService extends IService { TbsBudget getByCode(String code); + List listBudgetExcel(List budgetIds); + + TbsBudgetVo toVoEntity(TbsBudget budget); + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java index 699a4a8d..2b03bc08 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java @@ -19,6 +19,7 @@ import com.qs.serve.modules.tbs.common.TbsGoodsType; import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBo; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetExcelBo; +import com.qs.serve.modules.tbs.entity.vo.TbsBudgetVo; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.service.*; import lombok.AllArgsConstructor; @@ -29,6 +30,7 @@ import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -48,6 +50,9 @@ public class TbsBudgetServiceImpl extends ServiceImpl private final TbsScheduleItemService scheduleItemService; private final TbsCenterDtoService tbsCenterDtoService; + private TbsBudgetConditionService tbsBudgetConditionService; + private TbsScheduleItemBudgetService tbsScheduleItemBudgetService; + private final GoodsSkuService goodsSkuService; private final GoodsSpuService goodsSpuService; private final GoodsCategoryService goodsCategoryService; @@ -109,6 +114,139 @@ public class TbsBudgetServiceImpl extends ServiceImpl } + @Override + public List listBudgetExcel(List budgetIds) { + if (budgetIds==null||budgetIds.size()<1){ + return null; + } + //考核期项 + List budgetList = this.listByIds(budgetIds); + LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); + lqw2.in(TbsScheduleItemBudget::getBudgetId,budgetIds); + List scheduleItemBudgets = tbsScheduleItemBudgetService.list(lqw2); + Map> listScheduleMapByBudgetId = scheduleItemBudgets.stream().collect(Collectors.groupingBy(TbsScheduleItemBudget::getBudgetId)); + //加载条件 + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.in(TbsBudgetCondition::getBudgetId,budgetIds); + List budgetConditions = tbsBudgetConditionService.list(lqw); + Map> listConditionMapByBudgetId = budgetConditions.stream().collect(Collectors.groupingBy(TbsBudgetCondition::getBudgetId)); + //拼装 + return budgetList.stream().map(budget->{ + TbsBudgetExcelBo excelBo = new TbsBudgetExcelBo(); + excelBo.setBudgetCode(budget.getBudgetCode()); + excelBo.setSubjectName(budget.getSubjectName()); + excelBo.setCenterType(budget.getCenterType()); + excelBo.setCenterName(budget.getCenterName()); + excelBo.setCenterCode(budget.getCenterCode()); + excelBo.setScheduleName(budget.getScheduleName()); + excelBo.setRemark(budget.getRemark()); + + //拼装条件 + List budgetConditionsOfBudget = listConditionMapByBudgetId.get(budget.getId()); + if(budgetConditionsOfBudget!=null){ + Map> listMap = budgetConditionsOfBudget.stream().collect(Collectors.groupingBy(TbsBudgetCondition::getTargetType)); + List brandConditions = listMap.get(TbsGoodsType.brand.name()); + List categoryConditions = listMap.get(TbsGoodsType.category.name()); + List seriesConditions = listMap.get(TbsGoodsType.series.name()); + List spuConditions = listMap.get(TbsGoodsType.spu.name()); + List skuConditions = listMap.get(TbsGoodsType.sku.name()); + + excelBo.setBrandNames(getConditionNames(brandConditions)); + excelBo.setCategoryNames(getConditionNames(categoryConditions)); + excelBo.setSeriesNames(getConditionNames(seriesConditions)); + excelBo.setSpuNames(getConditionNames(spuConditions)); + excelBo.setSkuCodes(getConditionCodes(skuConditions)); + } + + //拼装考核期项 + List scheduleItemBudgetList = listScheduleMapByBudgetId.get(budget.getId()); + if(scheduleItemBudgetList!=null){ + for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { + if(itemBudget.getItemName().equals("M1")){ + excelBo.setAmountM1(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("M2")){ + excelBo.setAmountM2(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("M3")){ + excelBo.setAmountM3(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("M4")){ + excelBo.setAmountM4(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("M5")){ + excelBo.setAmountM5(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("M6")){ + excelBo.setAmountM6(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("M7")){ + excelBo.setAmountM7(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("M8")){ + excelBo.setAmountM8(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("M9")){ + excelBo.setAmountM9(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("M10")){ + excelBo.setAmountM10(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("M11")){ + excelBo.setAmountM11(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("M12")){ + excelBo.setAmountM12(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("Q1")){ + excelBo.setAmountQ1(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("Q2")){ + excelBo.setAmountQ2(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("Q3")){ + excelBo.setAmountQ3(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("Q4")){ + excelBo.setAmountQ4(itemBudget.getBudgetAmount()); + }else if (itemBudget.getItemName().equals("Y")){ + excelBo.setAmountYear(itemBudget.getBudgetAmount()); + } + } + } + return excelBo; + }).collect(Collectors.toList()); + } + + private List getConditionNames(List conditions){ + if(CollectionUtil.isNotEmpty(conditions)){ + return conditions.stream().map(TbsBudgetCondition::getTargetName).collect(Collectors.toList()); + } + return null; + } + + private List getConditionCodes(List conditions){ + if(CollectionUtil.isNotEmpty(conditions)){ + return conditions.stream().map(TbsBudgetCondition::getTargetCode).collect(Collectors.toList()); + } + return null; + } + + @Override + public TbsBudgetVo toVoEntity(TbsBudget budget) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(TbsBudgetCondition::getBudgetId,budget.getId()); + List budgetConditions = tbsBudgetConditionService.list(lqw); + Map> listMap = budgetConditions.stream().collect(Collectors.groupingBy(TbsBudgetCondition::getTargetType)); + TbsBudgetVo budgetVo = CopierUtil.copy(budget,new TbsBudgetVo()); + budgetVo.setBrandConditions(listMap.get(TbsGoodsType.brand.name())); + budgetVo.setCategoryConditions(listMap.get(TbsGoodsType.category.name())); + budgetVo.setSeriesConditions(listMap.get(TbsGoodsType.series.name())); + List skuCondition = listMap.get(TbsGoodsType.sku.name()); + if(skuCondition!=null){ + for (TbsBudgetCondition budgetCondition : skuCondition) { + try { + String[] names = budgetCondition.getTargetLevelPathNames().split("_"); + budgetCondition.setSkuName(names[names.length-1]); + budgetCondition.setSpuName(names[names.length-2]); + } catch (Exception e) { + log.error("格式错误:{}",budgetCondition.getTargetLevelPathNames()); + } + } + } + budgetVo.setSkuConditions(skuCondition); + budgetVo.setSpuConditions(listMap.get(TbsGoodsType.spu.name())); + LambdaQueryWrapper lqw2 = new LambdaQueryWrapper<>(); + lqw2.eq(TbsScheduleItemBudget::getBudgetId,budget.getId()); + List scheduleItemBudgets = tbsScheduleItemBudgetService.list(lqw2); + budgetVo.setScheduleItem(scheduleItemBudgets); + return budgetVo; + } /** * 建立类目条件 @@ -141,9 +279,9 @@ public class TbsBudgetServiceImpl extends ServiceImpl public void modifyByExcel(TbsBudgetExcelBo budgetBo) { TbsBudget budget = this.getByCode(budgetBo.getBudgetCode()); if(budget!=null){ - if(budget.getBudgetState().equals(1)){ - Assert.throwEx("已开启的预算无法编辑"); - } +// if(budget.getBudgetState().equals(1)){ +// Assert.throwEx("已开启的预算无法编辑"); +// } }else { budget = new TbsBudget(); budget.setBudgetCode(budgetBo.getBudgetCode()); @@ -151,7 +289,7 @@ public class TbsBudgetServiceImpl extends ServiceImpl List skuIds = null; List spuIds = null; if(CollectionUtil.isNotEmpty(budgetBo.getSkuCodes())){ - List goodsSkus = goodsSkuService.listByIds(budgetBo.getSkuCodes()); + List goodsSkus = goodsSkuService.getByCodes(budgetBo.getSkuCodes()); if(goodsSkus.size()!=budgetBo.getSkuCodes().size()){ Assert.throwEx("部分存货编码不存在"); } @@ -168,15 +306,15 @@ public class TbsBudgetServiceImpl extends ServiceImpl } } List brandIds = this.selectCategory(budgetBo.getBrandNames(),1); - List categoryIds = this.selectCategory(budgetBo.getBrandNames(),2); - List seriesIds = this.selectCategory(budgetBo.getBrandNames(),3); + List categoryIds = this.selectCategory(budgetBo.getCategoryNames(),2); + List seriesIds = this.selectCategory(budgetBo.getSeriesNames(),3); BmsSubject subject = subjectService.getByName(budgetBo.getSubjectName()); TbsCenterDto centerDto = tbsCenterDtoService.getCenterDtoByName( budgetBo.getCenterType(), budgetBo.getCenterName(), budgetBo.getBudgetCode(), - budgetBo.getCenterRegionLevel()); + null); TbsSchedule schedule = scheduleService.getByName(budgetBo.getScheduleName()); initEmptyBudget(budget,subject,centerDto,schedule); //保存 费用项 @@ -241,7 +379,7 @@ public class TbsBudgetServiceImpl extends ServiceImpl if(level==1){ Assert.throwEx("品牌["+name+"]不存在"); }else if (level==2){ - Assert.throwEx("品牌["+name+"]不存在"); + Assert.throwEx("分类["+name+"]不存在"); }else if (level==3){ Assert.throwEx("系列["+name+"]不存在"); }