Browse Source

Merge branch 'dev' into 'mp-server-test'

优化

See merge request quanshu/mp-server!602
jiang hao 2 years ago
parent
commit
56cd702d21

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

@@ -3,19 +3,23 @@ package com.qs.mp.web.controller.api.user;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qs.mp.admin.domain.Goods;
 import com.qs.mp.admin.domain.GoodsSku;
+import com.qs.mp.admin.domain.PrizeRecovery;
 import com.qs.mp.admin.service.IGoodsService;
 import com.qs.mp.admin.service.IGoodsSkuService;
 import com.qs.mp.admin.service.IPrizeRecoveryService;
 import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.core.redis.RedisCache;
 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;
@@ -29,6 +33,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 import java.math.BigDecimal;
 import java.math.RoundingMode;
+import java.util.List;
 import java.util.Objects;
 import java.util.concurrent.TimeUnit;
 
@@ -56,6 +61,22 @@ public class UserPrizeRecoveryController extends BaseApiController {
     @Autowired
     private RedisCache redisCache;
 
+    @Autowired
+    private IUserExchangeOrderService userExchangeOrderService;
+
+    @PostMapping("/list")
+    @ApiOperation("已回收列表")
+    @ApiResponses(
+            @ApiResponse(code = 200, message = "成功", response = PrizeRecovery.class)
+    )
+    public TableDataInfo list() {
+        Long userId = SecurityUtils.getLoginUser().getUserId();
+        startPage();
+        List<PrizeRecovery> list = prizeRecoveryService.list(new LambdaQueryWrapper<PrizeRecovery>().eq(PrizeRecovery::getUserId, userId).orderByDesc(PrizeRecovery::getCreatedTime));
+        return getDataTable(list);
+    }
+
+
     @PostMapping("/settle")
     @ApiOperation("回收奖品结算页面")
     @ApiResponses(
@@ -87,7 +108,7 @@ public class UserPrizeRecoveryController extends BaseApiController {
         }
 
         // 回收折扣
-        BigDecimal discountRate = new BigDecimal(70);
+        BigDecimal discountRate;
         // 兑换价格
         Integer exchangePrice = 0;
 
@@ -97,20 +118,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));