Ver código fonte

商品回收接口

cup 3 anos atrás
pai
commit
c6db3b95cc

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

@@ -15,6 +15,7 @@ import com.qs.mp.framework.redis.RedisKey;
 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.IUserPrizeStorageService;
 import com.qs.mp.utils.SecurityUtils;
 import com.qs.mp.web.controller.common.BaseApiController;
@@ -128,11 +129,20 @@ public class UserPrizeRecoveryController extends BaseApiController {
         return AjaxResult.success(settleVO);
     }
 
-    @PostMapping("/convert")
-    @ApiOperation("回收奖品")
-    public AjaxResult convert(@RequestBody UserPrizeRecoveryCreateParam userPrizeRecoveryCreateParam) {
+    @PostMapping("/submit")
+    @ApiOperation("提交回收")
+    public AjaxResult submit() {
         Long userId = SecurityUtils.getLoginUser().getUserId();
-        prizeRecoveryService.convert(userId, userPrizeRecoveryCreateParam);
+
+        PrizeRecoverySettleVO settleVO = redisCache.getCacheObject(RedisKey.build(RedisKey.USER_PRIZE_RECOVERY_KEY, userId));
+        if (null == settleVO) {
+            return AjaxResult.error("订单已过期,请重新下单");
+        }
+
+        prizeRecoveryService.submitRecovery(userId, settleVO);
+
+        // 清除缓存的回收订单
+        redisCache.deleteObject(RedisKey.build(RedisKey.USER_PRIZE_RECOVERY_KEY, userId));
 
         return AjaxResult.success();
     }

+ 1 - 1
mp-common/src/main/java/com/qs/mp/common/enums/CoinLogTypeEnum.java

@@ -13,7 +13,7 @@ public enum CoinLogTypeEnum implements IEnum<Integer> {
   PRIZE(1, "盲票奖品"),
   EXCHANGE(2, "商品兑换"),
   MARKETING(3,"营销活动"),
-  RECOVERY(4,"品回收");
+  RECOVERY(4,"品回收");
 
 
   private final int value;

+ 5 - 5
mp-service/src/main/java/com/qs/mp/admin/service/IPrizeRecoveryService.java

@@ -3,6 +3,7 @@ package com.qs.mp.admin.service;
 import com.qs.mp.admin.domain.PrizeRecovery;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.qs.mp.user.domain.param.UserPrizeRecoveryCreateParam;
+import com.qs.mp.user.domain.vo.PrizeRecoverySettleVO;
 
 /**
  * <p>
@@ -14,12 +15,11 @@ import com.qs.mp.user.domain.param.UserPrizeRecoveryCreateParam;
  */
 public interface IPrizeRecoveryService extends IService<PrizeRecovery> {
 
+
     /**
-     * 回收奖品
+     * 提交回收
      * @param userId
-     * @param userPrizeRecoveryCreateParam
+     * @param settleVO
      */
-    void convert(Long userId, UserPrizeRecoveryCreateParam userPrizeRecoveryCreateParam);
-
-
+    void submitRecovery(Long userId, PrizeRecoverySettleVO settleVO);
 }

+ 18 - 45
mp-service/src/main/java/com/qs/mp/admin/service/impl/PrizeRecoveryServiceImpl.java

@@ -15,6 +15,7 @@ import com.qs.mp.common.enums.TicketPrizeTypeEnum;
 import com.qs.mp.common.exception.ServiceException;
 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.service.IUserCoinService;
 import com.qs.mp.user.service.IUserPrizeStorageService;
 import org.springframework.beans.BeanUtils;
@@ -49,52 +50,24 @@ public class PrizeRecoveryServiceImpl extends ServiceImpl<PrizeRecoveryMapper, P
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public void convert(Long userId, UserPrizeRecoveryCreateParam userPrizeRecoveryCreateParam) {
-//        UserPrizeStorage userPrizeStorage = userPrizeStorageService.getOne(new LambdaQueryWrapper<UserPrizeStorage>()
-//                .eq(UserPrizeStorage::getUserId, userId)
-//                .eq(UserPrizeStorage::getStorageId, userPrizeRecoveryCreateParam.getStorageId()));
-//        if (Objects.isNull(userPrizeStorage)) {
-//            throw new ServiceException("奖品不存在");
-//        }
-//        if (!PrizeStorageStatusEnum.NOT_DISTRIBUTED.equals(userPrizeStorage.getStatus())) {
-//            throw new ServiceException("仅待提货的奖品才可未收回");
-//        }
-//        if (!PrizeStorageInTypeEnum.TICKET_CASHED.equals(userPrizeStorage.getInType())) {
-//            throw new ServiceException("仅盲票兑奖的奖品才可未收回");
-//        }
-//        if (!TicketPrizeTypeEnum.GOODS.equals(userPrizeRecoveryCreateParam.getPrizeType())) {
-//            throw new ServiceException("仅实物奖品才可未收回");
-//        }
-//
-//        Goods goods = goodsService.getById(userPrizeRecoveryCreateParam.getRefId());
-//        if (Objects.isNull(goods)) {
-//            throw new ServiceException("商品信息不存在");
-//        }
-//
-//        PrizeRecovery prizeRecovery = new PrizeRecovery();
-//        BeanUtils.copyProperties(userPrizeRecoveryCreateParam, prizeRecovery);
-//        prizeRecovery.setUserId(userId);
-//        prizeRecovery.setDiscountRate(goods.getDiscountRate());
-//        int refundNum = BigDecimal.valueOf(goods.getExchangePrice()).multiply(goods.getDiscountRate()).divide(BigDecimal.valueOf(100), 1, RoundingMode.HALF_UP).intValue();
-//        prizeRecovery.setReturnCoin(refundNum);
-//
-//
-//        // 更新用户奖品状态
-//        boolean rtn = userPrizeStorageService.update(new LambdaUpdateWrapper<UserPrizeStorage>()
-//                .set(UserPrizeStorage::getStatus, PrizeStorageStatusEnum.RECOVERY)
-//                .eq(UserPrizeStorage::getUserId, userId)
-//                .eq(UserPrizeStorage::getStorageId, userPrizeRecoveryCreateParam.getStorageId())
-//                .eq(UserPrizeStorage::getStatus, PrizeStorageStatusEnum.NOT_DISTRIBUTED));
-//
-//        Assert.isTrue(rtn, "更新奖品状态失败。storageId:" + userPrizeRecoveryCreateParam.getStorageId());
-//
-//
-//        // 发放盲豆
-//        userCoinService.produce(userId, refundNum, prizeRecovery.getId().toString(), CoinLogTypeEnum.RECOVERY);
-//
-//
-//        this.save(prizeRecovery);
+    public void submitRecovery(Long userId, PrizeRecoverySettleVO settleVO) {
+        PrizeRecovery prizeRecovery = new PrizeRecovery();
+        BeanUtils.copyProperties(settleVO, prizeRecovery);
+        prizeRecovery.setUserId(userId);
 
+        // 更新用户奖品状态
+        boolean rtn = userPrizeStorageService.update(new LambdaUpdateWrapper<UserPrizeStorage>()
+                .set(UserPrizeStorage::getStatus, PrizeStorageStatusEnum.RECOVERY)
+                .eq(UserPrizeStorage::getUserId, userId)
+                .eq(UserPrizeStorage::getStorageId, settleVO.getStorageId())
+                .eq(UserPrizeStorage::getStatus, PrizeStorageStatusEnum.NOT_DISTRIBUTED));
+
+        Assert.isTrue(rtn, "更新奖品状态失败。storageId:" + settleVO.getStorageId());
+
+        // 发放盲豆
+        userCoinService.produce(userId, settleVO.getRefundCoin(), prizeRecovery.getId().toString(), CoinLogTypeEnum.RECOVERY);
+
+        this.save(prizeRecovery);
 
     }
 }

+ 5 - 0
mp-service/src/main/java/com/qs/mp/user/domain/vo/PrizeRecoverySettleVO.java

@@ -5,6 +5,8 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
+import java.math.BigDecimal;
+
 /**
  * 奖品回收结算出参类
  * @author Cup
@@ -38,5 +40,8 @@ public class PrizeRecoverySettleVO {
     @ApiModelProperty("返还盲豆数")
     private Integer refundCoin;
 
+    @ApiModelProperty("回收折扣比例")
+    private BigDecimal discountRate;
+
 
 }