Просмотр исходного кода

Merge branch 'dev' of http://113.31.163.91:7777/quanshu/mp-server.git into dev

Liugl 3 лет назад
Родитель
Сommit
1bc5bb7850
17 измененных файлов с 329 добавлено и 93 удалено
  1. 59 7
      mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java
  2. 4 4
      mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelOrderController.java
  3. 46 68
      mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserDeliverOrderController.java
  4. 8 8
      mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserTicketController.java
  5. 45 0
      mp-common/src/main/java/com/qs/mp/common/enums/DeliverOrderStatusEnum.java
  6. 3 0
      mp-common/src/main/java/com/qs/mp/common/enums/TicketBoxStatusEnum.java
  7. 3 0
      mp-common/src/main/java/com/qs/mp/common/enums/TicketPkgStatusEnum.java
  8. 2 2
      mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketParam.java
  9. 6 0
      mp-service/src/main/java/com/qs/mp/admin/service/ITicketBoxService.java
  10. 10 0
      mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketBoxServiceImpl.java
  11. 2 1
      mp-service/src/main/java/com/qs/mp/framework/redis/RedisKey.java
  12. 11 1
      mp-service/src/main/java/com/qs/mp/user/domain/UserDeliverOrder.java
  13. 19 0
      mp-service/src/main/java/com/qs/mp/user/domain/param/DeliverOrderParam.java
  14. 38 0
      mp-service/src/main/java/com/qs/mp/user/domain/vo/DeliverOrderSettleVO.java
  15. 23 0
      mp-service/src/main/java/com/qs/mp/user/service/IUserDeliverOrderService.java
  16. 47 0
      mp-service/src/main/java/com/qs/mp/user/service/impl/UserDeliverOrderServiceImpl.java
  17. 3 2
      mp-service/src/main/resources/mapper/user/UserDeliverOrderMapper.xml

+ 59 - 7
mp-admin/src/main/java/com/qs/mp/web/controller/api/admin/TicketBoxMgrController.java

@@ -3,6 +3,7 @@ package com.qs.mp.web.controller.api.admin;
 import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.qs.mp.admin.domain.Ticket;
 import com.qs.mp.admin.domain.TicketBox;
 import com.qs.mp.admin.domain.excel.TicketExcel;
@@ -22,6 +23,7 @@ import com.qs.mp.common.core.page.TableDataInfo;
 import com.qs.mp.common.enums.BusinessType;
 import com.qs.mp.common.enums.ChannelRoleEnum;
 import com.qs.mp.common.enums.ErrorCodeEnum;
+import com.qs.mp.common.enums.TicketBoxStatusEnum;
 import com.qs.mp.common.enums.TicketTypeEnum;
 import com.qs.mp.common.utils.LogUtil;
 import com.qs.mp.system.domain.SysUser;
