Browse Source

查看幸运数字

chunping 3 years ago
parent
commit
e367a1a310

+ 195 - 0
mp-admin/src/main/java/com/qs/mp/web/controller/api/common/UserTicketController.java

@@ -0,0 +1,195 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.qs.mp.web.controller.api.common;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+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.TicketBoxListVO;
+import com.qs.mp.admin.domain.vo.TicketBoxVO;
+import com.qs.mp.admin.domain.vo.TicketVO;
+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.TicketBoxStatusEnum;
+import com.qs.mp.common.enums.TicketStatusEnum;
+import com.qs.mp.common.enums.UserTicketOrderStatusEnum;
+import com.qs.mp.common.utils.StringUtils;
+import com.qs.mp.user.domain.UserTicketOrder;
+import com.qs.mp.user.domain.UserTicketOrderItem;
+import com.qs.mp.user.service.IUserTicketOrderItemService;
+import com.qs.mp.user.service.IUserTicketOrderService;
+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.List;
+import lombok.AllArgsConstructor;
+import ma.glasnost.orika.MapperFacade;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.util.CollectionUtils;
+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")
+@Api(tags = "渠道盲票商城接口")
+@AllArgsConstructor
+public class UserTicketController extends BaseApiController {
+
+
+  @Autowired
+  private ITicketBoxService ticketBoxService;
+
+  @Autowired
+  private ITicketAwardsPrizeService ticketAwardsPrizeService;
+
+  @Autowired
+  private ITicketService ticketService;
+
+  @Autowired
+  private IUserTicketOrderItemService userTicketOrderItemService;
+
+  @Autowired
+  private MapperFacade mapperFacade;
+
+  /**
+   * 盲票进货列表
+   */
+  @PostMapping("/mall/ticket/list")
+  @ApiOperation(value = "盲票组列表" , notes = "获取所有盲票信息")
+  public TableDataInfo list(@RequestBody TicketBoxParam param) {
+    // TODO 根据标签过滤
+    startPage();
+    List<TicketBox> ticketBoxes = ticketBoxService.list(
+        new LambdaQueryWrapper<TicketBox>().eq(TicketBox::getType, param.getType())
+            .eq(null != param.getCategoryId() && 0 != param.getCategoryId(), TicketBox::getCategoryId, param.getCategoryId())
+            .eq(TicketBox::getStatus, TicketBoxStatusEnum.PUT_ON));
+    List<TicketBoxListVO> ticketBoxListVOList = mapperFacade.mapAsList(ticketBoxes, TicketBoxListVO.class);
+    TableDataInfo rspData = getDataTable(ticketBoxes);
+    rspData.setRows(ticketBoxListVOList);
+    return rspData;
+  }
+
+
+  /**
+   * 查看盲票详情
+   */
+  @PostMapping("/mall/ticket/detail")
+  @ApiOperation(value = "查看盲票详情" , notes = "根据盲票组ID,获取盲票信息")
+  public AjaxResult getInfo(@RequestBody TicketBoxParam param) {
+    if (StringUtils.isBlank(param.getBoxId())) {
+      return AjaxResult.error("参数异常,盲票组ID缺失");
+    }
+    TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
+    TicketBoxVO ticketBoxVO = mapperFacade.map(ticketBox, TicketBoxVO.class);
+    ticketBoxVO.setPrizeList(ticketAwardsPrizeService.listPrizeVO(new QueryWrapper<TicketAwardsPrize>()
+        .eq("t1.box_id", ticketBox.getBoxId()).orderByAsc("t1.sort").orderByDesc("t2.value")));
+    return AjaxResult.success(ticketBoxVO);
+  }
+
+  /**
+   * 扫码查看盲票幸运数字
+   */
+  @PostMapping("/ticket/queryLuckyNum")
+  @ApiOperation(value = "查看盲票幸运数字" , notes = "根据盲票组ID,获取盲票幸运数字")
+  public AjaxResult queryLuckyNum(@RequestBody TicketParam param) {
+    Long userId = SecurityUtils.getLoginUser().getUserId();
+    if (StringUtils.isBlank(param.getTicketId())) {
+      return AjaxResult.error("参数异常,盲票ID缺失");
+    }
+
+    Ticket ticket = ticketService.getById(param.getTicketId());
+    if (null == ticket) {
+      return AjaxResult.error("参数异常,盲票不存在");
+    }
+
+    if (ticket.getStatus() == TicketStatusEnum.CASHED) {
+      return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1017);
+    }
+
+    // 已付款的盲票,需要校验当前用户是否有权限查看
+    if (ticket.getStatus() == TicketStatusEnum.ACTIVATED) {
+      List<UserTicketOrderItem> itemList = userTicketOrderItemService.list(new QueryWrapper<UserTicketOrderItem>().eq("t1.ticket_id", param.getTicketId())
+          .eq("t1.userId", userId).eq("t2.status", UserTicketOrderStatusEnum.FINISHED));
+      if (CollectionUtils.isEmpty(itemList)) {
+        return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1018);
+      }
+    }
+
+    TicketBox ticketBox = ticketBoxService.getById(ticket.getBoxId());
+
+    TicketVO ticketVO = new TicketVO();
+    ticketVO.setPrizeList(ticketAwardsPrizeService.listPrizeVO(new QueryWrapper<TicketAwardsPrize>()
+        .eq("t1.box_id", ticketBox.getBoxId()).orderByAsc("t1.sort").orderByDesc("t2.value")));
+    ticketVO.setTicketId(ticket.getTicketId());
+    ticketVO.setBoxId(ticket.getBoxId());
+    ticketVO.setTitle(ticketBox.getTitle());
+    ticketVO.setSerialNo(ticket.getSerialNo());
+    ticketVO.setFacePrice(ticket.getFacePrice());
+    ticketVO.setSalePrice(ticketBox.getSalePrice());
+    ticketVO.setPlainLuckyNum(ticket.getPlainLuckyNum());
+    ticketVO.setStatus(ticket.getStatus().getValue());
+
+    return AjaxResult.success(ticketVO);
+  }
+
+  /**
+   * 查看能兑奖的奖品
+   */
+  @PostMapping("/ticket/queryHitPrizeList")
+  @ApiOperation(value = "查看兑奖奖品" , notes = "根据盲票ID,查看兑奖奖品")
+  public AjaxResult queryHitPrizeList(@RequestBody TicketParam param) {
+    if (StringUtils.isBlank(param.getTicketId())) {
+      return AjaxResult.error("参数异常,盲票ID缺失");
+    }
+
+    Ticket ticket = ticketService.getById(param.getTicketId());
+    if (null == ticket) {
+      return AjaxResult.error("参数异常,盲票不存在");
+    }
+    if (ticket.getStatus() == TicketStatusEnum.CASHED) {
+      return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1017);
+    }
+    if (ticket.getStatus() != TicketStatusEnum.ACTIVATED) {
+      return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1019);
+    }
+
+//    UserTicketOrder ticketOrder =
+
+    TicketBox ticketBox = ticketBoxService.getById(ticket.getBoxId());
+
+    TicketVO ticketVO = new TicketVO();
+    ticketVO.setPrizeList(ticketAwardsPrizeService.listPrizeVO(new QueryWrapper<TicketAwardsPrize>()
+        .eq("t1.box_id", ticketBox.getBoxId()).orderByAsc("t1.sort").orderByDesc("t2.value")));
+    ticketVO.setTicketId(ticket.getTicketId());
+    ticketVO.setBoxId(ticket.getBoxId());
+    ticketVO.setTitle(ticketBox.getTitle());
+    ticketVO.setSerialNo(ticket.getSerialNo());
+    ticketVO.setFacePrice(ticket.getFacePrice());
+    ticketVO.setSalePrice(ticketBox.getSalePrice());
+    ticketVO.setPlainLuckyNum(ticket.getPlainLuckyNum());
+    ticketVO.setStatus(ticket.getStatus().getValue());
+
+    return AjaxResult.success(ticketVO);
+  }
+
+}

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

