diff --git a/mall-portal/src/main/java/com/macro/mall/portal/controller/OmsPortalOrderController.java b/mall-portal/src/main/java/com/macro/mall/portal/controller/OmsPortalOrderController.java index 6251704..80ab3f7 100644 --- a/mall-portal/src/main/java/com/macro/mall/portal/controller/OmsPortalOrderController.java +++ b/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 generateConfirmOrder() { - ConfirmOrderResult confirmOrderResult = portalOrderService.generateConfirmOrder(); + public CommonResult generateConfirmOrder(@RequestBody List 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> list(@RequestParam Integer status, + @RequestParam(required = false, defaultValue = "1") Integer pageNum, + @RequestParam(required = false, defaultValue = "5") Integer pageSize) { + CommonPage orderPage = portalOrderService.list(status,pageNum,pageSize); + return CommonResult.success(orderPage); + } + + @ApiOperation("根据ID获取订单详情") + @RequestMapping(value = "/detail/{orderId}", method = RequestMethod.GET) + @ResponseBody + public CommonResult 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); + } } diff --git a/mall-portal/src/main/java/com/macro/mall/portal/domain/OrderParam.java b/mall-portal/src/main/java/com/macro/mall/portal/domain/OrderParam.java index c5abbd8..9ffdab0 100644 --- a/mall-portal/src/main/java/com/macro/mall/portal/domain/OrderParam.java +++ b/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 cartIds; } diff --git a/mall-portal/src/main/java/com/macro/mall/portal/service/OmsPortalOrderService.java b/mall-portal/src/main/java/com/macro/mall/portal/service/OmsPortalOrderService.java index 46048f5..9aa3e19 100644 --- a/mall-portal/src/main/java/com/macro/mall/portal/service/OmsPortalOrderService.java +++ b/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 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 list(Integer status, Integer pageNum, Integer pageSize); + + /** + * 根据订单ID获取订单详情 + */ + OmsOrderDetail detail(Long orderId); + + /** + * 用户根据订单ID删除订单 + */ + void deleteOrder(Long orderId); } diff --git a/mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java b/mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java index f56c4c2..8f32e78 100644 --- a/mall-portal/src/main/java/com/macro/mall/portal/service/impl/OmsPortalOrderServiceImpl.java +++ b/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 cartIds) { ConfirmOrderResult result = new ConfirmOrderResult(); //获取购物车信息 UmsMember currentMember = memberService.getCurrentMember(); - List cartPromotionItemList = cartItemService.listPromotion(currentMember.getId()); + List cartPromotionItemList = cartItemService.listPromotion(currentMember.getId(),cartIds); result.setCartPromotionItemList(cartPromotionItemList); //获取用户收货地址列表 List memberReceiveAddressList = memberReceiveAddressService.list(); @@ -90,7 +95,7 @@ public class OmsPortalOrderServiceImpl implements OmsPortalOrderService { List orderItemList = new ArrayList<>(); //获取购物车及优惠信息 UmsMember currentMember = memberService.getCurrentMember(); - List cartPromotionItemList = cartItemService.listPromotion(currentMember.getId()); + List 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 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 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 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 orderList = orderMapper.selectByExample(orderExample); + CommonPage orderPage = CommonPage.restPage(orderList); + //设置分页信息 + CommonPage 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 orderIds = orderList.stream().map(OmsOrder::getId).collect(Collectors.toList()); + OmsOrderItemExample orderItemExample = new OmsOrderItemExample(); + orderItemExample.createCriteria().andOrderIdIn(orderIds); + List orderItemList = orderItemMapper.selectByExample(orderItemExample); + List orderDetailList = new ArrayList<>(); + for (OmsOrder omsOrder : orderList) { + OmsOrderDetail orderDetail = new OmsOrderDetail(); + BeanUtil.copyProperties(omsOrder,orderDetail); + List 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 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;