前台订单接口完善

This commit is contained in:
macro 2020-05-23 16:31:52 +08:00
parent 5f4a378347
commit 68160615cb
4 changed files with 198 additions and 51 deletions

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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;