Browse Source

暂存批量导入预算审批

v1.0
Yen 2 years ago
parent
commit
313091847b
  1. 1
      src/main/java/com/qs/serve/modules/bms/service/BmsCostCenterService.java
  2. 2
      src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java
  3. 2
      src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java
  4. 9
      src/main/java/com/qs/serve/modules/bms/service/BmsSubjectService.java
  5. 2
      src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java
  6. 10
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsCostCenterServiceImpl.java
  7. 9
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java
  8. 7
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java
  9. 23
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsSubjectServiceImpl.java
  10. 7
      src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java
  11. 19
      src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsBudgetBatchBo.java
  12. 59
      src/main/java/com/qs/serve/modules/tbs/service/TbsCenterDtoService.java
  13. 165
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetBatchServiceImpl.java

1
src/main/java/com/qs/serve/modules/bms/service/BmsCostCenterService.java

@ -19,6 +19,7 @@ public interface BmsCostCenterService extends IService<BmsCostCenter> {
BmsCostCenter getByCode(String code);
BmsCostCenter getByName(String name);
BmsCostCenter getByNameOrCode(String value);
List<BmsCostCenter> listChild(Long pid);
}

2
src/main/java/com/qs/serve/modules/bms/service/BmsRegion2Service.java

@ -22,6 +22,8 @@ public interface BmsRegion2Service extends IService<BmsRegion2> {
BmsRegion2 getByCode(String code);
BmsRegion2 getByName(String name,Integer level);
BmsRegion2 getByNameOrCode(String value);
// void flushLevel(BmsRegion2 param);
void flushAllLevel(boolean batchUpdate);

2
src/main/java/com/qs/serve/modules/bms/service/BmsRegionService.java

@ -26,6 +26,8 @@ public interface BmsRegionService extends IService<BmsRegion> {
BmsRegion getByName(String name,Integer level);
BmsRegion getByNameOrCode(String value);
void flushAllLevel(boolean batchUpdate);
boolean saveBmsRegion(BmsRegion param);

9
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<BmsSubject> {
/**
* 加载编码
* @param subjectCodes
* @param throwInvalidCode 含无效编码抛出异常
* @return
*/
Map<String,BmsSubject> loadByCodes(List<String> subjectCodes,Boolean throwInvalidCode);
/**
* id加载列表
* @param ids

2
src/main/java/com/qs/serve/modules/bms/service/BmsSupplierService.java

@ -22,6 +22,8 @@ public interface BmsSupplierService extends IService<BmsSupplier> {
BmsSupplier getByName(String String);
BmsSupplier getByNameOrCode(String value);
List<BmsSupplier> listChild(String pid);
List<BmsSupplier> listChildByPathIds(String pathIds);

10
src/main/java/com/qs/serve/modules/bms/service/impl/BmsCostCenterServiceImpl.java

@ -40,6 +40,16 @@ public class BmsCostCenterServiceImpl extends ServiceImpl<BmsCostCenterMapper,Bm
lqw.eq(BmsCostCenter::getName,name);
return this.getOne(lqw,true);
}
@Override
public BmsCostCenter getByNameOrCode(String value) {
return this.getOne(new LambdaQueryWrapper<BmsCostCenter>()
.eq(BmsCostCenter::getName,value)
.or()
.eq(BmsCostCenter::getCode,value)
,true);
}
@Override
public List<BmsCostCenter> listChild(Long pid) {
LambdaQueryWrapper<BmsCostCenter> lqw = new LambdaQueryWrapper<>();

9
src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegion2ServiceImpl.java

@ -180,6 +180,15 @@ public class BmsRegion2ServiceImpl extends ServiceImpl<BmsRegion2Mapper,BmsRegio
return this.getOne(lqw,true);
}
@Override
public BmsRegion2 getByNameOrCode(String value) {
LambdaQueryWrapper<BmsRegion2> 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());

7
src/main/java/com/qs/serve/modules/bms/service/impl/BmsRegionServiceImpl.java

@ -197,6 +197,13 @@ public class BmsRegionServiceImpl extends ServiceImpl<BmsRegionMapper,BmsRegion>
return this.getOne(lqw,true);
}
@Override
public BmsRegion getByNameOrCode(String value) {
LambdaQueryWrapper<BmsRegion> 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());

23
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<BmsSubjectMapper,BmsSubject> implements BmsSubjectService {
@Override
public Map<String, BmsSubject> loadByCodes(List<String> subjectCodes, Boolean throwInvalidCode) {
List<BmsSubject> subjectList = this.list(
new LambdaQueryWrapper<BmsSubject>()
.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<String,BmsSubject> subjectMap = new HashMap<>();
for (BmsSubject subject : subjectList) {
subjectMap.put(subject.getSubjectCode(),subject);
}
return subjectMap;
}
@Override
public List<BmsSubject> listByIds(List<Long> ids, List<Long> noInIds) {
LambdaQueryWrapper<BmsSubject> lqw = new LambdaQueryWrapper<>();

7
src/main/java/com/qs/serve/modules/bms/service/impl/BmsSupplierServiceImpl.java

@ -120,6 +120,13 @@ public class BmsSupplierServiceImpl extends ServiceImpl<BmsSupplierMapper,BmsSup
return this.getOne(lqw,true);
}
@Override
public BmsSupplier getByNameOrCode(String value) {
LambdaQueryWrapper<BmsSupplier> lqw = new LambdaQueryWrapper<>();
lqw.eq(BmsSupplier::getName,value).or().eq(BmsSupplier::getCode,value);
return this.getOne(lqw,true);
}
@Override
public List<BmsSupplier> listChild(String pid) {
LambdaQueryWrapper<BmsSupplier> lqw = new LambdaQueryWrapper<>();

19
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;
}

59
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

165
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<TbsBudgetBatchMapper,
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;
@Override
@Transactional(rollbackFor = Exception.class)
public Object commit(TbsBudgetBatchBo param) {
SysUser sysUser = sysUserService.getById(AuthContextUtils.getSysUserId());
String batchCode = CodeGenUtil.generate(CodeGenUtil.SourceKey.BudgetBatch);
String templateCode = TbsSeeYonConst.BudgetBatchApplyConf.Code();
//构建Batch
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());
TbsBudgetBatch budgetBatch = buildBatchData(param, batchCode, sysUser);
//保存后赋值
Long budgetBatchId = budgetBatch.getId();
//新增的生成为草稿
//修改的生成为更变记录
//构建BatchItems
List<TbsBudgetBatchItem> batchItems = new ArrayList<>();
Map<String,Object> data = new HashMap<>();
data.put("exsp5", batchCode);
@ -112,5 +109,135 @@ public class TbsBudgetBatchServiceImpl extends ServiceImpl<TbsBudgetBatchMapper,
AsyncManager.me().execute(AsyncFactory.submitBudgetBatch(budgetBatchId+""));
return budgetBatch;
}
public TbsBudgetBatch buildBatchData(TbsBudgetBatchBo param,String batchCode,SysUser sysUser){
List<TbsBudgetBatchBo.BudgetMain> 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<TbsBudgetBatchItem> batchItems = new ArrayList<>();
//加载周期信息
List<String> scheduleNames = paramBudgetList.stream()
.map(TbsBudgetBatchBo.BudgetMain::getScheduleName).collect(Collectors.toList());
List<TbsSchedule> schedules = tbsScheduleService.list(
new LambdaQueryWrapper<TbsSchedule>().in(TbsSchedule::getName,scheduleNames)
);
for (TbsSchedule schedule : schedules) {
List<TbsScheduleItem> scheduleItems = tbsScheduleItemService.listByScheduleId(schedule.getId());
schedule.setScheduleItemlist(scheduleItems);
}
//科目编码加载科目
Map<String,BmsSubject> subjectMap = loadSubjectMapWithFilterInvalid(param);
//加载所有的成本中心
Map<String,TbsCenterDto> 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<TbsBudgetBatchBo.BudgetMain> updBudgetList = paramBudgetList.stream()
.filter(a->StringUtils.hasText(a.getBudgetNumber())).collect(Collectors.toList());
if(updBudgetList.size()>0){
List<String> budgetNumbers = updBudgetList.stream()
.map(TbsBudgetBatchBo.BudgetMain::getBudgetNumber).collect(Collectors.toList());
List<TbsBudget> budgetList = tbsBudgetService.list(
new LambdaQueryWrapper<TbsBudget>().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<TbsBudgetCondition>()
.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<TbsBudgetBatchBo.BudgetMain> 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<String,BmsSubject> loadSubjectMapWithFilterInvalid(TbsBudgetBatchBo param){
List<String> subjectCodes = param.getBudgetList().stream().filter(a->a.getSubjectCode()!=null)
.map(TbsBudgetBatchBo.BudgetMain::getSubjectCode)
.collect(Collectors.toList());
return bmsSubjectService.loadByCodes(subjectCodes,true);
}
}

Loading…
Cancel
Save