Quellcode durchsuchen

前台订单接口完善

macro vor 4 Jahren
Ursprung
Commit
68160615cb

+ 53 - 5
mall-portal/src/main/java/com/macro/mall/portal/controller/OmsPortalOrderController.java

@@ -1,15 +1,19 @@
 package com.macro.mall.portal.controller;
 
+import com.macro.mall.common.api.CommonPage;
 import com.macro.mall.common.api.CommonResult;
 import com.macro.mall.portal.domain.ConfirmOrderResult;
+import com.macro.mall.portal.domain.OmsOrderDetail;
 import com.macro.mall.portal.domain.OrderParam;
 import com.macro.mall.portal.service.OmsPortalOrderService;
 import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -26,8 +30,8 @@ public class OmsPortalOrderController {
     @ApiOperation("根据购物车信息生成确认单信息")
     @RequestMapping(value = "/generateConfirmOrder", method = RequestMethod.POST)
     @ResponseBody
-    public CommonResult<ConfirmOrderResult> generateConfirmOrder() {
-        ConfirmOrderResult confirmOrderResult = portalOrderService.generateConfirmOrder();
+    public CommonResult<ConfirmOrderResult> generateConfirmOrder(@RequestBody List<Long> cartIds) {
+        ConfirmOrderResult confirmOrderResult = portalOrderService.generateConfirmOrder(cartIds);
         return CommonResult.success(confirmOrderResult);
     }
 
@@ -39,11 +43,11 @@ public class OmsPortalOrderController {
         return CommonResult.success(result, "下单成功");
     }
 
-    @ApiOperation("支付成功的回调")
+    @ApiOperation("用户支付成功的回调")
     @RequestMapping(value = "/paySuccess", method = RequestMethod.POST)
     @ResponseBody
-    public CommonResult paySuccess(@RequestParam Long orderId) {
-        Integer count = portalOrderService.paySuccess(orderId);
+    public CommonResult paySuccess(@RequestParam Long orderId,@RequestParam Integer payType) {
+        Integer count = portalOrderService.paySuccess(orderId,payType);
         return CommonResult.success(count, "支付成功");
     }
 
@@ -62,4 +66,48 @@ public class OmsPortalOrderController {
         portalOrderService.sendDelayMessageCancelOrder(orderId);
         return CommonResult.success(null);
     }
+
+    @ApiOperation("按状态分页获取用户订单列表")
+    @ApiImplicitParam(name = "status", value = "订单状态:-1->全部;0->待付款;1->待发货;2->已发货;3->已完成;4->已关闭",
+            defaultValue = "-1", allowableValues = "-1,0,1,2,3,4", paramType = "query", dataType = "int")
+    @RequestMapping(value = "/list", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<CommonPage<OmsOrderDetail>> list(@RequestParam Integer status,
+                                                   @RequestParam(required = false, defaultValue = "1") Integer pageNum,
+                                                   @RequestParam(required = false, defaultValue = "5") Integer pageSize) {
+        CommonPage<OmsOrderDetail> orderPage = portalOrderService.list(status,pageNum,pageSize);
+        return CommonResult.success(orderPage);
+    }
+
+    @ApiOperation("根据ID获取订单详情")
+    @RequestMapping(value = "/detail/{orderId}", method = RequestMethod.GET)
+    @ResponseBody
+    public CommonResult<OmsOrderDetail> detail(@PathVariable Long orderId) {
+        OmsOrderDetail orderDetail = portalOrderService.detail(orderId);
+        return CommonResult.success(orderDetail);
+    }
+
+    @ApiOperation("用户取消订单")
+    @RequestMapping(value = "/cancelUserOrder", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult cancelUserOrder(Long orderId) {
+        portalOrderService.cancelOrder(orderId);
+        return CommonResult.success(null);
+    }
+
+    @ApiOperation("用户确认收货")
+    @RequestMapping(value = "/confirmReceiveOrder", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult confirmReceiveOrder(Long orderId) {
+        portalOrderService.confirmReceiveOrder(orderId);
+        return CommonResult.success(null);
+    }
+
+    @ApiOperation("用户删除订单")
+    @RequestMapping(value = "/deleteOrder", method = RequestMethod.POST)
+    @ResponseBody
+    public CommonResult deleteOrder(Long orderId) {
+        portalOrderService.deleteOrder(orderId);
+        return CommonResult.success(null);
+    }
 }

+ 14 - 36
mall-portal/src/main/java/com/macro/mall/portal/domain/OrderParam.java

@@ -1,48 +1,26 @@
 package com.macro.mall.portal.domain;
 
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
 /**
  * 生成订单时传入的参数
  * Created by macro on 2018/8/30.
  */
+@Data
+@EqualsAndHashCode(callSuper = false)
 public class OrderParam {
-    //收货地址id
+    @ApiModelProperty("收货地址ID")
     private Long memberReceiveAddressId;
-    //优惠券id
+    @ApiModelProperty("优惠券ID")
     private Long couponId;
-    //使用的积分数
+    @ApiModelProperty("使用的积分数")
     private Integer useIntegration;
-    //支付方式
+    @ApiModelProperty("支付方式")
     private Integer payType;
-
-    public Long getMemberReceiveAddressId() {
-        return memberReceiveAddressId;
-    }
-
-    public void setMemberReceiveAddressId(Long memberReceiveAddressId) {
-        this.memberReceiveAddressId = memberReceiveAddressId;
-    }
-
-    public Long getCouponId() {
-        return couponId;
-    }
-
-    public void setCouponId(Long couponId) {
-        this.couponId = couponId;
-    }
-
-    public Integer getPayType() {
-        return payType;
-    }
-
-    public void setPayType(Integer payType) {
-        this.payType = payType;
-    }
-
-    public Integer getUseIntegration() {
-        return useIntegration;
-    }
-
-    public void setUseIntegration(Integer useIntegration) {
-        this.useIntegration = useIntegration;
-    }
+    @ApiModelProperty("被选中的购物车商品ID")
+    private List<Long> cartIds;
 }

+ 26 - 2
mall-portal/src/main/java/com/macro/mall/portal/service/OmsPortalOrderService.java

@@ -1,9 +1,12 @@
 package com.macro.mall.portal.service;
 
+import com.macro.mall.common.api.CommonPage;
 import com.macro.mall.portal.domain.ConfirmOrderResult;
+import com.macro.mall.portal.domain.OmsOrderDetail;
 import com.macro.mall.portal.domain.OrderParam;
 import org.springframework.transaction.annotation.Transactional;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -13,8 +16,9 @@ import java.util.Map;
 public interface OmsPortalOrderService {
     /**
      * 根据用户购物车信息生成确认单信息
+     * @param cartIds
      */
-    ConfirmOrderResult generateConfirmOrder();
+    ConfirmOrderResult generateConfirmOrder(List<Long> cartIds);
 
     /**
      * 根据提交信息生成订单
@@ -26,7 +30,7 @@ public interface OmsPortalOrderService {
      * 支付成功后的回调
      */
     @Transactional
-    Integer paySuccess(Long orderId);
+    Integer paySuccess(Long orderId, Integer payType);
 
     /**
      * 自动取消超时订单
@@ -44,4 +48,24 @@ public interface OmsPortalOrderService {
      * 发送延迟消息取消订单
      */
     void sendDelayMessageCancelOrder(Long orderId);
+
+    /**
+     * 确认收货
+     */
+    void confirmReceiveOrder(Long orderId);
+
+    /**
+     * 分页获取用户订单
+     */
+    CommonPage<OmsOrderDetail> list(Integer status, Integer pageNum, Integer pageSize);
+
+    /**
+     * 根据订单ID获取订单详情
+     */
+    OmsOrderDetail detail(Long orderId);
+
+    /**
+     * 用户根据订单ID删除订单
+     */
+    void deleteOrder(Long orderId);
 }

+ 105 - 8
mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java

@@ -1,5 +1,9 @@
 package com.macro.mall.portal.service.impl;
 
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollUtil;
+import com.github.pagehelper.PageHelper;
+import com.macro.mall.common.api.CommonPage;
 import com.macro.mall.common.exception.Asserts;
 import com.macro.mall.mapper.*;
 import com.macro.mall.model.*;
@@ -19,6 +23,7 @@ import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
 import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * 前台订单管理Service
@@ -62,11 +67,11 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     private CancelOrderSender cancelOrderSender;
 
     @Override
-    public ConfirmOrderResult generateConfirmOrder() {
+    public ConfirmOrderResult generateConfirmOrder(List<Long> cartIds) {
         ConfirmOrderResult result = new ConfirmOrderResult();
         //获取购物车信息
         UmsMember currentMember = memberService.getCurrentMember();
-        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId());
+        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(),cartIds);
         result.setCartPromotionItemList(cartPromotionItemList);
         //获取用户收货地址列表
         List<UmsMemberReceiveAddress> memberReceiveAddressList = memberReceiveAddressService.list();
@@ -90,7 +95,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         List<OmsOrderItem> orderItemList = new ArrayList<>();
         //获取购物车及优惠信息
         UmsMember currentMember = memberService.getCurrentMember();
-        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId());
+        List<CartPromotionItem> cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(), orderParam.getCartIds());
         for (CartPromotionItem cartPromotionItem : cartPromotionItemList) {
             //生成下单商品信息
             OmsOrderItem orderItem = new OmsOrderItem();
@@ -131,7 +136,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
             handleCouponAmount(orderItemList, couponHistoryDetail);
         }
         //判断是否使用积分
-        if (orderParam.getUseIntegration() == null) {
+        if (orderParam.getUseIntegration() == null||orderParam.getUseIntegration().equals(0)) {
             //不使用积分
             for (OmsOrderItem orderItem : orderItemList) {
                 orderItem.setIntegrationAmount(new BigDecimal(0));
@@ -205,6 +210,11 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         order.setGrowth(calcGiftGrowth(orderItemList));
         //生成订单号
         order.setOrderSn(generateOrderSn(order));
+        //设置自动收货天数
+        List<OmsOrderSetting> orderSettings = orderSettingMapper.selectByExample(new OmsOrderSettingExample());
+        if(CollUtil.isNotEmpty(orderSettings)){
+            order.setAutoConfirmDay(orderSettings.get(0).getConfirmOvertime());
+        }
         // TODO: 2018/9/3 bill_*,delivery_*
         //插入order表和order_item表
         orderMapper.insert(order);
@@ -233,12 +243,13 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
     }
 
     @Override
-    public Integer paySuccess(Long orderId) {
+    public Integer paySuccess(Long orderId, Integer payType) {
         //修改订单支付状态
         OmsOrder order = new OmsOrder();
         order.setId(orderId);
         order.setStatus(1);
         order.setPaymentTime(new Date());
+        order.setPayType(payType);
         orderMapper.updateByPrimaryKeySelective(order);
         //恢复所有下单商品的锁定库存,扣减真实库存
         OmsOrderDetail orderDetail = portalOrderDao.getDetail(orderId);
@@ -277,7 +288,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
 
     @Override
     public void cancelOrder(Long orderId) {
-        //查询付款的取消订单
+        //查询付款的取消订单
         OmsOrderExample example = new OmsOrderExample();
         example.createCriteria().andIdEqualTo(orderId).andStatusEqualTo(0).andDeleteStatusEqualTo(0);
         List<OmsOrder> cancelOrderList = orderMapper.selectByExample(example);
@@ -315,6 +326,92 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         cancelOrderSender.sendMessage(orderId, delayTimes);
     }
 
+    @Override
+    public void confirmReceiveOrder(Long orderId) {
+        UmsMember member = memberService.getCurrentMember();
+        OmsOrder order = orderMapper.selectByPrimaryKey(orderId);
+        if(!member.getId().equals(order.getMemberId())){
+            Asserts.fail("不能确认他人订单!");
+        }
+        if(order.getStatus()!=2){
+            Asserts.fail("该订单还未发货!");
+        }
+        order.setStatus(3);
+        order.setConfirmStatus(1);
+        order.setReceiveTime(new Date());
+        orderMapper.updateByPrimaryKey(order);
+    }
+
+    @Override
+    public CommonPage<OmsOrderDetail> list(Integer status, Integer pageNum, Integer pageSize) {
+        if(status==-1){
+            status = null;
+        }
+        UmsMember member = memberService.getCurrentMember();
+        PageHelper.startPage(pageNum,pageSize);
+        OmsOrderExample orderExample = new OmsOrderExample();
+        OmsOrderExample.Criteria criteria = orderExample.createCriteria();
+        criteria.andDeleteStatusEqualTo(0)
+                .andMemberIdEqualTo(member.getId());
+        if(status!=null){
+            criteria.andStatusEqualTo(status);
+        }
+        orderExample.setOrderByClause("create_time desc");
+        List<OmsOrder> orderList = orderMapper.selectByExample(orderExample);
+        CommonPage<OmsOrder> orderPage = CommonPage.restPage(orderList);
+        //设置分页信息
+        CommonPage<OmsOrderDetail> resultPage = new CommonPage<>();
+        resultPage.setPageNum(orderPage.getPageNum());
+        resultPage.setPageSize(orderPage.getPageSize());
+        resultPage.setTotal(orderPage.getTotal());
+        resultPage.setTotalPage(orderPage.getTotalPage());
+        if(CollUtil.isEmpty(orderList)){
+            return resultPage;
+        }
+        //设置数据信息
+        List<Long> orderIds = orderList.stream().map(OmsOrder::getId).collect(Collectors.toList());
+        OmsOrderItemExample orderItemExample = new OmsOrderItemExample();
+        orderItemExample.createCriteria().andOrderIdIn(orderIds);
+        List<OmsOrderItem> orderItemList = orderItemMapper.selectByExample(orderItemExample);
+        List<OmsOrderDetail> orderDetailList = new ArrayList<>();
+        for (OmsOrder omsOrder : orderList) {
+            OmsOrderDetail orderDetail = new OmsOrderDetail();
+            BeanUtil.copyProperties(omsOrder,orderDetail);
+            List<OmsOrderItem> relatedItemList = orderItemList.stream().filter(item -> item.getOrderId().equals(orderDetail.getId())).collect(Collectors.toList());
+            orderDetail.setOrderItemList(relatedItemList);
+            orderDetailList.add(orderDetail);
+        }
+        resultPage.setList(orderDetailList);
+        return resultPage;
+    }
+
+    @Override
+    public OmsOrderDetail detail(Long orderId) {
+        OmsOrder omsOrder = orderMapper.selectByPrimaryKey(orderId);
+        OmsOrderItemExample example = new OmsOrderItemExample();
+        example.createCriteria().andOrderIdEqualTo(orderId);
+        List<OmsOrderItem> orderItemList = orderItemMapper.selectByExample(example);
+        OmsOrderDetail orderDetail = new OmsOrderDetail();
+        BeanUtil.copyProperties(omsOrder,orderDetail);
+        orderDetail.setOrderItemList(orderItemList);
+        return orderDetail;
+    }
+
+    @Override
+    public void deleteOrder(Long orderId) {
+        UmsMember member = memberService.getCurrentMember();
+        OmsOrder order = orderMapper.selectByPrimaryKey(orderId);
+        if(!member.getId().equals(order.getMemberId())){
+            Asserts.fail("不能删除他人订单!");
+        }
+        if(order.getStatus()==3||order.getStatus()==4){
+            order.setDeleteStatus(1);
+            orderMapper.updateByPrimaryKey(order);
+        }else{
+            Asserts.fail("只能删除已完成或已关闭的订单!");
+        }
+    }
+
     /**
      * 生成18位订单编号:8位日期+2位平台号码+2位支付方式+6位以上自增id
      */
@@ -408,10 +505,10 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService {
         StringBuilder sb = new StringBuilder();
         for (OmsOrderItem orderItem : orderItemList) {
             sb.append(orderItem.getPromotionName());
-            sb.append(",");
+            sb.append(";");
         }
         String result = sb.toString();
-        if (result.endsWith(",")) {
+        if (result.endsWith(";")) {
             result = result.substring(0, result.length() - 1);
         }
         return result;