diff --git a/src/main/java/com/qs/serve/common/model/dto/TreeNode.java b/src/main/java/com/qs/serve/common/model/dto/TreeNode.java index 84174cb5..817b8b58 100644 --- a/src/main/java/com/qs/serve/common/model/dto/TreeNode.java +++ b/src/main/java/com/qs/serve/common/model/dto/TreeNode.java @@ -22,7 +22,7 @@ public class TreeNode { } public List getChildren() { - if(children.size()<=0){ + if(children==null||children.size()<=0){ return null; } return children; diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsCostCenterService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsCostCenterService.java index cf40fd61..8cacf47e 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsCostCenterService.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsCostCenterService.java @@ -19,6 +19,7 @@ public interface BmsCostCenterService extends IService { BmsCostCenter getByCode(String code); BmsCostCenter getByName(String name); + BmsCostCenter getByNameOrCode(String value); List listChild(Long pid); } diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java b/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java index 22343149..a6fa81d6 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java @@ -22,6 +22,8 @@ public interface BmsRegion2Service extends IService { BmsRegion2 getByCode(String code); BmsRegion2 getByName(String name,Integer level); + + BmsRegion2 getByNameOrCode(String value); // void flushLevel(BmsRegion2 param); void flushAllLevel(boolean batchUpdate); diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java index 8759a034..f58b5348 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java @@ -26,6 +26,8 @@ public interface BmsRegionService extends IService { BmsRegion getByName(String name,Integer level); + BmsRegion getByNameOrCode(String value); + void flushAllLevel(boolean batchUpdate); boolean saveBmsRegion(BmsRegion param); diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java index 13755fef..edd03d77 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.qs.serve.modules.bms.entity.BmsSubject; import java.util.List; +import java.util.Map; /** * 科目 服务接口 @@ -12,6 +13,14 @@ import java.util.List; */ public interface BmsSubjectService extends IService { + /** + * 加载编码 + * @param subjectCodes + * @param throwInvalidCode 含无效编码抛出异常 + * @return + */ + Map loadByNameOrCode(List subjectCodes,Boolean throwInvalidCode); + /** * id加载列表 * @param ids diff --git a/src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java index aaeddd74..c441eb12 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java +++ b/src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java @@ -22,6 +22,8 @@ public interface BmsSupplierService extends IService { BmsSupplier getByName(String String); + BmsSupplier getByNameOrCode(String value); + List listChild(String pid); List listChildByPathIds(String pathIds); diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCostCenterServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCostCenterServiceImpl.java index 608415f2..d248258b 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCostCenterServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsCostCenterServiceImpl.java @@ -40,6 +40,16 @@ public class BmsCostCenterServiceImpl extends ServiceImpl() + .eq(BmsCostCenter::getName,value) + .or() + .eq(BmsCostCenter::getCode,value) + ,true); + } + @Override public List listChild(Long pid) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java index d708c63e..ecbed3aa 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java @@ -180,6 +180,15 @@ public class BmsRegion2ServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); + lqw.eq(BmsRegion2::getName,value) + .or() + .eq(BmsRegion2::getCode,value); + return this.getOne(lqw,true); + } + public BmsRegion2 toSetLevel(BmsRegion2 param) { if(StringUtils.hasText(param.getPid()) && !param.getPid().equals("0")){ BmsRegion2 parent = this.getById(param.getPid()); diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java index 30136d5d..6862f2c9 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java @@ -197,6 +197,13 @@ public class BmsRegionServiceImpl extends ServiceImpl return this.getOne(lqw,true); } + @Override + public BmsRegion getByNameOrCode(String value) { + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(BmsRegion::getName,value).or().eq(BmsRegion::getCode,value); + return this.getOne(lqw,true); + } + public BmsRegion flushSetLevel(BmsRegion param) { if(StringUtils.hasText(param.getPid()) && !param.getPid().equals("0") ){ BmsRegion parent = this.getById(param.getPid()); diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java index fb982674..f5f18e0a 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java @@ -12,7 +12,9 @@ import com.qs.serve.modules.bms.entity.BmsSubject; import com.qs.serve.modules.bms.service.BmsSubjectService; import com.qs.serve.modules.bms.mapper.BmsSubjectMapper; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.stream.Collector; import java.util.stream.Collectors; @@ -26,6 +28,29 @@ import java.util.stream.Collectors; @AllArgsConstructor public class BmsSubjectServiceImpl extends ServiceImpl implements BmsSubjectService { + @Override + public Map loadByNameOrCode(List subjectCodes, Boolean throwInvalidCode) { + List subjectList = this.list( + new LambdaQueryWrapper() + .in(BmsSubject::getSubjectCode,subjectCodes) + .or() + .in(BmsSubject::getSubjectName,subjectCodes) + ); + if(throwInvalidCode && subjectCodes.size()>subjectList.size()){ + for (String subjectCode : subjectCodes) { + boolean exist = subjectList.stream().anyMatch(a->a.getSubjectCode().equals(subjectCode)); + if(!exist){ + Assert.throwEx("无效的科目编码:"+subjectCode); + } + } + } + Map subjectMap = new HashMap<>(); + for (BmsSubject subject : subjectList) { + subjectMap.put(subject.getSubjectCode(),subject); + } + return subjectMap; + } + @Override public List listByIds(List ids, List noInIds) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java index 4ca9dd56..b7f61035 100644 --- a/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java @@ -120,6 +120,13 @@ public class BmsSupplierServiceImpl extends ServiceImpl lqw = new LambdaQueryWrapper<>(); + lqw.eq(BmsSupplier::getName,value).or().eq(BmsSupplier::getCode,value); + return this.getOne(lqw,true); + } + @Override public List listChild(String pid) { LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); diff --git a/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsCategoryApi.java b/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsCategoryApi.java index dbc0dcb4..7d12af4d 100644 --- a/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsCategoryApi.java +++ b/src/main/java/com/qs/serve/modules/goods/controller/api/GoodsCategoryApi.java @@ -39,12 +39,12 @@ public class GoodsCategoryApi { /** * 树查询 - * @param param * @return */ @GetMapping("/tree") - public R> getTree(GoodsCategory param){ - LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(param); + public R> getTree(){ + LambdaQueryWrapper lqw = new LambdaQueryWrapper<>(); + lqw.eq(GoodsCategory::getEnable,1); List list = goodsCategoryService.list(lqw); List treeVoList = list.stream().map(cate->{ GoodsCategoryTreeVo treeNode = CopierUtil.copy(cate,new GoodsCategoryTreeVo()); @@ -59,14 +59,21 @@ public class GoodsCategoryApi { //第二级为空,补充第二,三级 if(CollUtil.isEmpty(treeVo.getChildren())){ GoodsCategoryTreeVo treeVoLv2 = CopierUtil.copy(treeVo,new GoodsCategoryTreeVo()); - treeVoLv2.getChildren().add(CopierUtil.copy(treeVo,new GoodsCategoryTreeVo())); - treeVo.getChildren().add(treeVoLv2); + List vo2List = new ArrayList<>(); + vo2List.add(CopierUtil.copy(treeVo,new GoodsCategoryTreeVo())); + treeVoLv2.setChildren(vo2List); + + List voList = new ArrayList<>(); + voList.add(CopierUtil.copy(treeVoLv2,new GoodsCategoryTreeVo())); + treeVo.setChildren(voList); }else { for (TreeNode object : treeVo.getChildren()) { //第三级为空,补充第三级 if(CollUtil.isEmpty(object.getChildren())){ GoodsCategoryTreeVo child2 = (GoodsCategoryTreeVo)object; - treeVo.getChildren().add(CopierUtil.copy(child2,new GoodsCategoryTreeVo())); + List voList = new ArrayList<>(); + voList.add(CopierUtil.copy(child2,new GoodsCategoryTreeVo())); + treeVo.setChildren(voList); } } } 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 6d0cb72a..7624ebd8 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 @@ -12,11 +12,14 @@ import com.qs.serve.common.util.*; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.tbs.common.TbsBudgetCheckState; +import com.qs.serve.modules.tbs.common.TbsGoodsType; import com.qs.serve.modules.tbs.common.util.TbsBudgetLogBuildUtil; import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.bo.*; +import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount; import com.qs.serve.modules.tbs.entity.vo.TbsBudgetVo; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; +import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudgetMapper; import com.qs.serve.modules.tbs.service.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -30,6 +33,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Map; import java.util.stream.Collectors; /** @@ -49,8 +53,12 @@ public class TbsBudgetController { private final TbsBudgetLogService tbsBudgetLogService; private final TbsScheduleItemBudgetService tbsScheduleItemBudgetService; private final TbsBudgetChangeService tbsBudgetChangeService; + private final TbsBudgetConditionService tbsBudgetConditionService; + private final TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper; + private final TbsScheduleItemService tbsScheduleItemService; private final SysUserService sysUserService; + /** * 列表 * @param param @@ -67,6 +75,52 @@ public class TbsBudgetController { return R.ok(); } + /** + * 导出 + * @param param + * @return + */ + @PostMapping("/list4Export") + @PreAuthorize("hasRole('tbs:budget:query')") + public R> list4Export(@RequestBody TbsBudgetSo param){ + List budgetIds = tbsBudgetMapper.selectBudgetId(param); + if(budgetIds.size()>0){ + List list = tbsBudgetService.listByIds(budgetIds); + for (TbsBudget budget : list) { + List conditionList = tbsBudgetConditionService + .list(new LambdaQueryWrapper() + .eq(TbsBudgetCondition::getBudgetId, budget.getId())); + List scheduleItemBudgetList = tbsScheduleItemBudgetService + .list(new LambdaQueryWrapper() + .eq(TbsScheduleItemBudget::getBudgetId, budget.getId())); + List scheduleItemBudgetIds = scheduleItemBudgetList.stream() + .map(TbsScheduleItemBudget::getId).collect(Collectors.toList()); + //实际发布预算 + List budgetLogWithAmountList = tbsScheduleItemBudgetMapper.getAllByScheduleItemIdList(scheduleItemBudgetIds); + for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { + for (TbsBudgetLogWithAmount withAmount : budgetLogWithAmountList) { + if (itemBudget.getId().equals(withAmount.getId())){ + itemBudget.setBudgetAmount(withAmount.getAmt()); + break; + } + } + } + budget.setBudgetConditionList(conditionList); + Map> map = conditionList.stream().collect(Collectors.groupingBy(TbsBudgetCondition::getTargetType)); + budget.setBrandConditions(map.get(TbsGoodsType.brand.name())); + budget.setCategoryConditions(map.get(TbsGoodsType.category.name())); + budget.setSeriesConditions(map.get(TbsGoodsType.series.name())); + budget.setSkuConditions(map.get(TbsGoodsType.sku.name())); + budget.setSpuConditions(map.get(TbsGoodsType.spu.name())); + List scheduleItems = tbsScheduleItemService.listByScheduleId(budget.getScheduleId()); + budget.setScheduleItem(scheduleItems); + budget.setScheduleItemBudgets(scheduleItemBudgetList); + } + return R.ok(list); + } + return R.ok(); + } + /** * 列表(通过IDS查询) * @apiNote 用于加载模板选中的预算 diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java index e0d7696f..f3f07b03 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudget.java @@ -155,10 +155,25 @@ public class TbsBudget implements Serializable { @TableField(typeHandler = SplitStringTypeHandler.class,jdbcType= JdbcType.VARCHAR) private String[] attachIds; - /** 后端传输dto */ + /** 预算条件 */ @TableField(exist = false) private List budgetConditionList; + @TableField(exist = false) + private List brandConditions; + @TableField(exist = false) + private List categoryConditions; + @TableField(exist = false) + private List seriesConditions; + @TableField(exist = false) + private List skuConditions; + @TableField(exist = false) + private List spuConditions; + @TableField(exist = false) + private List scheduleItem; + @TableField(exist = false) + private List scheduleItemBudgets; + @TableField(exist = false) private List attachList; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetBatch.java b/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetBatch.java index 46895427..22713aa8 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetBatch.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/TbsBudgetBatch.java @@ -45,6 +45,10 @@ public class TbsBudgetBatch implements Serializable { @NotNull(message = "状态不能为空") private Integer batchState; + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8") + private LocalDateTime finishedTime; + /** 预算类型 0->修改;1->新增 */ private Integer batchType; diff --git a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBatchBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBatchBo.java index 7f614571..a1743710 100644 --- a/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBatchBo.java +++ b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBatchBo.java @@ -3,6 +3,7 @@ package com.qs.serve.modules.tbs.entity.bo; import lombok.Data; import javax.validation.constraints.NotNull; +import java.math.BigDecimal; import java.util.List; /** * @author YenHex @@ -19,15 +20,23 @@ public class TbsBudgetBatchBo { @Data public static class BudgetMain{ - /** 更新时必填 */ - private String budgetCode; + /** 预算编码,更新时必填 */ + private String budgetNumber; + + /** 预算名称 */ + private String budgetName; private String scheduleName; /** 科目编码 */ - private String subjectCode; - - /** 成本中心类型 */ + private String subjectName; + + /** 成本中心类型: + * center, + * customer, + * bizRegion, + * saleRegion, + **/ @NotNull private String centerType; @@ -54,7 +63,11 @@ public class TbsBudgetBatchBo { @Data public static class BudgetAmount{ + private String scheduleItemName; + + private BigDecimal budgetAmount; + private BigDecimal preDispatchAmount; } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java b/src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java index 9e68b296..1daa94f2 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java @@ -52,6 +52,65 @@ public class TbsCenterDtoService { return null; } + + public TbsCenterDto getCenterDtoByName(String centerType,String centerNameOrCode,Boolean throwNull){ + if(!StringUtils.hasText(centerNameOrCode)){ + return null; + } + if(centerType.equals(TbsCenterType.center.name())){ + BmsCostCenter costCenter = costCenterService.getByNameOrCode(centerNameOrCode); + if(costCenter==null){ + if(throwNull) { + Assert.throwEx("无效的成本中心信息:"+centerNameOrCode); + } + return null; + } + return new TbsCenterDto(costCenter.getId()+"" ,costCenter.getCode(),costCenter.getName(),centerType); + }else if (centerType.equals(TbsCenterType.customer.name())){ + BmsSupplier supplier4Center = null; + if(StringUtils.hasText(centerNameOrCode)){ + String belong = null; + if(centerNameOrCode.contains("JSB")){ + centerNameOrCode = centerNameOrCode.replace("JSB",""); + belong = "JSB"; + }else if(centerNameOrCode.contains("JSL")){ + centerNameOrCode = centerNameOrCode.replace("JSL",""); + belong = "JSL"; + } + supplier4Center = supplierService.getByNameOrCode(centerNameOrCode); + }else { + supplier4Center = supplierService.getByNameOrCode(centerNameOrCode); + } + if(supplier4Center==null){ + if(throwNull) { + Assert.throwEx("无效的成本中心信息:"+centerNameOrCode); + } + return null; + } + return new TbsCenterDto(supplier4Center.getId(),supplier4Center.getCode(),supplier4Center.getName(),centerType); + }else if(centerType.equals(TbsCenterType.saleRegion.name())){ + BmsRegion saleRegion = saleRegionService.getByNameOrCode(centerNameOrCode); + if(saleRegion==null){ + if(throwNull) { + Assert.throwEx("无效的成本中心信息:"+centerNameOrCode); + } + return null; + } + return new TbsCenterDto(saleRegion.getId(),saleRegion.getCode(),saleRegion.getName(),centerType); + }else if (centerType.equals(TbsCenterType.bizRegion.name())){ + BmsRegion2 bizRegion = bizRegionService.getByNameOrCode(centerNameOrCode); + if(bizRegion==null){ + if(throwNull) { + Assert.throwEx("无效的成本中心信息:"+centerNameOrCode); + } + return null; + } + return new TbsCenterDto(bizRegion.getId(),bizRegion.getCode(),bizRegion.getName(),centerType); + } + Assert.throwEx("无法匹配成本中心类型:"+centerType); + return null; + } + /** * 获取成本中心 * @param centerType diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchOperationServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchOperationServiceImpl.java index 0db3b367..7114bf22 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchOperationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchOperationServiceImpl.java @@ -1,17 +1,25 @@ package com.qs.serve.modules.tbs.service.impl; +import com.qs.serve.common.config.properties.ProjectProperties; import com.qs.serve.common.util.Assert; +import com.qs.serve.modules.bms.service.BmsSubjectService; +import com.qs.serve.modules.goods.service.GoodsCategoryService; import com.qs.serve.modules.seeyon.service.SeeYonOperationService; +import com.qs.serve.modules.seeyon.service.SeeYonRequestService; +import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.tbs.common.TbsBudgetCheckState; import com.qs.serve.modules.tbs.common.TbsSeeYonConst; +import com.qs.serve.modules.tbs.entity.TbsBudget; import com.qs.serve.modules.tbs.entity.TbsBudgetBatch; import com.qs.serve.modules.tbs.entity.TbsBudgetBatchItem; import com.qs.serve.modules.tbs.entity.bo.TbsAffairCommitBo; -import com.qs.serve.modules.tbs.service.TbsBudgetBatchItemService; -import com.qs.serve.modules.tbs.service.TbsBudgetBatchService; +import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudgetMapper; +import com.qs.serve.modules.tbs.service.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; + +import java.time.LocalDateTime; import java.util.List; /** @@ -26,6 +34,22 @@ public class TbsBudgetBatchOperationServiceImpl implements SeeYonOperationServic private final TbsBudgetBatchService budgetBatchService; private final TbsBudgetBatchItemService budgetBatchItemService; + private final SysUserService sysUserService; + private final SeeYonRequestService seeYonService; + private final ProjectProperties projectProperties; + private final TbsBudgetService tbsBudgetService; + private final TbsBudgetConditionService tbsBudgetConditionService; + private final BmsSubjectService bmsSubjectService; + private final TbsCenterDtoService tbsCenterDtoService; + private final TbsScheduleService tbsScheduleService; + private final TbsScheduleItemService tbsScheduleItemService; + private final TbsScheduleItemBudgetService tbsScheduleItemBudgetService; + private final GoodsCategoryService goodsCategoryService; + private final TbsBudgetChangeService tbsBudgetChangeService; + private final TbsBudgetChangeConditionService tbsBudgetChangeConditionService; + private final TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper; + private final TbsBudgetChangeScheduleItemService tbsBudgetChangeScheduleItemService; + private final TbsBudgetChangeOperationServiceImpl changeOperationService; @Override public String getTemplateCode() { @@ -43,24 +67,54 @@ public class TbsBudgetBatchOperationServiceImpl implements SeeYonOperationServic @Override public Object doBacked(TbsAffairCommitBo param) { - //业务待定 - return null; + //业务待定,暂当拒绝 + return doRefuse(param); } @Override public Object doFinished(TbsAffairCommitBo param) { TbsBudgetBatch budgetBatch = budgetBatchService.getById(param.getTargetId()); List budgetBatchItemList = budgetBatchItemService.listByBatchId(budgetBatch.getId()); - + for (TbsBudgetBatchItem batchItem : budgetBatchItemList) { + if(batchItem.getChangeId()==null){ + //预算申请 + tbsBudgetService.startBudget(batchItem.getBudgetId()); + }else { + //预算修改 + changeOperationService.dofinishedAction(batchItem.getChangeId().toString()); + } + batchItem.setBatchState(TbsBudgetCheckState.State_2_finished); + budgetBatchItemService.updateById(batchItem); + } + budgetBatch.setBatchState(TbsBudgetCheckState.State_2_finished); + budgetBatch.setFinishedTime(LocalDateTime.now()); + budgetBatchService.updateById(budgetBatch); return null; } @Override public Object doRefuse(TbsAffairCommitBo param) { TbsBudgetBatch budgetBatch = budgetBatchService.getById(param.getTargetId()); + List budgetBatchItemList = budgetBatchItemService.listByBatchId(budgetBatch.getId()); + for (TbsBudgetBatchItem batchItem : budgetBatchItemList) { + if(batchItem.getChangeId()==null){ + //预算申请 + TbsBudget budget = new TbsBudget(); + budget.setId(batchItem.getBudgetId()); + budget.setBudgetCheckState(TbsBudgetCheckState.State_0_unPublish); + tbsBudgetService.updateById(budget); + }else { + //预算修改 + TbsAffairCommitBo commitBo = new TbsAffairCommitBo(); + commitBo.setTargetId(batchItem.getChangeId()+""); + changeOperationService.doBacked(commitBo); + } + batchItem.setBatchState(TbsBudgetCheckState.State_4_stop); + budgetBatchItemService.updateById(batchItem); + } budgetBatch.setBatchState(TbsBudgetCheckState.State_4_stop); - //退回草稿 - + budgetBatch.setFinishedTime(LocalDateTime.now()); + budgetBatchService.updateById(budgetBatch); return null; } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java index 905d4fc3..773b52cb 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java @@ -1,5 +1,7 @@ package com.qs.serve.modules.tbs.service.impl; +import cn.hutool.core.collection.CollUtil; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qs.serve.common.config.properties.ProjectProperties; import com.qs.serve.common.framework.manager.AsyncFactory; @@ -7,27 +9,37 @@ import com.qs.serve.common.framework.manager.AsyncManager; import com.qs.serve.common.model.dto.R; import com.qs.serve.common.util.*; import com.qs.serve.common.util.model.DateFormatString; +import com.qs.serve.modules.bms.entity.BmsSubject; +import com.qs.serve.modules.bms.service.BmsSubjectService; +import com.qs.serve.modules.goods.common.GoodsType; +import com.qs.serve.modules.goods.entity.GoodsCategory; +import com.qs.serve.modules.goods.entity.GoodsSpu; +import com.qs.serve.modules.goods.entity.dto.TbsCenterDto; +import com.qs.serve.modules.goods.service.GoodsCategoryService; import com.qs.serve.modules.seeyon.entity.BaseCreateCallbackBo; import com.qs.serve.modules.seeyon.entity.BaseCreateProcessBo; import com.qs.serve.modules.seeyon.service.SeeYonRequestService; import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.tbs.common.TbsBudgetCheckState; +import com.qs.serve.modules.tbs.common.TbsGoodsType; import com.qs.serve.modules.tbs.common.TbsSeeYonConst; -import com.qs.serve.modules.tbs.entity.TbsBudgetBatchItem; +import com.qs.serve.modules.tbs.entity.*; import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBatchBo; +import com.qs.serve.modules.tbs.entity.dto.TbsBudgetLogWithAmount; +import com.qs.serve.modules.tbs.mapper.TbsScheduleItemBudgetMapper; +import com.qs.serve.modules.tbs.service.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; -import com.qs.serve.modules.tbs.entity.TbsBudgetBatch; -import com.qs.serve.modules.tbs.service.TbsBudgetBatchService; import com.qs.serve.modules.tbs.mapper.TbsBudgetBatchMapper; +import org.springframework.transaction.annotation.Transactional; +import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * 批量申请 服务实现类 @@ -42,32 +54,31 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl batchItems = new ArrayList<>(); Map data = new HashMap<>(); data.put("exsp5", batchCode); @@ -112,5 +123,414 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl paramBudgetList = param.getBudgetList(); + TbsBudgetBatch budgetBatch = new TbsBudgetBatch(); + budgetBatch.setBatchTitle(sysUser.getName()+"发起了批量导入预算"); + budgetBatch.setBatchCode(batchCode); + budgetBatch.setBatchState(TbsBudgetCheckState.State_0_unPublish); + //budgetBatch.setSyFormId(); + budgetBatch.setUserId(sysUser.getId()); + budgetBatch.setUserCode(sysUser.getCode()); + budgetBatch.setUserName(sysUser.getName()); + budgetBatch.setSubmitTime(LocalDateTime.now()); + budgetBatch.setRemark(param.getRemark()); + //构建BatchItems + List batchItems = new ArrayList<>(); + //加载 周期信息 + List scheduleNames = paramBudgetList.stream() + .map(TbsBudgetBatchBo.BudgetMain::getScheduleName).distinct().collect(Collectors.toList()); + Map scheduleMap = loadScheduleMap(scheduleNames); + //加载 科目 + Map subjectMap = loadSubjectMapWithFilterInvalid(param); + //加载 成本中心 + Map centerDtoMap = new HashMap<>(); + for (TbsBudgetBatchBo.BudgetMain budgetMain : paramBudgetList) { + TbsCenterDto centerDto = tbsCenterDtoService.getCenterDtoByName(budgetMain.getCenterType(),budgetMain.getCenterName(),true); + //key=> budgetMain.getCenterType()+"_&_"+budgetMain.getCenterName() + centerDtoMap.put(budgetMain.getCenterType()+"_&_"+budgetMain.getCenterName(),centerDto); + } + //加载 品类 + Map categoryMap = loadGoodsCategoryMap(paramBudgetList); + + //修改的生成为更变记录 + List updBudgetList = paramBudgetList.stream() + .filter(a->StringUtils.hasText(a.getBudgetNumber())).collect(Collectors.toList()); + if(updBudgetList.size()>0){ + List budgetNumbers = updBudgetList.stream() + .map(TbsBudgetBatchBo.BudgetMain::getBudgetNumber).collect(Collectors.toList()); + List budgetList = tbsBudgetService.list( + new LambdaQueryWrapper().in( + TbsBudget::getBudgetNumber,budgetNumbers + ) + ); + for (TbsBudget budget : budgetList) { + if(budget.getBudgetCheckState()==TbsBudgetCheckState.State_1_apply){ + Assert.throwEx("预算["+budget.getBudgetCode()+"]审批中,无法导入修改"); + } + } + for (TbsBudget budget : budgetList) { + TbsBudgetBatchBo.BudgetMain paramItem = null; + for (TbsBudgetBatchBo.BudgetMain budgetMain : updBudgetList) { + if(budgetMain.getBudgetNumber().equals(budget.getBudgetNumber())){ + paramItem = budgetMain; + break; + } + } + final Long budgetId = budget.getId(); + if(budget.getBudgetState().equals(1)){ + //适配更变记录 + TbsBudgetChange budgetChange = TbsBudgetChange.toNewObject(budget); + budgetChange.setChangeCode("BU"+CodeGenUtil.generate(CodeGenUtil.SourceKey.BudgetChange)); + budgetChange.setUserId(sysUser.getId()); + budgetChange.setUserCode(sysUser.getCode()); + budgetChange.setUserName(sysUser.getName()); + budgetChange.setBudgetCheckState(TbsBudgetCheckState.State_1_apply); + boolean notChangeTitle = paramItem.getBudgetName()!=null&& paramItem.getBudgetName().equals(budget.getBudgetCode()); + if(!notChangeTitle){ + budgetChange.setNewBudgetTitle(paramItem.getBudgetName()); + } + tbsBudgetChangeService.save(budgetChange); + Long changeId = budgetChange.getId(); + //添加品类条件 + this.toSaveChangeCondition(categoryMap, budget, paramItem, budgetId, changeId); + List changeScheduleItemList = new ArrayList<>(); + this.buildChangeSchduleBudgetList(paramItem, budgetId, changeId, changeScheduleItemList); + if(CollUtil.isNotEmpty(changeScheduleItemList)){ + tbsBudgetChangeScheduleItemService.saveBatch(changeScheduleItemList); + } + TbsBudgetBatchItem batchItem = new TbsBudgetBatchItem(); + batchItem.setBudgetId(budgetId); + batchItem.setChangeId(changeId); + batchItem.setBatchState(TbsBudgetCheckState.State_1_apply); + batchItem.setUserId(sysUser.getId()); + batchItem.setUserCode(sysUser.getCode()); + batchItem.setUserName(sysUser.getName()); + batchItems.add(batchItem); + + }else { + //修改后为新增类型提交 + this.toUpdateBudgetInfo(sysUser, scheduleMap, subjectMap, centerDtoMap, categoryMap, paramItem, budgetId); + TbsBudgetBatchItem batchItem = new TbsBudgetBatchItem(); + batchItem.setBudgetId(budgetId); + batchItem.setBatchState(TbsBudgetCheckState.State_1_apply); + batchItem.setUserId(sysUser.getId()); + batchItem.setUserCode(sysUser.getCode()); + batchItem.setUserName(sysUser.getName()); + batchItems.add(batchItem); + } + } + } + //新增的生成为草稿 + List addBudgetList = paramBudgetList.stream() + .filter(a->!StringUtils.hasText(a.getBudgetNumber())).collect(Collectors.toList()); + for (TbsBudgetBatchBo.BudgetMain budgetMain : addBudgetList) { + TbsBudget newBudget = new TbsBudget(); + tbsBudgetService.save(newBudget); + Long budgetId = newBudget.getId(); + TbsSchedule schedule = scheduleMap.get(budgetMain.getScheduleName()); + this.initBudget4Update(sysUser,schedule, subjectMap, centerDtoMap, budgetMain, newBudget); + //创建新条件 + List conditionList = this.createTbsBudgetConditions(categoryMap, budgetMain, budgetId); + //创建新预算周期 + List scheduleItemBudgetList = this.createTbsScheduleItemBudgetList(budgetMain, budgetId, schedule); + //数据持久化 + if(CollectionUtil.isNotEmpty(conditionList)){ + tbsBudgetConditionService.saveBatch(conditionList); + } + tbsScheduleItemBudgetService.saveBatch(scheduleItemBudgetList); + + TbsBudgetBatchItem batchItem = new TbsBudgetBatchItem(); + batchItem.setBudgetId(budgetId); + batchItem.setBatchState(TbsBudgetCheckState.State_1_apply); + batchItem.setUserId(sysUser.getId()); + batchItem.setUserCode(sysUser.getCode()); + batchItem.setUserName(sysUser.getName()); + batchItems.add(batchItem); + } + this.save(budgetBatch); + //保存后赋值 + Long batchId = budgetBatch.getId(); + batchItems.forEach(batchItem->batchItem.setBatchId(batchId)); + tbsBudgetBatchItemService.saveBatch(batchItems); + return budgetBatch; + } + + private void toUpdateBudgetInfo(SysUser sysUser, Map scheduleMap, Map subjectMap, Map centerDtoMap, Map categoryMap, TbsBudgetBatchBo.BudgetMain paramItem, Long budgetId) { + tbsBudgetService.removeById(budgetId); + tbsBudgetConditionService.remove( + new LambdaQueryWrapper() + .eq(TbsBudgetCondition::getBudgetId, budgetId) + ); + tbsScheduleItemBudgetService.remove( + new LambdaQueryWrapper() + .eq(TbsScheduleItemBudget::getBudgetId, budgetId) + ); + //设置新的值 + TbsBudget newBudget = new TbsBudget(); + newBudget.setId(budgetId); + TbsSchedule schedule = scheduleMap.get(paramItem.getScheduleName()); + this.initBudget4Update(sysUser,schedule, subjectMap, centerDtoMap, paramItem, newBudget); + //创建新条件 + List conditionList = this.createTbsBudgetConditions(categoryMap, paramItem, budgetId); + //创建新预算周期 + List scheduleItemBudgetList = this.createTbsScheduleItemBudgetList(paramItem, budgetId, schedule); + //数据持久化 + tbsBudgetService.updateById(newBudget); + if(CollectionUtil.isNotEmpty(conditionList)){ + tbsBudgetConditionService.saveBatch(conditionList); + } + tbsScheduleItemBudgetService.saveBatch(scheduleItemBudgetList); + } + + private void toSaveChangeCondition(Map categoryMap, TbsBudget budget, TbsBudgetBatchBo.BudgetMain paramItem, Long budgetId, Long changeId) { + if(budget.getConditionFlag().equals(1)){ + List existingConditionList = tbsBudgetConditionService + .list(new LambdaQueryWrapper() + .eq(TbsBudgetCondition::getBudgetId, budgetId)); + String bandNames = paramItem.getBandNames(); + String categoryNames = paramItem.getCategoryNames(); + String seriesNames = paramItem.getSeriesNames(); + //设置changeConditionList参数 + List changeConditionList = new ArrayList<>(); + this.buildChangeConditionList(categoryMap, budgetId, changeId, changeConditionList, existingConditionList, + bandNames, TbsGoodsType.brand.name()); + this.buildChangeConditionList(categoryMap, budgetId, changeId, changeConditionList, existingConditionList, + categoryNames, TbsGoodsType.category.name()); + this.buildChangeConditionList(categoryMap, budgetId, changeId, changeConditionList, existingConditionList, + seriesNames, TbsGoodsType.series.name()); + if(CollUtil.isNotEmpty(changeConditionList)){ + tbsBudgetChangeConditionService.saveBatch(changeConditionList); + } + } + } + + private void buildChangeSchduleBudgetList(TbsBudgetBatchBo.BudgetMain paramItem, Long budgetId, Long changeId, List changeScheduleItemList) { + //预算参数 + List scheduleAmountList = paramItem.getScheduleAmount(); + //预算项 + List scheduleItemBudgetList = tbsScheduleItemBudgetService + .list(new LambdaQueryWrapper() + .eq(TbsScheduleItemBudget::getBudgetId, budgetId)); + List scheduleItemBudgetIds = scheduleItemBudgetList.stream() + .map(TbsScheduleItemBudget::getId).collect(Collectors.toList()); + //实际发布预算 + List budgetLogWithAmountList = tbsScheduleItemBudgetMapper.getAllByScheduleItemIdList(scheduleItemBudgetIds); + + for (TbsScheduleItemBudget itemBudget : scheduleItemBudgetList) { + BigDecimal realAmt = BigDecimal.ZERO; + for (TbsBudgetLogWithAmount withAmount : budgetLogWithAmountList) { + if(withAmount.getId().equals(itemBudget.getId())){ + realAmt = withAmount.getAmt(); + break; + } + } + for (TbsBudgetBatchBo.BudgetAmount budgetAmount : scheduleAmountList) { + if(budgetAmount.getScheduleItemName().equals(itemBudget.getItemName())){ + boolean ne1 = ! itemBudget.getPreDispatchAmount().equals(budgetAmount.getPreDispatchAmount()); + boolean ne2 = ! realAmt.equals(budgetAmount.getBudgetAmount()); + if(ne1 || ne2){ + TbsBudgetChangeScheduleItem resultItem = TbsBudgetChangeScheduleItem.toNewObject(itemBudget); + resultItem.setChangeId(changeId); + resultItem.setNewBudgetAmount(realAmt); + resultItem.setNewPreDispatchAmount(budgetAmount.getPreDispatchAmount()); + changeScheduleItemList.add(resultItem); + } + } + } + } + } + + private void buildChangeConditionList(Map categoryMap, Long budgetId, Long changeId, List changeConditionList, List existingConditionList, String values, String targetType) { + if(StringUtils.hasText(values)){ + String[] valueArr = values.replace(",",",").split(","); + for (String val : valueArr) { + boolean exist = existingConditionList.stream().anyMatch( + a->a.getTargetName().equals(val)||a.getTargetCode().equals(val) + ); + if(!exist){ + GoodsCategory goodsCategory = categoryMap.get(val); + if(goodsCategory!=null){ + TbsBudgetChangeCondition budgetChangeCondition = new TbsBudgetChangeCondition(); + budgetChangeCondition.setChangeId(changeId); + budgetChangeCondition.setBudgetId(budgetId); + budgetChangeCondition.setTargetType(targetType); + budgetChangeCondition.setTargetId(goodsCategory.getId()); + budgetChangeCondition.setTargetCode(goodsCategory.getCode()); + budgetChangeCondition.setTargetName(goodsCategory.getName()); + budgetChangeCondition.setTargetLevelPathIds(goodsCategory.getLevelPath()); + budgetChangeCondition.setTargetLevelPathNames(goodsCategory.getLevelPathNames()); + changeConditionList.add(budgetChangeCondition); + } + } + } + } + } + + @NotNull + private List createTbsBudgetConditions(Map categoryMap, TbsBudgetBatchBo.BudgetMain paramItem, Long budgetId) { + List conditionList = new ArrayList<>(); + if(StringUtils.hasText(paramItem.getBandNames())){ + String[] values = paramItem.getBandNames().split(","); + for (String value : values) { + GoodsCategory category = categoryMap.get(value); + TbsBudgetCondition budgetCondition = new TbsBudgetCondition(); + budgetCondition.setBudgetId(budgetId); + budgetCondition.setTargetType(GoodsType.Brand.name()); + budgetCondition.setTargetId(category.getId()); + budgetCondition.setTargetCode(category.getCode()); + budgetCondition.setTargetName(category.getName()); + budgetCondition.setTargetLevelPathIds(category.getLevelPath()); + budgetCondition.setTargetLevelPathNames(category.getLevelPathNames()); + conditionList.add(budgetCondition); + } + } + return conditionList; + } + + @NotNull + private List createTbsScheduleItemBudgetList(TbsBudgetBatchBo.BudgetMain paramItem, Long budgetId, TbsSchedule schedule) { + List scheduleItemBudgetList = new ArrayList<>(); + for (TbsScheduleItem scheduleItem : schedule.getScheduleItemlist()) { + for (TbsBudgetBatchBo.BudgetAmount amountItem : paramItem.getScheduleAmount()) { + if(scheduleItem.getItemName().equals(amountItem.getScheduleItemName())){ + TbsScheduleItemBudget scheduleItemBudget = new TbsScheduleItemBudget(); + scheduleItemBudget.setScheduleId(schedule.getId()); + scheduleItemBudget.setScheduleItemId(scheduleItem.getId()); + scheduleItemBudget.setItemName(scheduleItem.getItemName()); + scheduleItemBudget.setStartDate(scheduleItem.getStartDate()); + scheduleItemBudget.setEndDate(scheduleItem.getEndDate()); + scheduleItemBudget.setBudgetId(budgetId); + scheduleItemBudget.setBudgetAmount(amountItem.getBudgetAmount()); + scheduleItemBudget.setPreDispatchAmount(amountItem.getPreDispatchAmount()); + scheduleItemBudget.setPreDispatchAmountFirst(amountItem.getPreDispatchAmount()); + scheduleItemBudgetList.add(scheduleItemBudget); + break; + } + } + } + return scheduleItemBudgetList; + } + + private void initBudget4Update(SysUser sysUser, TbsSchedule schedule, Map subjectMap, Map centerDtoMap, TbsBudgetBatchBo.BudgetMain paramItem, TbsBudget newBudget) { + if(StringUtils.hasText(paramItem.getBudgetName())){ + newBudget.setBudgetCode(paramItem.getBudgetName()); + } + newBudget.setBudgetNumber(paramItem.getBudgetNumber()); + newBudget.setBudgetState(0); + newBudget.setBudgetCheckState(TbsBudgetCheckState.State_1_apply); + if(StringUtils.hasText(paramItem.getSubjectName())){ + BmsSubject bmsSubject = subjectMap.get(paramItem.getSubjectName()); + if(bmsSubject==null){ + + } + newBudget.setSubjectId(bmsSubject.getId()); + newBudget.setSubjectCode(bmsSubject.getSubjectCode()); + newBudget.setSubjectName(bmsSubject.getSubjectName()); + } + String centerKey = paramItem.getCenterType()+"_&_"+ paramItem.getCenterName(); + TbsCenterDto centerDto = centerDtoMap.get(centerKey); + newBudget.setCenterId(centerDto.getId()); + newBudget.setCenterType(centerDto.getCenterType()); + newBudget.setCenterCode(centerDto.getCenterCode()); + newBudget.setCenterName(centerDto.getCenterName()); + newBudget.setScheduleId(schedule.getId()); + newBudget.setScheduleCode(schedule.getCode()); + newBudget.setScheduleName(schedule.getName()); + boolean conditionFlag = StringUtils.hasText(paramItem.getCategoryNames()) + ||StringUtils.hasText(paramItem.getSeriesNames()) + ||StringUtils.hasText(paramItem.getBandNames()); + newBudget.setConditionFlag(conditionFlag?0:1); + newBudget.setUserId(sysUser.getId()); + newBudget.setUserCode(sysUser.getCode()); + newBudget.setUserName(sysUser.getName()); + newBudget.setSubmitTime(LocalDateTime.now()); + } + + /** + * 加载类目 + * @param paramBudgetList + * @return + */ + private Map loadGoodsCategoryMap(List paramBudgetList) { + Set goodsCategoryNames = new HashSet<>(); + for (TbsBudgetBatchBo.BudgetMain budgetMain : paramBudgetList) { + String bandNames = budgetMain.getBandNames(); + String categoryNames = budgetMain.getCategoryNames(); + String seriesNames = budgetMain.getSeriesNames(); + initCategorySet(goodsCategoryNames, bandNames); + initCategorySet(goodsCategoryNames, categoryNames); + initCategorySet(goodsCategoryNames, seriesNames); + } + List goodsCategories = goodsCategoryService.list( + new LambdaQueryWrapper() + .in(GoodsCategory::getName,goodsCategoryNames) + .or() + .in(GoodsCategory::getCode,goodsCategoryNames) + ); + if(goodsCategories.size()!= goodsCategoryNames.size()){ + for (String categoryName : goodsCategoryNames) { + boolean exist = goodsCategories.stream().anyMatch(a->a.getName().equals(categoryName)); + if(!exist){ + Assert.throwEx("无效的品类:"+categoryName); + } + } + } + Map categoryMap = new HashMap<>(goodsCategories.size()); + for (GoodsCategory category : goodsCategories) { + categoryMap.put(category.getName(),category); + } + return categoryMap; + } + + /** + * 初始化set + * @param goodsCategories + * @param categoryString + */ + private void initCategorySet(Set goodsCategories, String categoryString) { + if(StringUtils.hasText(categoryString)){ + String[] values = categoryString + .replace(",",",") + .split(","); + goodsCategories.addAll(Arrays.asList(values)); + } + } + + private Map loadScheduleMap(List scheduleNames) { + List schedules = tbsScheduleService.list( + new LambdaQueryWrapper().in(TbsSchedule::getName, scheduleNames) + ); + if(scheduleNames.size()!=schedules.size()){ + for (String scheduleName : scheduleNames) { + boolean exist = schedules.stream().anyMatch(a->a.getName().equals(scheduleName)); + if(!exist){ + Assert.throwEx("预算周期不存在:["+scheduleName+"]"); + } + } + } + Map scheduleMap = new HashMap<>(scheduleNames.size()); + for (TbsSchedule schedule : schedules) { + List scheduleItems = tbsScheduleItemService.listByScheduleId(schedule.getId()); + schedule.setScheduleItemlist(scheduleItems); + scheduleMap.put(schedule.getName(),schedule); + } + return scheduleMap; + } + + /** + * 加载param的所有科目(过滤无效的) + * @param param + * @return + */ + private Map loadSubjectMapWithFilterInvalid(TbsBudgetBatchBo param){ + List subjectCodes = param.getBudgetList().stream().filter(a->a.getSubjectName()!=null) + .map(TbsBudgetBatchBo.BudgetMain::getSubjectName) + .collect(Collectors.toList()); + return bmsSubjectService.loadByNameOrCode(subjectCodes,true); + } + } diff --git a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeOperationServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeOperationServiceImpl.java index ace0ca98..f7083721 100644 --- a/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeOperationServiceImpl.java +++ b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetChangeOperationServiceImpl.java @@ -79,13 +79,22 @@ public class TbsBudgetChangeOperationServiceImpl implements SeeYonOperationServi @Override public Object doFinished(TbsAffairCommitBo param) { - TbsBudgetChange budgetChange = budgetChangeMapper.selectById(param.getTargetId()); + dofinishedAction(param.getTargetId()); + return null; + } + + /** + * 执行完成回调 + * @param changeId + */ + public void dofinishedAction(String changeId) { + TbsBudgetChange budgetChange = budgetChangeMapper.selectById(changeId); if(budgetChange.getBudgetCheckState().equals(TbsBudgetCheckState.State_1_apply)){ budgetChange.setBudgetCheckState(TbsBudgetCheckState.State_2_finished); budgetChangeMapper.updateById(budgetChange); } TbsBudget tbsBudget = budgetMapper.selectById(budgetChange.getBudgetId()); - if(budgetChange.getNewAttachIds()!=null&&budgetChange.getNewAttachIds().length>0){ + if(budgetChange.getNewAttachIds()!=null&& budgetChange.getNewAttachIds().length>0){ tbsBudget.setAttachIds(budgetChange.getNewAttachIds()); budgetMapper.updateById(tbsBudget); } @@ -119,7 +128,6 @@ public class TbsBudgetChangeOperationServiceImpl implements SeeYonOperationServi } } } - return null; } /** diff --git a/src/main/resources/mapper/tbs/TbsBudgetMapper.xml b/src/main/resources/mapper/tbs/TbsBudgetMapper.xml index dc9545e4..84137fc6 100644 --- a/src/main/resources/mapper/tbs/TbsBudgetMapper.xml +++ b/src/main/resources/mapper/tbs/TbsBudgetMapper.xml @@ -73,6 +73,12 @@ FROM `tbs_budget` `tbs_budget` LEFT JOIN `tbs_budget_condition` `tbs_budget_condition` ON `tbs_budget`.`id` = `tbs_budget_condition`.`budget_id` + + and `tbs_budget`.`id` in + + #{selectId} + + and `tbs_budget`.`budget_number` like concat('%',#{query.budgetNumber},'%') and `tbs_budget`.`budget_state` = #{query.budgetState} and `tbs_budget`.`budget_code` like concat('%',#{query.budgetCode},'%')