CmsGoodsDonSkuServiceImpl.java 5.5 KB

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