diff --git a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/TtMiniAppPayAdapterService.java b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/TtMiniAppPayAdapterService.java index 0e22e1abf..e327fb11a 100644 --- a/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/TtMiniAppPayAdapterService.java +++ b/mallinkService/src/main/java/com/iformall/service/pay/service/pay/douyin/miniApp/TtMiniAppPayAdapterService.java @@ -3,6 +3,7 @@ package com.iformall.service.pay.service.pay.douyin.miniApp; 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.domain.po.*; import com.iformall.domain.vo.WxMerchantVo; import com.iformall.domain.vo.WxOrderCouponVo; @@ -14,8 +15,10 @@ import com.iformall.douyin.pay.preOrder.DouYinCreatePreOrder; import com.iformall.douyin.payv2.request.TtPayUnifiedOrderV2Request; import com.iformall.douyin.payv2.result.TtPayUnifiedOrderV2Result; import com.iformall.enums.*; -import com.iformall.mapper.TtMerchantPoiMapper; -import com.iformall.mapper.WxAppinfoMapper; +import com.iformall.exception.MallinkException; +import com.iformall.mapper.*; +import com.iformall.service.order.OrderAdapterService; +import com.iformall.service.order.OrderFactory; import com.iformall.service.order.entity.WxComposeOrder; import com.iformall.service.pay.entity.PayExtraParam; import com.iformall.service.pay.service.pay.CDrivingPayService; @@ -28,13 +31,14 @@ import com.iformall.utils.MaUtil; import lombok.extern.slf4j.Slf4j; import me.chanjar.weixin.common.error.WxErrorException; import me.chanjar.weixin.common.util.json.WxGsonBuilder; +import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.io.File; import java.util.*; -import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.*; @Slf4j @Service @@ -46,17 +50,110 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen @Autowired private TtMerchantPoiMapper ttMerchantPoiMapper; + @Autowired + private TtCouponChannelPoiMapper ttCouponChannelPoiMapper; + + @Autowired + private WxBatchOrderMapper wxBatchOrderMapper; + + @Autowired + private WxOrderMapper wxOrderMapper; + + @Autowired + OrderFactory orderFactory; + @Autowired private MaUtil maUtil; @Override public PayAdapterResult pay(WxPayAccount payAccount, WxPayOrder record,WxComposeOrder composeOrder,String productName,EnumPayShare isShare,WxAppinfo appInfo,Date currentDate, PayExtraParam params) throws Exception { + if (null == params ) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"openId为空"); + } + String openId = (String) params.getValue("openId"); + if (StringUtils.isBlank(openId) ) { + throw new MallinkException(ErrorCode.SYS_PARAMETER_NOT_NULL.getCode(),"openId为空"); + } - throw new Exception("请升级抖音版本"); +// throw new Exception("请升级抖音版本"); // 新下单接口 -// TtPayService ttPayService = maUtil.getTtPayService(appInfo, payAccount); -// TtPayUnifiedOrderV2Request request = new TtPayUnifiedOrderV2Request(); + TtPayService ttPayService = maUtil.getTtPayService(appInfo, payAccount); + TtPayUnifiedOrderV2Request request = new TtPayUnifiedOrderV2Request(); + List goods = new ArrayList<>(); + + 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)); + } + + request.setGoodsList(goods); + request.setTotalAmount(composeOrder.getPayment()); + request.setOpenId(openId); + request.setOutOrderNo(record.getPayOrderNo()); + request.setPayExpireSeconds(15*60); + TtPayUnifiedOrderV2Request.PageEntry pageEntry = new TtPayUnifiedOrderV2Request.PageEntry(); + pageEntry.setPath(Constant.mainPageUrl); + Map paramMap = new HashMap<>(); + paramMap.put("type","dt"); + paramMap.put("orderId",composeOrder.getMainOrderId()); + pageEntry.setParams(JSON.toJSONString(paramMap)); + request.setOrderEntrySchema(pageEntry); + + TtPayUnifiedOrderV2Result orderV2 = ttPayService.createOrderV2(request); + + record.setPrepayId(orderV2.getPayOrderId()); + record.setTransactionId(orderV2.getOrderId()); + record.setUpdateTime(new Date()); + + JSONObject allExtParam = new JSONObject(); + allExtParam.put("order_id",orderV2.getOrderId()); + allExtParam.put("total_amount",composeOrder.getPayment()); + allExtParam.put("open_id",openId); + WxBatchOrder batchOrder = new WxBatchOrder(); + batchOrder.updateTenantInfo(appInfo); + batchOrder.setId(composeOrder.getMainOrderId()); + 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