From ae7148c587d7de8ebde7393432f2686bac2ed974 Mon Sep 17 00:00:00 2001 From: xhxu Date: Sat, 3 Dec 2022 22:52:12 +0800 Subject: [PATCH] //coupon order --- .../controller/basic/WxMallController.java | 2 +- .../request/TtPayUnifiedOrderV2Request.java | 10 +++ .../mapper/TtCouponChannelPoiMapper.java | 1 - .../impl/WxCouponChannelServiceImpl.java | 17 ++++- .../service/impl/WxOrderServiceImpl.java | 4 +- .../service/impl/WxPayOrderServiceImpl.java | 8 ++- .../miniApp/TtMiniAppPayAdapterService.java | 64 ++++++++++--------- 7 files changed, 67 insertions(+), 39 deletions(-) diff --git a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMallController.java b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMallController.java index 4d06b4bc7..d1956a918 100644 --- a/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMallController.java +++ b/mallinkAdmin/src/main/java/com/iformall/controller/basic/WxMallController.java @@ -71,7 +71,7 @@ public class WxMallController extends BaseController { @GetMapping("/childMall") @SystemControllerLog(description = "商城-当前查询") public ResultData childMall() { - logger.debug("[" + getIpAddr() + "] WxMallController::mallinfo"); + logger.debug("[" + getIpAddr() + "] WxMallController::childMall"); WxMall mall = wxMallService.getByTenantInfo(getUser()); if(mall == null) { logger.error("未配置相应的mall"); diff --git a/mallinkService/src/main/java/com/iformall/douyin/payv2/request/TtPayUnifiedOrderV2Request.java b/mallinkService/src/main/java/com/iformall/douyin/payv2/request/TtPayUnifiedOrderV2Request.java index 295a7652c..a5e3e579e 100644 --- a/mallinkService/src/main/java/com/iformall/douyin/payv2/request/TtPayUnifiedOrderV2Request.java +++ b/mallinkService/src/main/java/com/iformall/douyin/payv2/request/TtPayUnifiedOrderV2Request.java @@ -204,6 +204,16 @@ public class TtPayUnifiedOrderV2Request implements Serializable { @SerializedName(value = "discount_amount") private Integer discountAmount; + + + + /** + * 否 + * 折扣金额,单位(分) + */ + @SerializedName(value = "merchant_uid") + private String merchantUid; + } diff --git a/mallinkService/src/main/java/com/iformall/mapper/TtCouponChannelPoiMapper.java b/mallinkService/src/main/java/com/iformall/mapper/TtCouponChannelPoiMapper.java index 5c8e02be6..fa42ca6ba 100644 --- a/mallinkService/src/main/java/com/iformall/mapper/TtCouponChannelPoiMapper.java +++ b/mallinkService/src/main/java/com/iformall/mapper/TtCouponChannelPoiMapper.java @@ -18,5 +18,4 @@ public interface TtCouponChannelPoiMapper extends CommonMapper 0){ return new ResultData(ttCouponChannelPoi); } @@ -877,9 +882,15 @@ public class WxCouponChannelServiceImpl implements WxCouponChannelService { @Override public ResultData updateOnline(WxCouponChannel wxCouponChannel) { - TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectByChannelId(wxCouponChannel.getTenantId(),wxCouponChannel.getId()); + WxCouponChannel couponChannel = this.getById(wxCouponChannel.getId(), wxCouponChannel.getTenantId()); + if(couponChannel == null){ + return new ResultData(ErrorCode.SYS_NULLPOINTER_ERROR.getCode(),"未找到可用的数据"); + } + TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectById(couponChannel.getTenantId(), couponChannel.getCouponId()); + if(ttCouponChannelPoi == null || EnumSpuSyncStatus.sync_auditing.getCode().equals(ttCouponChannelPoi.getLastStatus()) - || EnumSpuSyncStatus.sync_audit_rejection.getCode().equals(ttCouponChannelPoi.getLastStatus())){ + || EnumSpuSyncStatus.sync_audit_rejection.getCode().equals(ttCouponChannelPoi.getLastStatus()) + || EnumSpuSyncStatus.sync_audit_disable.getCode().equals(ttCouponChannelPoi.getLastStatus())){ return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"该券未提交审核或审核未通过"); } Date date = new Date(); 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 c502fe4f9..5196786ee 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxOrderServiceImpl.java @@ -3379,6 +3379,7 @@ public class WxOrderServiceImpl implements WxOrderService { } WxOrder order = new WxOrder(); + order.updateTenantInfo(coupon); order.setOrderGroupId(group.getId()); order.setCUserId(user.getId()); order.setOrderStatus(EnumOrderStatus.ORDER_STATUS_COOPERATING_UNPAID.getCode()); @@ -3659,9 +3660,8 @@ public class WxOrderServiceImpl implements WxOrderService { return new ResultData(composeOrder); } else { //todo 暂无多订单模式 - + return new ResultData(ErrorCode.SYS_PARAMETER_ERROR.getCode(), "数据异常"); } - return new ResultData(ErrorCode.SYS_PARAMETER_CAST_ERROR.getCode(), "数据异常"); // List childOrders = orderAdapterService.getChildOrders(composeOrder, tenantEntity.getTenantId()); // Map> collect = childOrders.stream().collect(groupingBy(WxOrder::getCouponChannelId)); 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 519f3c855..15a8db29c 100644 --- a/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java +++ b/mallinkService/src/main/java/com/iformall/service/impl/WxPayOrderServiceImpl.java @@ -419,16 +419,22 @@ public class WxPayOrderServiceImpl implements WxPayOrderService { //设置子订单分账金额 Map childShares = new HashMap(); for (WxOrder o : childOrders) { - Long merchant_id = 0L; + Long merchant_id = 0l; String merchant_uid = ""; if(EnumPayMchType.DIRECT.equals(payMchType)){//直连模式记录收款商户 merchant_id = o.getMakeMerchantId(); + if(merchant_id == null || merchant_id.equals(0l)){ + throw new MallinkException(ErrorCode.PAY_ORDER_MERCHANT_UID_ERROR); + } PayShareAdapterService payShareServie = payServiceFactory.getPayShareAdapterService(payWay.getCode(),payAccount.getPayVersion()); WxProfitSharingReceiver receiver = payShareServie.getReceiver(payAccount, merchant_id, null, payMchTypeEnum.getCode()); if(receiver == null){ throw new MallinkException(ErrorCode.PAY_ORDER_MERCHANT_UID_ERROR); } merchant_uid = receiver.getReceiverAccount(); + if(StringUtils.isBlank(merchant_uid)){ + throw new MallinkException(ErrorCode.PAY_ORDER_MERCHANT_UID_ERROR); + } } childShares.put(String.valueOf(o.getId()), new WxComposeChildOrderShare(o.getId(),o.getPayment(),merchant_id,merchant_uid)); diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/v1/miniApp/TtMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/v1/miniApp/TtMiniAppPayAdapterService.java index ef975ae89..ded167a29 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/v1/miniApp/TtMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/v1/miniApp/TtMiniAppPayAdapterService.java @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.iformall.common.ErrorCode; +import com.iformall.common.ResultData; import com.iformall.domain.po.*; import com.iformall.domain.vo.WxMerchantVo; import com.iformall.domain.vo.WxOrderCouponVo; @@ -20,6 +21,7 @@ import com.iformall.mapper.*; import com.iformall.service.WxCouponService; import com.iformall.service.order.OrderAdapterService; import com.iformall.service.order.OrderFactory; +import com.iformall.service.order.entity.WxComposeChildOrderShare; import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.CDrivingPayService; @@ -112,19 +114,25 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(record.getComposeOrder()); List orderList = orderAdapterService.getChildOrders(composeOrder, appInfo.getTenantId()); - Map> collect = orderList.stream().collect(groupingBy(WxOrder::getCouponChannelId)); - - Map> goodsCollect = new HashMap<>(); - for (Long key: collect.keySet()) { - TtPayUnifiedOrderV2Request.Good good = new TtPayUnifiedOrderV2Request.Good(); - good.setQuantity(collect.get(key).size()); - TtCouponChannelPoi ttCouponChannelPoi = ttCouponChannelPoiMapper.selectByChannelId(appInfo.getTenantId(), key); - good.setGoodsId(ttCouponChannelPoi.getSpuId()); - good.setGoodsIdType(1);//poi商品固定传1 - goods.add(good); - goodsCollect.put(good.getGoodsId(),collect.get(key)); + + if(orderList.size() > 1){ + //todo 暂无多订单 + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"数据异常"); } + WxOrder order = orderList.get(0); + + TtPayUnifiedOrderV2Request.Good good = new TtPayUnifiedOrderV2Request.Good(); + good.setQuantity(order.getCouponNumber()); + WxCouponChannel couponChannel = wxCouponChannelMapper.selectById(order.getCouponChannelId(), order.getTenantId()); + good.setGoodsId(couponChannel.getTtSpuId()); + good.setGoodsIdType(1);//poi商品固定传1 + if (EnumPayMchType.DIRECT.getCode().equals(record.getMchType())) { + WxComposeChildOrderShare childOrderShare = record.getChildOrderShare(order.getId()); + good.setMerchantUid(childOrderShare.getMerchantUid()); + } + goods.add(good); + request.setGoodsList(goods); request.setTotalAmount(composeOrder.getPayment()); request.setOpenId(openId); @@ -143,6 +151,14 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen TtPayUnifiedOrderV2Result orderV2 = ttPayService.createOrderV2(request); + if(orderV2.getItemOrderInfoList().size() > 1){ + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"数据异常"); + } + TtPayUnifiedOrderV2Result.ItemOrderInfo itemOrderInfo = orderV2.getItemOrderInfoList().get(0); + if(itemOrderInfo.getItemOrderDetail().size() > 1){ + throw new MallinkException(ErrorCode.SYS_PARAMETER_ERROR.getCode(),"数据异常"); + } + JSONObject allExtParam = new JSONObject(); allExtParam.put("order_id",orderV2.getOrderId()); allExtParam.put("total_amount",composeOrder.getPayment()); @@ -153,26 +169,12 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen batchOrder.setExtParam(JSON.toJSONString(allExtParam)); wxBatchOrderMapper.updateById(batchOrder); - for (TtPayUnifiedOrderV2Result.ItemOrderInfo itemOrderInfo:orderV2.getItemOrderInfoList()) { - List wxOrders = goodsCollect.get(itemOrderInfo.getGoodsId()); - if(itemOrderInfo.getItemOrderDetail().size() == wxOrders.size()){ - for(int i=0;i