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); + } + }