| @@ -3,6 +3,7 @@ package com.iformall.service.pay.service.pay.douyin.miniApp; | |||||
| import com.alibaba.fastjson.JSON; | import com.alibaba.fastjson.JSON; | ||||
| import com.alibaba.fastjson.JSONObject; | import com.alibaba.fastjson.JSONObject; | ||||
| import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; | ||||
| import com.iformall.common.ErrorCode; | |||||
| import com.iformall.domain.po.*; | import com.iformall.domain.po.*; | ||||
| import com.iformall.domain.vo.WxMerchantVo; | import com.iformall.domain.vo.WxMerchantVo; | ||||
| import com.iformall.domain.vo.WxOrderCouponVo; | 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.request.TtPayUnifiedOrderV2Request; | ||||
| import com.iformall.douyin.payv2.result.TtPayUnifiedOrderV2Result; | import com.iformall.douyin.payv2.result.TtPayUnifiedOrderV2Result; | ||||
| import com.iformall.enums.*; | 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.order.entity.WxComposeOrder; | ||||
| import com.iformall.service.pay.entity.PayExtraParam; | import com.iformall.service.pay.entity.PayExtraParam; | ||||
| import com.iformall.service.pay.service.pay.CDrivingPayService; | import com.iformall.service.pay.service.pay.CDrivingPayService; | ||||
| @@ -28,13 +31,14 @@ import com.iformall.utils.MaUtil; | |||||
| import lombok.extern.slf4j.Slf4j; | import lombok.extern.slf4j.Slf4j; | ||||
| import me.chanjar.weixin.common.error.WxErrorException; | import me.chanjar.weixin.common.error.WxErrorException; | ||||
| import me.chanjar.weixin.common.util.json.WxGsonBuilder; | import me.chanjar.weixin.common.util.json.WxGsonBuilder; | ||||
| import org.apache.commons.lang3.StringUtils; | |||||
| import org.springframework.beans.factory.annotation.Autowired; | import org.springframework.beans.factory.annotation.Autowired; | ||||
| import org.springframework.stereotype.Service; | import org.springframework.stereotype.Service; | ||||
| import java.io.File; | import java.io.File; | ||||
| import java.util.*; | import java.util.*; | ||||
| import static java.util.stream.Collectors.toList; | |||||
| import static java.util.stream.Collectors.*; | |||||
| @Slf4j | @Slf4j | ||||
| @Service | @Service | ||||
| @@ -46,17 +50,110 @@ public class TtMiniAppPayAdapterService extends BaseTtPayAdapterService implemen | |||||
| @Autowired | @Autowired | ||||
| private TtMerchantPoiMapper ttMerchantPoiMapper; | private TtMerchantPoiMapper ttMerchantPoiMapper; | ||||
| @Autowired | |||||
| private TtCouponChannelPoiMapper ttCouponChannelPoiMapper; | |||||
| @Autowired | |||||
| private WxBatchOrderMapper wxBatchOrderMapper; | |||||
| @Autowired | |||||
| private WxOrderMapper wxOrderMapper; | |||||
| @Autowired | |||||
| OrderFactory orderFactory; | |||||
| @Autowired | @Autowired | ||||
| private MaUtil maUtil; | private MaUtil maUtil; | ||||
| @Override | @Override | ||||
| public PayAdapterResult pay(WxPayAccount payAccount, WxPayOrder record,WxComposeOrder composeOrder,String productName,EnumPayShare isShare,WxAppinfo appInfo,Date currentDate, PayExtraParam params) throws Exception { | 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); | // TtPayUnifiedOrderV2Result result = ttPayService.createOrderV2(request); | ||||