Kaynağa Gözat

盲票兑奖

chunping 3 yıl önce
ebeveyn
işleme
b86cd79bb4

+ 104 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserExchangeController.java

@@ -0,0 +1,104 @@
+package com.qs.mp.web.controller.api.user;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.qs.mp.admin.domain.Goods;
+import com.qs.mp.admin.domain.GoodsSku;
+import com.qs.mp.admin.domain.Ticket;
+import com.qs.mp.admin.domain.TicketAwardsPrize;
+import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.domain.param.TicketBoxParam;
+import com.qs.mp.admin.domain.param.TicketParam;
+import com.qs.mp.admin.domain.vo.GoodsListVO;
+import com.qs.mp.admin.domain.vo.GoodsVO;
+import com.qs.mp.admin.domain.vo.TicketBoxListVO;
+import com.qs.mp.admin.domain.vo.TicketBoxVO;
+import com.qs.mp.admin.domain.vo.TicketVO;
+import com.qs.mp.admin.service.IGoodsService;
+import com.qs.mp.admin.service.IGoodsSkuService;
+import com.qs.mp.admin.service.ITicketAwardsPrizeService;
+import com.qs.mp.admin.service.ITicketBoxService;
+import com.qs.mp.admin.service.ITicketService;
+import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.core.page.TableDataInfo;
+import com.qs.mp.common.enums.ErrorCodeEnum;
+import com.qs.mp.common.enums.GoodsStatusEnum;
+import com.qs.mp.common.enums.TicketBoxStatusEnum;
+import com.qs.mp.common.enums.TicketStatusEnum;
+import com.qs.mp.common.utils.StringUtils;
+import com.qs.mp.user.service.IUserHitPrizeService;
+import com.qs.mp.user.service.IUserTicketOrderItemService;
+import com.qs.mp.utils.SecurityUtils;
+import com.qs.mp.web.controller.common.BaseApiController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.AllArgsConstructor;
+import ma.glasnost.orika.MapperFacade;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+
+@RestController
+@RequestMapping("/api/v1/mp/user/exchange")
+@Api(tags = "盲票商城接口")
+@AllArgsConstructor
+public class UserExchangeController extends BaseApiController {
+
+
+  @Autowired
+  private IGoodsService goodsService;
+
+  @Autowired
+  private IGoodsSkuService goodsSkuService;
+
+
+  @Autowired
+  private MapperFacade mapperFacade;
+
+  /**
+   * 商品列表
+   */
+  @PostMapping("/goods/list")
+  @ApiOperation(value = "商品列表" , notes = "获取所有可兑换商品")
+  public TableDataInfo list(@RequestBody Goods goods) {
+    startPage();
+    List<Goods> goodsList = goodsService.list(new LambdaQueryWrapper<Goods>()
+        .eq(null != goods.getCategoryId() && 0 != goods.getCategoryId(), Goods::getCategoryId, goods.getCategoryId())
+        .eq(Goods::getStatus, GoodsStatusEnum.PUT_ON));
+    List<GoodsListVO> goodsListVOList = mapperFacade.mapAsList(goodsList, GoodsListVO.class);
+    TableDataInfo rspData = getDataTable(goodsList);
+    rspData.setRows(goodsListVOList);
+    return rspData;
+  }
+
+
+  /**
+   * 查看商品详情
+   */
+  @PostMapping("/goods/detail")
+  @ApiOperation(value = "查看商品详情" , notes = "根据商品ID,获取商品信息")
+  public AjaxResult getInfo(@RequestBody Goods param) {
+    if (StringUtils.isBlank(param.getGoodsId())) {
+      return AjaxResult.error("参数异常,商品ID缺失");
+    }
+    Goods goods = goodsService.getById(param.getGoodsId());
+    GoodsVO goodsVo = new GoodsVO();
+    BeanUtils.copyProperties(goods, goodsVo);
+    // 查询SKU列表
+    LambdaQueryWrapper<GoodsSku> queryWrapper = new LambdaQueryWrapper<>();
+    queryWrapper.eq(GoodsSku::getGoodsId, goods.getGoodsId());
+    queryWrapper.orderByDesc(GoodsSku::getCreatedTime);
+    List<GoodsSku> skuList = goodsSkuService.list(queryWrapper);
+    if(null != skuList && skuList.size() > 0) {
+      goodsVo.setSkuList(skuList);
+    }
+    return AjaxResult.success(goodsVo);
+  }
+
+}

