From 313091847b25e2447011a85dba5498c2ec65a169 Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 28 Aug 2023 12:03:16 +0800 Subject: [PATCH 1/5] =?UTF-8?q?=E6=9A=82=E5=AD=98=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E9=A2=84=E7=AE=97=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bms/service/BmsCostCenterService.java | 1 + .../bms/service/BmsRegion2Service.java | 2 + .../modules/bms/service/BmsRegionService.java | 2 + .../bms/service/BmsSubjectService.java | 9 + .../bms/service/BmsSupplierService.java | 2 + .../impl/BmsCostCenterServiceImpl.java | 10 ++ .../service/impl/BmsRegion2ServiceImpl.java | 9 + .../service/impl/BmsRegionServiceImpl.java | 7 + .../service/impl/BmsSubjectServiceImpl.java | 23 +++ .../service/impl/BmsSupplierServiceImpl.java | 7 + .../tbs/entity/bo/TbsBudgetBatchBo.java | 19 +- .../tbs/service/TbsCenterDtoService.java | 59 +++++++ .../impl/TbsBudgetBatchServiceImpl.java | 165 ++++++++++++++++-- 13 files changed, 293 insertions(+), 22 deletions(-) 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..61913635 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 loadByCodes(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..6189e3c7 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,27 @@ import java.util.stream.Collectors; @AllArgsConstructor public class BmsSubjectServiceImpl extends ServiceImpl implements BmsSubjectService { + @Override + public Map loadByCodes(List subjectCodes, Boolean throwInvalidCode) { + List subjectList = this.list( + new LambdaQueryWrapper() + .in(BmsSubject::getSubjectCode,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/tbs/entity/bo/TbsBudgetBatchBo.java b/src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBatchBo.java index 7f614571..4a313c5d 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; - /** 成本中心类型 */ + /** 成本中心类型: + * 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/TbsBudgetBatchServiceImpl.java b/src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java index 905d4fc3..d28c5aba 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,6 @@ package com.qs.serve.modules.tbs.service.impl; +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,6 +8,9 @@ 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.entity.dto.TbsCenterDto; import com.qs.serve.modules.seeyon.entity.BaseCreateCallbackBo; import com.qs.serve.modules.seeyon.entity.BaseCreateProcessBo; import com.qs.serve.modules.seeyon.service.SeeYonRequestService; @@ -14,20 +18,21 @@ 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.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.service.*; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; 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.time.LocalDateTime; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; /** * 批量申请 服务实现类 @@ -42,32 +47,24 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl batchItems = new ArrayList<>(); Map data = new HashMap<>(); data.put("exsp5", batchCode); @@ -112,5 +109,135 @@ 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).collect(Collectors.toList()); + List schedules = tbsScheduleService.list( + new LambdaQueryWrapper().in(TbsSchedule::getName,scheduleNames) + ); + for (TbsSchedule schedule : schedules) { + List scheduleItems = tbsScheduleItemService.listByScheduleId(schedule.getId()); + schedule.setScheduleItemlist(scheduleItems); + } + //科目编码加载科目 + 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); + } + //修改的生成为更变记录 + 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; + } + } + Long budgetId = budget.getId(); + if(budget.getBudgetState().equals(1)){ + //生成更变记录 + + }else { + //修改后为新增类型提交 + tbsBudgetService.removeById(budgetId); + tbsBudgetConditionService.remove( + new LambdaQueryWrapper() + .eq(TbsBudgetCondition::getBudgetId,budgetId) + ); + TbsBudget newBudget = new TbsBudget(); + newBudget.setBudgetCode(paramItem.getBudgetName()); + newBudget.setBudgetNumber(paramItem.getBudgetNumber()); + newBudget.setBudgetState(0); + newBudget.setBudgetCheckState(TbsBudgetCheckState.State_1_apply); + if(StringUtils.hasText(paramItem.getSubjectCode())){ + BmsSubject bmsSubject = subjectMap.get(paramItem.getSubjectCode()); + 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(); +// newBudget.setScheduleCode(); +// newBudget.setScheduleName(); + //newBudget.setRemark(); + //newBudget.setConditionFlag(); + newBudget.setUserId(sysUser.getId()); + newBudget.setUserCode(sysUser.getCode()); + newBudget.setUserName(sysUser.getName()); + newBudget.setSubmitTime(LocalDateTime.now()); + + } + } + } + //新增的生成为草稿 + List addBudgetList = paramBudgetList.stream() + .filter(a->!StringUtils.hasText(a.getBudgetNumber())).collect(Collectors.toList()); + + this.save(budgetBatch); + //保存后赋值 + Long budgetBatchId = budgetBatch.getId(); + + + return null; + } + + /** + * 加载param的所有科目(过滤无效的) + * @param param + * @return + */ + private Map loadSubjectMapWithFilterInvalid(TbsBudgetBatchBo param){ + List subjectCodes = param.getBudgetList().stream().filter(a->a.getSubjectCode()!=null) + .map(TbsBudgetBatchBo.BudgetMain::getSubjectCode) + .collect(Collectors.toList()); + return bmsSubjectService.loadByCodes(subjectCodes,true); + } + } From b14733f40e12570e27fdd82e291a9b6f4bfabc69 Mon Sep 17 00:00:00 2001 From: Yen Date: Mon, 28 Aug 2023 17:07:40 +0800 Subject: [PATCH 2/5] =?UTF-8?q?=E6=9A=82=E5=AD=98=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E9=A2=84=E7=AE=97=E5=AE=A1=E6=89=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TbsBudgetBatchServiceImpl.java | 245 ++++++++++++++---- 1 file changed, 198 insertions(+), 47 deletions(-) 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 d28c5aba..1e2eecdd 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 @@ -10,7 +10,11 @@ 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; @@ -23,15 +27,13 @@ import com.qs.serve.modules.tbs.entity.bo.TbsBudgetBatchBo; 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.mapper.TbsBudgetBatchMapper; import org.springframework.transaction.annotation.Transactional; 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; /** @@ -53,6 +55,8 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl paramBudgetList = param.getBudgetList(); - TbsBudgetBatch budgetBatch = new TbsBudgetBatch(); budgetBatch.setBatchTitle(sysUser.getName()+"发起了批量导入预算"); budgetBatch.setBatchCode(batchCode); @@ -127,25 +130,22 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl batchItems = new ArrayList<>(); - //加载周期信息 + //加载 周期信息 List scheduleNames = paramBudgetList.stream() - .map(TbsBudgetBatchBo.BudgetMain::getScheduleName).collect(Collectors.toList()); - List schedules = tbsScheduleService.list( - new LambdaQueryWrapper().in(TbsSchedule::getName,scheduleNames) - ); - for (TbsSchedule schedule : schedules) { - List scheduleItems = tbsScheduleItemService.listByScheduleId(schedule.getId()); - schedule.setScheduleItemlist(scheduleItems); - } - //科目编码加载科目 + .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()); @@ -170,7 +170,7 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl() .eq(TbsBudgetCondition::getBudgetId,budgetId) ); + tbsScheduleItemBudgetService.remove( + new LambdaQueryWrapper() + .eq(TbsScheduleItemBudget::getBudgetId,budgetId) + ); + //设置新的值 TbsBudget newBudget = new TbsBudget(); - newBudget.setBudgetCode(paramItem.getBudgetName()); - newBudget.setBudgetNumber(paramItem.getBudgetNumber()); - newBudget.setBudgetState(0); - newBudget.setBudgetCheckState(TbsBudgetCheckState.State_1_apply); - if(StringUtils.hasText(paramItem.getSubjectCode())){ - BmsSubject bmsSubject = subjectMap.get(paramItem.getSubjectCode()); - if(bmsSubject==null){ - - } - newBudget.setSubjectId(bmsSubject.getId()); - newBudget.setSubjectCode(bmsSubject.getSubjectCode()); - newBudget.setSubjectName(bmsSubject.getSubjectName()); + 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); } - 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(); -// newBudget.setScheduleCode(); -// newBudget.setScheduleName(); - //newBudget.setRemark(); - //newBudget.setConditionFlag(); - newBudget.setUserId(sysUser.getId()); - newBudget.setUserCode(sysUser.getCode()); - newBudget.setUserName(sysUser.getName()); - newBudget.setSubmitTime(LocalDateTime.now()); - + tbsScheduleItemBudgetService.saveBatch(scheduleItemBudgetList); } } } //新增的生成为草稿 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); + } this.save(budgetBatch); //保存后赋值 Long budgetBatchId = budgetBatch.getId(); @@ -227,6 +230,154 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl 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.getSubjectCode())){ + BmsSubject bmsSubject = subjectMap.get(paramItem.getSubjectCode()); + 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) + ); + 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 From c85272fb69fc00260e41f7ea1dd5a9373063030c Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 29 Aug 2023 09:42:45 +0800 Subject: [PATCH 3/5] =?UTF-8?q?=E6=9A=82=E5=AD=98=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E9=A2=84=E7=AE=97=E5=AE=A1=E6=89=B9(?= =?UTF-8?q?=E9=80=82=E9=85=8D=E6=9B=B4=E5=8F=98=E8=AE=B0=E5=BD=95)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../impl/TbsBudgetBatchServiceImpl.java | 116 +++++++++++++++++- 1 file changed, 113 insertions(+), 3 deletions(-) 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 1e2eecdd..8fcfc705 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,6 @@ 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; @@ -21,9 +22,12 @@ 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.*; 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; @@ -32,6 +36,7 @@ import org.springframework.stereotype.Service; 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.*; import java.util.stream.Collectors; @@ -57,6 +62,10 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl 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); + } + } + List changeScheduleItemList = new ArrayList<>(); + this.buildChangeSchduleBudgetList(paramItem, budgetId, changeId, changeScheduleItemList); + if(CollUtil.isNotEmpty(changeScheduleItemList)){ + tbsBudgetChangeScheduleItemService.saveBatch(changeScheduleItemList); + } }else { //修改后为新增类型提交 tbsBudgetService.removeById(budgetId); @@ -230,6 +275,68 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl 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<>(); @@ -326,7 +433,10 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl goodsCategories = goodsCategoryService.list( - new LambdaQueryWrapper().in(GoodsCategory::getName,goodsCategoryNames) + new LambdaQueryWrapper() + .in(GoodsCategory::getName,goodsCategoryNames) + .or() + .in(GoodsCategory::getCode,goodsCategoryNames) ); if(goodsCategories.size()!= goodsCategoryNames.size()){ for (String categoryName : goodsCategoryNames) { From 74c9ff7a912c783fbb415ba0d7d442d44f1ee17f Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 29 Aug 2023 13:34:04 +0800 Subject: [PATCH 4/5] =?UTF-8?q?=E6=9A=82=E5=AD=98=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E9=A2=84=E7=AE=97=E5=AE=A1=E6=89=B9(?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=EF=BC=8C=E8=81=94=E5=90=88=E6=B5=8B=E8=AF=95?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tbs/controller/TbsBudgetController.java | 43 ++++++ .../serve/modules/tbs/entity/TbsBudget.java | 6 +- .../TbsBudgetBatchOperationServiceImpl.java | 2 + .../impl/TbsBudgetBatchServiceImpl.java | 124 +++++++++++------- 4 files changed, 128 insertions(+), 47 deletions(-) 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..2d10d90d 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 @@ -15,8 +15,10 @@ import com.qs.serve.modules.tbs.common.TbsBudgetCheckState; 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; @@ -49,8 +51,11 @@ 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 SysUserService sysUserService; + /** * 列表 * @param param @@ -67,6 +72,44 @@ public class TbsBudgetController { return R.ok(); } + /** + * 导出 + * @param param + * @return + */ + @GetMapping("/list4Export") + @PreAuthorize("hasRole('tbs:budget:query')") + public R> list4Export(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); + budget.setBudgetScheduleItemList(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..6db07405 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,14 @@ 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 budgetScheduleItemList; + @TableField(exist = false) private List attachList; 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..2f616f00 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 @@ -51,7 +51,9 @@ public class TbsBudgetBatchOperationServiceImpl implements SeeYonOperationServic public Object doFinished(TbsAffairCommitBo param) { TbsBudgetBatch budgetBatch = budgetBatchService.getById(param.getTargetId()); List budgetBatchItemList = budgetBatchItemService.listByBatchId(budgetBatch.getId()); + for (TbsBudgetBatchItem batchItem : budgetBatchItemList) { + } 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 8fcfc705..52fe5c3c 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 @@ -66,6 +66,7 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl batchItems = new ArrayList<>(); //加载 周期信息 @@ -195,56 +195,31 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl 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); - } - } + 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 { //修改后为新增类型提交 - 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); + 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); } } } @@ -266,13 +241,70 @@ public class TbsBudgetBatchServiceImpl extends ServiceImplbatchItem.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); + } - return null; + 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) { From dabbaf9d80a7463a5bd6d55a29d48040e7f55318 Mon Sep 17 00:00:00 2001 From: Yen Date: Tue, 29 Aug 2023 15:52:51 +0800 Subject: [PATCH 5/5] =?UTF-8?q?=E6=9A=82=E5=AD=98=E6=89=B9=E9=87=8F?= =?UTF-8?q?=E5=AF=BC=E5=85=A5=E9=A2=84=E7=AE=97=E5=AE=A1=E6=89=B9(?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=EF=BC=8C=E8=81=94=E5=90=88=E6=B5=8B=E8=AF=95?= =?UTF-8?q?);=E4=BF=AE=E5=A4=8D=E5=95=86=E5=93=81=E7=B1=BB=E7=9B=AE?= =?UTF-8?q?=E5=BC=82=E5=B8=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../qs/serve/common/model/dto/TreeNode.java | 2 +- .../bms/service/BmsSubjectService.java | 2 +- .../service/impl/BmsSubjectServiceImpl.java | 4 +- .../controller/api/GoodsCategoryApi.java | 19 ++++-- .../tbs/controller/TbsBudgetController.java | 17 ++++- .../serve/modules/tbs/entity/TbsBudget.java | 15 ++++- .../modules/tbs/entity/TbsBudgetBatch.java | 4 ++ .../tbs/entity/bo/TbsBudgetBatchBo.java | 2 +- .../TbsBudgetBatchOperationServiceImpl.java | 66 +++++++++++++++++-- .../impl/TbsBudgetBatchServiceImpl.java | 10 +-- .../TbsBudgetChangeOperationServiceImpl.java | 14 +++- .../resources/mapper/tbs/TbsBudgetMapper.xml | 6 ++ 12 files changed, 131 insertions(+), 30 deletions(-) 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/BmsSubjectService.java b/src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java index 61913635..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 @@ -19,7 +19,7 @@ public interface BmsSubjectService extends IService { * @param throwInvalidCode 含无效编码抛出异常 * @return */ - Map loadByCodes(List subjectCodes,Boolean throwInvalidCode); + Map loadByNameOrCode(List subjectCodes,Boolean throwInvalidCode); /** * id加载列表 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 6189e3c7..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 @@ -29,10 +29,12 @@ import java.util.stream.Collectors; public class BmsSubjectServiceImpl extends ServiceImpl implements BmsSubjectService { @Override - public Map loadByCodes(List subjectCodes, Boolean throwInvalidCode) { + 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) { 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 2d10d90d..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,6 +12,7 @@ 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.*; @@ -32,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; /** @@ -53,6 +55,7 @@ public class TbsBudgetController { private final TbsBudgetChangeService tbsBudgetChangeService; private final TbsBudgetConditionService tbsBudgetConditionService; private final TbsScheduleItemBudgetMapper tbsScheduleItemBudgetMapper; + private final TbsScheduleItemService tbsScheduleItemService; private final SysUserService sysUserService; @@ -77,9 +80,9 @@ public class TbsBudgetController { * @param param * @return */ - @GetMapping("/list4Export") + @PostMapping("/list4Export") @PreAuthorize("hasRole('tbs:budget:query')") - public R> list4Export(TbsBudgetSo param){ + public R> list4Export(@RequestBody TbsBudgetSo param){ List budgetIds = tbsBudgetMapper.selectBudgetId(param); if(budgetIds.size()>0){ List list = tbsBudgetService.listByIds(budgetIds); @@ -103,7 +106,15 @@ public class TbsBudgetController { } } budget.setBudgetConditionList(conditionList); - budget.setBudgetScheduleItemList(scheduleItemBudgetList); + 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); } 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 6db07405..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 @@ -159,9 +159,20 @@ public class TbsBudget implements Serializable { @TableField(exist = false) private List budgetConditionList; - /** 预算金额 */ @TableField(exist = false) - private List budgetScheduleItemList; + 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 4a313c5d..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 @@ -29,7 +29,7 @@ public class TbsBudgetBatchBo { private String scheduleName; /** 科目编码 */ - private String subjectCode; + private String subjectName; /** 成本中心类型: * center, 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 2f616f00..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,8 +67,8 @@ public class TbsBudgetBatchOperationServiceImpl implements SeeYonOperationServic @Override public Object doBacked(TbsAffairCommitBo param) { - //业务待定 - return null; + //业务待定,暂当拒绝 + return doRefuse(param); } @Override @@ -52,17 +76,45 @@ public class TbsBudgetBatchOperationServiceImpl implements SeeYonOperationServic 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 52fe5c3c..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 @@ -421,8 +421,8 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl loadSubjectMapWithFilterInvalid(TbsBudgetBatchBo param){ - List subjectCodes = param.getBudgetList().stream().filter(a->a.getSubjectCode()!=null) - .map(TbsBudgetBatchBo.BudgetMain::getSubjectCode) + List subjectCodes = param.getBudgetList().stream().filter(a->a.getSubjectName()!=null) + .map(TbsBudgetBatchBo.BudgetMain::getSubjectName) .collect(Collectors.toList()); - return bmsSubjectService.loadByCodes(subjectCodes,true); + 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},'%')