diff --git a/mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql b/mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql index a36797de0..20408e5b6 100644 --- a/mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql +++ b/mallinkAdmin/src/main/resources/db/migration/V202109070001__order.sql @@ -819,4 +819,4 @@ ALTER TABLE wx_pay_order_95 ADD COLUMN `child_order_share` text COMMENT ' ALTER TABLE wx_pay_order_96 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; ALTER TABLE wx_pay_order_97 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; ALTER TABLE wx_pay_order_98 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; -ALTER TABLE wx_pay_order_99 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; \ No newline at end of file +ALTER TABLE wx_pay_order_99 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; diff --git a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java index a06339f97..b8e1b6fd6 100644 --- a/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java +++ b/mallinkCApi/src/main/java/com/iformall/controller/WxOrderController.java @@ -75,17 +75,29 @@ public class WxOrderController extends BaseController { return wxOrderService.composeSaveOrder(EnumComposeOrder.PACKAGECOUPON,orderSaveDto,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo()); } + + @ApiOperation(value = "商品购物车组合下单", notes = "[{\"signleOrder\":{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"},\"count\":8},]") + @PostMapping("goodsShopCartSave") + public ResultData goodsShopCart(@RequestBody List orderSaveDto) { + Long memberId; + try { + memberId = getMemberId(); + } catch (Exception e) { + return new ResultData(Result.ERROR,e.getMessage()); + } + return wxOrderService.composeSaveOrder(EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH,orderSaveDto,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo()); + } - @ApiOperation(value = "多个券多个数量组合下订单(购物车组合)", notes = "[{\"signleOrder\":{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"},\"count\":8},]") - @PostMapping("composeSave") - public ResultData composeSave(@RequestBody List orderSaveDto) { + @ApiOperation(value = "券购物车组合下单", notes = "[{\"signleOrder\":{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"},\"count\":8},]") + @PostMapping("couponShopCartSave") + public ResultData couponShopCartSave(@RequestBody List orderSaveDto) { Long memberId; try { memberId = getMemberId(); } catch (Exception e) { return new ResultData(Result.ERROR,e.getMessage()); } - return wxOrderService.composeSaveOrder(EnumComposeOrder.BATCH,orderSaveDto,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo()); + return wxOrderService.composeSaveOrder(EnumComposeOrder.ONE_NUMBER_ORDER_BATCH,orderSaveDto,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo()); } @ApiOperation(value = "单个券单个订单,卡(分账导致无法批量下单)、拼团,砍价用", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxBatchOrder.java b/mallinkService/src/main/java/com/iformall/domain/po/WxBatchOrder.java index 40febd9c7..77c0f8e43 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxBatchOrder.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxBatchOrder.java @@ -1,13 +1,11 @@ package com.iformall.domain.po; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.iformall.domain.po.base.TenantEntity; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.ToString; import java.util.Date; -import java.util.List; @TableName(value = "wx_batch_order") @Data @@ -30,8 +28,4 @@ public class WxBatchOrder extends TenantEntity { private Date createDate; @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") private Date updateDate; - - //返回给前端,跟之前的wxorder直接下单做区分 - @TableField(exist = false) - private String composeOrderTag = "1"; } diff --git a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java index d826704f9..c6cc96ca4 100644 --- a/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java +++ b/mallinkService/src/main/java/com/iformall/domain/po/WxCoupon.java @@ -340,15 +340,4 @@ public class WxCoupon extends TenantEntity { } return false; } - - public boolean oneNumberOneOrder() { - if (type == null) { - return true; - } - if (type.intValue() == EnumCouponType.COUPON_DISTRIBUTION.getCode().intValue()) { - return false; - } - return true; - } - } diff --git a/mallinkService/src/main/java/com/iformall/enums/EnumComposeOrder.java b/mallinkService/src/main/java/com/iformall/enums/EnumComposeOrder.java index a4dd91090..46b50691d 100644 --- a/mallinkService/src/main/java/com/iformall/enums/EnumComposeOrder.java +++ b/mallinkService/src/main/java/com/iformall/enums/EnumComposeOrder.java @@ -8,8 +8,9 @@ import com.iformall.domain.po.WxOrder; public enum EnumComposeOrder { SINGLE(0, "单个订单类型,如拼团,砍价"), - BATCH(1, "多券种组合订单类型"), - PACKAGECOUPON(2,"券包组合订单类型") + ONE_NUMBER_ORDER_BATCH(1, "购物车式组合下单,1个数量1个订单(针对同样产品)"), + MULITY_NUMBER_ORDER_BATCH(2,"购物车式组合下单,多个数量1个订单(针对同样产品)"), + PACKAGECOUPON(3,"券包订单类型") ; public static EnumComposeOrder getEnum(Integer code) { diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java index 37f7a780b..91b30f6c9 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxCouponOrderServiceImpl.java @@ -569,8 +569,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { } } else { //如果是组合的,则为多次 - if ((couponOrder.getComposeOrderType().intValue() == EnumComposeOrder.BATCH.getCode().intValue()) - || (couponOrder.getComposeOrderType().intValue() == EnumComposeOrder.PACKAGECOUPON.getCode().intValue())) { + if (EnumComposeOrder.isSingle(couponOrder.getComposeOrderType())) { try { // 核销分账 shareAfterVerify(couponOrder, bUser.getMerchantId(),couponOrder.getPayVendor(),true); @@ -741,7 +740,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { WxAppinfo wxAppinfo = wxAppinfoService.getCAppInfo(couponOrder,EnumPayWay.getEnum(couponOrder.getPayVendor())); WxPayAccount payAccount = wxPayAccountMapper.selectById(wxAppinfo.getPayId()); - Integer subsidyNum = coupon.getSubsidyNum(); + OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(couponOrder.getComposeOrderType()); + Integer subsidyNum = orderAdapterService.calcuteChildOrderSubsidy(coupon); if (subsidyNum == null || subsidyNum.intValue() == 0) { String parameter = couponMerchant.getParameter(); try { @@ -765,11 +765,13 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { return; } // 新补贴入库 - int iSubChargeFee = PayUtils.getPayRate(subsidyNum, payAccount.getRate(), false); + int iSubChargeFee = OrderHelper.getMallCharge(subsidyNum, payAccount); Integer realSubsidyFee = subsidyNum - iSubChargeFee; - int iPriceChargeFee = PayUtils.getPayRate(coupon.getSalePrice(), payAccount.getRate(), false); - Integer realPayment = coupon.getSalePrice() - iPriceChargeFee; + WxOrder order = wxOrderMapper.selectById(couponOrder.getOrderId(), couponOrder.getTenantId()); + WxComposeChildOrderPrice price = orderAdapterService.getChildOrderPrice(coupon, false, order.getOrderGroupId(), order.getCouponNumber()); + int iPriceChargeFee = OrderHelper.getMallCharge(price.getRealPayMent(), payAccount); + Integer realPayment = price.getRealPayMent() - iPriceChargeFee; WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy(); merchantSubsidy.setId(idWorker.nextId()); @@ -779,8 +781,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { merchantSubsidy.setMerchantId(merchantId); merchantSubsidy.setCouponOrderId(couponOrder.getId()); merchantSubsidy.setCouponType(couponOrder.getCouponType()); - merchantSubsidy.setOrderPayment(coupon.getPrice()); - merchantSubsidy.setReceiverPayment(coupon.getSalePrice()); + merchantSubsidy.setOrderPayment(price.getRealPayMent()); + merchantSubsidy.setReceiverPayment(price.getRealPayMent()); merchantSubsidy.setRealPayment(realPayment); merchantSubsidy.setSubsidy(subsidyNum); merchantSubsidy.setRealSubsidy(realSubsidyFee); 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 8f112178f..7e2751fbb 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -1995,54 +1995,54 @@ public class WxOrderServiceImpl implements WxOrderService { WxComposeOrder composeOrder = orderAdapterService.createDBMainOrder(user, orderSave, payWay); for (int i = 0 ; i < orderSave.size(); i ++) { OrderComposeSaveDto orderdto = orderSave.get(i); - - //券是一个数量一个订单, 实物是一个产品一个订单 - int totalOrderCount = 1; - if (orderAdapterService.isOneNumberOneOrder(orderdto.getWxCoupon())) { - totalOrderCount = orderdto.getCount(); - } - int perCouponNumber = 1; - if (totalOrderCount==1) { - perCouponNumber = orderdto.getCount(); - } - for (int j =0 ; j < totalOrderCount ; j ++) { - // 是否砍价 - WxOrder order = null; - if (checkCouponIsFree(orderdto.getWxCoupon())) { - // 免费券 - order = proxy.saveFreeOrderForCoupon(composeOrder,user, orderdto.getWxCoupon(),perCouponNumber, orderdto.getSignleOrder().getCouponChannelId(), orderdto.getSignleOrder().getFormId(), null,payWay); - if (order != null) { - // 6. 下订单完成,发送内部消息 - // 下订单完成,发送内部消息 - try { - proxy.sendOrderSuccessActionMsg(order); - } catch (Exception e) { - logger.error("内部消息发送失败: " + e.getMessage(),e); - throw new MallinkException(ErrorCode.MSG_INSIDE_ERROR); - } - } - } else { - // 有价券 - order = proxy.saveNoFreeOrderForCoupon(composeOrder,user, orderdto.getWxCoupon(),perCouponNumber, orderdto.getSignleOrder().getCouponChannelId(), orderdto.getSignleOrder().isPressOrder(), orderdto.getSignleOrder().getOrderGroupId(), orderdto.getSignleOrder().getFormId()); - } + //券一个数量创建一个订单 + boolean isOneNumberOneOrder = orderAdapterService.isOneNumberOneOrder(); + if (isOneNumberOneOrder) { + for (int j = 0; j < orderdto.getCount(); j++) { + proxy.handleSaveOrderForCouponSingle(composeOrder, user, orderdto.getWxCoupon(), 1, orderdto, payWay); + } + }else { + proxy.handleSaveOrderForCouponSingle(composeOrder, user, orderdto.getWxCoupon(), orderdto.getCount(), orderdto, payWay); } - - - // couponActionLog -// try { -// wxCouponActionLogService.addOne(order, order.getProductId(), order.getOrderNumber(), EnumCouponSendSendType.ACTIVE.getCode(), orderdto.getSignleOrder().getCouponChannelId(),0L); -// } catch (Exception e) { -// // 库存恢复 -// stockBack(order); -// logger.error("保存订单:" + e.getMessage()); -// throw new MallinkException(ErrorCode.ORDER_SAVE_ERR); -// } } - - return composeOrder; } + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + public WxOrder handleSaveOrderForCouponSingle(WxComposeOrder composeOrder,WxCUserBasicInfo user,WxCoupon coupon,int perCouponNumber,OrderComposeSaveDto orderdto,EnumPayWay payWay) { + WxOrderServiceImpl proxy = (WxOrderServiceImpl) AopContext.currentProxy(); + // 是否砍价 + WxOrder order = null; + if (checkCouponIsFree(coupon)) { + // 免费券 + order = proxy.saveFreeOrderForCoupon(composeOrder,user, coupon,perCouponNumber, orderdto.getSignleOrder().getCouponChannelId(), orderdto.getSignleOrder().getFormId(), null,payWay); + if (order != null) { + // 6. 下订单完成,发送内部消息 + // 下订单完成,发送内部消息 + try { + proxy.sendOrderSuccessActionMsg(order); + } catch (Exception e) { + logger.error("内部消息发送失败: " + e.getMessage(),e); + throw new MallinkException(ErrorCode.MSG_INSIDE_ERROR); + } + } + } else { + // 有价券 + order = proxy.saveNoFreeOrderForCoupon(composeOrder,user, orderdto.getWxCoupon(),perCouponNumber, orderdto.getSignleOrder().getCouponChannelId(), orderdto.getSignleOrder().isPressOrder(), orderdto.getSignleOrder().getOrderGroupId(), orderdto.getSignleOrder().getFormId()); + } + // couponActionLog +// try { +// wxCouponActionLogService.addOne(order, order.getProductId(), order.getOrderNumber(), EnumCouponSendSendType.ACTIVE.getCode(), orderdto.getSignleOrder().getCouponChannelId(),0L); +// } catch (Exception e) { +// // 库存恢复 +// stockBack(order); +// logger.error("保存订单:" + e.getMessage()); +// throw new MallinkException(ErrorCode.ORDER_SAVE_ERR); +// } + return order; + } + + @Override public boolean checkCouponIsFree(WxCoupon coupon) { return coupon.getSalePrice() == 0; 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 5892e17a8..235e55eb3 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -155,9 +155,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); } }else { - if ( null == composeOrder) { - throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(),"composeOrder is null."); - } List orderList = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()).getChildOrders(composeOrder, oldRecord.getTenantId()); for (WxOrder o : orderList) { try { @@ -898,6 +895,9 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { logger.error(e.getMessage()); throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); } + + orderFactory.getOrderAdapterService(record.getComposeOrder()).doOthersAfterPaySuccess(order, record); + // 下订单完成,发送内部消息 try { wxOrderService.sendOrderSuccessActionMsg(order); diff --git a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java index 4706b67a6..cde4c3aee 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxRefundOrderServiceImpl.java @@ -278,7 +278,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { record.setTransactionId(payOrder.getTransactionId()); record.setCUserId(payOrder.getCUserId()); record.setTotalFee(payOrder.getPayAmount()); - record.setRefundFee(payOrder.getPayAmount()); + record.setRefundFee(payOrder.getChildOrderShare(rOrder.getId()).getRealPayMent()); record.setRefundTimeStart(currentDate); record.setRefundOrderStatus(EnumRefundStatus.REFUND_WAIT.getCode()); record.setRefundVendor(payOrder.getPayVendor()); diff --git a/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java index 6e1800e97..b7cedc1ef 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/OrderAdapterService.java @@ -6,7 +6,7 @@ import com.iformall.domain.dto.OrderComposeSaveDto; import com.iformall.domain.po.WxCUserBasicInfo; import com.iformall.domain.po.WxCoupon; import com.iformall.domain.po.WxOrder; -import com.iformall.domain.po.base.TenantEntity; +import com.iformall.domain.po.WxPayOrder; import com.iformall.enums.EnumPayWay; import com.iformall.service.order.entity.WxComposeChildOrderPrice; import com.iformall.service.order.entity.WxComposeOrder; @@ -23,10 +23,10 @@ public interface OrderAdapterService { * 是否是一个数量一个订单。一个产品肯定是一个订单 * @return */ - boolean isOneNumberOneOrder(WxCoupon coupon); + boolean isOneNumberOneOrder(); /** - * 查询每一个订单的产品的真实支付价格及补贴 + * 查询每一个订单的产品的真实支付价格 * @param coupon * @return */ @@ -36,7 +36,7 @@ public interface OrderAdapterService { * 计算每一个子订单的补贴 * @return */ - Integer calcuteChildOrderSubsidy(); + Integer calcuteChildOrderSubsidy(WxCoupon coupon); /** * 查询订单信息,单个模式查询WxOrder @@ -58,4 +58,11 @@ public interface OrderAdapterService { * @param cUserId */ void updateChildOrdersCUserId(WxComposeOrder composeOrder,List orderList,Long cUserId); + + /** + * 支付成功后,对订单进行附加的操作。 + * @param order + * @param record + */ + void doOthersAfterPaySuccess(WxOrder order,WxPayOrder record); } diff --git a/mallinkService/src/main/java/com/iformall/service/order/OrderFactory.java b/mallinkService/src/main/java/com/iformall/service/order/OrderFactory.java index 2e028df13..65e9326cb 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/OrderFactory.java +++ b/mallinkService/src/main/java/com/iformall/service/order/OrderFactory.java @@ -4,15 +4,36 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.iformall.enums.EnumComposeOrder; -import com.iformall.service.order.impl.BatchOrderAdapterService; +import com.iformall.service.order.impl.SingleOrderAdapterService; +import com.iformall.service.order.impl.batch.CouponPackageOrderAdapterService; +import com.iformall.service.order.impl.batch.MulityNumberOneOrderBatchOrderAdapterService; +import com.iformall.service.order.impl.batch.OneNumberOneOrderBatchOrderAdapterService; @Service public class OrderFactory { @Autowired - BatchOrderAdapterService batchOrderAdapterService; + OneNumberOneOrderBatchOrderAdapterService oneNumberOneOrderBatchOrderAdapterService; + + @Autowired + MulityNumberOneOrderBatchOrderAdapterService mulityNumberOneOrderBatchOrderAdapterService; + + @Autowired + SingleOrderAdapterService singleOrderAdapterService; + + @Autowired + CouponPackageOrderAdapterService couponPackageOrderAdapterService; public OrderAdapterService getOrderAdapterService(Integer composeOrderType) { + if (composeOrderType.intValue() == EnumComposeOrder.SINGLE.getCode().intValue()) { + return singleOrderAdapterService; + }else if (composeOrderType.intValue() == EnumComposeOrder.ONE_NUMBER_ORDER_BATCH.getCode().intValue()) { + return oneNumberOneOrderBatchOrderAdapterService; + }else if (composeOrderType.intValue() == EnumComposeOrder.PACKAGECOUPON.getCode().intValue()) { + return couponPackageOrderAdapterService; + }else if (composeOrderType.intValue() == EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH.getCode().intValue()) { + return mulityNumberOneOrderBatchOrderAdapterService; + } return null; } diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java index c16c8c33d..26b452e8f 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/SingleOrderAdapterService.java @@ -38,7 +38,7 @@ public class SingleOrderAdapterService implements OrderAdapterService { } @Override - public boolean isOneNumberOneOrder(WxCoupon coupon) { + public boolean isOneNumberOneOrder() { return true; } @@ -74,12 +74,8 @@ public class SingleOrderAdapterService implements OrderAdapterService { } @Override - public Integer calcuteChildOrderSubsidy() { - return null; + public Integer calcuteChildOrderSubsidy(WxCoupon coupon) { + return coupon.getSubsidyNum(); } - - - - } diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/BatchOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/BaseBatchOrderAdapterService.java similarity index 77% rename from mallinkService/src/main/java/com/iformall/service/order/impl/BatchOrderAdapterService.java rename to mallinkService/src/main/java/com/iformall/service/order/impl/batch/BaseBatchOrderAdapterService.java index 76129f297..251d5f996 100644 --- a/mallinkService/src/main/java/com/iformall/service/order/impl/BatchOrderAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/BaseBatchOrderAdapterService.java @@ -1,4 +1,4 @@ -package com.iformall.service.order.impl; +package com.iformall.service.order.impl.batch; import java.util.ArrayList; import java.util.Date; @@ -31,59 +31,55 @@ import com.iformall.service.order.util.OrderHelper; * @author alascor * */ -@Service -public class BatchOrderAdapterService implements OrderAdapterService { +public abstract class BaseBatchOrderAdapterService implements OrderAdapterService { @Autowired WxBatchOrderMapper wxBatchOrderMapper; @Autowired WxOrderMapper wxOrderMapper; - @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) @Override - public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List orderSave,EnumPayWay payWay) { + public WxComposeChildOrderPrice getChildOrderPrice(WxCoupon coupon,boolean isPress,Long orderGroupId,Integer couponNumber) { + Integer perPrice = OrderHelper.getCouponPerPayment(coupon, isPress, orderGroupId); + return new WxComposeChildOrderPrice(perPrice, couponNumber, coupon.getId()); + } + + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + protected WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List orderSave,EnumPayWay payWay,EnumComposeOrder composeOrderType) { WxBatchOrder order =new WxBatchOrder(); final IdWorker idWorker = IdWorker.get(); order.setId(idWorker.nextId()); order.setCUserId(user.getId()); int payment = 0; for (OrderComposeSaveDto ocsd : orderSave) { - boolean isPress = ocsd.getSignleOrder().getPress() != null ? ocsd.getSignleOrder().getPress() : false; + boolean isPress = ocsd.getSignleOrder().isPressOrder(); WxComposeChildOrderPrice price = getChildOrderPrice(ocsd.getWxCoupon(), isPress, ocsd.getSignleOrder().getOrderGroupId(), ocsd.getCount()); payment = payment+price.getRealPayMent(); } order.setPayment(payment); order.setCreateDate(new Date()); wxBatchOrderMapper.insert(order); - return new WxComposeOrder(order.getId(),EnumComposeOrder.BATCH.getCode()); - } - - @Override - public boolean isOneNumberOneOrder(WxCoupon coupon) { - return coupon.oneNumberOneOrder(); + return new WxComposeOrder(order.getId(),composeOrderType.getCode()); } - @Override - public WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId) { + protected WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId,EnumComposeOrder composeOrderType) { WxBatchOrder order = wxBatchOrderMapper.selectById(mainOrderId, tenantId); - WxComposeOrder corder = new WxComposeOrder(order.getId(),EnumComposeOrder.BATCH.getCode()); + WxComposeOrder corder = new WxComposeOrder(order.getId(),composeOrderType.getCode()); corder.setPayment(order.getPayment()); corder.setMainOrder(order); return corder; } - @Override - public List getChildOrders(WxComposeOrder composeOrder, String tenantId) { + protected List getChildOrders(WxComposeOrder composeOrder, String tenantId,EnumComposeOrder composeOrderType) { WxOrder orderq = new WxOrder(); orderq.setComposeOrderId(composeOrder.getMainOrderId()); - orderq.setComposeOrderType(EnumComposeOrder.BATCH.getCode()); + orderq.setComposeOrderType(composeOrderType.getCode()); orderq.setTenantId(tenantId); List orderList = wxOrderMapper.findList(orderq); return orderList; } @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) - @Override public void updateChildOrdersCUserId(WxComposeOrder composeOrder,List orderList, Long cUserId) { if (null != cUserId) { WxBatchOrder order = (WxBatchOrder) composeOrder.getMainOrder(); @@ -107,16 +103,10 @@ public class BatchOrderAdapterService implements OrderAdapterService { } - @Override - public WxComposeChildOrderPrice getChildOrderPrice(WxCoupon coupon,boolean isPress,Long orderGroupId,Integer couponNumber) { - Integer perPrice = OrderHelper.getCouponPerPayment(coupon, isPress, orderGroupId); - return new WxComposeChildOrderPrice(perPrice, couponNumber, coupon.getId()); - } + @Override - public Integer calcuteChildOrderSubsidy() { - // TODO Auto-generated method stub - return null; + public Integer calcuteChildOrderSubsidy(WxCoupon coupon) { + return coupon.getSubsidyNum(); } - } diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/CouponPackageOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/CouponPackageOrderAdapterService.java new file mode 100644 index 000000000..c62b847a9 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/CouponPackageOrderAdapterService.java @@ -0,0 +1,54 @@ +package com.iformall.service.order.impl.batch; + +import java.util.List; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import com.iformall.domain.dto.OrderComposeSaveDto; +import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxCoupon; +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.WxPayOrder; +import com.iformall.enums.EnumComposeOrder; +import com.iformall.enums.EnumPayWay; +import com.iformall.service.order.entity.WxComposeOrder; +/** + * 券包批量下单 + * @author alascor + * + */ +@Service +public class CouponPackageOrderAdapterService extends BaseBatchOrderAdapterService { + + @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) + @Override + public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List orderSave,EnumPayWay payWay) { + return super.createDBMainOrder(user, orderSave, payWay, EnumComposeOrder.PACKAGECOUPON); + } + + @Override + public WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId) { + return super.getComposeOrder(mainOrderId, tenantId, EnumComposeOrder.PACKAGECOUPON); + } + + @Override + public List getChildOrders(WxComposeOrder composeOrder, String tenantId) { + return super.getChildOrders(composeOrder, tenantId, EnumComposeOrder.PACKAGECOUPON); + } + + @Override + public Integer calcuteChildOrderSubsidy(WxCoupon coupon) { + return coupon.getSubsidyNum(); + } + + @Override + public boolean isOneNumberOneOrder() { + return true; + } + + @Override + public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record) { + //手动核销发券 + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/MulityNumberOneOrderBatchOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/MulityNumberOneOrderBatchOrderAdapterService.java new file mode 100644 index 000000000..f11db0a7b --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/MulityNumberOneOrderBatchOrderAdapterService.java @@ -0,0 +1,49 @@ +package com.iformall.service.order.impl.batch; + + +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.iformall.domain.dto.OrderComposeSaveDto; +import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.WxPayOrder; +import com.iformall.enums.EnumComposeOrder; +import com.iformall.enums.EnumPayWay; +import com.iformall.service.order.entity.WxComposeOrder; +/** + * 购物车批量下单 + * @author alascor + * + */ +@Service +public class MulityNumberOneOrderBatchOrderAdapterService extends BaseBatchOrderAdapterService { + + + @Override + public boolean isOneNumberOneOrder() { + return false; + } + + @Override + public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user, List orderSave, + EnumPayWay payWay) { + return super.createDBMainOrder(user, orderSave, payWay, EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH); + } + + @Override + public WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId) { + return super.getComposeOrder(mainOrderId, tenantId, EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH); + } + + @Override + public List getChildOrders(WxComposeOrder composeOrder, String tenantId) { + return super.getChildOrders(composeOrder, tenantId, EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH); + } + + @Override + public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record) { + } + +} diff --git a/mallinkService/src/main/java/com/iformall/service/order/impl/batch/OneNumberOneOrderBatchOrderAdapterService.java b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/OneNumberOneOrderBatchOrderAdapterService.java new file mode 100644 index 000000000..4ee534d05 --- /dev/null +++ b/mallinkService/src/main/java/com/iformall/service/order/impl/batch/OneNumberOneOrderBatchOrderAdapterService.java @@ -0,0 +1,49 @@ +package com.iformall.service.order.impl.batch; + +import java.util.List; + +import org.springframework.stereotype.Service; + +import com.iformall.domain.dto.OrderComposeSaveDto; +import com.iformall.domain.po.WxCUserBasicInfo; +import com.iformall.domain.po.WxOrder; +import com.iformall.domain.po.WxPayOrder; +import com.iformall.enums.EnumComposeOrder; +import com.iformall.enums.EnumPayWay; +import com.iformall.service.order.entity.WxComposeOrder; + +/** + * 购物车批量下单 + * @author alascor + * + */ +@Service +public class OneNumberOneOrderBatchOrderAdapterService extends BaseBatchOrderAdapterService { + + @Override + public boolean isOneNumberOneOrder() { + return true; + } + + @Override + public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user, List orderSave, + EnumPayWay payWay) { + return super.createDBMainOrder(user, orderSave, payWay, EnumComposeOrder.ONE_NUMBER_ORDER_BATCH); + } + + @Override + public WxComposeOrder getComposeOrder(Long mainOrderId, String tenantId) { + return super.getComposeOrder(mainOrderId, tenantId, EnumComposeOrder.ONE_NUMBER_ORDER_BATCH); + } + + @Override + public List getChildOrders(WxComposeOrder composeOrder, String tenantId) { + return super.getChildOrders(composeOrder, tenantId, EnumComposeOrder.ONE_NUMBER_ORDER_BATCH); + } + + @Override + public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record) { + + } + +}