CmsGoodsDonSkuServiceImpl.java 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. package com.cyksj.service.mange.goods;
  2. import cn.hutool.core.collection.CollUtil;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  5. import com.cyksj.common.exception.BusinessRuntimeException;
  6. import com.cyksj.mapper.GoodsDiscountPlusPurchaseRelationMapper;
  7. import com.cyksj.mapper.GoodsDonSkuMapper;
  8. import com.cyksj.model.entity.GoodsDiscountPlusPurchaseRelation;
  9. import com.cyksj.model.entity.GoodsDonSku;
  10. import com.cyksj.service.mange.CmsGoodsDonSkuService;
  11. import lombok.RequiredArgsConstructor;
  12. import lombok.extern.slf4j.Slf4j;
  13. import org.springframework.dao.DuplicateKeyException;
  14. import org.springframework.stereotype.Service;
  15. import java.math.BigDecimal;
  16. import java.util.List;
  17. import java.util.Map;
  18. import java.util.concurrent.ConcurrentHashMap;
  19. import java.util.concurrent.atomic.AtomicBoolean;
  20. /**
  21. * @author chan
  22. * @date 2022/9/27 5:43 PM
  23. */
  24. @Slf4j
  25. @RequiredArgsConstructor
  26. @Service
  27. public class CmsGoodsDonSkuServiceImpl extends ServiceImpl<GoodsDonSkuMapper,GoodsDonSku> implements CmsGoodsDonSkuService {
  28. private final GoodsDiscountPlusPurchaseRelationMapper discountPlusPurchaseRelationMapper;
  29. private final GoodsDonSkuMapper skuMapper;
  30. @Override
  31. public void handleDiscountPurchaseGoods(GoodsDonSku sku, List<GoodsDiscountPlusPurchaseRelation> discountPlusPurchaseGoods) {
  32. Long skuId = sku.getId();
  33. Long goodsId = sku.getGoodsId();
  34. List<GoodsDiscountPlusPurchaseRelation> dbDiscountPlusGoodsList = discountPlusPurchaseRelationMapper.selectList(Wrappers.lambdaQuery(GoodsDiscountPlusPurchaseRelation.class)
  35. .eq(GoodsDiscountPlusPurchaseRelation::getSkuId, skuId));
  36. if (CollUtil.isEmpty(dbDiscountPlusGoodsList) && CollUtil.isNotEmpty(discountPlusPurchaseGoods)) {
  37. discountPlusPurchaseGoods.forEach(discountGoods -> {
  38. checkPurchaseParamsAndSaveOrUpdate(goodsId, skuId, discountGoods);
  39. });
  40. sku.setIsDp(true);
  41. return;
  42. }
  43. //优惠加购为空
  44. if (CollUtil.isEmpty(discountPlusPurchaseGoods)) {
  45. discountPlusPurchaseRelationMapper.delete(Wrappers.lambdaQuery(GoodsDiscountPlusPurchaseRelation.class)
  46. .eq(GoodsDiscountPlusPurchaseRelation::getSkuId, skuId));
  47. sku.setIsDp(false);
  48. return;
  49. }
  50. //新增或更新
  51. sku.setIsDp(true);
  52. Map<Long, GoodsDiscountPlusPurchaseRelation> skuIdMap = new ConcurrentHashMap<>();
  53. discountPlusPurchaseGoods.forEach(discountGoods -> {
  54. AtomicBoolean is_exist = new AtomicBoolean(false);
  55. if (skuIdMap.get(discountGoods.getDisSid()) == null) {
  56. skuIdMap.put(discountGoods.getDisSid(), discountGoods);
  57. }
  58. dbDiscountPlusGoodsList.forEach(db_exist->{
  59. //存在
  60. if (db_exist.getDisSid().equals(discountGoods.getDisSid())) {
  61. is_exist.set(true);
  62. discountGoods.setId(db_exist.getId());
  63. checkPurchaseParamsAndSaveOrUpdate(goodsId, skuId, discountGoods);
  64. }
  65. });
  66. //不存在新增
  67. if (!is_exist.get()) {
  68. checkPurchaseParamsAndSaveOrUpdate(goodsId, skuId, discountGoods);
  69. }
  70. });
  71. //去除数据库已被删除的
  72. dbDiscountPlusGoodsList.forEach(dbDiscountPlusGoods -> {
  73. GoodsDiscountPlusPurchaseRelation exists = skuIdMap.get(dbDiscountPlusGoods.getDisSid());
  74. //不存在
  75. if (exists == null) {
  76. discountPlusPurchaseRelationMapper.deleteById(dbDiscountPlusGoods.getId());
  77. }
  78. });
  79. }
  80. public void checkPurchaseParamsAndSaveOrUpdate(Long goodsId, Long skuId, GoodsDiscountPlusPurchaseRelation discountGoods) {
  81. Long disSid = discountGoods.getDisSid();
  82. if (disSid == null) {
  83. throw BusinessRuntimeException.getInstance("请选择对应优惠加购规格");
  84. }
  85. if (skuId.equals(disSid)) {
  86. return;
  87. }
  88. BigDecimal disPrice = discountGoods.getDisPrice();
  89. GoodsDonSku sku = skuMapper.selectOne(Wrappers.lambdaQuery(GoodsDonSku.class)
  90. .eq(GoodsDonSku::getId, disSid).last("limit 1"));
  91. if (sku == null) {
  92. throw BusinessRuntimeException.getInstance("优惠加购规格不存在");
  93. }
  94. if (!sku.getStatus()) {
  95. throw BusinessRuntimeException.getInstance("{0}规格未上架", sku.getSpecVal());
  96. }
  97. if (disPrice == null || disPrice.compareTo(BigDecimal.ZERO) <= 0) {
  98. throw BusinessRuntimeException.getInstance("请输入正确的优惠加购价格");
  99. }
  100. discountGoods.setGoodsId(goodsId);
  101. discountGoods.setSkuId(skuId);
  102. discountGoods.setDisGid(sku.getGoodsId());
  103. if (discountGoods.getId() != null) {
  104. discountPlusPurchaseRelationMapper.updateById(discountGoods);
  105. return;
  106. }
  107. try {
  108. discountPlusPurchaseRelationMapper.insert(discountGoods);
  109. } catch (DuplicateKeyException e) {
  110. }
  111. }
  112. }