| @@ -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<TtPayUnifiedOrderV2Request.Good> goods = new ArrayList<>(); | |||
| OrderAdapterService orderAdapterService = orderFactory.getOrderAdapterService(record.getComposeOrder()); | |||
| List<WxOrder> orderList = orderAdapterService.getChildOrders(composeOrder, appInfo.getTenantId()); | |||
| Map<Long, List<WxOrder>> collect = orderList.stream().collect(groupingBy(WxOrder::getCouponChannelId)); | |||
| Map<String, List<WxOrder>> 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<String,Object> 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<WxOrder> wxOrders = goodsCollect.get(itemOrderInfo.getGoodsId()); | |||
| if(itemOrderInfo.getItemOrderDetail().size() == wxOrders.size()){ | |||
| for(int i=0;i<wxOrders.size();i++){ | |||
| WxOrder updOrder = new WxOrder(); | |||
| updOrder.updateTenantInfo(appInfo); | |||
| updOrder.setId(wxOrders.get(i).getId()); | |||
| updOrder.setExtParam(JSON.toJSONString(itemOrderInfo.getItemOrderDetail().get(i))); | |||
| wxOrderMapper.updateById(updOrder); | |||
| } | |||
| }else if(wxOrders.size() == 1){ | |||
| WxOrder updOrder = new WxOrder(); | |||
| updOrder.updateTenantInfo(appInfo); | |||
| updOrder.setId(wxOrders.get(0).getId()); | |||
| updOrder.setExtParam(JSON.toJSONString(itemOrderInfo.getItemOrderDetail())); | |||
| wxOrderMapper.updateById(updOrder); | |||
| }else{ | |||
| throw new Exception("下单数据异常"); | |||
| } | |||
| } | |||
| PayAdapterResult par = new PayAdapterResult(); | |||
| par.setSuccess(true); | |||
| par.setTransactionId(orderV2.getOrderId()); | |||
| orderV2.setItemOrderInfoList(null); | |||
| par.setData(orderV2); | |||
| return par; | |||
| // | |||
| // | |||
| // TtPayUnifiedOrderV2Result result = ttPayService.createOrderV2(request); | |||