From 0a8d28436b2f7229ecdf40c6b003902002c8947f Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期四, 16 十月 2025 17:37:08 +0800 Subject: [PATCH] 修改bug --- UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayInfoController.java | 151 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 149 insertions(+), 2 deletions(-) diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayInfoController.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayInfoController.java index 6dfa73e..eef1d76 100644 --- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayInfoController.java +++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/shunfeng/controller/PayInfoController.java @@ -1,13 +1,23 @@ package com.stylefeng.guns.modular.shunfeng.controller; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.core.util.ToolUtil; +import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity; +import com.stylefeng.guns.modular.shunfeng.model.Financial; import com.stylefeng.guns.modular.shunfeng.model.OrderRide; import com.stylefeng.guns.modular.shunfeng.model.vo.ApiJson; +import com.stylefeng.guns.modular.shunfeng.service.IDriverRideService; +import com.stylefeng.guns.modular.shunfeng.service.IFinancialService; import com.stylefeng.guns.modular.shunfeng.service.IOrderRideService; import com.stylefeng.guns.modular.shunfeng.service.ITimeTaskService; +import com.stylefeng.guns.modular.system.model.Company; +import com.stylefeng.guns.modular.system.model.Driver; import com.stylefeng.guns.modular.system.model.UserInfo; import com.stylefeng.guns.modular.system.service.ISystemNoticeService; import com.stylefeng.guns.modular.system.service.IUserInfoService; +import com.stylefeng.guns.modular.system.util.ResultUtil; +import com.stylefeng.guns.modular.system.util.qianyuntong.OrderUtil; +import com.stylefeng.guns.modular.system.util.qianyuntong.model.*; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -20,7 +30,17 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Date; +import java.util.List; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** * 支付相关接口 @@ -38,6 +58,11 @@ private IUserInfoService userInfoService; @Autowired private ISystemNoticeService systemNoticeService; + /*顺风车司机*/ + @Autowired + private IDriverRideService driverRideService; + @Autowired + private IFinancialService financialService; @@ -130,8 +155,11 @@ @ApiImplicitParams({ @ApiImplicitParam(name = "orderId", value = "订单id", dataType = "int"), @ApiImplicitParam(name = "payType", value = "支付类型 1=支付宝,2 = 微信 3:银行卡 4:小程序", dataType = "int"), + @ApiImplicitParam(name = "path", value = "前端支付很后的跳转页面", dataType = "string"), + @ApiImplicitParam(name = "ip", value = "前端支付IP地址", dataType = "string"), }) - public Object payOnline(Integer orderId,Integer type,String code,Integer payType,Integer isBalance,HttpServletRequest request,Integer couponId){ + public Object payOnline(Integer orderId,Integer type,String code,Integer payType,Integer isBalance, + String path, String ip, HttpServletRequest request,Integer couponId){ try { if(orderId == null || orderId == 0){ return ApiJson.returnNG("订单ID不能为空"); @@ -156,7 +184,126 @@ if(orderRide.getState()==2){//已支付 return ApiJson.returnNG("该订单不需要支付"); } - info = new PayUtil().getPayInfo(payType,orderRide.getOrderNum(),openId,request); + Double orderMoney = orderRide.getMoney(); + if(2 == payType){ + UserInfo userInfo = userInfoService.selectById(orderRide.getUserId()); + if(null == orderRide.getIsCreated() || 0 == orderRide.getIsCreated()){ + //调用中台创建订单及拉起支付接口 + TradeOrderCreateData tradeOrderCreateData = new TradeOrderCreateData(); + tradeOrderCreateData.setTreatShopId("0"); + tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isCompensate\":\"0\",\"isPromote\":\"0\"}"); + tradeOrderCreateData.setCharge(new BigDecimal(orderMoney).setScale(2, RoundingMode.HALF_EVEN)); + tradeOrderCreateData.setOrderNo("SF" + orderRide.getId()); + tradeOrderCreateData.setCustomerId(userInfo.getOnconUUID()); + tradeOrderCreateData.setPartnerPayId(orderRide.getZttravelId()); + tradeOrderCreateData.setTotalFee(Double.valueOf(orderMoney * 100).intValue() + ""); + tradeOrderCreateData.setOrderDesc("完成订单"); + tradeOrderCreateData.setRetUrl(path); + tradeOrderCreateData.setClientIp(ip); + tradeOrderCreateData.setServiceType(4); + + List<GoodsInfoRequest> goodsInfo = new ArrayList<>(); + GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest(); + goodsInfoRequest.setSubOpenId(userInfo.getAppletsOpenId()); + goodsInfoRequest.setProfitSharing("1"); + goodsInfo.add(goodsInfoRequest); + tradeOrderCreateData.setGoodsInfo(goodsInfo); + TradeOrderCreate tradeOrderCreate = OrderUtil.tradeOrderCreate1(tradeOrderCreateData, 0); + PayInfo payInfo = tradeOrderCreate.getPayInfo(); + if(!"000000".equals(payInfo.getRetCode())){ + return ResultUtil.error(payInfo.getRetMsg()); + } + orderRide.setIsCreated(1); + orderRide.setZttravelId(tradeOrderCreate.getOrderInfo().getOrderId()); + info = payInfo.getData().getRedirectUrl(); + }else{ + //拉起支付 + TradePayOff1Data tradePayOff1Data = new TradePayOff1Data(); + tradePayOff1Data.setPartnerPayId(orderRide.getZttravelId()); + tradePayOff1Data.setTotalFee(Double.valueOf(orderMoney * 100).intValue() + ""); + tradePayOff1Data.setRetUrl(path); + tradePayOff1Data.setClientIp(ip); + tradePayOff1Data.setOrderDesc("完成订单"); + List<GoodsInfoRequest> goodsInfo = new ArrayList<>(); + GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest(); + goodsInfoRequest.setSubOpenId(userInfo.getAppletsOpenId()); + goodsInfoRequest.setProfitSharing("1"); + goodsInfo.add(goodsInfoRequest); + tradePayOff1Data.setGoodsInfo(goodsInfo); + PayInfo payInfo = OrderUtil.tradePayOff1(tradePayOff1Data, 0); + if(!"000000".equals(payInfo.getRetCode())){ + return ResultUtil.error(payInfo.getRetMsg()); + } + info = payInfo.getData().getRedirectUrl(); + } + orderRideService.updateById(orderRide); + + //创建定时任务查询订单支付状态 + ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); + threadPoolExecutor.execute(()->{ + try { + int num = 1; + int wait = 0; + while (num <= 13) { + int min = 5000; + wait += (min * num); + OrderRide orderRide1 = orderRideService.selectById(orderRide.getId()); + if (orderRide1.getState() != 1) { + break; + } + GetTravelItineraryListRequest request1 = new GetTravelItineraryListRequest(); + request1.setCustomerId(userInfo.getOnconUUID()); + request1.setOrderNo("SF" + orderRide1.getId()); + ListPage<List<TravelItinerary>> travelItineraryList = OrderUtil.getTravelItineraryList(request1); + TravelItinerary travelItinerary = travelItineraryList.getList().get(0); + if(travelItinerary.getStatus() != 7 || Arrays.asList(3, 11).contains(travelItinerary.getOrderStatus())){ + GetPaymentInfoDataRequest getPaymentInfoDataRequest1 = new GetPaymentInfoDataRequest(); + getPaymentInfoDataRequest1.setPartnerPayId(orderRide1.getZttravelId()); + GetPaymentInfo getPaymentInfo1 = OrderUtil.paymentInfo(getPaymentInfoDataRequest1); + + String trade_no = getPaymentInfo1.getPayId(); + Financial financial = new Financial(); + financial.setType(1);//类型 1=收入 2=支出 + financial.setPayType("2");//支付类型 1=余额 2=微信 3=支付宝 + financial.setMoney(orderMoney);//支付金额 + financial.setOrderNum(orderRide1.getOrderNum());//我们本地的订单号 + financial.setLsType(trade_no);//流水号 + financial.setAddTime(new Date()); + financial.setTradeStatus("success"); + //顺风车支付 + //修改订单表中的订单流水和支付方式 + orderRide1.setOutNum(financial.getLsType());//流水 + orderRide1.setPayTime(new Date()); + orderRide1.setPayType(2); + orderRide1.setState(2); + financial.setPwType(8);//顺风车 + financial.setUserId(orderRide1.getUserId()); + financial.setLx(1);//1=用户 2=司机 + financial.setOrderType(4);//顺风车 + financialService.insert(financial); + orderRideService.updateById(orderRide1); + /*添加系统消息*/ + try { + systemNoticeService.addSystemNotice(1, "您成功支付从" + orderRide1.getStartName() + "到" + orderRide1.getEndName() + "的顺风车订单", orderRide1.getUserId(), 1); + } catch (Exception e) { + throw new RuntimeException(e); + } + + break; + } + Thread.sleep(wait); + num++; + } + } catch (Exception e) { + e.printStackTrace(); + }finally { + threadPoolExecutor.shutdown(); + } + + }); + }else{ + info = new PayUtil().getPayInfo(payType,orderRide.getOrderNum(),openId,request); + } return ApiJson.returnOK(info); } catch (Exception e) { e.printStackTrace(); -- Gitblit v1.7.1