Browse Source

活动添加校验金额

mssql
Yen 3 years ago
parent
commit
ccfee004ce
  1. 14
      src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java
  2. 10
      src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java
  3. 4
      src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java
  4. 1
      src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityCenterGoodsBo.java
  5. 78
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java
  6. 2
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java

14
src/main/java/com/qs/serve/modules/tbs/controller/TbsActivityController.java

@ -86,9 +86,11 @@ public class TbsActivityController {
@SysLog(module = SystemModule.Budget, title = "费用活动", biz = BizType.UPDATE) @SysLog(module = SystemModule.Budget, title = "费用活动", biz = BizType.UPDATE)
@PreAuthorize("hasRole('tbs:activity:update')") @PreAuthorize("hasRole('tbs:activity:update')")
public R<?> updateById(@RequestBody @Valid TbsActivityBo param){ public R<?> updateById(@RequestBody @Valid TbsActivityBo param){
TbsActivity entity = CopierUtil.copy(param,new TbsActivity()); if(param.getId()==null){
boolean result = tbsActivityService.updateById(entity); return R.error("id is null");
return R.isTrue(result); }
tbsActivityService.modify(param);
return R.ok();
} }
/** /**
@ -100,9 +102,9 @@ public class TbsActivityController {
@SysLog(module = SystemModule.Budget, title = "费用活动", biz = BizType.INSERT) @SysLog(module = SystemModule.Budget, title = "费用活动", biz = BizType.INSERT)
@PreAuthorize("hasRole('tbs:activity:insert')") @PreAuthorize("hasRole('tbs:activity:insert')")
public R<?> save(@RequestBody @Valid TbsActivityBo param){ public R<?> save(@RequestBody @Valid TbsActivityBo param){
TbsActivity entity = CopierUtil.copy(param,new TbsActivity()); param.setId(null);
boolean result = tbsActivityService.save(entity); tbsActivityService.modify(param);
return R.isTrue(result); return R.ok();
} }
/** /**

10
src/main/java/com/qs/serve/modules/tbs/controller/TbsCostApplyController.java

@ -13,6 +13,8 @@ import com.qs.serve.modules.bms.entity.BmsSupplier;
import com.qs.serve.modules.bms.service.BmsSupplierService; import com.qs.serve.modules.bms.service.BmsSupplierService;
import com.qs.serve.modules.sys.entity.SysUser; import com.qs.serve.modules.sys.entity.SysUser;
import com.qs.serve.modules.sys.service.SysUserService; import com.qs.serve.modules.sys.service.SysUserService;
import com.qs.serve.modules.tbs.entity.TbsActivity;
import com.qs.serve.modules.tbs.service.TbsActivityService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
@ -40,6 +42,7 @@ public class TbsCostApplyController {
private TbsCostApplyService tbsCostApplyService; private TbsCostApplyService tbsCostApplyService;
private BmsSupplierService bmsSupplierService; private BmsSupplierService bmsSupplierService;
private SysUserService sysUserService; private SysUserService sysUserService;
private TbsActivityService tbsActivityService;
/** /**
* 列表 * 列表
@ -133,7 +136,12 @@ public class TbsCostApplyController {
@SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.DELETE) @SysLog(module = SystemModule.Budget, title = "费用申请", biz = BizType.DELETE)
@PreAuthorize("hasRole('tbs:costApply:delete')") @PreAuthorize("hasRole('tbs:costApply:delete')")
public R<?> deleteById(@PathVariable("id") Long id){ public R<?> deleteById(@PathVariable("id") Long id){
//todo 有活动数据无法删除 LambdaQueryWrapper<TbsActivity> lqw = new LambdaQueryWrapper<>();
lqw.eq(TbsActivity::getCostApplyId,id);
long count = tbsActivityService.count(lqw);
if(count>0L){
return R.ok("含活动数据无法删除");
}
boolean result = tbsCostApplyService.removeById(id); boolean result = tbsCostApplyService.removeById(id);
return R.isTrue(result); return R.isTrue(result);
} }

4
src/main/java/com/qs/serve/modules/tbs/entity/TbsCostApply.java

@ -101,5 +101,9 @@ public class TbsCostApply implements Serializable {
@JsonProperty @JsonProperty
private String delFlag; private String delFlag;
/** 统计所有活动申请的金额 */
@TableField(exist = false)
private BigDecimal totalActivityAmount;
} }

1
src/main/java/com/qs/serve/modules/tbs/entity/bo/TbsActivityCenterGoodsBo.java

