Browse Source

成本中心维度核销,debug;sku导入

v1.0
Yen 2 years ago
parent
commit
e84995e37f
  1. 73
      src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java
  2. 10
      src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSkuImportBo.java
  3. 3
      src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java
  4. 2
      src/main/java/com/qs/serve/modules/tbs/service/impl/TbsCostApplyServiceImpl.java
  5. 6
      src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java
  6. 40
      src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubjectCenter.java
  7. 50
      src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

73
src/main/java/com/qs/serve/modules/goods/controller/GoodsSkuController.java

@ -10,14 +10,20 @@ import com.qs.serve.common.model.enums.SystemModule;
import com.qs.serve.common.util.PageUtil; import com.qs.serve.common.util.PageUtil;
import com.qs.serve.modules.goods.entity.GoodsSkuSpecValue; import com.qs.serve.modules.goods.entity.GoodsSkuSpecValue;
import com.qs.serve.modules.goods.entity.bo.GoodsSkuBo; import com.qs.serve.modules.goods.entity.bo.GoodsSkuBo;
import com.qs.serve.modules.goods.entity.bo.GoodsSkuImportBo;
import com.qs.serve.modules.goods.entity.bo.GoodsSpuImportBo; import com.qs.serve.modules.goods.entity.bo.GoodsSpuImportBo;
import com.qs.serve.modules.goods.entity.vo.GoodSkuVo; import com.qs.serve.modules.goods.entity.vo.GoodSkuVo;
import com.qs.serve.modules.goods.entity.vo.GoodsSkuSpecValueVo; import com.qs.serve.modules.goods.entity.vo.GoodsSkuSpecValueVo;
import com.qs.serve.modules.goods.service.GoodsSkuSpecValueService; import com.qs.serve.modules.goods.service.GoodsSkuSpecValueService;
import com.qs.serve.modules.sale.entity.SalePlanGoods;
import com.qs.serve.modules.sale.service.SalePlanGoodsService;
import com.qs.serve.modules.tbs.common.TbsGoodsType; import com.qs.serve.modules.tbs.common.TbsGoodsType;
import com.qs.serve.modules.tbs.entity.TbsActivityGoods; import com.qs.serve.modules.tbs.entity.TbsActivityGoods;
import com.qs.serve.modules.tbs.entity.TbsBudgetCondition;
import com.qs.serve.modules.tbs.service.TbsActivityGoodsService; import com.qs.serve.modules.tbs.service.TbsActivityGoodsService;
import com.qs.serve.modules.tbs.service.TbsBudgetConditionService; import com.qs.serve.modules.tbs.service.TbsBudgetConditionService;
import com.qs.serve.modules.tzc.entity.TzcPolicyGoods;
import com.qs.serve.modules.tzc.service.TzcPolicyGoodsService;
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;
@ -28,6 +34,7 @@ import com.qs.serve.modules.goods.service.GoodsSkuService;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Random; import java.util.Random;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -46,6 +53,8 @@ public class GoodsSkuController {
private GoodsSkuSpecValueService goodsSkuSpecValueService; private GoodsSkuSpecValueService goodsSkuSpecValueService;
private TbsActivityGoodsService activityGoodsService; private TbsActivityGoodsService activityGoodsService;
private TbsBudgetConditionService budgetConditionService; private TbsBudgetConditionService budgetConditionService;
private SalePlanGoodsService salePlanGoodsService;
private TzcPolicyGoodsService policyGoodsService;
/** /**
* 列表(传入spuId获取spu规格列表) * 列表(传入spuId获取spu规格列表)
@ -161,7 +170,7 @@ public class GoodsSkuController {
@PreAuthorize("hasRole('goods:sku:delete')") @PreAuthorize("hasRole('goods:sku:delete')")
public R<?> deleteById(@PathVariable("id") Long id){ public R<?> deleteById(@PathVariable("id") Long id){
QueryWrapper lqw1 = new QueryWrapper<>(); QueryWrapper lqw1 = new QueryWrapper<>();
lqw1.in("target_type", TbsGoodsType.sku.name()); lqw1.eq("target_type", TbsGoodsType.sku.name());
lqw1.eq("target_id",id); lqw1.eq("target_id",id);
if(activityGoodsService.count(lqw1)>0){ if(activityGoodsService.count(lqw1)>0){
return R.error("活动含有当前商品,删除失败"); return R.error("活动含有当前商品,删除失败");
@ -169,6 +178,12 @@ public class GoodsSkuController {
if(budgetConditionService.count(lqw1)>0){ if(budgetConditionService.count(lqw1)>0){
return R.error("预算含有当前商品,删除失败"); return R.error("预算含有当前商品,删除失败");
} }
if(salePlanGoodsService.count(lqw1)>0){
return R.error("销售计划含有当前商品,删除失败");
}
if(policyGoodsService.count(lqw1)>0){
return R.error("政策含有当前商品,删除失败");
}
boolean result = goodsSkuService.removeById(id); boolean result = goodsSkuService.removeById(id);
if(result){ if(result){
//删除商品规格值 //删除商品规格值
@ -176,7 +191,6 @@ public class GoodsSkuController {
lqw2.eq(GoodsSkuSpecValue::getSkuId,id); lqw2.eq(GoodsSkuSpecValue::getSkuId,id);
goodsSkuSpecValueService.remove(lqw2); goodsSkuSpecValueService.remove(lqw2);
} }
return R.isTrue(result); return R.isTrue(result);
} }
@ -187,15 +201,64 @@ public class GoodsSkuController {
*/ */
@PostMapping("/importSku") @PostMapping("/importSku")
@SysLog(module = SystemModule.GOODS, title = "import", biz = BizType.INSERT) @SysLog(module = SystemModule.GOODS, title = "import", biz = BizType.INSERT)
public R<?> importSpu(@RequestBody @Valid GoodsSpuImportBo param){ public R<?> importSpu(@RequestBody @Valid GoodsSkuImportBo param){
final String UPDATE = "update"; final String UPDATE = "update";
final String DELETE = "delete"; final String DELETE = "delete";
final String SAVE = "save"; final String SAVE = "save";
Map<String,List<GoodsSkuImportBo.SkuItem>> skuItemList = param.getSkuList().stream().collect(Collectors.groupingBy(GoodsSkuImportBo.SkuItem::getOpt));
//处理删除
List<GoodsSkuImportBo.SkuItem> delList = skuItemList.get(DELETE);
List<String> delSkuCodes = delList.stream().map(GoodsSkuImportBo.SkuItem::getSkuCode).collect(Collectors.toList());
QueryWrapper lqw1 = new QueryWrapper<>();
lqw1.eq("target_type", TbsGoodsType.sku.name());
lqw1.eq("target_code",delSkuCodes);
lqw1.select("target_code");
List<TbsActivityGoods> activityGoodsList = activityGoodsService.list(lqw1);
List<TbsBudgetCondition> budgetConditionList = budgetConditionService.list(lqw1);
List<SalePlanGoods> salePlanGoodsList = salePlanGoodsService.list(lqw1);
for (TbsActivityGoods item : activityGoodsList) {
for (GoodsSkuImportBo.SkuItem skuItem : param.getSkuList()) {
if(item.getTargetCode().equals(skuItem.getSkuCode())&&DELETE.equals(skuItem.getOpt())){
skuItem.setErrMsg(skuItem.getErrMsg()==null?"活动含有当前商品,删除失败;":skuItem.getErrMsg()+"活动含有当前商品,删除失败;");
}
}
}
for (TbsBudgetCondition item : budgetConditionList) {
for (GoodsSkuImportBo.SkuItem skuItem : param.getSkuList()) {
if(item.getTargetCode().equals(skuItem.getSkuCode())&&DELETE.equals(skuItem.getOpt())){
skuItem.setErrMsg(skuItem.getErrMsg()==null?"预算含有当前商品,删除失败;":skuItem.getErrMsg()+"预算含有当前商品,删除失败;");
}
}
}
for (SalePlanGoods item : salePlanGoodsList) {
for (GoodsSkuImportBo.SkuItem skuItem : param.getSkuList()) {
if(item.getTargetCode().equals(skuItem.getSkuCode())&&DELETE.equals(skuItem.getOpt())){
skuItem.setErrMsg(skuItem.getErrMsg()==null?"销售计划含有当前商品,删除失败;":skuItem.getErrMsg()+"销售计划含有当前商品,删除失败;");
}
}
}
//执行删除
List<String> skuCodeToDelList = param.getSkuList().stream()
.filter(a->a.getErrMsg()==null)
.map(GoodsSkuImportBo.SkuItem::getSkuCode)
.collect(Collectors.toList());
if(skuCodeToDelList.size()>0){
LambdaQueryWrapper<GoodsSku> delLqw = new LambdaQueryWrapper<>();
delLqw.in(GoodsSku::getSkuCode,skuCodeToDelList);
goodsSkuService.remove(delLqw);
}
for (GoodsSpuImportBo.SpuItem spuItem : param.getSpuList()) { //处理更新和新增
for (GoodsSkuImportBo.SkuItem skuItem : param.getSkuList()) {
String opt = skuItem.getOpt();
if(UPDATE.equals(opt)){
} //TODO 更新
}else if (SAVE.equals(opt)){
//TODO 更新
}
}
return R.ok(param); return R.ok(param);
} }

10
src/main/java/com/qs/serve/modules/goods/entity/bo/GoodsSkuImportBo.java

@ -14,20 +14,22 @@ import java.util.List;
@Data @Data
public class GoodsSkuImportBo { public class GoodsSkuImportBo {
private List<SkuItem> spuList; private List<SkuItem> skuList;
@Data @Data
public static class SkuItem{ public static class SkuItem{
/** /**
* 操作方式save,update,delete * 操作方式save,update,delete 不能为空
*/ */
@NotNull
private String opt; private String opt;
/** 商品编码(嘉士利SkuCode) */ /** 商品编码(嘉士利SkuCode,新增时不能为空) */
private String spuCode; private String spuCode;
/** 商品编码(嘉士利InvCode) */ /** 商品编码(嘉士利InvCode,不能为空) */
@NotNull
private String skuCode; private String skuCode;
/** 商品名字 */ /** 商品名字 */

3
src/main/java/com/qs/serve/modules/oms/service/impl/OmsOrderServiceImpl.java

@ -97,6 +97,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper,OmsOrder> im
shoppingCart.setSpuId(goodsSku.getSpuId()); shoppingCart.setSpuId(goodsSku.getSpuId());
shoppingCart.setSkuId(confirmOrder.getSkuId()); shoppingCart.setSkuId(confirmOrder.getSkuId());
shoppingCart.setSpuCode(goodsSpu.getSpuCode()); shoppingCart.setSpuCode(goodsSpu.getSpuCode());
shoppingCart.setSpuName(goodsSpu.getName());
shoppingCart.setSkuCode(goodsSku.getSkuCode()); shoppingCart.setSkuCode(goodsSku.getSkuCode());
shoppingCart.setQuantity(confirmOrder.getQuantity()); shoppingCart.setQuantity(confirmOrder.getQuantity());
shoppingCart.setSpecInfo(goodsSku.getSpecInfos()); shoppingCart.setSpecInfo(goodsSku.getSpecInfos());
@ -407,7 +408,7 @@ public class OmsOrderServiceImpl extends ServiceImpl<OmsOrderMapper,OmsOrder> im
// spu维度 // spu维度
GoodsSku goodsSku = goodsSkuService.getById(shoppingCart.getSkuId()); GoodsSku goodsSku = goodsSkuService.getById(shoppingCart.getSkuId());
orderItem.setSpuId(shoppingCart.getSpuId()); orderItem.setSpuId(shoppingCart.getSpuId());
orderItem.setSpuTitle(shoppingCart.getSpecInfo()); orderItem.setSpuTitle(shoppingCart.getSpuName());
orderItem.setSkuId(shoppingCart.getSkuId()); orderItem.setSkuId(shoppingCart.getSkuId());
orderItem.setSkuCode(shoppingCart.getSkuCode()); orderItem.setSkuCode(shoppingCart.getSkuCode());
orderItem.setSkuUnit(null); orderItem.setSkuUnit(null);

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

@ -272,7 +272,7 @@ public class TbsCostApplyServiceImpl extends ServiceImpl<TbsCostApplyMapper,TbsC
} }
if(tbsCostApply.getTemplateId()!=null){ if(tbsCostApply.getTemplateId()!=null){
TbsActivityTemplate activityTemplate = tbsActivityTemplateService.getById(tbsCostApply.getTemplateId()); TbsActivityTemplate activityTemplate = tbsActivityTemplateService.getById(tbsCostApply.getTemplateId());
if(activityTemplate.getTemplateState().equals(0)){ if(tbsCostApply.getChangeSourceId()==null&&activityTemplate.getTemplateState().equals(0)){
Assert.throwEx("当前模板已停用"); Assert.throwEx("当前模板已停用");
} }
} }

6
src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubject.java

@ -85,6 +85,12 @@ public class VtbVerificationSubject implements Serializable {
/** 申请时本次核销额 */ /** 申请时本次核销额 */
private BigDecimal usedAmountRecord; private BigDecimal usedAmountRecord;
/** 总金额 */
private BigDecimal totalSubjectAmount;
/** 上次总核销额 */
private BigDecimal lastUsedAmount;
/** 已支付核销费用 */ /** 已支付核销费用 */
private BigDecimal payAmount; private BigDecimal payAmount;

40
src/main/java/com/qs/serve/modules/vtb/entity/VtbVerificationSubjectCenter.java

@ -82,6 +82,12 @@ public class VtbVerificationSubjectCenter implements Serializable {
@NotNull(message = "申请时本次核销额不能为空") @NotNull(message = "申请时本次核销额不能为空")
private BigDecimal usedAmountRecord; private BigDecimal usedAmountRecord;
/** 总金额 */
private BigDecimal totalCenterAmount;
/** 上次总核销额 */
private BigDecimal lastUsedAmount;
/** 已支付核销费用 */ /** 已支付核销费用 */
@NotNull(message = "已支付核销费用不能为空") @NotNull(message = "已支付核销费用不能为空")
private BigDecimal payAmount; private BigDecimal payAmount;
@ -158,39 +164,5 @@ public class VtbVerificationSubjectCenter implements Serializable {
@TableField(exist = false) @TableField(exist = false)
private BigDecimal maxChangeAmount; private BigDecimal maxChangeAmount;
public static VtbVerificationSubjectCenter toNewObject(VtbVerificationSubjectCenter source){
VtbVerificationSubjectCenter verificationSubjectCenter = new VtbVerificationSubjectCenter();
verificationSubjectCenter.setId(source.getId());
verificationSubjectCenter.setVerificationId(source.getVerificationId());
verificationSubjectCenter.setVerificationSubCode(source.getVerificationSubCode());
verificationSubjectCenter.setCostApplyId(source.getCostApplyId());
verificationSubjectCenter.setActivityId(source.getActivityId());
verificationSubjectCenter.setSubjectId(source.getSubjectId());
verificationSubjectCenter.setSubjectCode(source.getSubjectCode());
verificationSubjectCenter.setSubjectName(source.getSubjectName());
verificationSubjectCenter.setSupplierId(source.getSupplierId());
verificationSubjectCenter.setSupplierCode(source.getSupplierCode());
verificationSubjectCenter.setSupplierName(source.getSupplierName());
verificationSubjectCenter.setUsedAmount(source.getUsedAmount());
verificationSubjectCenter.setUsedAmountRecord(source.getUsedAmountRecord());
verificationSubjectCenter.setPayAmount(source.getPayAmount());
verificationSubjectCenter.setPayFinishedFlag(source.getPayFinishedFlag());
verificationSubjectCenter.setRemark(source.getRemark());
verificationSubjectCenter.setCreateTime(source.getCreateTime());
verificationSubjectCenter.setUpdateTime(source.getUpdateTime());
verificationSubjectCenter.setTenantId(source.getTenantId());
verificationSubjectCenter.setCreateBy(source.getCreateBy());
verificationSubjectCenter.setUpdateBy(source.getUpdateBy());
verificationSubjectCenter.setDelFlag(source.getDelFlag());
verificationSubjectCenter.setEffectiveFlag(source.getEffectiveFlag());
verificationSubjectCenter.setPayReleaseFlag(source.getPayReleaseFlag());
verificationSubjectCenter.setCenterType(source.getCenterType());
verificationSubjectCenter.setCenterId(source.getCenterId());
verificationSubjectCenter.setCenterCode(source.getCenterCode());
verificationSubjectCenter.setCenterName(source.getCenterName());
verificationSubjectCenter.setActivityCenterId(source.getActivityCenterId());
return verificationSubjectCenter;
}
} }

50
src/main/java/com/qs/serve/modules/vtb/service/impl/VtbVerificationServiceImpl.java

@ -848,6 +848,8 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
subjectCenter.setSupplierName(supplier.getName()); subjectCenter.setSupplierName(supplier.getName());
subjectCenter.setUsedAmount(centerAmt); subjectCenter.setUsedAmount(centerAmt);
subjectCenter.setUsedAmountRecord(centerAmt); subjectCenter.setUsedAmountRecord(centerAmt);
subjectCenter.setTotalCenterAmount(currActivityCenter.getCenterAmount());
subjectCenter.setLastUsedAmount(currActivityCenter.getUsedAmount());
subjectCenter.setCenterType(currActivityCenter.getCenterType()); subjectCenter.setCenterType(currActivityCenter.getCenterType());
subjectCenter.setCenterId(currActivityCenter.getCenterId()); subjectCenter.setCenterId(currActivityCenter.getCenterId());
subjectCenter.setCenterCode(currActivityCenter.getCenterCode()); subjectCenter.setCenterCode(currActivityCenter.getCenterCode());
@ -896,6 +898,8 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
verificationSubject.setSupplierName(supplier.getName()); verificationSubject.setSupplierName(supplier.getName());
verificationSubject.setUsedAmount(totalSubjectAmt); verificationSubject.setUsedAmount(totalSubjectAmt);
verificationSubject.setUsedAmountRecord(totalSubjectAmt); verificationSubject.setUsedAmountRecord(totalSubjectAmt);
verificationSubject.setTotalSubjectAmount(currentActivitySubject.getAmount());
verificationSubject.setLastUsedAmount(currentActivitySubject.getUsedAmount());
verificationSubject.setCountPerson(subjectCenterBo.getCountPerson()); verificationSubject.setCountPerson(subjectCenterBo.getCountPerson());
verificationSubject.setCountSession(subjectCenterBo.getCountSession()); verificationSubject.setCountSession(subjectCenterBo.getCountSession());
verificationSubject.setRemark(subjectCenterBo.getRemark()); verificationSubject.setRemark(subjectCenterBo.getRemark());
@ -1333,7 +1337,6 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
BigDecimal usedAmount) { BigDecimal usedAmount) {
List<VtbFundFlow> addFundFlowListOfSubject = new ArrayList<>(); List<VtbFundFlow> addFundFlowListOfSubject = new ArrayList<>();
//统计不匹配金额 //统计不匹配金额
BigDecimal unMatchAmount = BigDecimal.ZERO;
for (int i = 0; i < activityCenterGoodsOfSubject.size(); i++) { for (int i = 0; i < activityCenterGoodsOfSubject.size(); i++) {
TbsActivityCenterGoods centerGoods = activityCenterGoodsOfSubject.get(i); TbsActivityCenterGoods centerGoods = activityCenterGoodsOfSubject.get(i);
BigDecimal currentTimeAmount; BigDecimal currentTimeAmount;
@ -1350,59 +1353,14 @@ public class VtbVerificationServiceImpl extends ServiceImpl<VtbVerificationMappe
.divide(new BigDecimal("100"), RoundingMode.HALF_DOWN) .divide(new BigDecimal("100"), RoundingMode.HALF_DOWN)
.setScale(2, RoundingMode.DOWN);; .setScale(2, RoundingMode.DOWN);;
} }
//可用金额
BigDecimal allowBalance = centerGoods.getCenterGoodsAmount().subtract(centerGoods.getUsedAmount());
if(allowBalance.compareTo(BigDecimal.ZERO)==0){
log.warn("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue());
unMatchAmount.add(currentTimeAmount);
continue;
}
BigDecimal tempBalance = BigDecimal.ZERO;
//如果不够减
if(allowBalance.compareTo(currentTimeAmount)<1){
//统计不匹配金额
unMatchAmount = unMatchAmount.add(currentTimeAmount.subtract(allowBalance));
log.warn("统计不匹配金额allowBalance:{},currentTimeAmount:{}",allowBalance.doubleValue(),currentTimeAmount.doubleValue());
currentTimeAmount = allowBalance;
}else {
tempBalance = allowBalance.subtract(currentTimeAmount);
}
VtbFundFlow fundFlow = CopierUtil.copy(centerGoods,new VtbFundFlow()); VtbFundFlow fundFlow = CopierUtil.copy(centerGoods,new VtbFundFlow());
fundFlow.setId(null); fundFlow.setId(null);
fundFlow.setUsedAmount(currentTimeAmount); fundFlow.setUsedAmount(currentTimeAmount);
fundFlow.setFundType(VtbFundFlowType.Verification); fundFlow.setFundType(VtbFundFlowType.Verification);
fundFlow.setVerificationId(verificationId); fundFlow.setVerificationId(verificationId);
fundFlow.setTempBalance(tempBalance);
fundFlow.setCenterGoodItemId(centerGoods.getId()); fundFlow.setCenterGoodItemId(centerGoods.getId());
addFundFlowListOfSubject.add(fundFlow); addFundFlowListOfSubject.add(fundFlow);
} }
//打乱顺序,保存前平摊费用
Collections.shuffle(addFundFlowListOfSubject);
for (VtbFundFlow fundFlow : addFundFlowListOfSubject) {
fundFlow.setCreateTime(null);
fundFlow.setUpdateTime(null);
fundFlow.setCreateBy(null);
fundFlow.setUpdateBy(null);
if(unMatchAmount.compareTo(BigDecimal.ZERO)>0){
BigDecimal tmpBalance = fundFlow.getTempBalance();
if(tmpBalance.compareTo(BigDecimal.ZERO)>0){
if(tmpBalance.compareTo(unMatchAmount)>0){
BigDecimal resultBalance = fundFlow.getUsedAmount().add(unMatchAmount);
fundFlow.setUsedAmount(resultBalance);
break;
}else {
unMatchAmount = unMatchAmount.subtract(fundFlow.getTempBalance());
BigDecimal resultBalance = fundFlow.getUsedAmount().add(tmpBalance);
fundFlow.setUsedAmount(resultBalance);
}
}
}else {
break;
}
}
if(unMatchAmount.compareTo(BigDecimal.ZERO)>0){
log.error("异常数据,费用核销[{}]超额:{}", verificationId,unMatchAmount.doubleValue());
}
addFundFlowList.addAll(addFundFlowListOfSubject); addFundFlowList.addAll(addFundFlowListOfSubject);
} }

Loading…
Cancel
Save