From d7c713e794ed60539160529d7bac0675a8998eb1 Mon Sep 17 00:00:00 2001 From: Stormeye Wu Date: Fri, 10 May 2019 15:00:57 +0800 Subject: [PATCH] =?UTF-8?q?[=E4=B8=8B=E8=AE=A2=E5=8D=95][=E4=BF=AE?= =?UTF-8?q?=E6=94=B9]:=E4=B8=8B=E8=AE=A2=E5=8D=95=E6=B6=88=E6=81=AF?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/WxOrderController.java | 10 +-- .../controller/WxPayOrderController.java | 2 +- .../com/iformall/service/WxOrderService.java | 10 +++ .../iformall/service/WxPayOrderService.java | 2 +- .../service/impl/WxOrderGroupServiceImpl.java | 8 +++ .../service/impl/WxOrderServiceImpl.java | 62 ++++++++++++++----- .../service/impl/WxPayOrderServiceImpl.java | 13 +++- 7 files changed, 79 insertions(+), 28 deletions(-) diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index 83a5e8bc3..99ff7cf98 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -65,18 +65,12 @@ public class WxOrderController extends BaseController { WxCUser user = getUser(); try { - WxOrder order = null; + WxCoupon coupon = wxCouponService.getById(couponId); if (coupon == null) { return new ResultData(ErrorCode.COUPON_IS_EMPTY); } - if (wxOrderService.checkCouponIsFree(coupon)) { - // 免费券 - order = wxOrderService.saveFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId()); - } else { - // 有价券 - order = wxOrderService.saveNoFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), isPress, orderSaveDto.getOrderGroupId(), orderSaveDto.getFormId()); - } + WxOrder order = wxOrderService.saveOrderForCoupon(user, coupon, orderSaveDto, isPress); return new ResultData(order); } catch (MallinkException e) { logger.error(e.getMessage()); diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java index 16d8fe1ec..50314f4c4 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxPayOrderController.java @@ -131,7 +131,7 @@ public class WxPayOrderController extends BaseController { } } else if (status.equals(EnumPayStatus.PAY_STATUS_FAIL.getCode())) { // 有价券支付失败 - wxPayOrderService.handlePayOrderStatusUpdate(payOrder, EnumPayStatus.PAY_STATUS_FAIL.getCode()); + wxPayOrderService.handlePayOrderFail(payOrder, EnumPayStatus.PAY_STATUS_FAIL.getCode()); } return new ResultData(Result.SUCCESS, "支付状态更新成功"); } catch (MallinkException e) { diff --git a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java index fc9bcd533..14a94ccc6 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxOrderService.java @@ -2,6 +2,7 @@ package com.iformall.service; import com.github.pagehelper.PageInfo; import com.iformall.common.ResultData; +import com.iformall.domain.dto.OrderSaveDto; import com.iformall.domain.po.*; import com.iformall.domain.vo.WxOrderCouponPressVo; import com.iformall.domain.vo.WxOrderCouponVo; @@ -148,6 +149,15 @@ public interface WxOrderService { void updateOrderGroupStatusByCouponChannelId(Long id, String tenantId, Integer code); + /** + * 下订单 + * @param user + * @param coupon + * @return + */ + WxOrder saveOrderForCoupon(WxCUser user, WxCoupon coupon, OrderSaveDto orderSaveDto, boolean isPress); + void sendOrderSuccessActionMsg(WxOrder updateOrder); + /** * 订单处理 * 1. 检查coupon是否免费 diff --git a/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java b/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java index 49cb21025..1ad407660 100644 --- a/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java +++ b/mallinkService/src/main/java/com/iformall/service/WxPayOrderService.java @@ -80,7 +80,7 @@ public interface WxPayOrderService { * * @param record */ - void handlePayOrderStatusUpdate(WxPayOrder record, int status); + void handlePayOrderFail(WxPayOrder record, int status); /** * 支付状态处理(免费券) diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java index bc75c59a4..e4a4dca7e 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderGroupServiceImpl.java @@ -160,12 +160,20 @@ public class WxOrderGroupServiceImpl implements WxOrderGroupService { }).collect(Collectors.toList()); // 已成功订单,用户领取couponOrder for (WxOrder temp : list) { + // 下订单成功 try { wxOrderService.couponOrderSuccess(temp); } catch (Exception e) { logger.error("创建COUPON_ORDER失败", e); throw new MallinkException(ErrorCode.ORDER_GROUP_COOPERATING_FAILD); } + // 下订单完成,发送内部消息 + try { + wxOrderService.sendOrderSuccessActionMsg(temp); + } catch (Exception e) { + logger.error("内部消息发送失败: " + e.getMessage()); + throw new MallinkException(ErrorCode.MSG_INSIDE_ERROR); + } } // 拼团成功后,取消待支付订单 wxOrder.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java index 205cf81a3..e71409df0 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -5,6 +5,7 @@ import com.github.pagehelper.PageInfo; import com.iformall.common.ErrorCode; import com.iformall.common.IdWorker; import com.iformall.common.ResultData; +import com.iformall.domain.dto.OrderSaveDto; import com.iformall.domain.dto.WxSharingOrderDto; import com.iformall.domain.po.*; import com.iformall.domain.po.msg.FmInsideOrderSuccessMsg; @@ -651,7 +652,7 @@ public class WxOrderServiceImpl implements WxOrderService { updateT.setUpdateDate(currentDate); int ret = 0; try { - wxOrderMapper.updateByPrimaryKeySelective(updateT); + ret = wxOrderMapper.updateByPrimaryKeySelective(updateT); } catch (Exception e) { logger.error("订单更新失败:" + e.getMessage()); throw new MallinkException(ErrorCode.ORDER_UPDATE_ERR); @@ -665,13 +666,7 @@ public class WxOrderServiceImpl implements WxOrderService { throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR); } - // 下订单完成,发送内部消息 - try { - sendInsideOrderSuccessMsg(updateOrder, coupon, user); - } catch (Exception e) { - logger.error("内部消息发送失败: " + e.getMessage()); - throw new MallinkException(ErrorCode.MSG_INSIDE_ERROR); - } + return ret; } @@ -685,6 +680,27 @@ public class WxOrderServiceImpl implements WxOrderService { mqBaseProducer.sendMessage(orderSuccess, EnumMsgMqTopic.DEFAULT.getCode(), EnumMsgMqTag.DEFAULT.getCode(), EnumMsgMqKey.DEFAULT.getCode()); } + @Override + public void sendOrderSuccessActionMsg(WxOrder updateOrder) { + // 检查券相关 + WxCoupon coupon = wxCouponMapper.selectByPrimaryKey(updateOrder.getProductId()); + if (coupon == null) { + logger.error("券不存在, couponId: " + updateOrder.getProductId()); + throw new MallinkException(ErrorCode.COUPON_IS_EMPTY); + } + if (coupon.getStatus() == EnumCouponStatus.COUPON_STATUS_TAKE_OFFF.getCode()) { + logger.error("券已下架, couponId: " + updateOrder.getProductId()); + throw new MallinkException(ErrorCode.COUPON_IS_TAKE_OFF); + } + // 检查用户 + WxCUser user = wxCUserMapper.selectByPrimaryKey(updateOrder.getcUserId()); + if (user == null) { + logger.error("用户不存在, userId: " + updateOrder.getcUserId()); + throw new MallinkException(ErrorCode.USER_IS_EMPTY); + } + sendInsideOrderSuccessMsg(updateOrder, coupon, user); + } + /** * 下订单后操作 * @param updateOrder @@ -1148,6 +1164,28 @@ public class WxOrderServiceImpl implements WxOrderService { wxOrderMapper.updateStatusByPressCouponId(updateOrder); } + @Override + public WxOrder saveOrderForCoupon(WxCUser user, WxCoupon coupon, OrderSaveDto orderSaveDto, boolean isPress) { + WxOrder order = null; + if (checkCouponIsFree(coupon)) { + // 免费券 + order = saveFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), orderSaveDto.getFormId()); + if(order != null) { + // 6. 下订单完成,发送内部消息 + try { + sendInsideOrderSuccessMsg(order, coupon, user); + } catch (Exception e) { + logger.error("内部消息发送失败: " + e.getMessage()); + throw new MallinkException(ErrorCode.MSG_INSIDE_ERROR); + } + } + } else { + // 有价券 + order = saveNoFreeOrderForCoupon(user, coupon, orderSaveDto.getCouponChannelId(), isPress, orderSaveDto.getOrderGroupId(), orderSaveDto.getFormId()); + } + return order; + } + @Override public boolean checkCouponIsFree(WxCoupon coupon) { return coupon.getSalePrice() == 0; @@ -1200,14 +1238,6 @@ public class WxOrderServiceImpl implements WxOrderService { logger.error("couponOrder失败:" + e.getMessage()); throw new MallinkException(ErrorCode.COUPON_ORDER_SAVE_ERR); } - - // 6. 下订单完成,发送内部消息 - try { - sendInsideOrderSuccessMsg(record, coupon, user); - } catch (Exception e) { - logger.error("内部消息发送失败: " + e.getMessage()); - throw new MallinkException(ErrorCode.MSG_INSIDE_ERROR); - } return record; } diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java index 3838957bd..5b876330c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -1209,6 +1209,13 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { logger.error(e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); } + // 下订单完成,发送内部消息 + try { + wxOrderService.sendOrderSuccessActionMsg(order); + } catch (Exception e) { + logger.error("内部消息发送失败: " + e.getMessage()); + throw new MallinkException(ErrorCode.MSG_INSIDE_ERROR); + } } } } @@ -1344,7 +1351,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { @Override @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - public void handlePayOrderStatusUpdate(WxPayOrder record, int status) { + public void handlePayOrderFail(WxPayOrder record, int status) { // 判断支付状态 if (record.getPayOrderStatus() == EnumPayStatus.PAY_STATUS_WAIT.getCode()) { logger.error("pay handle, payOrder " + record.getPayOrderNo() + @@ -1367,6 +1374,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { if (order.getPayment() > 0) { // 订单金额不为0时, 支付订单未创建, 返回异常 if (!(record.getId() > 0)) { + logger.error("支付订单未创建, 订单ID:" + order.getId()); throw new MallinkException(ErrorCode.PAY_ORDER_NOT_FOUND); } } @@ -1422,8 +1430,8 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { // 修改订单状态 if (record.getPayOrderStatus() == EnumPayStatus.PAY_STATUS_SUCCESS.getCode()) { + /* try { - int _count = wxOrderService.couponOrderSuccess(order); if (_count > 1) { throw new MallinkException(ErrorCode.ORDER_IS_FAIL); @@ -1432,6 +1440,7 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { logger.error(e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); } + */ } else if (record.getPayOrderStatus() == EnumPayStatus.PAY_STATUS_CANCEL.getCode()) { try { int _count = wxOrderService.updateOrderStatus(order, EnumOrderStatus.ORDER_STATUS_OVERTIME_CANCEL);