@@ -23,7 +23,9 @@ public enum ErrorCodeEnum {
   ERROR_CODE_1014(1014, "当前账号不能删除"),
   ERROR_CODE_1015(1015, "保存失败"),
   ERROR_CODE_1016(1016, "账号未认证,请先完成认证再提交"),
-
+  ERROR_CODE_1017(1017, "盲票已兑奖"),
+  ERROR_CODE_1018(1018, "无权限查看"),
+  ERROR_CODE_1019(1019, "盲票未付款"),
   ;
   private int code;
   private String msg;

+ 43 - 0
mp-common/src/main/java/com/qs/mp/common/enums/UserTicketOrderStatusEnum.java

@@ -0,0 +1,43 @@
+package com.qs.mp.common.enums;
+
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.annotation.JSONType;
+import com.baomidou.mybatisplus.annotation.IEnum;
+import com.qs.mp.common.json.EnumValueDeserializer;
+
+/**
+ *
+ * 用户盲票购买订单状态
+ *
+ */
+@JSONType(deserializer = EnumValueDeserializer.class)
+public enum UserTicketOrderStatusEnum implements IEnum<Integer> {
+  CANCELED(-1, "已取消"),
+  NOT_PAY(0, "待付款"),
+  FINISHED(1, "已完成");
+
+  private final int value;
+  private final String desc;
+
+  UserTicketOrderStatusEnum(final int value, final String desc) {
+    this.value = value;
+    this.desc = desc;
+  }
+
+  @Override
+  public Integer getValue() {
+    return value;
+  }
+
+  /**
+   * 重写toString,单个转化成json
+   * @return
+   */
+  @Override
+  public String toString() {
+    JSONObject object = new JSONObject();
+    object.put("value",value);
+    object.put("desc", desc);
+    return object.toString();
+  }
+}

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

@@ -14,7 +14,7 @@ import lombok.Data;
 /**
  * @describe 盲票实体类
  * @auther quanshu
- * @create 2022-03-02 12:25:55
+ * @create 2022-03-08 11:35:25
  */
 @TableName("mp_ticket")
 @Data
@@ -25,7 +25,7 @@ public class Ticket implements Serializable {
   /**
    * 主键
    */
-  @TableId(value = "ticket_id" , type = IdType.INPUT)
+  @TableId(value = "ticket_id", type = IdType.INPUT)
   private String ticketId;
 
   /**
@@ -71,136 +71,34 @@ public class Ticket implements Serializable {
   private Integer plainLuckyNum;
 
   /**
-   * 抽奖数字1描述(json格式,包含数字、奖项)
+   * 抽奖数字描述(json格式,包含数字、奖项)
    */
-  @TableField("draw_num1")
-  private String drawNum1;
-
-  /**
-   * 抽奖数字2描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num2")
-  private String drawNum2;
-
-  /**
-   * 抽奖数字3描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num3")
-  private String drawNum3;
-
-  /**
-   * 抽奖数字4描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num4")
-  private String drawNum4;
-
-  /**
-   * 抽奖数字5描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num5")
-  private String drawNum5;
-
-  /**
-   * 抽奖数字6描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num6")
-  private String drawNum6;
-
-  /**
-   * 抽奖数字7描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num7")
-  private String drawNum7;
-
-  /**
-   * 抽奖数字8描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num8")
-  private String drawNum8;
-
-  /**
-   * 抽奖数字9描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num9")
-  private String drawNum9;
-
-  /**
-   * 抽奖数字10描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num10")
-  private String drawNum10;
-
-  /**
-   * 抽奖数字11描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num11")
-  private String drawNum11;
-
-  /**
-   * 抽奖数字12描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num12")
-  private String drawNum12;
-
-  /**
-   * 抽奖数字13描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num13")
-  private String drawNum13;
-
-  /**
-   * 抽奖数字14描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num14")
-  private String drawNum14;
-
-  /**
-   * 抽奖数字15描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num15")
-  private String drawNum15;
-
-  /**
-   * 抽奖数字16描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num16")
-  private String drawNum16;
-
-  /**
-   * 抽奖数字17描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num17")
-  private String drawNum17;
-
-  /**
-   * 抽奖数字18描述(json格式,包含数字、奖项)
-   */
-  @TableField("draw_num18")
-  private String drawNum18;
+  @TableField("draw_num")
+  private String drawNum;
 
   /**
    * 是否实体纸质票(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")
   private Date updatedTime;
 
 

+ 7 - 2
mp-service/src/main/java/com/qs/mp/admin/domain/vo/TicketVO.java

@@ -39,14 +39,19 @@ public class TicketVO {
    */
   private Integer facePrice;
 
+  /**
+   *
+   */
+  private Integer salePrice;
+
   /**
    * 明文幸运数字
    */
   private Integer plainLuckyNum;
 
   /**
-   * 盲票状态(初始、已激活、已兑奖
+   * 盲票状态(未付款、已激活、已兑奖、付款中
    */
-  private String status;
+  private Integer status;
 
 }

+ 1 - 1
mp-service/src/main/java/com/qs/mp/admin/mapper/TicketMapper.java

@@ -5,7 +5,7 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 
 /**
  * @auther quanshu
- * @create 2022-03-02 12:25:55
+ * @create 2022-03-08 11:35:25
  * @describe 盲票mapper类
  */
 public interface TicketMapper extends BaseMapper<Ticket> {

+ 1 - 1
mp-service/src/main/java/com/qs/mp/admin/service/ITicketService.java

@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * </p>
  *
  * @author quanshu
- * @since 2022-03-02
+ * @since 2022-03-08
  */
 public interface ITicketService extends IService<Ticket> {
 

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

@@ -12,7 +12,7 @@ import org.springframework.stereotype.Service;
  * </p>
  *
  * @author quanshu
- * @since 2022-03-02
+ * @since 2022-03-08
  */
 @Service
 public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> implements ITicketService {

+ 5 - 1
mp-service/src/main/java/com/qs/mp/user/domain/UserTicketOrder.java

@@ -1,9 +1,12 @@
 package com.qs.mp.user.domain;
 
+import com.alibaba.fastjson.annotation.JSONField;
+import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.qs.mp.common.enums.UserTicketOrderStatusEnum;
 import java.io.Serializable;
 import java.util.Date;
 import lombok.Data;
@@ -77,7 +80,8 @@ public class UserTicketOrder implements Serializable {
    * 订单状态;-1 已取消 0:待付款 1:已完成
    */
   @TableField("status")
-  private Integer status;
+  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+  private UserTicketOrderStatusEnum status;
 
   /**
    * 创建时间

+ 7 - 1
mp-service/src/main/java/com/qs/mp/user/mapper/UserTicketOrderItemMapper.java

@@ -1,7 +1,13 @@
 package com.qs.mp.user.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.qs.mp.admin.domain.TicketAwardsPrize;
+import com.qs.mp.admin.domain.vo.TicketAwardsPrizeVO;
 import com.qs.mp.user.domain.UserTicketOrderItem;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * @auther quanshu
@@ -9,5 +15,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  * @describe 用户盲票订单明细mapper类
  */
 public interface UserTicketOrderItemMapper extends BaseMapper<UserTicketOrderItem> {
-
+  List<UserTicketOrderItem> listTicketOrderItemVO(@Param(Constants.WRAPPER) Wrapper<UserTicketOrderItem> queryWrapper);
 }

+ 6 - 23
mp-service/src/main/resources/mapper/admin/TicketMapper.xml

@@ -12,33 +12,16 @@
         <result column="face_price" property="facePrice" />
         <result column="cipher_lucky_num" property="cipherLuckyNum" />
         <result column="plain_lucky_num" property="plainLuckyNum" />
-        <result column="draw_num1" property="drawNum1" />
-        <result column="draw_num2" property="drawNum2" />
-        <result column="draw_num3" property="drawNum3" />
-        <result column="draw_num4" property="drawNum4" />
-        <result column="draw_num5" property="drawNum5" />
-        <result column="draw_num6" property="drawNum6" />
-        <result column="draw_num7" property="drawNum7" />
-        <result column="draw_num8" property="drawNum8" />
-        <result column="draw_num9" property="drawNum9" />
-        <result column="draw_num10" property="drawNum10" />
-        <result column="draw_num11" property="drawNum11" />
-        <result column="draw_num12" property="drawNum12" />
-        <result column="draw_num13" property="drawNum13" />
-        <result column="draw_num14" property="drawNum14" />
-        <result column="draw_num15" property="drawNum15" />
-        <result column="draw_num16" property="drawNum16" />
-        <result column="draw_num17" property="drawNum17" />
-        <result column="draw_num18" property="drawNum18" />
-        <result column="is_physical" property="isPhysical" />
-        <result column="status" property="status" />
-        <result column="created_time" property="createdTime" />
-        <result column="updated_time" property="updatedTime" />
+        <result column="draw_num" property="drawNum" />
+        <result column="IS_PHYSICAL" property="isPhysical" />
+        <result column="STATUS" property="status" />
+        <result column="CREATED_TIME" property="createdTime" />
+        <result column="UPDATED_TIME" property="updatedTime" />
     </resultMap>
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        ticket_id, box_id, pkg_id, title, serial_no, face_price, cipher_lucky_num, plain_lucky_num, draw_num1, draw_num2, draw_num3, draw_num4, draw_num5, draw_num6, draw_num7, draw_num8, draw_num9, draw_num10, draw_num11, draw_num12, draw_num13, draw_num14, draw_num15, draw_num16, draw_num17, draw_num18, is_physical, status, created_time, updated_time
+        ticket_id, box_id, pkg_id, title, serial_no, face_price, cipher_lucky_num, plain_lucky_num, draw_num, IS_PHYSICAL, STATUS, CREATED_TIME, UPDATED_TIME
     </sql>
 
 </mapper>

+ 8 - 1
mp-service/src/main/resources/mapper/user/UserTicketOrderItemMapper.xml

@@ -18,4 +18,11 @@
         item_id, order_id, user_id, box_id, ticket_id, created_time, updated_time
     </sql>
 
-</mapper>
+    <select id="listTicketOrderItemVO" resultMap="BaseResultMap">
+        select t1.*
+        from mp_ticket_order_item t1
+        left join mp_ticket_order t2 on t1.order_id = t2.order_id
+            ${ew.customSqlSegment}
+    </select>
+
+</mapper>