|
|
@ -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.TbsActivityGoodsBo; |
|
|
|
import com.qs.serve.modules.tbs.entity.bo.TbsActivitySubjectBo; |
|
|
|
import com.qs.serve.modules.tbs.service.TbsActivityGoodsService; |
|
|
|
import com.qs.serve.modules.tbs.service.TbsCostApplyService; |
|
|
|
import com.qs.serve.modules.tbs.service.*; |
|
|
|
import lombok.AllArgsConstructor; |
|
|
|
import lombok.extern.slf4j.Slf4j; |
|
|
|
import org.apache.ibatis.annotations.One; |
|
|
|
import org.springframework.stereotype.Service; |
|
|
|
import com.qs.serve.modules.tbs.service.TbsActivityService; |
|
|
|
import com.qs.serve.modules.tbs.mapper.TbsActivityMapper; |
|
|
|
import org.springframework.transaction.annotation.Transactional; |
|
|
|
|
|
|
|
import java.math.BigDecimal; |
|
|
|
import java.time.LocalDate; |
|
|
|
import java.util.ArrayList; |
|
|
|
import java.util.HashMap; |
|
|
@ -51,6 +51,8 @@ import java.util.List; |
|
|
|
public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsActivity> implements TbsActivityService { |
|
|
|
|
|
|
|
private final TbsActivityGoodsService activityGoodsService; |
|
|
|
private final TbsActivitySubjectService activitySubjectService; |
|
|
|
private final TbsActivityCenterService activityCenterService; |
|
|
|
private final TbsCostApplyService costApplyService; |
|
|
|
|
|
|
|
private final BmsCostCenterService costCenterService; |
|
|
@ -70,9 +72,10 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct |
|
|
|
@Override |
|
|
|
@Transactional(rollbackFor = Exception.class) |
|
|
|
public void modify(TbsActivityBo activityBo) { |
|
|
|
final BigDecimal oneHundred = new BigDecimal(100); |
|
|
|
TbsCostApply costApply = costApplyService.getById(activityBo.getId()); |
|
|
|
BmsSupplier supplier = supplierService.getById(costApply.getSupplierId()); |
|
|
|
TbsActivity activity = null; |
|
|
|
TbsActivity activity; |
|
|
|
if(activityBo.getId()!=null){ |
|
|
|
activity = this.getById(activityBo.getId()); |
|
|
|
if(activity==null){ |
|
|
@ -86,8 +89,8 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct |
|
|
|
activity.setSupplierCode(supplier.getCode()); |
|
|
|
activity.setSupplierName(supplier.getName()); |
|
|
|
boolean isUpdate = activity.getId()!=null; |
|
|
|
this.save(activity); |
|
|
|
if(isUpdate){ |
|
|
|
this.save(activity); |
|
|
|
//todo 删除旧数据
|
|
|
|
} |
|
|
|
//产品详情
|
|
|
@ -111,7 +114,11 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct |
|
|
|
activitySubject.setCountPerson(subjectBo.getCountPerson()); |
|
|
|
activitySubject.setRemark(subjectBo.getRemark()); |
|
|
|
activitySubjects.add(activitySubject); |
|
|
|
BigDecimal totalAmount = BigDecimal.ZERO; |
|
|
|
BigDecimal totalRate = BigDecimal.ZERO; |
|
|
|
for (TbsActivitySubjectBo.ActivityCenterBo centerBo : subjectBo.getCenterList()) { |
|
|
|
totalAmount = totalAmount.add(centerBo.getCenterAmount()); |
|
|
|
totalRate = totalRate.add(centerBo.getCenterRate()); |
|
|
|
String centerType = centerBo.getCenterType(); |
|
|
|
String centerId = centerBo.getCenterId(); |
|
|
|
String key = centerType+":"+centerId; |
|
|
@ -125,7 +132,6 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct |
|
|
|
activityCenter.setActivityId(activity.getId()); |
|
|
|
activityCenter.setSubjectId(subjectBo.getSubjectId()); |
|
|
|
activityCenter.setCenterRate(centerBo.getCenterRate()); |
|
|
|
//todo 判断是否允许超预算
|
|
|
|
activityCenter.setCenterAmount(centerBo.getCenterAmount()); |
|
|
|
activityCenter.setCenterType(centerBo.getCenterType()); |
|
|
|
activityCenter.setCenterId(centerBo.getCenterId()); |
|
|
@ -133,11 +139,27 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct |
|
|
|
activityCenter.setCenterCode(tbsCenterDto.getCenterCode()); |
|
|
|
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()) { |
|
|
|
BmsSubject subject = subjectMap.get(centerGoodsBo.getCenterId()); |
|
|
|
BmsSubject subject = subjectMap.get(centerGoodsBo.getSubjectId()); |
|
|
|
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.setActivityId(activity.getId()); |
|
|
|
centerGoods.setSubjectId(subject.getId()); |
|
|
@ -145,12 +167,22 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct |
|
|
|
centerGoods.setSubjectName(subject.getSubjectName()); |
|
|
|
centerGoods.setCenterGoodsAmount(centerGoodsBo.getCenterGoodsAmount()); |
|
|
|
centerGoods.setCenterGoodsRate(centerGoodsBo.getCenterGoodsRate()); |
|
|
|
//设置成本中心
|
|
|
|
String key = centerGoodsBo.getCenterType()+":"+centerGoodsBo.getCenterId(); |
|
|
|
TbsCenterDto tbsCenterDto = centerDtoMap.get(key); |
|
|
|
centerGoods.setCenterId(centerGoodsBo.getCenterId()); |
|
|
|
centerGoods.setCenterCode(tbsCenterDto.getCenterCode()); |
|
|
|
centerGoods.setCenterName(tbsCenterDto.getCenterName()); |
|
|
|
//统计
|
|
|
|
String key4Count = subject.getId()+":"+key; |
|
|
|
BigDecimal checkAmount = checkAmountMap.get(key4Count); |
|
|
|
if(checkAmount==null){ |
|
|
|
checkAmount = BigDecimal.ZERO; |
|
|
|
} |
|
|
|
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(); |
|
|
|
String cenTarType = centerGoodsBo.getTargetType(); |
|
|
@ -168,10 +200,26 @@ public class TbsActivityServiceImpl extends ServiceImpl<TbsActivityMapper,TbsAct |
|
|
|
if(StringUtils.hasEmpty(centerGoods.getTargetLevelPathIds())){ |
|
|
|
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); |
|
|
|
} |
|
|
|
|
|
|
|
/** |
|
|
|