| @@ -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_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_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_98 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; | ||||
| ALTER TABLE wx_pay_order_99 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; | |||||
| ALTER TABLE wx_pay_order_99 ADD COLUMN `child_order_share` text COMMENT '子订单分账金额'; | |||||
| @@ -75,17 +75,29 @@ public class WxOrderController extends BaseController { | |||||
| return wxOrderService.composeSaveOrder(EnumComposeOrder.PACKAGECOUPON,orderSaveDto,memberId,EnumPayWay.PAY_WAY_WECHAT,getTenantInfo()); | 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<OrderComposeSaveDto> 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<OrderComposeSaveDto> orderSaveDto) { | |||||
| @ApiOperation(value = "券购物车组合下单", notes = "[{\"signleOrder\":{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"},\"count\":8},]") | |||||
| @PostMapping("couponShopCartSave") | |||||
| public ResultData couponShopCartSave(@RequestBody List<OrderComposeSaveDto> orderSaveDto) { | |||||
| Long memberId; | Long memberId; | ||||
| try { | try { | ||||
| memberId = getMemberId(); | memberId = getMemberId(); | ||||
| } catch (Exception e) { | } catch (Exception e) { | ||||
| return new ResultData(Result.ERROR,e.getMessage()); | 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\"}") | @ApiOperation(value = "单个券单个订单,卡(分账导致无法批量下单)、拼团,砍价用", notes = "{\"couponChannelId\":\"String\",\"couponId\":\"String\",\"press\":\"String\",\"orderGroupId\":\"String\",\"formId\":\"String\"}") | ||||
| @@ -1,13 +1,11 @@ | |||||
| package com.iformall.domain.po; | package com.iformall.domain.po; | ||||
| import com.baomidou.mybatisplus.annotation.TableField; | |||||
| import com.baomidou.mybatisplus.annotation.TableName; | import com.baomidou.mybatisplus.annotation.TableName; | ||||
| import com.iformall.domain.po.base.TenantEntity; | import com.iformall.domain.po.base.TenantEntity; | ||||
| import lombok.Data; | import lombok.Data; | ||||
| import lombok.EqualsAndHashCode; | import lombok.EqualsAndHashCode; | ||||
| import lombok.ToString; | import lombok.ToString; | ||||
| import java.util.Date; | import java.util.Date; | ||||
| import java.util.List; | |||||
| @TableName(value = "wx_batch_order") | @TableName(value = "wx_batch_order") | ||||
| @Data | @Data | ||||
| @@ -30,8 +28,4 @@ public class WxBatchOrder extends TenantEntity { | |||||
| private Date createDate; | private Date createDate; | ||||
| @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") | @io.swagger.annotations.ApiModelProperty(value="更新时间",name="updateDate") | ||||
| private Date updateDate; | private Date updateDate; | ||||
| //返回给前端,跟之前的wxorder直接下单做区分 | |||||
| @TableField(exist = false) | |||||
| private String composeOrderTag = "1"; | |||||
| } | } | ||||
| @@ -340,15 +340,4 @@ public class WxCoupon extends TenantEntity { | |||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| public boolean oneNumberOneOrder() { | |||||
| if (type == null) { | |||||
| return true; | |||||
| } | |||||
| if (type.intValue() == EnumCouponType.COUPON_DISTRIBUTION.getCode().intValue()) { | |||||
| return false; | |||||
| } | |||||
| return true; | |||||
| } | |||||
| } | } | ||||
| @@ -8,8 +8,9 @@ import com.iformall.domain.po.WxOrder; | |||||
| public enum EnumComposeOrder { | public enum EnumComposeOrder { | ||||
| SINGLE(0, "单个订单类型,如拼团,砍价"), | 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) { | public static EnumComposeOrder getEnum(Integer code) { | ||||
| @@ -569,8 +569,7 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| } | } | ||||
| } else { | } else { | ||||
| //如果是组合的,则为多次 | //如果是组合的,则为多次 | ||||
| if ((couponOrder.getComposeOrderType().intValue() == EnumComposeOrder.BATCH.getCode().intValue()) | |||||
| || (couponOrder.getComposeOrderType().intValue() == EnumComposeOrder.PACKAGECOUPON.getCode().intValue())) { | |||||
| if (EnumComposeOrder.isSingle(couponOrder.getComposeOrderType())) { | |||||
| try { | try { | ||||
| // 核销分账 | // 核销分账 | ||||
| shareAfterVerify(couponOrder, bUser.getMerchantId(),couponOrder.getPayVendor(),true); | 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())); | WxAppinfo wxAppinfo = wxAppinfoService.getCAppInfo(couponOrder,EnumPayWay.getEnum(couponOrder.getPayVendor())); | ||||
| WxPayAccount payAccount = wxPayAccountMapper.selectById(wxAppinfo.getPayId()); | 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) { | if (subsidyNum == null || subsidyNum.intValue() == 0) { | ||||
| String parameter = couponMerchant.getParameter(); | String parameter = couponMerchant.getParameter(); | ||||
| try { | try { | ||||
| @@ -765,11 +765,13 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| return; | return; | ||||
| } | } | ||||
| // 新补贴入库 | // 新补贴入库 | ||||
| int iSubChargeFee = PayUtils.getPayRate(subsidyNum, payAccount.getRate(), false); | |||||
| int iSubChargeFee = OrderHelper.getMallCharge(subsidyNum, payAccount); | |||||
| Integer realSubsidyFee = subsidyNum - iSubChargeFee; | 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(); | WxMerchantSubsidy merchantSubsidy = new WxMerchantSubsidy(); | ||||
| merchantSubsidy.setId(idWorker.nextId()); | merchantSubsidy.setId(idWorker.nextId()); | ||||
| @@ -779,8 +781,8 @@ public class WxCouponOrderServiceImpl implements WxCouponOrderService { | |||||
| merchantSubsidy.setMerchantId(merchantId); | merchantSubsidy.setMerchantId(merchantId); | ||||
| merchantSubsidy.setCouponOrderId(couponOrder.getId()); | merchantSubsidy.setCouponOrderId(couponOrder.getId()); | ||||
| merchantSubsidy.setCouponType(couponOrder.getCouponType()); | merchantSubsidy.setCouponType(couponOrder.getCouponType()); | ||||
| merchantSubsidy.setOrderPayment(coupon.getPrice()); | |||||
| merchantSubsidy.setReceiverPayment(coupon.getSalePrice()); | |||||
| merchantSubsidy.setOrderPayment(price.getRealPayMent()); | |||||
| merchantSubsidy.setReceiverPayment(price.getRealPayMent()); | |||||
| merchantSubsidy.setRealPayment(realPayment); | merchantSubsidy.setRealPayment(realPayment); | ||||
| merchantSubsidy.setSubsidy(subsidyNum); | merchantSubsidy.setSubsidy(subsidyNum); | ||||
| merchantSubsidy.setRealSubsidy(realSubsidyFee); | merchantSubsidy.setRealSubsidy(realSubsidyFee); | ||||
| @@ -1995,54 +1995,54 @@ public class WxOrderServiceImpl implements WxOrderService { | |||||
| WxComposeOrder composeOrder = orderAdapterService.createDBMainOrder(user, orderSave, payWay); | WxComposeOrder composeOrder = orderAdapterService.createDBMainOrder(user, orderSave, payWay); | ||||
| for (int i = 0 ; i < orderSave.size(); i ++) { | for (int i = 0 ; i < orderSave.size(); i ++) { | ||||
| OrderComposeSaveDto orderdto = orderSave.get(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; | 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 | @Override | ||||
| public boolean checkCouponIsFree(WxCoupon coupon) { | public boolean checkCouponIsFree(WxCoupon coupon) { | ||||
| return coupon.getSalePrice() == 0; | return coupon.getSalePrice() == 0; | ||||
| @@ -155,9 +155,6 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||||
| throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); | throw new MallinkException(ErrorCode.SYS_SERVER_ERROR.getCode(),e.getMessage()); | ||||
| } | } | ||||
| }else { | }else { | ||||
| if ( null == composeOrder) { | |||||
| throw new MallinkException(ErrorCode.PAY_ORDER_ERROR.getCode(),"composeOrder is null."); | |||||
| } | |||||
| List<WxOrder> orderList = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()).getChildOrders(composeOrder, oldRecord.getTenantId()); | List<WxOrder> orderList = orderFactory.getOrderAdapterService(composeOrder.getComposeOrderType()).getChildOrders(composeOrder, oldRecord.getTenantId()); | ||||
| for (WxOrder o : orderList) { | for (WxOrder o : orderList) { | ||||
| try { | try { | ||||
| @@ -898,6 +895,9 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { | |||||
| logger.error(e.getMessage()); | logger.error(e.getMessage()); | ||||
| throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); | throw new MallinkException(ErrorCode.DB_FAIL.getCode(), "订单更新"); | ||||
| } | } | ||||
| orderFactory.getOrderAdapterService(record.getComposeOrder()).doOthersAfterPaySuccess(order, record); | |||||
| // 下订单完成,发送内部消息 | // 下订单完成,发送内部消息 | ||||
| try { | try { | ||||
| wxOrderService.sendOrderSuccessActionMsg(order); | wxOrderService.sendOrderSuccessActionMsg(order); | ||||
| @@ -278,7 +278,7 @@ public class WxRefundOrderServiceImpl implements WxRefundOrderService { | |||||
| record.setTransactionId(payOrder.getTransactionId()); | record.setTransactionId(payOrder.getTransactionId()); | ||||
| record.setCUserId(payOrder.getCUserId()); | record.setCUserId(payOrder.getCUserId()); | ||||
| record.setTotalFee(payOrder.getPayAmount()); | record.setTotalFee(payOrder.getPayAmount()); | ||||
| record.setRefundFee(payOrder.getPayAmount()); | |||||
| record.setRefundFee(payOrder.getChildOrderShare(rOrder.getId()).getRealPayMent()); | |||||
| record.setRefundTimeStart(currentDate); | record.setRefundTimeStart(currentDate); | ||||
| record.setRefundOrderStatus(EnumRefundStatus.REFUND_WAIT.getCode()); | record.setRefundOrderStatus(EnumRefundStatus.REFUND_WAIT.getCode()); | ||||
| record.setRefundVendor(payOrder.getPayVendor()); | record.setRefundVendor(payOrder.getPayVendor()); | ||||
| @@ -6,7 +6,7 @@ import com.iformall.domain.dto.OrderComposeSaveDto; | |||||
| import com.iformall.domain.po.WxCUserBasicInfo; | import com.iformall.domain.po.WxCUserBasicInfo; | ||||
| import com.iformall.domain.po.WxCoupon; | import com.iformall.domain.po.WxCoupon; | ||||
| import com.iformall.domain.po.WxOrder; | 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.enums.EnumPayWay; | ||||
| import com.iformall.service.order.entity.WxComposeChildOrderPrice; | import com.iformall.service.order.entity.WxComposeChildOrderPrice; | ||||
| import com.iformall.service.order.entity.WxComposeOrder; | import com.iformall.service.order.entity.WxComposeOrder; | ||||
| @@ -23,10 +23,10 @@ public interface OrderAdapterService { | |||||
| * 是否是一个数量一个订单。一个产品肯定是一个订单 | * 是否是一个数量一个订单。一个产品肯定是一个订单 | ||||
| * @return | * @return | ||||
| */ | */ | ||||
| boolean isOneNumberOneOrder(WxCoupon coupon); | |||||
| boolean isOneNumberOneOrder(); | |||||
| /** | /** | ||||
| * 查询每一个订单的产品的真实支付价格及补贴 | |||||
| * 查询每一个订单的产品的真实支付价格 | |||||
| * @param coupon | * @param coupon | ||||
| * @return | * @return | ||||
| */ | */ | ||||
| @@ -36,7 +36,7 @@ public interface OrderAdapterService { | |||||
| * 计算每一个子订单的补贴 | * 计算每一个子订单的补贴 | ||||
| * @return | * @return | ||||
| */ | */ | ||||
| Integer calcuteChildOrderSubsidy(); | |||||
| Integer calcuteChildOrderSubsidy(WxCoupon coupon); | |||||
| /** | /** | ||||
| * 查询订单信息,单个模式查询WxOrder | * 查询订单信息,单个模式查询WxOrder | ||||
| @@ -58,4 +58,11 @@ public interface OrderAdapterService { | |||||
| * @param cUserId | * @param cUserId | ||||
| */ | */ | ||||
| void updateChildOrdersCUserId(WxComposeOrder composeOrder,List<WxOrder> orderList,Long cUserId); | void updateChildOrdersCUserId(WxComposeOrder composeOrder,List<WxOrder> orderList,Long cUserId); | ||||
| /** | |||||
| * 支付成功后,对订单进行附加的操作。 | |||||
| * @param order | |||||
| * @param record | |||||
| */ | |||||
| void doOthersAfterPaySuccess(WxOrder order,WxPayOrder record); | |||||
| } | } | ||||
| @@ -4,15 +4,36 @@ import org.springframework.beans.factory.annotation.Autowired; | |||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import com.iformall.enums.EnumComposeOrder; | 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 | @Service | ||||
| public class OrderFactory { | public class OrderFactory { | ||||
| @Autowired | @Autowired | ||||
| BatchOrderAdapterService batchOrderAdapterService; | |||||
| OneNumberOneOrderBatchOrderAdapterService oneNumberOneOrderBatchOrderAdapterService; | |||||
| @Autowired | |||||
| MulityNumberOneOrderBatchOrderAdapterService mulityNumberOneOrderBatchOrderAdapterService; | |||||
| @Autowired | |||||
| SingleOrderAdapterService singleOrderAdapterService; | |||||
| @Autowired | |||||
| CouponPackageOrderAdapterService couponPackageOrderAdapterService; | |||||
| public OrderAdapterService getOrderAdapterService(Integer composeOrderType) { | 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; | return null; | ||||
| } | } | ||||
| @@ -38,7 +38,7 @@ public class SingleOrderAdapterService implements OrderAdapterService { | |||||
| } | } | ||||
| @Override | @Override | ||||
| public boolean isOneNumberOneOrder(WxCoupon coupon) { | |||||
| public boolean isOneNumberOneOrder() { | |||||
| return true; | return true; | ||||
| } | } | ||||
| @@ -74,12 +74,8 @@ public class SingleOrderAdapterService implements OrderAdapterService { | |||||
| } | } | ||||
| @Override | @Override | ||||
| public Integer calcuteChildOrderSubsidy() { | |||||
| return null; | |||||
| public Integer calcuteChildOrderSubsidy(WxCoupon coupon) { | |||||
| return coupon.getSubsidyNum(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,4 +1,4 @@ | |||||
| package com.iformall.service.order.impl; | |||||
| package com.iformall.service.order.impl.batch; | |||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.Date; | import java.util.Date; | ||||
| @@ -31,59 +31,55 @@ import com.iformall.service.order.util.OrderHelper; | |||||
| * @author alascor | * @author alascor | ||||
| * | * | ||||
| */ | */ | ||||
| @Service | |||||
| public class BatchOrderAdapterService implements OrderAdapterService { | |||||
| public abstract class BaseBatchOrderAdapterService implements OrderAdapterService { | |||||
| @Autowired | @Autowired | ||||
| WxBatchOrderMapper wxBatchOrderMapper; | WxBatchOrderMapper wxBatchOrderMapper; | ||||
| @Autowired | @Autowired | ||||
| WxOrderMapper wxOrderMapper; | WxOrderMapper wxOrderMapper; | ||||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | |||||
| @Override | @Override | ||||
| public WxComposeOrder createDBMainOrder(WxCUserBasicInfo user,List<OrderComposeSaveDto> 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<OrderComposeSaveDto> orderSave,EnumPayWay payWay,EnumComposeOrder composeOrderType) { | |||||
| WxBatchOrder order =new WxBatchOrder(); | WxBatchOrder order =new WxBatchOrder(); | ||||
| final IdWorker idWorker = IdWorker.get(); | final IdWorker idWorker = IdWorker.get(); | ||||
| order.setId(idWorker.nextId()); | order.setId(idWorker.nextId()); | ||||
| order.setCUserId(user.getId()); | order.setCUserId(user.getId()); | ||||
| int payment = 0; | int payment = 0; | ||||
| for (OrderComposeSaveDto ocsd : orderSave) { | 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()); | WxComposeChildOrderPrice price = getChildOrderPrice(ocsd.getWxCoupon(), isPress, ocsd.getSignleOrder().getOrderGroupId(), ocsd.getCount()); | ||||
| payment = payment+price.getRealPayMent(); | payment = payment+price.getRealPayMent(); | ||||
| } | } | ||||
| order.setPayment(payment); | order.setPayment(payment); | ||||
| order.setCreateDate(new Date()); | order.setCreateDate(new Date()); | ||||
| wxBatchOrderMapper.insert(order); | 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); | 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.setPayment(order.getPayment()); | ||||
| corder.setMainOrder(order); | corder.setMainOrder(order); | ||||
| return corder; | return corder; | ||||
| } | } | ||||
| @Override | |||||
| public List<WxOrder> getChildOrders(WxComposeOrder composeOrder, String tenantId) { | |||||
| protected List<WxOrder> getChildOrders(WxComposeOrder composeOrder, String tenantId,EnumComposeOrder composeOrderType) { | |||||
| WxOrder orderq = new WxOrder(); | WxOrder orderq = new WxOrder(); | ||||
| orderq.setComposeOrderId(composeOrder.getMainOrderId()); | orderq.setComposeOrderId(composeOrder.getMainOrderId()); | ||||
| orderq.setComposeOrderType(EnumComposeOrder.BATCH.getCode()); | |||||
| orderq.setComposeOrderType(composeOrderType.getCode()); | |||||
| orderq.setTenantId(tenantId); | orderq.setTenantId(tenantId); | ||||
| List<WxOrder> orderList = wxOrderMapper.findList(orderq); | List<WxOrder> orderList = wxOrderMapper.findList(orderq); | ||||
| return orderList; | return orderList; | ||||
| } | } | ||||
| @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor = {Exception.class}) | ||||
| @Override | |||||
| public void updateChildOrdersCUserId(WxComposeOrder composeOrder,List<WxOrder> orderList, Long cUserId) { | public void updateChildOrdersCUserId(WxComposeOrder composeOrder,List<WxOrder> orderList, Long cUserId) { | ||||
| if (null != cUserId) { | if (null != cUserId) { | ||||
| WxBatchOrder order = (WxBatchOrder) composeOrder.getMainOrder(); | 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 | @Override | ||||
| public Integer calcuteChildOrderSubsidy() { | |||||
| // TODO Auto-generated method stub | |||||
| return null; | |||||
| public Integer calcuteChildOrderSubsidy(WxCoupon coupon) { | |||||
| return coupon.getSubsidyNum(); | |||||
| } | } | ||||
| } | } | ||||
| @@ -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<OrderComposeSaveDto> 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<WxOrder> 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) { | |||||
| //手动核销发券 | |||||
| } | |||||
| } | |||||
| @@ -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<OrderComposeSaveDto> 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<WxOrder> getChildOrders(WxComposeOrder composeOrder, String tenantId) { | |||||
| return super.getChildOrders(composeOrder, tenantId, EnumComposeOrder.MULITY_NUMBER_ORDER_BATCH); | |||||
| } | |||||
| @Override | |||||
| public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record) { | |||||
| } | |||||
| } | |||||
| @@ -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<OrderComposeSaveDto> 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<WxOrder> getChildOrders(WxComposeOrder composeOrder, String tenantId) { | |||||
| return super.getChildOrders(composeOrder, tenantId, EnumComposeOrder.ONE_NUMBER_ORDER_BATCH); | |||||
| } | |||||
| @Override | |||||
| public void doOthersAfterPaySuccess(WxOrder order, WxPayOrder record) { | |||||
| } | |||||
| } | |||||