diff --git a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java index 1a81c931..c8faf8f3 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java @@ -53,6 +53,19 @@ public class GoodsSkuController { return R.ok(list); } + /** + * 翻页 + * @param param + * @return + */ + @GetMapping("/page") + @PreAuthorize("hasRole('goods:sku:query')") + public R> getPage(GoodsSku param){ + PageUtil.startPage(); + List list = goodsSkuService.selectSkuVo(param); + return R.byPageHelperList(list); + } + /** * 根据ID查询 * @param id diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java index 822f8d11..42162eb3 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsActivityCenterGoods.java @@ -68,7 +68,7 @@ public class TbsActivityCenterGoods implements Serializable { /** 成本中心id */ @NotNull(message = "成本中心id不能为空") - private Long centerId; + private String centerId; /** 成本中心编码 */ @NotBlank(message = "成本中心编码不能为空") diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityCenterGoodsBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityCenterGoodsBo.java index 196e2318..ff3dd94a 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityCenterGoodsBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityCenterGoodsBo.java @@ -40,7 +40,7 @@ public class TbsActivityCenterGoodsBo implements Serializable { /** 成本中心id */ @NotNull(message = "成本中心id不能为空") - private Long centerId; + private String centerId; /** 费用额度 */ @NotNull(message = "费用额度不能为空") diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivitySubjectBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivitySubjectBo.java index e778c68b..1fe31491 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivitySubjectBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivitySubjectBo.java @@ -52,10 +52,8 @@ public class TbsActivitySubjectBo implements Serializable { /** 成本中心类型 center, customer, - dept, bizRegion, saleRegion, - saleman */ @NotBlank(message = "成本中心类型不能为空") private String centerType; diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java index 8796727f..041e702b 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java @@ -1,5 +1,6 @@ package com.qs.serve.modules.tbs.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.util.Assert; import com.qs.serve.common.util.CollectionUtil; @@ -53,6 +54,9 @@ public class TbsActivityServiceImpl extends ServiceImpl(); + qw.eq("activity_id",activity.getId()); + activityCenterService.remove(qw); + activityCenterGoodsService.remove(qw); + activityChannelService.remove(qw); + activityChannelPointService.remove(qw); + activityGoodsService.remove(qw); + activitySubjectService.remove(qw); } //产品详情 List activityGoodsList = this.buildActGoodsList(activityBo,costApply,activity); @@ -100,62 +108,65 @@ public class TbsActivityServiceImpl extends ServiceImpl activitySubjects = new ArrayList<>(); List activityCenterList = new ArrayList<>(); Map centerDtoMap = new HashMap<>(); - for (TbsActivitySubjectBo subjectBo : activityBo.getActivitySubjectList()) { - BmsSubject subject = subjectService.getById(subjectBo.getSubjectId()); - subjectMap.put(subject.getId(),subject); - TbsActivitySubject activitySubject = new TbsActivitySubject(); - activitySubject.setCostApplyId(costApply.getId()); - activitySubject.setActivityId(activity.getId()); - activitySubject.setSubjectId(subject.getId()); - activitySubject.setSubjectCode(subject.getSubjectCode()); - activitySubject.setSubjectName(subject.getSubjectName()); - activitySubject.setAmount(subjectBo.getAmount()); - activitySubject.setCountSession(subjectBo.getCountSession()); - activitySubject.setCountPerson(subjectBo.getCountPerson()); - activitySubject.setRemark(subjectBo.getRemark()); - activitySubjects.add(activitySubject); - BigDecimal totalAmount = BigDecimal.ZERO; - BigDecimal totalRate = BigDecimal.ZERO; - for (TbsActivitySubjectBo.ActivityCenterBo centerBo : subjectBo.getCenterList()) { - totalAmount = totalAmount.add(centerBo.getCenterAmount()); - totalRate = totalRate.add(centerBo.getCenterRate()); - String centerType = centerBo.getCenterType(); - String centerId = centerBo.getCenterId(); - String key = centerType+":"+centerId; - TbsCenterDto tbsCenterDto = centerDtoMap.get(key); - if(tbsCenterDto==null){ - tbsCenterDto = getCenterDto(centerType,centerId); - centerDtoMap.put(key,tbsCenterDto); - } - TbsActivityCenter activityCenter = new TbsActivityCenter(); - activityCenter.setCostApplyId(costApply.getId()); - activityCenter.setActivityId(activity.getId()); - activityCenter.setSubjectId(subjectBo.getSubjectId()); - activityCenter.setCenterRate(centerBo.getCenterRate()); - activityCenter.setCenterAmount(centerBo.getCenterAmount()); - activityCenter.setCenterType(centerBo.getCenterType()); - activityCenter.setCenterId(centerBo.getCenterId()); - activityCenter.setCenterName(tbsCenterDto.getCenterName()); - activityCenter.setCenterCode(tbsCenterDto.getCenterCode()); - activityCenterList.add(activityCenter); + this.initSubjectAndCenter(activityBo,subjectMap,centerDtoMap,activitySubjects,activityCenterList,costApply,activity); + //产品成本配占比 + Map checkAmountMap = new HashMap<>(); + List activityCenterGoodsList = new ArrayList<>(); + this.initCenterGoods(activityBo,subjectMap,centerDtoMap,checkAmountMap,activityGoodsList,activityCenterGoodsList,costApply,activity); + //校验金额和比率 + Map> actCenterGoodsMap = activityCenterGoodsList.stream().collect(Collectors.groupingBy(TbsActivityCenterGoods::getSubjectId)); + for (Long subjectId : actCenterGoodsMap.keySet()) { + List actCenterGoodsList = actCenterGoodsMap.get(subjectId); + BigDecimal rate = BigDecimal.ZERO; + for (TbsActivityCenterGoods centerGoods : actCenterGoodsList) { + rate = rate.add(centerGoods.getCenterGoodsRate()); } - //判断是否允许超预算 - if(activitySubject.getAmount().compareTo(totalAmount)!=0){ - Assert.throwEx("成本中心费用入参有误"); + if(rate.compareTo(new BigDecimal(100))!=0){ + Assert.throwEx("成本与商品分配比例有误"); } - if(totalRate.compareTo(oneHundred)!=0){ - Assert.throwEx("成本中心费用配比有误"); + } + for (TbsActivityCenter activityCenter : activityCenterList) { + String key = activityCenter.getSubjectId()+":"+activityCenter.getCenterType()+":"+activityCenter.getCenterId(); + BigDecimal amount = checkAmountMap.get(key); + if(amount==null||amount.compareTo(activityCenter.getCenterAmount())!=0){ + Assert.throwEx("成本与商品分配的金额有误"); } } - //产品成本配占比 - Map checkAmountMap = new HashMap<>(); - Map checkRateMap = new HashMap<>(); + //todo 客户详情 + + //保存 + activityGoodsService.saveBatch(activityGoodsList); + activitySubjectService.saveBatch(activitySubjects); + activityCenterService.saveBatch(activityCenterList); + activityCenterGoodsService.saveBatch(activityCenterGoodsList); + } + + /** + * 初始化产品成本配占比 + * @param activityBo + * @param subjectMap + * @param centerDtoMap + * @param checkAmountMap + * @param activityGoodsList + * @param activityCenterGoodsList + * @param costApply + * @param activity + */ + private void initCenterGoods(TbsActivityBo activityBo, + Map subjectMap, + Map centerDtoMap, + Map checkAmountMap, + List activityGoodsList, + List activityCenterGoodsList, + TbsCostApply costApply,TbsActivity activity){ for (TbsActivityCenterGoodsBo centerGoodsBo : activityBo.getActivityCenterGoodsList()) { BmsSubject subject = subjectMap.get(centerGoodsBo.getSubjectId()); TbsActivityCenterGoods centerGoods = new TbsActivityCenterGoods(); //设置成本中心 String key = centerGoodsBo.getCenterType()+":"+centerGoodsBo.getCenterId(); TbsCenterDto tbsCenterDto = centerDtoMap.get(key); + centerGoods.setActivityId(activity.getId()); + centerGoods.setCostApplyId(costApply.getId()); centerGoods.setCenterId(centerGoodsBo.getCenterId()); centerGoods.setCenterCode(tbsCenterDto.getCenterCode()); centerGoods.setCenterName(tbsCenterDto.getCenterName()); @@ -173,16 +184,9 @@ public class TbsActivityServiceImpl extends ServiceImpl subjectMap, + Map centerDtoMap, + List activitySubjects, + List activityCenterList, + TbsCostApply costApply,TbsActivity activity){ + for (TbsActivitySubjectBo subjectBo : activityBo.getActivitySubjectList()) { + BmsSubject subject = subjectService.getById(subjectBo.getSubjectId()); + subjectMap.put(subject.getId(),subject); + TbsActivitySubject activitySubject = new TbsActivitySubject(); + activitySubject.setCostApplyId(costApply.getId()); + activitySubject.setActivityId(activity.getId()); + activitySubject.setSubjectId(subject.getId()); + activitySubject.setSubjectCode(subject.getSubjectCode()); + activitySubject.setSubjectName(subject.getSubjectName()); + activitySubject.setAmount(subjectBo.getAmount()); + activitySubject.setCountSession(subjectBo.getCountSession()); + activitySubject.setCountPerson(subjectBo.getCountPerson()); + activitySubject.setRemark(subjectBo.getRemark()); + activitySubjects.add(activitySubject); + BigDecimal totalAmount = BigDecimal.ZERO; + BigDecimal totalRate = BigDecimal.ZERO; + for (TbsActivitySubjectBo.ActivityCenterBo centerBo : subjectBo.getCenterList()) { + totalAmount = totalAmount.add(centerBo.getCenterAmount()); + totalRate = totalRate.add(centerBo.getCenterRate()); + String centerType = centerBo.getCenterType(); + String centerId = centerBo.getCenterId(); + String key = centerType+":"+centerId; + TbsCenterDto tbsCenterDto = centerDtoMap.get(key); + if(tbsCenterDto==null){ + tbsCenterDto = getCenterDto(centerType,centerId); + centerDtoMap.put(key,tbsCenterDto); + } + TbsActivityCenter activityCenter = new TbsActivityCenter(); + activityCenter.setCostApplyId(costApply.getId()); + activityCenter.setActivityId(activity.getId()); + activityCenter.setSubjectId(subjectBo.getSubjectId()); + activityCenter.setCenterRate(centerBo.getCenterRate()); + activityCenter.setCenterAmount(centerBo.getCenterAmount()); + activityCenter.setCenterType(centerBo.getCenterType()); + activityCenter.setCenterId(centerBo.getCenterId()); + activityCenter.setCenterName(tbsCenterDto.getCenterName()); + activityCenter.setCenterCode(tbsCenterDto.getCenterCode()); + activityCenterList.add(activityCenter); } - } - for (TbsActivityCenter activityCenter : activityCenterList) { - String key = activityCenter.getSubjectId()+":"+activityCenter.getCenterType()+":"+activityCenter.getCenterId(); - BigDecimal amount = checkAmountMap.get(key); - if(amount==null||amount.compareTo(activityCenter.getCenterAmount())!=0){ - Assert.throwEx("成本与商品分配的金额有误"); + //判断是否允许超预算 + if(activitySubject.getAmount().compareTo(totalAmount)!=0){ + Assert.throwEx("成本中心费用入参有误"); + } + if(totalRate.compareTo(new BigDecimal(100))!=0){ + Assert.throwEx("成本中心费用配比有误"); } } - //todo 客户详情 - - //保存 - activityGoodsService.saveBatch(activityGoodsList); - activitySubjectService.saveBatch(activitySubjects); - activityCenterService.saveBatch(activityCenterList); } /** @@ -296,28 +347,21 @@ public class TbsActivityServiceImpl extends ServiceImpl