@ -25,6 +25,7 @@ public class TbsActivityCenterGoodsBo implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
private Long subjectId;
/** 成本中心类型: /** 成本中心类型:
center, center,

78
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsActivityServiceImpl.java

@ -25,15 +25,15 @@ import com.qs.serve.modules.tbs.entity.bo.TbsActivityBo;
import com.qs.serve.modules.tbs.entity.bo.TbsActivityCenterGoodsBo; import com.qs.serve.modules.tbs.entity.bo.TbsActivityCenterGoodsBo;
import com.qs.serve.modules.tbs.entity.bo.TbsActivityGoodsBo; import com.qs.serve.modules.tbs.entity.bo.TbsActivityGoodsBo;
import com.qs.serve.modules.tbs.entity.bo.TbsActivitySubjectBo; import com.qs.serve.modules.tbs.entity.bo.TbsActivitySubjectBo;
import com.qs.serve.modules.tbs.service.TbsActivityGoodsService; import com.qs.serve.modules.tbs.service.*;
import com.qs.serve.modules.tbs.service.TbsCostApplyService;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.annotations.One;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.qs.serve.modules.tbs.service.TbsActivityService;
import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; import com.qs.serve.modules.tbs.mapper.TbsActivityMapper;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.time.LocalDate; import java.time.LocalDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -51,6 +51,8 @@ import java.util.List;
public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsActivity> implements TbsActivityService { public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsActivity> implements TbsActivityService {
private final TbsActivityGoodsService activityGoodsService; private final TbsActivityGoodsService activityGoodsService;
private final TbsActivitySubjectService activitySubjectService;
private final TbsActivityCenterService activityCenterService;
private final TbsCostApplyService costApplyService; private final TbsCostApplyService costApplyService;
private final BmsCostCenterService costCenterService; private final BmsCostCenterService costCenterService;
@ -70,9 +72,10 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
@Override @Override
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public void modify(TbsActivityBo activityBo) { public void modify(TbsActivityBo activityBo) {
final BigDecimal oneHundred = new BigDecimal(100);
TbsCostApply costApply = costApplyService.getById(activityBo.getId()); TbsCostApply costApply = costApplyService.getById(activityBo.getId());
BmsSupplier supplier = supplierService.getById(costApply.getSupplierId()); BmsSupplier supplier = supplierService.getById(costApply.getSupplierId());
TbsActivity activity = null; TbsActivity activity;
if(activityBo.getId()!=null){ if(activityBo.getId()!=null){
activity = this.getById(activityBo.getId()); activity = this.getById(activityBo.getId());
if(activity==null){ if(activity==null){
@ -86,8 +89,8 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
activity.setSupplierCode(supplier.getCode()); activity.setSupplierCode(supplier.getCode());
activity.setSupplierName(supplier.getName()); activity.setSupplierName(supplier.getName());
boolean isUpdate = activity.getId()!=null; boolean isUpdate = activity.getId()!=null;
this.save(activity);
if(isUpdate){ if(isUpdate){
this.save(activity);
//todo 删除旧数据 //todo 删除旧数据
} }
//产品详情 //产品详情
@ -111,7 +114,11 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
activitySubject.setCountPerson(subjectBo.getCountPerson()); activitySubject.setCountPerson(subjectBo.getCountPerson());
activitySubject.setRemark(subjectBo.getRemark()); activitySubject.setRemark(subjectBo.getRemark());
activitySubjects.add(activitySubject); activitySubjects.add(activitySubject);
BigDecimal totalAmount = BigDecimal.ZERO;
BigDecimal totalRate = BigDecimal.ZERO;
for (TbsActivitySubjectBo.ActivityCenterBo centerBo : subjectBo.getCenterList()) { for (TbsActivitySubjectBo.ActivityCenterBo centerBo : subjectBo.getCenterList()) {
totalAmount = totalAmount.add(centerBo.getCenterAmount());
totalRate = totalRate.add(centerBo.getCenterRate());
String centerType = centerBo.getCenterType(); String centerType = centerBo.getCenterType();
String centerId = centerBo.getCenterId(); String centerId = centerBo.getCenterId();
String key = centerType+":"+centerId; String key = centerType+":"+centerId;
@ -125,7 +132,6 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
activityCenter.setActivityId(activity.getId()); activityCenter.setActivityId(activity.getId());
activityCenter.setSubjectId(subjectBo.getSubjectId()); activityCenter.setSubjectId(subjectBo.getSubjectId());
activityCenter.setCenterRate(centerBo.getCenterRate()); activityCenter.setCenterRate(centerBo.getCenterRate());
//todo 判断是否允许超预算
activityCenter.setCenterAmount(centerBo.getCenterAmount()); activityCenter.setCenterAmount(centerBo.getCenterAmount());
activityCenter.setCenterType(centerBo.getCenterType()); activityCenter.setCenterType(centerBo.getCenterType());
activityCenter.setCenterId(centerBo.getCenterId()); activityCenter.setCenterId(centerBo.getCenterId());
@ -133,11 +139,27 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
activityCenter.setCenterCode(tbsCenterDto.getCenterCode()); activityCenter.setCenterCode(tbsCenterDto.getCenterCode());
activityCenterList.add(activityCenter); activityCenterList.add(activityCenter);
} }
//判断是否允许超预算
if(activitySubject.getAmount().compareTo(totalAmount)!=0){
Assert.throwEx("成本中心费用入参有误");
}
if(totalRate.compareTo(oneHundred)!=0){
Assert.throwEx("成本中心费用配比有误");
}
} }
//产品成本配占比 //产品成本配占比
Map<String,BigDecimal> checkAmountMap = new HashMap<>();
Map<String,BigDecimal> checkRateMap = new HashMap<>();
for (TbsActivityCenterGoodsBo centerGoodsBo : activityBo.getActivityCenterGoodsList()) { for (TbsActivityCenterGoodsBo centerGoodsBo : activityBo.getActivityCenterGoodsList()) {
BmsSubject subject = subjectMap.get(centerGoodsBo.getCenterId()); BmsSubject subject = subjectMap.get(centerGoodsBo.getSubjectId());
TbsActivityCenterGoods centerGoods = new TbsActivityCenterGoods(); TbsActivityCenterGoods centerGoods = new TbsActivityCenterGoods();
//设置成本中心
String key = centerGoodsBo.getCenterType()+":"+centerGoodsBo.getCenterId();
TbsCenterDto tbsCenterDto = centerDtoMap.get(key);
centerGoods.setCenterId(centerGoodsBo.getCenterId());
centerGoods.setCenterCode(tbsCenterDto.getCenterCode());
centerGoods.setCenterName(tbsCenterDto.getCenterName());
//设置科目
centerGoods.setCostApplyId(costApply.getId()); centerGoods.setCostApplyId(costApply.getId());
centerGoods.setActivityId(activity.getId()); centerGoods.setActivityId(activity.getId());
centerGoods.setSubjectId(subject.getId()); centerGoods.setSubjectId(subject.getId());
@ -145,12 +167,22 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
centerGoods.setSubjectName(subject.getSubjectName()); centerGoods.setSubjectName(subject.getSubjectName());
centerGoods.setCenterGoodsAmount(centerGoodsBo.getCenterGoodsAmount()); centerGoods.setCenterGoodsAmount(centerGoodsBo.getCenterGoodsAmount());
centerGoods.setCenterGoodsRate(centerGoodsBo.getCenterGoodsRate()); centerGoods.setCenterGoodsRate(centerGoodsBo.getCenterGoodsRate());
//设置成本中心 //统计
String key = centerGoodsBo.getCenterType()+":"+centerGoodsBo.getCenterId(); String key4Count = subject.getId()+":"+key;
TbsCenterDto tbsCenterDto = centerDtoMap.get(key); BigDecimal checkAmount = checkAmountMap.get(key4Count);
centerGoods.setCenterId(centerGoodsBo.getCenterId()); if(checkAmount==null){
centerGoods.setCenterCode(tbsCenterDto.getCenterCode()); checkAmount = BigDecimal.ZERO;
centerGoods.setCenterName(tbsCenterDto.getCenterName()); }
checkAmount.add(centerGoods.getCenterGoodsAmount());
checkAmountMap.put(key4Count,checkAmount);
BigDecimal checkRate = checkRateMap.get(key4Count);
if(checkRate==null){
checkRate = BigDecimal.ZERO;
}
checkRate.add(centerGoods.getCenterGoodsRate());
checkRateMap.put(key4Count,checkRate);
//设置商品 //设置商品
Long cenTarId = centerGoodsBo.getTargetId(); Long cenTarId = centerGoodsBo.getTargetId();
String cenTarType = centerGoodsBo.getTargetType(); String cenTarType = centerGoodsBo.getTargetType();
@ -168,10 +200,26 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct
if(StringUtils.hasEmpty(centerGoods.getTargetLevelPathIds())){ if(StringUtils.hasEmpty(centerGoods.getTargetLevelPathIds())){
Assert.throwEx("商品数据无法匹配"); Assert.throwEx("商品数据无法匹配");
} }
} }
//客户详情 //校验金额和比率
for (String key : checkRateMap.keySet()) {
if(checkRateMap.get(key).compareTo(oneHundred)!=0){
Assert.throwEx("成本与商品分配比例有误");
}
}
for (TbsActivityCenter activityCenter : activityCenterList) {
String key = activityCenter.getSubjectId()+":"+activityCenter.getCenterType()+":"+activityCenter.getCenterId();
BigDecimal amount = checkAmountMap.get(key);
if(amount==null||amount.compareTo(activityCenter.getCenterAmount())!=0){
Assert.throwEx("成本与商品分配的金额有误");
}
}
//todo 客户详情
//保存
activityGoodsService.saveBatch(activityGoodsList);
activitySubjectService.saveBatch(activitySubjects);
activityCenterService.saveBatch(activityCenterList);
} }
/** /**

2
src/main/java/com/qs/serve/modules/tbs/service/impl/TbsBudgetServiceImpl.java

@ -24,6 +24,7 @@ import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper; import com.qs.serve.modules.tbs.mapper.TbsBudgetMapper;
import org.springframework.transaction.annotation.Transactional;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -52,6 +53,7 @@ public class TbsBudgetServiceImpl extends ServiceImpl<TbsBudgetMapper,TbsBudget>
@Override @Override
@Transactional(rollbackFor = Exception.class)
public void modify(TbsBudgetBo budgetBo) { public void modify(TbsBudgetBo budgetBo) {
TbsBudget budget; TbsBudget budget;
if(budgetBo.getId()!=null){ if(budgetBo.getId()!=null){

Loading…
Cancel
Save