@@ -73,12 +75,12 @@ public class TicketBoxMgrController extends BaseApiController {
 
 	@Autowired
 	private MapperFacade mapperFacade;
-	
+
 
 	@Value("${wx-channel.appId}")
 	private String channelAppId;
-	
-	
+
+
 	@Value("${mp.exportUrl}")
 	private String exportUrl;
 
@@ -96,7 +98,7 @@ public class TicketBoxMgrController extends BaseApiController {
 
 	/**
 	 * 新增盲票
-	 * 
+	 *
 	 * @param
 	 * @return
 	 */
@@ -115,6 +117,56 @@ public class TicketBoxMgrController extends BaseApiController {
 		return rtn ? AjaxResult.success() : AjaxResult.error("创建失败");
 	}
 
+	/**
+	 * 盲票上下架
+	 *
+	 * @param
+	 * @return
+	 */
+	@ApiOperation(value = "盲票上下架", notes = "管理端盲票上下架")
+	@PostMapping("/put")
+	public AjaxResult putOnOff(@RequestBody TicketBox param) {
+		if (StringUtils.isBlank(param.getBoxId()) || param.getStatus() == null) {
+				return AjaxResult.error("参数缺失");
+		}
+		TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
+		if (param.getStatus() == TicketBoxStatusEnum.PUT_OFF) {
+			if (ticketBox.getStatus() != TicketBoxStatusEnum.PUT_ON) {
+				return AjaxResult.error("当前状态不是已上架,不能下架");
+			}
+			ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getStatus, TicketBoxStatusEnum.PUT_OFF)
+					.eq(TicketBox::getBoxId, ticketBox.getBoxId()));
+		} else if (param.getStatus() == TicketBoxStatusEnum.PUT_ON) {
+			if (ticketBox.getStatus() != TicketBoxStatusEnum.PUT_OFF && ticketBox.getStatus() != TicketBoxStatusEnum.DONE) {
+				return AjaxResult.error("当前状态不是待上架或已下架,不能上架");
+			}
+			ticketBoxService.update(new LambdaUpdateWrapper<TicketBox>().set(TicketBox::getStatus, TicketBoxStatusEnum.PUT_ON)
+					.eq(TicketBox::getBoxId, ticketBox.getBoxId()));
+		}
+
+		return AjaxResult.success("操作成功");
+	}
+
+	/**
+	 * 盲票删除
+	 *
+	 * @param
+	 * @return
+	 */
+	@ApiOperation(value = "盲票删除", notes = "管理端盲票删除")
+	@PostMapping("/remove")
+	public AjaxResult remove(@RequestBody TicketBox param) {
+		if (StringUtils.isBlank(param.getBoxId())) {
+			return AjaxResult.error("参数缺失");
+		}
+		TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
+		if (ticketBox.getStatus() != TicketBoxStatusEnum.DONE) {
+			return AjaxResult.error("当前状态不是待上架,不能删除");
+		}
+		ticketBoxService.removeTicketBox(param.getBoxId());
+		return AjaxResult.success("删除成功");
+	}
+
 	@Log(title = "盲票导出", businessType = BusinessType.EXPORT)
 	@PostMapping("/export")
 	public AjaxResult exportTicket(@RequestBody BathIdParam ids) {
@@ -171,8 +223,8 @@ public class TicketBoxMgrController extends BaseApiController {
 		ExcelUtil<TicketExcel> util = new ExcelUtil<TicketExcel>(TicketExcel.class);
 		return util.exportExcel(excelList, "盲票导出数据", true);
 	}
-	
-	
+
+
     @GetMapping("/importTemplate")
     public AjaxResult importTemplate()
     {
@@ -201,5 +253,5 @@ public class TicketBoxMgrController extends BaseApiController {
 		}
 	}
 
-	
+
 }

+ 4 - 4
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelOrderController.java

