cup 2 жил өмнө
parent
commit
e1ce4ac9bb

+ 18 - 8
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserPrizeRecoveryController.java

@@ -12,10 +12,12 @@ import com.qs.mp.common.enums.PrizeStorageInTypeEnum;
 import com.qs.mp.common.enums.PrizeStorageStatusEnum;
 import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.framework.redis.RedisKey;
+import com.qs.mp.user.domain.UserExchangeOrder;
 import com.qs.mp.user.domain.UserPrizeStorage;
 import com.qs.mp.user.domain.param.UserPrizeRecoveryCreateParam;
 import com.qs.mp.user.domain.vo.PrizeRecoverySettleVO;
 import com.qs.mp.user.domain.vo.TicketOrderSettleVO;
+import com.qs.mp.user.service.IUserExchangeOrderService;
 import com.qs.mp.user.service.IUserPrizeStorageService;
 import com.qs.mp.utils.SecurityUtils;
 import com.qs.mp.web.controller.common.BaseApiController;
@@ -56,6 +58,9 @@ public class UserPrizeRecoveryController extends BaseApiController {
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private IUserExchangeOrderService userExchangeOrderService;
+
     @PostMapping("/settle")
     @ApiOperation("回收奖品结算页面")
     @ApiResponses(
@@ -87,7 +92,7 @@ public class UserPrizeRecoveryController extends BaseApiController {
         }
 
         // 回收折扣
-        BigDecimal discountRate = new BigDecimal(70);
+        BigDecimal discountRate;
         // 兑换价格
         Integer exchangePrice = 0;
 
@@ -97,20 +102,25 @@ public class UserPrizeRecoveryController extends BaseApiController {
         }
 
         if (Objects.nonNull(goodsSku)) {
-            if (!BigDecimal.ZERO.equals(goodsSku.getDiscountRate())) {
-                discountRate = goodsSku.getDiscountRate();
-            }
+            discountRate = goodsSku.getDiscountRate();
             exchangePrice = goodsSku.getExchangePrice();
-
         } else {
             Goods goods = goodsService.getById(userPrizeStorage.getGoodsId());
             if (Objects.isNull(goods)) {
                 return AjaxResult.error("商品信息有误");
             }
-            if (!BigDecimal.ZERO.equals(goods.getDiscountRate())) {
-                discountRate = goods.getDiscountRate();
+            discountRate = goods.getDiscountRate();
+            if (Objects.nonNull(userPrizeStorage.getSkuId())) {
+                // 特殊情况
+                UserExchangeOrder userExchangeOrder = userExchangeOrderService.getOne(new LambdaQueryWrapper<UserExchangeOrder>().eq(UserExchangeOrder::getOrderId, userPrizeStorage.getRefId()));
+                if (Objects.isNull(userExchangeOrder)) {
+                    return AjaxResult.error("sku信息异常");
+                }
+                exchangePrice = BigDecimal.valueOf(userExchangeOrder.getOrderCoin()).divide(BigDecimal.valueOf(userExchangeOrder.getNum()),0, RoundingMode.HALF_UP).intValue();
+            } else {
+                exchangePrice = goods.getExchangePrice();
             }
-            exchangePrice = goods.getExchangePrice();
+
         }
 
         int returnNum = BigDecimal.valueOf((long) exchangePrice * param.getNum()).multiply(discountRate).divide(BigDecimal.valueOf(100),0, RoundingMode.HALF_UP).intValue();

+ 4 - 1
mp-service/src/main/java/com/qs/mp/admin/service/impl/PrizeRecoveryServiceImpl.java

@@ -65,9 +65,12 @@ public class PrizeRecoveryServiceImpl extends ServiceImpl<PrizeRecoveryMapper, P
         BeanUtils.copyProperties(settleVO, prizeRecovery);
         prizeRecovery.setUserId(userId);
 
+        UserPrizeStorage userPrizeStorage = userPrizeStorageService.getById(settleVO.getStorageId());
+
         // 更新用户奖品状态
         boolean rtn = userPrizeStorageService.update(new LambdaUpdateWrapper<UserPrizeStorage>()
-                .set(UserPrizeStorage::getStatus, PrizeStorageStatusEnum.RECOVERY)
+                .set(userPrizeStorage.getGoodsNum() - settleVO.getNum() == 0, UserPrizeStorage::getStatus, PrizeStorageStatusEnum.RECOVERY)
+                .set(UserPrizeStorage::getGoodsNum, userPrizeStorage.getGoodsNum() - settleVO.getNum())
                 .eq(UserPrizeStorage::getUserId, userId)
                 .eq(UserPrizeStorage::getStorageId, settleVO.getStorageId())
                 .eq(UserPrizeStorage::getStatus, PrizeStorageStatusEnum.NOT_DISTRIBUTED));