瀏覽代碼

订单结算

chunping 3 年之前
父節點
當前提交
84ec2b4f26

+ 1 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelAddrController.java → mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelAddrController.java

@@ -8,7 +8,7 @@
  * 版权所有,侵权必究!
  */
 
-package com.qs.mp.web.controller.api.channel;
+package com.qs.mp.web.controller.api.channel.mall;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qs.mp.channel.domain.ChannelAddr;

+ 2 - 2
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelCartController.java → mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelCartController.java

@@ -8,7 +8,7 @@
  * 版权所有,侵权必究!
  */
 
-package com.qs.mp.web.controller.api.channel;
+package com.qs.mp.web.controller.api.channel.mall;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qs.mp.admin.domain.TicketBox;
@@ -39,7 +39,7 @@ import org.springframework.web.bind.annotation.RestController;
 
 @RestController
 @RequestMapping("/api/v1/mp/channel/mall")
-@Api(tags = "渠道盲票商城接口")
+@Api(tags = "渠道盲票商城购物车接口")
 @AllArgsConstructor
 public class ChannelCartController extends BaseApiController {
 

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

@@ -0,0 +1,153 @@
+/*
+ * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
+ *
+ * https://www.mall4j.com/
+ *
+ * 未经允许,不可做商业用途!
+ *
+ * 版权所有,侵权必究!
+ */
+
+package com.qs.mp.web.controller.api.channel.mall;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.qs.mp.admin.domain.TicketBox;
+import com.qs.mp.admin.service.ITicketBoxService;
+import com.qs.mp.channel.domain.ChannelAddr;
+import com.qs.mp.channel.domain.ChannelCart;
+import com.qs.mp.channel.domain.ChannelOrder;
+import com.qs.mp.channel.domain.ChannelOrderItem;
+import com.qs.mp.channel.domain.param.ChannelCartParam;
+import com.qs.mp.channel.domain.param.ChannelOrderParam;
+import com.qs.mp.channel.domain.vo.ChannelCartVO;
+import com.qs.mp.channel.domain.vo.ChannelOrderSettleVO;
+import com.qs.mp.channel.domain.vo.ChannelOrderVO;
+import com.qs.mp.channel.service.IChannelAddrService;
+import com.qs.mp.channel.service.IChannelCartService;
+import com.qs.mp.channel.service.IChannelOrderItemService;
+import com.qs.mp.channel.service.IChannelOrderService;
+import com.qs.mp.common.core.domain.AjaxResult;
+import com.qs.mp.common.domain.param.BatchLongIdsParam;
+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.Collection;
+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/channel/mall")
+@Api(tags = "渠道盲票商城订单接口")
+@AllArgsConstructor
+public class ChannelOrderController extends BaseApiController {
+
+
+  @Autowired
+  private IChannelCartService channelCartService;
+
+  @Autowired
+  private IChannelOrderService channelOrderService;
+
+  @Autowired
+  private IChannelOrderItemService channelOrderItemService;
+
+  @Autowired
+  private ITicketBoxService ticketBoxService;
+
+  @Autowired
+  private IChannelAddrService channelAddrService;
+
+  @Autowired
+  private MapperFacade mapperFacade;
+
+  /**
+   * 订单列表
+   */
+  @PostMapping("/order/list")
+  @ApiOperation(value = "订单列表" , notes = "获取所有订单信息")
+  public AjaxResult list(@RequestBody ChannelOrder param) {
+    Long channelId = SecurityUtils.getLoginUser().getChannelId();
+    startPage();
+    List<ChannelOrder> channelOrders = channelOrderService.list(
+        new LambdaQueryWrapper<ChannelOrder>().eq(ChannelOrder::getChannelId, channelId)
+            .eq(null != param.getStatus(), ChannelOrder::getStatus, param.getStatus())
+            .orderByDesc(ChannelOrder::getCreatedTime));
+    List<ChannelOrderVO> channelOrderVOList = mapperFacade.mapAsList(channelOrders, ChannelOrderVO.class);
+    for (ChannelOrderVO channelOrderVO : channelOrderVOList) {
+      channelOrderVO.setItems(channelOrderItemService.list(new LambdaQueryWrapper<ChannelOrderItem>()
+          .eq(ChannelOrderItem::getOrderId, channelOrderVO.getOrderId())));
+    }
+    return AjaxResult.success(channelOrderVOList);
+  }
+
+
+  /**
+   * 订单结算,每次更换地址或优惠券时需重新请求此接口
+   */
+  @PostMapping("/order/settle")
+  @ApiOperation(value = "订单结算" , notes = "购物车里点结算或者单个盲票组商品上点立即购买")
+  public AjaxResult settle(@RequestBody ChannelOrderParam param) {
+    Long channelId = SecurityUtils.getLoginUser().getChannelId();
+    ChannelOrderSettleVO orderSettleVO = new ChannelOrderSettleVO();
+
+    // 收货地址,如果用户选了地址,则此处不做处理
+    if (null == param.getAddrId() || 0 == param.getAddrId()) {
+      //读取默认地址
+      ChannelAddr addr = channelAddrService.getDefaultChannelAddr(channelId);
+      if (null != addr) {
+        orderSettleVO.setAddr(addr);
+      }
+    }
+
+    // 订单金额计算
+    Integer orderAmt = 0;
+    if (!CollectionUtils.isEmpty(param.getCartIds())){
+      // 购物车里下单的
+      List<ChannelCart> channelCarts = channelCartService.listByIds(param.getCartIds());
+      for (ChannelCart channelCart : channelCarts) {
+        TicketBox ticketBox = ticketBoxService.getById(channelCart.getBoxId());
+        orderAmt += ticketBox.getBoxSalePrice() * channelCart.getOrderNum();
+        ChannelCartVO cartVO = mapperFacade.map(ticketBox, ChannelCartVO.class);
+        cartVO.setCartId(channelCart.getCartId());
+        cartVO.setOrderNum(channelCart.getOrderNum());
+        orderSettleVO.getItems().add(cartVO);
+      }
+    } else {
+      TicketBox ticketBox = ticketBoxService.getById(param.getBoxId());
+      orderAmt += ticketBox.getBoxSalePrice() * param.getOrderNum();
+      ChannelCartVO cartVO = mapperFacade.map(ticketBox, ChannelCartVO.class);
+      cartVO.setOrderNum(param.getOrderNum());
+      orderSettleVO.getItems().add(cartVO);
+    }
+    orderSettleVO.setOrderAmt(orderAmt);
+    // 当前没有运费和优惠,实付金额=订单金额
+    orderSettleVO.setPayAmt(orderAmt);
+
+    // 缓存订单结算对象
+
+    return AjaxResult.success(orderSettleVO);
+  }
+
+  /**
+   * 删除购物清单项
+   */
+  @PostMapping("/cart/remove")
+  @ApiOperation(value = "删除购物清单" , notes = "购物车里点删除")
+  public AjaxResult remove(@RequestBody BatchLongIdsParam param) {
+    boolean rtn = channelCartService.removeByIds(param.getIds());
+    if (!rtn) {
+      return AjaxResult.success("操作失败");
+    }
+    return AjaxResult.error("操作成功");
+  }
+
+}

+ 1 - 1
mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/ChannelTicketController.java → mp-admin/src/main/java/com/qs/mp/web/controller/api/channel/mall/ChannelTicketController.java

@@ -8,7 +8,7 @@
  * 版权所有,侵权必究!
  */
 
-package com.qs.mp.web.controller.api.channel;
+package com.qs.mp.web.controller.api.channel.mall;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.qs.mp.admin.domain.TicketBox;

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

@@ -1,12 +1,15 @@
 package com.qs.mp.common.enums;
 
+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 ChannelCertifyStatusEnum implements IEnum<String> {
 
   NOT_CERTIFIED("n", "未认证"),

+ 32 - 0
mp-common/src/main/java/com/qs/mp/common/enums/ChannelOrderStatusEnum.java

@@ -0,0 +1,32 @@
+package com.qs.mp.common.enums;
+
+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 ChannelOrderStatusEnum implements IEnum<Integer> {
+  CANCELED(-1, "已取消"),
+  NOT_PAY(0, "待付款"),
+  NOT_DELIVER(1, "待发货"),
+  NOT_CONFIRM(2, "待收货"),
+  FINISHED(3, "已完成");
+
+  private final int value;
+  private final String desc;
+
+  ChannelOrderStatusEnum(final int value, final String desc) {
+    this.value = value;
+    this.desc = desc;
+  }
+
+  @Override
+  public Integer getValue() {
+    return value;
+  }
+}

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

@@ -1,12 +1,15 @@
 package com.qs.mp.common.enums;
 
+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 ChannelVerifyStatusEnum implements IEnum<String> {
 
   WAIT("wait", "待审核"),

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

@@ -1,12 +1,15 @@
 package com.qs.mp.common.enums;
 
+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 TicketTypeEnum implements IEnum<String> {
 
   ONLINE("online", "线上票"),

+ 5 - 1
mp-service/src/main/java/com/qs/mp/channel/domain/ChannelOrder.java

@@ -1,9 +1,12 @@
 package com.qs.mp.channel.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.ChannelOrderStatusEnum;
 import java.io.Serializable;
 import java.util.Date;
 import lombok.Data;
@@ -65,7 +68,8 @@ public class ChannelOrder implements Serializable {
    * 订单状态,-1 已取消 0:待付款 1:待发货 2:待收货 3:已完成
    */
   @TableField("status")
-  private Integer status;
+  @JSONField(serialzeFeatures = SerializerFeature.WriteEnumUsingToString)
+  private ChannelOrderStatusEnum status;
 
   /**
    * 商品总数

+ 24 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/param/ChannelOrderParam.java

@@ -0,0 +1,24 @@
+package com.qs.mp.channel.domain.param;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.List;
+import javax.validation.constraints.NotNull;
+import lombok.Data;
+
+@ApiModel(value= "订单参数")
+@Data
+public class ChannelOrderParam {
+
+	@ApiModelProperty(value = "购物清单IDs",required=false)
+	private List<Long> cartIds;
+
+	@ApiModelProperty(value = "盲票组ID",required=false)
+	private String boxId;
+
+	@ApiModelProperty(value = "购买数量",required=false)
+	private Integer orderNum;
+
+	@ApiModelProperty(value = "收货地址ID",required=false)
+	private Long addrId;
+}

+ 42 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelOrderSettleVO.java

@@ -0,0 +1,42 @@
+package com.qs.mp.channel.domain.vo;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.qs.mp.channel.domain.ChannelAddr;
+import java.util.ArrayList;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * @author zhongcp
+ * @Date 2022/3/3
+ */
+@Data
+public class ChannelOrderSettleVO {
+
+  private ChannelAddr addr;
+
+  /**
+   * 订单金额
+   */
+  private Integer orderAmt = 0;
+
+  /**
+   * 优惠金额
+   */
+  private Integer discountAmt = 0;
+
+  /**
+   * 运费金额
+   */
+  private Integer freightAmt = 0;
+
+  /**
+   * 实付金额
+   */
+  private Integer payAmt = 0;
+
+  /**
+   * 订单明细
+   */
+  private List<ChannelCartVO> items = new ArrayList<>();
+}

+ 15 - 0
mp-service/src/main/java/com/qs/mp/channel/domain/vo/ChannelOrderVO.java

@@ -0,0 +1,15 @@
+package com.qs.mp.channel.domain.vo;
+
+import com.qs.mp.channel.domain.ChannelOrder;
+import com.qs.mp.channel.domain.ChannelOrderItem;
+import java.util.List;
+import lombok.Data;
+
+/**
+ * @author zhongcp
+ * @Date 2022/3/3
+ */
+@Data
+public class ChannelOrderVO extends ChannelOrder {
+  private List<ChannelOrderItem> items;
+}