@@ -76,7 +76,7 @@ public class ChannelOrderController extends BaseApiController {
   private ITicketBoxService ticketBoxService;
 
   @Autowired
-  private IUserAddrService channelAddrService;
+  private IUserAddrService userAddrService;
 
   @Autowired
   private MapperFacade mapperFacade;
@@ -136,14 +136,14 @@ public class ChannelOrderController extends BaseApiController {
   @PostMapping("/order/settle")
   @ApiOperation(value = "订单结算" , notes = "购物车里点结算或者单个盲票组商品上点立即购买")
   public AjaxResult settle(@Valid @RequestBody ChannelOrderParam param) {
-    Long channelId = SecurityUtils.getLoginUser().getChannelId();
+    Long userId = SecurityUtils.getLoginUser().getUserId();
 
     ChannelOrderSettleVO orderSettleVO = new ChannelOrderSettleVO();
 
     // 收货地址,如果用户选了地址,则此处不做处理
     if (null == param.getAddrId() || 0 == param.getAddrId()) {
       //读取默认地址
-      UserAddr addr = channelAddrService.getDefaultChannelAddr(channelId);
+      UserAddr addr = userAddrService.getDefaultChannelAddr(userId);
       if (null != addr) {
         orderSettleVO.setAddr(addr);
       }
@@ -178,7 +178,7 @@ public class ChannelOrderController extends BaseApiController {
     orderSettleVO.setPkgNum(pkgNum);
 
     // 缓存订单结算对象
-    redisCache.setCacheObject(RedisKey.build(RedisKey.CHANNEL_ORDER_KEY, channelId), orderSettleVO, 10, TimeUnit.MINUTES);
+    redisCache.setCacheObject(RedisKey.build(RedisKey.CHANNEL_ORDER_KEY, userId), orderSettleVO, 10, TimeUnit.MINUTES);
     return AjaxResult.success(orderSettleVO);
   }
 

+ 46 - 68
mp-admin/src/main/java/com/qs/mp/web/controller/api/user/UserDeliverOrderController.java

@@ -24,15 +24,24 @@ import com.qs.mp.common.core.domain.AjaxResult;
 import com.qs.mp.common.core.redis.RedisCache;
 import com.qs.mp.common.enums.BizTypeEnum;
 import com.qs.mp.common.enums.CouponUseAreaEnum;
+import com.qs.mp.common.enums.PrizeStorageStatusEnum;
 import com.qs.mp.common.exception.ServiceException;
 import com.qs.mp.common.utils.StringUtils;
 import com.qs.mp.framework.redis.RedisKey;
 import com.qs.mp.pay.service.IWalletService;
+import com.qs.mp.user.domain.UserAddr;
+import com.qs.mp.user.domain.UserDeliverOrder;
+import com.qs.mp.user.domain.UserPrizeStorage;
 import com.qs.mp.user.domain.UserTicketOrder;
+import com.qs.mp.user.domain.param.DeliverOrderParam;
 import com.qs.mp.user.domain.param.TicketOrderParam;
+import com.qs.mp.user.domain.vo.DeliverOrderSettleVO;
 import com.qs.mp.user.domain.vo.TicketOrderSettleVO;
 import com.qs.mp.user.domain.vo.UserCouponVO;
+import com.qs.mp.user.service.IUserAddrService;
 import com.qs.mp.user.service.IUserCouponService;
+import com.qs.mp.user.service.IUserDeliverOrderService;
+import com.qs.mp.user.service.IUserPrizeStorageService;
 import com.qs.mp.user.service.IUserTicketOrderService;
 import com.qs.mp.utils.SecurityUtils;
 import com.qs.mp.web.controller.common.BaseApiController;
@@ -53,25 +62,18 @@ import org.springframework.web.bind.annotation.RestController;
 
 @RestController
 @RequestMapping("/api/v1/mp/user/deliver")
-@Api(tags = "用户端购买盲票接口")
+@Api(tags = "用户端奖品提货接口")
 @AllArgsConstructor
 public class UserDeliverOrderController extends BaseApiController {
 
-
-  @Autowired
-  private ITicketBoxService ticketBoxService;
-
-  @Autowired
-  private IUserTicketOrderService userTicketOrderService;
-
   @Autowired
-  private ITicketService ticketService;
+  private IUserPrizeStorageService userPrizeStorageService;
 
   @Autowired
-  private IUserCouponService userCouponService;
+  private IUserAddrService userAddrService;
 
   @Autowired
-  private ICouponTicketService couponTicketService;
+  private IUserDeliverOrderService userDeliverOrderService;
 
   @Autowired
   private IWalletService walletService;
@@ -84,88 +86,64 @@ public class UserDeliverOrderController extends BaseApiController {
 
 
   /**
-   * 订单结算,每次更换优惠券时需重新请求此接口
+   * 订单结算,每次更换地址时需重新请求此接口
    */
   @PostMapping("/order/settle")
-  @ApiOperation(value = "订单结算" , notes = "单个盲票商品上点立即购买")
-  public AjaxResult settle(@Valid @RequestBody TicketOrderParam param) {
-    if (StringUtils.isBlank(param.getTicketId()) && StringUtils.isBlank(param.getBoxId())) {
-      return AjaxResult.error("参数缺失");
-    }
+  @ApiOperation(value = "订单结算" , notes = "奖品库里点提货")
+  public AjaxResult settle(@Valid @RequestBody DeliverOrderParam param) {
     Long userId = SecurityUtils.getLoginUser().getUserId();
 
-    TicketOrderSettleVO orderSettleVO = new TicketOrderSettleVO();
+    DeliverOrderSettleVO orderSettleVO = new DeliverOrderSettleVO();
 
+    // 收货地址,如果用户选了地址,则此处不做处理
+    if (null == param.getAddrId() || 0 == param.getAddrId()) {
+      //读取默认地址
+      UserAddr addr = userAddrService.getDefaultChannelAddr(userId);
+      if (null != addr) {
+        orderSettleVO.setAddr(addr);
+      }
+    }
 
     // 订单金额计算
     Integer orderAmt = 0;
-    Integer discountAmt = 0;
-    TicketBox ticketBox;
-    if (StringUtils.isNotBlank(param.getTicketId())) {
-      // 线下扫码购票
-      Ticket ticket = ticketService.getById(param.getTicketId());
-      ticketBox = ticketBoxService.getById(ticket.getBoxId());
-      orderAmt = ticketBox.getSalePrice();
-    } else {
-      // 线上购票
-      ticketBox = ticketBoxService.getById(param.getBoxId());
-      orderAmt = ticketBox.getSalePrice() * param.getOrderNum();
-    }
+    Integer freightAmt = 0;
+
+    List<UserPrizeStorage> prizeStorageList = userPrizeStorageService.list(new LambdaQueryWrapper<UserPrizeStorage>()
+        .eq(UserPrizeStorage::getUserId, userId).eq(UserPrizeStorage::getStatus, PrizeStorageStatusEnum.NOT_DISTRIBUTED)
+        .in(UserPrizeStorage::getStorageId, param.getIds()));
 
-    if (param.getAutoCoupon() == 1) {
-      // 系统自动选择优惠券,按照金额从大到小排序
-      List<UserCouponVO> userCouponList = userCouponService.listTicketOrderCoupon(userId);
-      for (UserCouponVO userCouponVO : userCouponList) {
-        if (orderAmt >= userCouponVO.getMinOrderAmt() && orderAmt >= userCouponVO.getDiscount()) {
-          if (userCouponVO.getUseArea() == CouponUseAreaEnum.PRE_SCOPE) {
-            // 使用范围验证
-            List<CouponTicket> couponTicketList = couponTicketService.list(new LambdaQueryWrapper<CouponTicket>()
-                .eq(CouponTicket::getCouponId, userCouponVO.getCouponId()).eq(CouponTicket::getBoxId, ticketBox.getBoxId()));
-            if (CollectionUtils.isEmpty(couponTicketList)) {
-              continue;
-            }
-          }
-          orderSettleVO.getCouponList().add(userCouponVO);
-          discountAmt = userCouponVO.getDiscount();
-        }
-      }
-    } else if (!CollectionUtils.isEmpty(param.getUserCouponIds())){
-      // 查询指定券
-      orderSettleVO.setCouponList(userCouponService.listTicketOrderCouponByIds(param.getUserCouponIds()));
-    }
 
     orderSettleVO.setOrderAmt(orderAmt);
-    orderSettleVO.setDiscountAmt(discountAmt);
-    // 当前没有运费和优惠,实付金额=订单金额
-    orderSettleVO.setPayAmt(orderAmt - discountAmt);
-    orderSettleVO.setOrderNum(param.getOrderNum());
-    orderSettleVO.setBoxId(param.getBoxId());
-    orderSettleVO.setTicketId(param.getTicketId());
-    orderSettleVO.setPicUrl(ticketBox.getPicUrl());
+    orderSettleVO.setFreightAmt(freightAmt);
+    orderSettleVO.setPayAmt(orderAmt + freightAmt);
+    orderSettleVO.setPrizeList(prizeStorageList);
 
     // 缓存订单结算对象
-    redisCache.setCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId), orderSettleVO, 10, TimeUnit.MINUTES);
+    redisCache.setCacheObject(RedisKey.build(RedisKey.USER_DELIVER_ORDER_KEY, userId), orderSettleVO, 10, TimeUnit.MINUTES);
     return AjaxResult.success(orderSettleVO);
   }
 
-
   /**
    * 提交订单
    */
   @PostMapping("/order/submit")
   @ApiOperation(value = "提交订单" , notes = "在订单确认页面提交")
-  public AjaxResult submit(@RequestBody UserTicketOrder order) {
+  public AjaxResult submit(@RequestBody UserDeliverOrder order) {
     Long userId = SecurityUtils.getLoginUser().getUserId();
-    TicketOrderSettleVO orderSettleVO = redisCache.getCacheObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
+    DeliverOrderSettleVO orderSettleVO = redisCache.getCacheObject(RedisKey.build(RedisKey.USER_DELIVER_ORDER_KEY, userId));
     if (null == orderSettleVO) {
       return AjaxResult.error("订单已过期,请重新下单");
     }
-    String orderId = userTicketOrderService.submitOrder(userId, orderSettleVO);
-
+    String orderId = userDeliverOrderService.submitOrder(userId, orderSettleVO);
+    JSONObject jsonObject = new JSONObject();
+    jsonObject.put("orderId", orderId);
+    if (orderSettleVO.getPayAmt() > 0) {
+      jsonObject.put("needPay", 1);
+    }
     // 清除缓存的订单
     redisCache.deleteObject(RedisKey.build(RedisKey.USER_TICKET_ORDER_KEY, userId));
 
-    return AjaxResult.success(orderId);
+    return AjaxResult.success(jsonObject);
   }
 
 
@@ -175,7 +153,7 @@ public class UserDeliverOrderController extends BaseApiController {
   @PostMapping("/order/cancel")
   @ApiOperation(value = "取消订单" , notes = "在订单列表页面取消")
   public AjaxResult cancel(@RequestBody ChannelOrder order) {
-    userTicketOrderService.cancelOrder(order.getOrderId());
+    userDeliverOrderService.cancelOrder(order.getOrderId());
     return AjaxResult.success("取消成功");
   }
 
@@ -186,10 +164,10 @@ public class UserDeliverOrderController extends BaseApiController {
   @ApiOperation(value = "订单支付" , notes = "在盲票页面支付")
   public AjaxResult pay(@Valid @RequestBody OrderPayParam param) {
     String openId = SecurityUtils.getLoginUser().getUser().getOpenId();
-    UserTicketOrder ticketOrder = userTicketOrderService.getById(param.getOrderId());
+    UserDeliverOrder deliverOrder = userDeliverOrderService.getById(param.getOrderId());
     JSONObject jsonObject;
     try {
-      jsonObject = walletService.pay(BizTypeEnum.USER_ORDER, param.getOrderId(), openId, ticketOrder.getPayAmt());
+      jsonObject = walletService.pay(BizTypeEnum.USER_ORDER, param.getOrderId(), openId, deliverOrder.getFreightAmt());
     }catch (ServiceException e) {
       return AjaxResult.error(e.getMessage());
     }

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

@@ -113,11 +113,11 @@ public class UserTicketController extends BaseApiController {
   @ApiOperation(value = "查看盲票幸运数字" , notes = "根据盲票组ID,获取盲票幸运数字")
   public AjaxResult queryLuckyNum(@RequestBody TicketParam param) {
     Long userId = SecurityUtils.getLoginUser().getUserId();
-    if (StringUtils.isBlank(param.getTicketId())) {
-      return AjaxResult.error("参数异常,盲票ID缺失");
+    if (StringUtils.isBlank(param.getSerialNo())) {
+      return AjaxResult.error("参数异常,盲票序列号缺失");
     }
 
-    Ticket ticket = ticketService.getById(param.getTicketId());
+    Ticket ticket = ticketService.getOne(new LambdaQueryWrapper<Ticket>().eq(Ticket::getSerialNo, param.getSerialNo()));
     if (null == ticket) {
       return AjaxResult.error("参数异常,盲票不存在");
     }
@@ -128,7 +128,7 @@ public class UserTicketController extends BaseApiController {
 
     // 已付款的盲票,需要校验当前用户是否有权限查看
     if (ticket.getStatus() == TicketStatusEnum.ACTIVATED) {
-      UserTicketOrderItem orderItem = userTicketOrderItemService.queryFinishedOrderItem(userId, param.getTicketId());
+      UserTicketOrderItem orderItem = userTicketOrderItemService.queryFinishedOrderItem(userId, ticket.getTicketId());
       if (null == orderItem) {
         return AjaxResult.error(ErrorCodeEnum.ERROR_CODE_1018);
       }
@@ -158,11 +158,11 @@ public class UserTicketController extends BaseApiController {
   @ApiOperation(value = "查看兑奖奖品" , notes = "根据盲票ID,查看兑奖奖品")
   public AjaxResult queryHitPrizeList(@RequestBody TicketParam param) {
     Long userId = SecurityUtils.getLoginUser().getUserId();
-    if (StringUtils.isBlank(param.getTicketId())) {
+    if (StringUtils.isBlank(param.getSerialNo())) {
       return AjaxResult.error("参数异常,盲票ID缺失");
     }
 
-    Ticket ticket = ticketService.getById(param.getTicketId());
+    Ticket ticket = ticketService.getOne(new LambdaQueryWrapper<Ticket>().eq(Ticket::getSerialNo, param.getSerialNo()));
     if (null == ticket) {
       return AjaxResult.error("参数异常,盲票不存在");
     }
@@ -184,12 +184,12 @@ public class UserTicketController extends BaseApiController {
   @ApiOperation(value = "兑奖" , notes = "选择奖品兑奖")
   public AjaxResult cashPrize(@RequestBody TicketParam param) {
     Long userId = SecurityUtils.getLoginUser().getUserId();
-    if (StringUtils.isBlank(param.getTicketId()) || StringUtils.isBlank(param.getAwardsId())
+    if (StringUtils.isBlank(param.getSerialNo()) || StringUtils.isBlank(param.getAwardsId())
     || StringUtils.isBlank(param.getPrizeId())) {
       return AjaxResult.error("参数缺失");
     }
 
-    Ticket ticket = ticketService.getById(param.getTicketId());
+    Ticket ticket = ticketService.getOne(new LambdaQueryWrapper<Ticket>().eq(Ticket::getSerialNo, param.getSerialNo()));
     if (null == ticket) {
       return AjaxResult.error("参数异常,盲票不存在");
     }

+ 45 - 0
mp-common/src/main/java/com/qs/mp/common/enums/DeliverOrderStatusEnum.java

@@ -0,0 +1,45 @@
+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 DeliverOrderStatusEnum implements IEnum<Integer> {
+  CANCELED(-1, "已取消"),
+  NOT_PAY(0, "待付款"),
+  NOT_DELIVER(1, "待发货"),
+  NOT_CONFIRM(2, "待收货"),
+  FINISHED(3, "已完成");
+
+  private final int value;
+  private final String desc;
+
+  DeliverOrderStatusEnum(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();
+  }
+}

+ 3 - 0
mp-common/src/main/java/com/qs/mp/common/enums/TicketBoxStatusEnum.java

@@ -1,13 +1,16 @@
 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 TicketBoxStatusEnum implements IEnum<String> {
 
 

+ 3 - 0
mp-common/src/main/java/com/qs/mp/common/enums/TicketPkgStatusEnum.java

@@ -1,13 +1,16 @@
 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 TicketPkgStatusEnum implements IEnum<String> {
 
   FOR_SALE("forSale", "待售"),

+ 2 - 2
mp-service/src/main/java/com/qs/mp/admin/domain/param/TicketParam.java

@@ -10,8 +10,8 @@ import lombok.Data;
 @Data
 public class TicketParam {
 
-	@ApiModelProperty(value = "盲票ID",required=false)
-	private String ticketId;
+	@ApiModelProperty(value = "盲票序列号",required=false)
+	private String serialNo;
 
 	@ApiModelProperty(value = "奖项ID",required=false)
 	private String awardsId;

+ 6 - 0
mp-service/src/main/java/com/qs/mp/admin/service/ITicketBoxService.java

@@ -26,4 +26,10 @@ public interface ITicketBoxService extends IService<TicketBox> {
    * @param boxId
    */
   void generateTicket(String boxId);
+
+  /**
+   * 删除票组
+   * @param boxId
+   */
+  void removeTicketBox(String boxId);
 }

+ 10 - 0
mp-service/src/main/java/com/qs/mp/admin/service/impl/TicketBoxServiceImpl.java

@@ -154,6 +154,16 @@ public class TicketBoxServiceImpl extends ServiceImpl<TicketBoxMapper, TicketBox
     return true;
   }
 
+  @Override
+  @Transactional
+  public void removeTicketBox(String boxId) {
+    removeById(boxId);
+    ticketPackageService.remove(new LambdaQueryWrapper<TicketPackage>().eq(TicketPackage::getBoxId, boxId));
+    ticketService.remove(new LambdaQueryWrapper<Ticket>().eq(Ticket::getBoxId, boxId));
+    ticketAwardsService.remove(new LambdaQueryWrapper<TicketAwards>().eq(TicketAwards::getBoxId, boxId));
+    ticketAwardsPrizeService.remove(new LambdaQueryWrapper<TicketAwardsPrize>().eq(TicketAwardsPrize::getBoxId, boxId));
+  }
+
   @Override
   @Transactional
   public void generateTicket(String boxId) {

+ 2 - 1
mp-service/src/main/java/com/qs/mp/framework/redis/RedisKey.java

@@ -11,7 +11,8 @@ import com.qs.mp.common.utils.MessageHelper;
 public enum RedisKey {
     WX_APP_TOKEN_KEY("app_token_key_{0}", "小程序app token"),
     CHANNEL_ORDER_KEY("channel_order_{0}", "经销商下的盲票采购单"),
-    USER_TICKET_ORDER_KEY("user_ticket_order_key_{0}", "用户购票订单");
+    USER_TICKET_ORDER_KEY("user_ticket_order_key_{0}", "用户购票订单"),
+    USER_DELIVER_ORDER_KEY("user_deliver_order_key_{0}", "用户提货订单");
 
     public String keyTemplate;
     public String desc;

+ 11 - 1
mp-service/src/main/java/com/qs/mp/user/domain/UserDeliverOrder.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.DeliverOrderStatusEnum;
 import java.io.Serializable;
 import java.util.Date;
 import lombok.Data;
@@ -73,6 +76,12 @@ public class UserDeliverOrder implements Serializable {
   @TableField("order_num")
   private Integer orderNum;
 
+  /**
+   * 支付金额
+   */
+  @TableField("pay_amt")
+  private Integer payAmt;
+
   /**
    * 运费
    */
@@ -101,7 +110,8 @@ public class UserDeliverOrder implements Serializable {
    * 订单状态;-1 已取消 0:待付款 1:待发货 2:待收货 3:已完成
    */
   @TableField("status")
-  private Integer status;
+  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+  private DeliverOrderStatusEnum status;
 
   /**
    * 创建时间

+ 19 - 0
mp-service/src/main/java/com/qs/mp/user/domain/param/DeliverOrderParam.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 DeliverOrderParam {
+
+	@NotEmpty(message = "奖品库ID不能为空")
+	@ApiModelProperty(value = "奖品库IDs",required=true)
+	private List<String> ids;
+
+	@ApiModelProperty(value = "地址ID",required=false)
+	private Long addrId;
+}

+ 38 - 0
mp-service/src/main/java/com/qs/mp/user/domain/vo/DeliverOrderSettleVO.java

@@ -0,0 +1,38 @@
+package com.qs.mp.user.domain.vo;
+
+import com.qs.mp.user.domain.UserAddr;
+import com.qs.mp.user.domain.UserPrizeStorage;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * @author zhongcp
+ * @Date 2022/3/3
+ */
+@Data
+public class DeliverOrderSettleVO {
+
+  private UserAddr addr;
+
+  /**
+   * 订单金额
+   */
+  private Integer orderAmt = 0;
+
+  /**
+   * 运费
+   */
+  private Integer freightAmt = 0;
+
+  /**
+   * 实付金额
+   */
+  private Integer payAmt = 0;
+
+  /**
+   * 奖品库列表
+   */
+  List<UserPrizeStorage> prizeList = new ArrayList<>();
+
+}

+ 23 - 0
mp-service/src/main/java/com/qs/mp/user/service/IUserDeliverOrderService.java

@@ -1,7 +1,10 @@
 package com.qs.mp.user.service;
 
+import com.qs.mp.pay.domain.PayOrder;
 import com.qs.mp.user.domain.UserDeliverOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.qs.mp.user.domain.vo.DeliverOrderSettleVO;
+import com.qs.mp.user.domain.vo.TicketOrderSettleVO;
 
 /**
  * <p>
@@ -12,5 +15,25 @@ import com.baomidou.mybatisplus.extension.service.IService;
  * @since 2022-03-07
  */
 public interface IUserDeliverOrderService extends IService<UserDeliverOrder> {
+  /**
+   * 提交奖品提货订单
+   * @param userId
+   * @param orderSettleVO
+   * @return
+   */
+  String submitOrder(Long userId, DeliverOrderSettleVO orderSettleVO);
 
+  /**
+   * 取消订单
+   * @param orderId
+   * @return
+   */
+  boolean cancelOrder(String orderId);
+
+  /**
+   * 支付成功回调
+   * @param payOrder
+   * @return
+   */
+  boolean paySuccess(PayOrder payOrder);
 }

+ 47 - 0
mp-service/src/main/java/com/qs/mp/user/service/impl/UserDeliverOrderServiceImpl.java

@@ -1,10 +1,17 @@
 package com.qs.mp.user.service.impl;
 
+import com.qs.mp.common.enums.DeliverOrderStatusEnum;
+import com.qs.mp.pay.domain.PayOrder;
+import com.qs.mp.system.service.id.BizIdGenerator;
+import com.qs.mp.user.domain.UserAddr;
 import com.qs.mp.user.domain.UserDeliverOrder;
+import com.qs.mp.user.domain.vo.DeliverOrderSettleVO;
 import com.qs.mp.user.mapper.UserDeliverOrderMapper;
 import com.qs.mp.user.service.IUserDeliverOrderService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
@@ -17,4 +24,44 @@ import org.springframework.stereotype.Service;
 @Service
 public class UserDeliverOrderServiceImpl extends ServiceImpl<UserDeliverOrderMapper, UserDeliverOrder> implements IUserDeliverOrderService {
 
+  @Autowired
+  private BizIdGenerator bizIdGenerator;
+
+  @Override
+  @Transactional
+  public String submitOrder(Long userId, DeliverOrderSettleVO orderSettleVO) {
+    UserDeliverOrder userDeliverOrder = new UserDeliverOrder();
+    userDeliverOrder.setOrderId(bizIdGenerator.newId());
+    userDeliverOrder.setUserId(userId);
+    UserAddr userAddr = orderSettleVO.getAddr();
+    userDeliverOrder.setReceiver(userAddr.getReceiver());
+    userDeliverOrder.setTel(userAddr.getMobile());
+    userDeliverOrder.setProvince(userAddr.getProvince());
+    userDeliverOrder.setCity(userAddr.getCity());
+    userDeliverOrder.setArea(userAddr.getArea());
+    userDeliverOrder.setAddress(userAddr.getAddr());
+    userDeliverOrder.setOrderNum(orderSettleVO.getPrizeList().size());
+    userDeliverOrder.setPayAmt(orderSettleVO.getPayAmt());
+    userDeliverOrder.setFreightAmt(orderSettleVO.getFreightAmt());
+    userDeliverOrder.setMemo(null);
+    if (orderSettleVO.getPayAmt() > 0) {
+      userDeliverOrder.setStatus(DeliverOrderStatusEnum.NOT_PAY);
+    } else {
+      userDeliverOrder.setStatus(DeliverOrderStatusEnum.NOT_DELIVER);
+    }
+    save(userDeliverOrder);
+
+
+    return userDeliverOrder.getOrderId();
+  }
+
+  @Override
+  public boolean cancelOrder(String orderId) {
+    return false;
+  }
+
+  @Override
+  public boolean paySuccess(PayOrder payOrder) {
+    return false;
+  }
 }

+ 3 - 2
mp-service/src/main/resources/mapper/user/UserDeliverOrderMapper.xml

@@ -13,6 +13,7 @@
         <result column="area" property="area" />
         <result column="address" property="address" />
         <result column="order_num" property="orderNum" />
+        <result column="pay_amt" property="payAmt" />
         <result column="freight_amt" property="freightAmt" />
         <result column="memo" property="memo" />
         <result column="delivery_id" property="deliveryId" />
@@ -24,7 +25,7 @@
 
     <!-- 通用查询结果列 -->
     <sql id="Base_Column_List">
-        order_id, user_id, receiver, tel, province, city, area, address, order_num, freight_amt, memo, delivery_id, delivery_flow_id, status, created_time, updated_time
+        order_id, user_id, receiver, tel, province, city, area, address, order_num, pay_amt, freight_amt, memo, delivery_id, delivery_flow_id, status, created_time, updated_time
     </sql>
 
-</mapper>
+</mapper>