+ 4 - 4
mp-service/src/main/java/com/qs/mp/admin/domain/Ticket.java

@@ -80,26 +80,26 @@ public class Ticket implements Serializable {
   /**
    * 是否实体纸质票(0否1是)
    */
-  @TableField("IS_PHYSICAL")
+  @TableField("is_physical")
   private Integer isPhysical;
 
   /**
    * 盲票状态;1未付款、2已激活、3已兑奖、4付款中
    */
-  @TableField("STATUS")
+  @TableField("status")
   @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
   private TicketStatusEnum status;
 
   /**
    * 创建时间
    */
-  @TableField("CREATED_TIME")
+  @TableField("created_time")
   private Date createdTime;
 
   /**
    * 更新时间
    */
-  @TableField("UPDATED_TIME")
+  @TableField("updated_time")
   @Version
   private Date updatedTime;
 

+ 19 - 0
mp-service/src/main/java/com/qs/mp/user/domain/param/ExchangeOrderParam.java

@@ -0,0 +1,19 @@
+package com.qs.mp.user.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.List;
+import javax.validation.constraints.NotEmpty;
+import lombok.Data;
+
+@ApiModel(value= "兑换订单参数")
+@Data
+public class ExchangeOrderParam {
+
+	@NotEmpty(message = "商品ID不能为空")
+	@ApiModelProperty(value = "奖品库IDs",required=true)
+	private String goodsId;
+
+	@ApiModelProperty(value = "地址ID",required=false)
+	private Long addrId;
+}

+ 13 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserHitPrizeServiceImpl.java

@@ -16,10 +16,12 @@ import com.qs.mp.common.enums.CouponUseAreaEnum;
 import com.qs.mp.common.enums.PrizeStorageInTypeEnum;
 import com.qs.mp.common.enums.PrizeStorageStatusEnum;
 import com.qs.mp.common.enums.TicketPrizeTypeEnum;
+import com.qs.mp.common.enums.TicketStatusEnum;
 import com.qs.mp.common.enums.UserCouponStatusEnum;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.utils.DateUtils;
 import com.qs.mp.common.utils.LogUtil;
+import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.system.service.id.BizIdGenerator;
 import com.qs.mp.user.domain.UserCoupon;
 import com.qs.mp.user.domain.UserCouponChannel;
@@ -43,6 +45,7 @@ import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.Assert;
 import org.springframework.util.CollectionUtils;
 
 /**
@@ -76,6 +79,9 @@ public class UserHitPrizeServiceImpl extends ServiceImpl<UserHitPrizeMapper, Use
   @Autowired
   private ITicketAwardsService ticketAwardsService;
 
+  @Autowired
+  private ITicketService ticketService;
+
   @Override
   public List<TicketAwardsPrize> listPrize(Ticket ticket, Long userId) {
     UserHitPrize userHitPrize = getOne(new LambdaQueryWrapper<UserHitPrize>().eq(UserHitPrize::getTicketId, ticket.getTicketId()));
@@ -124,6 +130,9 @@ public class UserHitPrizeServiceImpl extends ServiceImpl<UserHitPrizeMapper, Use
 
     // 保存奖品到中奖记录中
     UserHitPrize userHitPrize = getOne(new LambdaQueryWrapper<UserHitPrize>().eq(UserHitPrize::getTicketId, ticket.getTicketId()));
+    if (StringUtils.isNotBlank(userHitPrize.getPrizeId())) {
+      throw new ServiceException("盲票已兑奖");
+    }
     userHitPrize.setPrizeId(prizeId);
     updateById(userHitPrize);
 
@@ -135,6 +144,10 @@ public class UserHitPrizeServiceImpl extends ServiceImpl<UserHitPrizeMapper, Use
     } else {
       userPrizeStorageService.takeInStorage(userId, ticketAwardsPrize, PrizeStorageInTypeEnum.TICKET_CASHED, String.valueOf(userHitPrize.getId()));
     }
+
+    boolean rtn = ticketService.update(new LambdaUpdateWrapper<Ticket>().set(Ticket::getStatus, TicketStatusEnum.CASHED)
+        .eq(Ticket::getTicketId, ticket.getTicketId()).eq(Ticket::getStatus, TicketStatusEnum.ACTIVATED));
+    Assert.isTrue(rtn, "兑奖后更新盲票状态失败。ticketId:" + ticket.getTicketId());
   }