| | |
| | | import com.supersavedriving.user.modular.system.util.MallBook.model.*; |
| | | import com.supersavedriving.user.modular.system.util.MallBook.util.Transfer; |
| | | import com.supersavedriving.user.modular.system.util.MallBook.util.TrhRequest; |
| | | import com.supersavedriving.user.modular.system.util.juhe.WeatherUtil; |
| | | import com.supersavedriving.user.modular.system.util.mongodb.model.Location; |
| | | import com.supersavedriving.user.modular.system.util.qianyuntong.OrderUtil; |
| | | import com.supersavedriving.user.modular.system.util.qianyuntong.model.*; |
| | | import com.supersavedriving.user.modular.system.warpper.*; |
| | | import io.swagger.models.auth.In; |
| | | import org.redisson.api.RedissonClient; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.MathContext; |
| | | import java.math.RoundingMode; |
| | | import java.net.InetAddress; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | import java.util.concurrent.LinkedBlockingQueue; |
| | | import java.util.concurrent.ThreadPoolExecutor; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | |
| | |
| | | private RedisUtil redisUtil; |
| | | |
| | | @Autowired |
| | | private RedissonClient redissonClient; |
| | | |
| | | @Autowired |
| | | private MongoTemplate mongoTemplate; |
| | | |
| | | @Autowired |
| | |
| | | |
| | | @Autowired |
| | | private IRevenueService revenueService; |
| | | |
| | | @Autowired |
| | | private IAgentService agentService; |
| | | |
| | | @Autowired |
| | | private IPlatformRechargeRecordService platformRechargeRecordService; |
| | | |
| | | @Autowired |
| | | private IDivisionRecordService divisionRecordService; |
| | |
| | | */ |
| | | @Override |
| | | public ResultUtil travelOrder(Integer uid, TravelOrder travelOrder) throws Exception { |
| | | List<Integer> state = Arrays.asList(101, 102, 103, 104, 105, 106, 107, 201, 401); |
| | | Order order = this.selectOne(new EntityWrapper<Order>().eq("userId", uid).eq("status", 1).in("state", state)); |
| | | if(null != order){ |
| | | return ResultUtil.error("您还有正在进行的订单"); |
| | | } |
| | | AppUser appUser = appUserService.selectById(uid); |
| | | order = this.selectOne(new EntityWrapper<Order>().eq("userPhone", appUser.getPhone()).eq("status", 1).in("state", state)); |
| | | if(null != order){ |
| | | return ResultUtil.error("您还有正在进行的订单"); |
| | | } |
| | | |
| | | String startAddress = travelOrder.getStartAddress(); |
| | | startAddress = startAddress.replaceAll("& #40;", "("); |
| | | startAddress = startAddress.replaceAll("& #41;", ")"); |
| | | travelOrder.setStartAddress(startAddress); |
| | | if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){ |
| | | String endAddress = travelOrder.getEndAddress(); |
| | | endAddress = endAddress.replaceAll("& #40;", "("); |
| | | endAddress = endAddress.replaceAll("& #41;", ")"); |
| | | travelOrder.setEndAddress(endAddress); |
| | | } |
| | | |
| | | order = new Order(); |
| | | BeanUtils.copyProperties(travelOrder, order); |
| | | if(ToolUtil.isEmpty(travelOrder.getUserPhone())){ |
| | | order.setUserPhone(appUser.getPhone()); |
| | | order.setUserName(appUser.getNickname()); |
| | | } |
| | | order.setUserId(uid); |
| | | order.setSource(1); |
| | | order.setHallOrder(0); |
| | | order.setStatus(1); |
| | | order.setCreateTime(new Date()); |
| | | order.setState(null != travelOrder.getDriverId() ? 102 : 101); |
| | | Double d = 0D; |
| | | if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){ |
| | | Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1); |
| | | if(null == distance){ |
| | | return ResultUtil.error("获取预估距离出错"); |
| | | try { |
| | | List<Integer> state = Arrays.asList(101, 102, 103, 104, 105, 106, 107, 201, 401); |
| | | Order order = this.selectOne(new EntityWrapper<Order>().eq("userId", uid).eq("status", 1).in("state", state)); |
| | | if(null != order){ |
| | | return ResultUtil.error("您还有正在进行的订单"); |
| | | } |
| | | d = Double.valueOf(distance.get("distance")) / 1000; |
| | | order.setEstimatedMileage(d); |
| | | order.setEstimatedTime(Integer.valueOf(distance.get("duration")) / 60); |
| | | } |
| | | String city = ""; |
| | | Integer branchOfficeId = null; |
| | | District geocode = MapUtil.geocode(order.getStartLng().toString(), order.getStartLat().toString()); |
| | | if(null != geocode){ |
| | | String districtCode = geocode.getDistrictCode(); |
| | | BranchOffice branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("districtCode", districtCode)); |
| | | if(null == branchOffice){ |
| | | String cityCode = geocode.getCityCode(); |
| | | branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("cityCode", cityCode)); |
| | | AppUser appUser = appUserService.selectById(uid); |
| | | order = this.selectOne(new EntityWrapper<Order>().eq("userPhone", appUser.getPhone()).eq("status", 1).in("state", state)); |
| | | if(null != order){ |
| | | return ResultUtil.error("您还有正在进行的订单"); |
| | | } |
| | | |
| | | String startAddress = travelOrder.getStartAddress(); |
| | | startAddress = startAddress.replaceAll("& #40;", "("); |
| | | startAddress = startAddress.replaceAll("& #41;", ")"); |
| | | travelOrder.setStartAddress(startAddress); |
| | | if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){ |
| | | String endAddress = travelOrder.getEndAddress(); |
| | | endAddress = endAddress.replaceAll("& #40;", "("); |
| | | endAddress = endAddress.replaceAll("& #41;", ")"); |
| | | travelOrder.setEndAddress(endAddress); |
| | | } |
| | | |
| | | order = new Order(); |
| | | BeanUtils.copyProperties(travelOrder, order); |
| | | if(ToolUtil.isEmpty(travelOrder.getUserPhone())){ |
| | | order.setUserPhone(appUser.getPhone()); |
| | | order.setUserName(appUser.getNickname()); |
| | | } |
| | | order.setUserId(uid); |
| | | order.setSource(1); |
| | | order.setHallOrder(0); |
| | | order.setStatus(1); |
| | | order.setCreateTime(new Date()); |
| | | order.setState(null != travelOrder.getDriverId() ? 102 : 101); |
| | | Double d = 0D; |
| | | if(ToolUtil.isNotEmpty(travelOrder.getEndAddress())){ |
| | | Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1); |
| | | if(null == distance){ |
| | | return ResultUtil.error("获取预估距离出错"); |
| | | } |
| | | d = Double.valueOf(distance.get("distance")) / 1000; |
| | | order.setEstimatedMileage(d); |
| | | order.setEstimatedTime(Integer.valueOf(distance.get("duration")) / 60); |
| | | } |
| | | String city = ""; |
| | | Integer branchOfficeId = null; |
| | | District geocode = MapUtil.geocode(order.getStartLng().toString(), order.getStartLat().toString()); |
| | | if(null != geocode){ |
| | | String districtCode = geocode.getDistrictCode(); |
| | | BranchOffice branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("districtCode", districtCode)); |
| | | if(null == branchOffice){ |
| | | String provinceCode = geocode.getProvinceCode(); |
| | | branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("provinceCode", provinceCode)); |
| | | String cityCode = geocode.getCityCode(); |
| | | branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("cityCode", cityCode)); |
| | | if(null == branchOffice){ |
| | | String provinceCode = geocode.getProvinceCode(); |
| | | branchOffice = branchOfficeService.selectOne(new EntityWrapper<BranchOffice>().eq("status", 1).eq("provinceCode", provinceCode)); |
| | | } |
| | | } |
| | | if(null == branchOffice){ |
| | | return ResultUtil.error("起点暂无企业服务"); |
| | | } |
| | | branchOfficeId = branchOffice.getId(); |
| | | } |
| | | if(null == branchOffice){ |
| | | return ResultUtil.error("起点暂无企业服务"); |
| | | } |
| | | branchOfficeId = branchOffice.getId(); |
| | | } |
| | | |
| | | order.setCreateTime(new Date()); |
| | | order = getOrderPrice(1, d, 0, order, city, branchOfficeId); |
| | | if(null != travelOrder.getDriverId()){ |
| | | DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", travelOrder.getDriverId()).eq("status", 1)); |
| | | if(null == driverWork){ |
| | | return ResultUtil.error("司机还未上班"); |
| | | order.setCreateTime(new Date()); |
| | | order = getOrderPrice(1, d, 0, order, city, branchOfficeId); |
| | | if(null != travelOrder.getDriverId()){ |
| | | DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", travelOrder.getDriverId()).eq("status", 1)); |
| | | if(null == driverWork){ |
| | | return ResultUtil.error("司机还未上班"); |
| | | } |
| | | Driver driver = driverService.selectById(travelOrder.getDriverId()); |
| | | if(driver.getServerStatus() == 2){ |
| | | return ResultUtil.error("司机正在服务中"); |
| | | } |
| | | order.setAgentId(driver.getAgentId()); |
| | | order.setBranchOfficeId(driver.getBranchOfficeId()); |
| | | order.setOrderTakingTime(new Date()); |
| | | driver.setServerStatus(2); |
| | | driverService.updateById(driver); |
| | | appUser.setCancelCount(0); |
| | | appUser.setIsException(1); |
| | | appUserService.updateById(appUser); |
| | | } |
| | | Driver driver = driverService.selectById(travelOrder.getDriverId()); |
| | | if(driver.getServerStatus() == 2){ |
| | | return ResultUtil.error("司机正在服务中"); |
| | | } |
| | | order.setAgentId(driver.getAgentId()); |
| | | order.setBranchOfficeId(driver.getBranchOfficeId()); |
| | | order.setOrderTakingTime(new Date()); |
| | | driver.setServerStatus(2); |
| | | driverService.updateById(driver); |
| | | appUser.setCancelCount(0); |
| | | appUser.setIsException(1); |
| | | appUserService.updateById(appUser); |
| | | } |
| | | |
| | | for (Integer i = 0; i < travelOrder.getDriverNum(); i++) { |
| | | order.setId(null); |
| | | order.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(5)); |
| | | boolean insert = this.insert(order); |
| | | if(insert){ |
| | | //推送状态 |
| | | pushUtil.pushOrderStatus(uid, 1, order.getId(), order.getState()); |
| | | |
| | | List<Order> orderList = new ArrayList<>(); |
| | | for (Integer i = 0; i < travelOrder.getDriverNum(); i++) { |
| | | order.setId(null); |
| | | order.setCode(UUIDUtil.getTimeStr() + UUIDUtil.getNumberRandom(5)); |
| | | boolean insert = this.insert(order); |
| | | if(null != order.getDriverId()){ |
| | | PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper(); |
| | | pushOrderInfoWarpper.setId(order.getId()); |
| | | pushOrderInfoWarpper.setState(order.getState()); |
| | | pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper); |
| | | }else{ |
| | | //推单 |
| | | Order finalOrder = order; |
| | | new Thread(()->{ |
| | | pushOrder(finalOrder.getId()); |
| | | }).start(); |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | BranchOffice branchOffice = branchOfficeService.selectById(order.getBranchOfficeId()); |
| | | //调三方订单中心创建行程单 |
| | | CreateTravelItineraryRequest request = new CreateTravelItineraryRequest(); |
| | | request.setOrderNo("DJ" + order.getId()); |
| | | request.setCustomerId(appUser.getOnconUUID()); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | request.setSupplierShopId(branchOffice.getEnterCode()); |
| | | request.setServiceType(2); |
| | | String travelItinerary = OrderUtil.createTravelItinerary(request); |
| | | order.setTravelId(travelItinerary); |
| | | this.insertOrUpdate(order); |
| | | } |
| | | |
| | | if(insert){ |
| | | orderList.add(order); |
| | | } |
| | | } |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | orderList.forEach(order -> { |
| | | //推送状态 |
| | | pushUtil.pushOrderStatus(uid, 1, order.getId(), order.getState()); |
| | | if(null != order.getDriverId()){ |
| | | PushOrderInfoWarpper pushOrderInfoWarpper = new PushOrderInfoWarpper(); |
| | | pushOrderInfoWarpper.setId(order.getId()); |
| | | pushOrderInfoWarpper.setState(order.getState()); |
| | | pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper); |
| | | }else{ |
| | | //推单 |
| | | pushOrder(order.getId(), uid); |
| | | } |
| | | }); |
| | | } |
| | | }).start(); |
| | | |
| | | redisUtil.setStrValue("newOrder", "true"); |
| | | return ResultUtil.success(order.getId()); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | redisUtil.setStrValue("newOrder", "true"); |
| | | return ResultUtil.success(order.getId()); |
| | | return ResultUtil.error("系统异常"); |
| | | } |
| | | |
| | | |
| | |
| | | /** |
| | | * 订单推送逻辑 |
| | | */ |
| | | public void pushOrder(Long orderId){ |
| | | public void pushOrder(Long orderId, Integer uid){ |
| | | System.err.println("开始推单:" + orderId); |
| | | // RLock lock1 = redissonClient.getLock("pushOrder:" + uid); |
| | | try { |
| | | Order order = this.selectById(orderId); |
| | | /** |
| | |
| | | * 合适司:积分 > 评分 > 距离 |
| | | * 3.司机没有接单直接将订单置入大厅 |
| | | */ |
| | | boolean lock = redisUtil.lock(5); |
| | | if(!lock){ |
| | | int num1 = 1; |
| | | while (num1 <= 10){ |
| | | Thread.sleep(3000);//等待3秒 |
| | | lock = redisUtil.lock(5); |
| | | if(lock){ |
| | | break; |
| | | }else{ |
| | | num1++; |
| | | } |
| | | } |
| | | } |
| | | if(!lock){ |
| | | order.setHallOrder(1); |
| | | this.updateById(order); |
| | | ExtraPushOrder(order); |
| | | redisUtil.unlock(); |
| | | } |
| | | // boolean lock2 = lock1.tryLock(5, 10, TimeUnit.SECONDS); |
| | | // if(!lock2){ |
| | | // order.setHallOrder(1); |
| | | // this.updateById(order); |
| | | // ExtraPushOrder(order); |
| | | // } |
| | | SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1)); |
| | | if(null == systemConfig){ |
| | | redisUtil.unlock(); |
| | | return; |
| | | } |
| | | JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); |
| | |
| | | } |
| | | |
| | | if(null != driver){ |
| | | System.err.println("完成司机查找:" + driver); |
| | | //防止多笔订单推给一个司机 |
| | | Driver driver1 = driverService.selectById(driver); |
| | | driver1.setServerStatus(2); |
| | |
| | | ExtraPushOrder(order); |
| | | redisUtil.setStrValue("lobbyOrder", "true"); |
| | | } |
| | | redisUtil.unlock(); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | redisUtil.unlock(); |
| | | }finally { |
| | | // lock1.unlock(); |
| | | } |
| | | |
| | | } |
| | |
| | | order.setState(301); |
| | | this.updateById(order); |
| | | redisUtil.delSetValue("orderService", order.getId().toString()); |
| | | |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | if(null != order.getTravelId()){ |
| | | //中台修改订单状态 |
| | | ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest(); |
| | | request.setOrderId(order.getTravelId()); |
| | | request.setStatus(getState(order.getState())); |
| | | BranchOffice branchOffice = branchOfficeService.selectById(order.getBranchOfficeId()); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | request.setSupplierShopId(branchOffice.getEnterCode()); |
| | | OrderUtil.modifyTravelItinerary(request); |
| | | } |
| | | |
| | | AppUser appUser = appUserService.selectById(uid); |
| | | appUser.setCancelCount(appUser.getCancelCount() + 1); |
| | | if(appUser.getCancelCount() >= 3){ |
| | | appUser.setIsException(2); |
| | | } |
| | | appUserService.updateById(appUser); |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | if(null != driver){ |
| | | driver.setServerStatus(1); |
| | | driverService.updateById(driver); |
| | |
| | | } |
| | | redisUtil.setStrValue("cancelOrder", "true"); |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | | |
| | | |
| | | private Integer getState(Integer state){ |
| | | switch (state){ |
| | | case 101://待接单 |
| | | return 1; |
| | | case 102://已接单 |
| | | return 2; |
| | | case 103://前往预约点 |
| | | return 3; |
| | | case 104://到达预约点 |
| | | return 4; |
| | | case 105://开始服务 |
| | | return 5; |
| | | case 106://到达目的地 |
| | | return 6; |
| | | case 107://待支付 |
| | | return 7; |
| | | case 108://待评价 |
| | | return 8; |
| | | case 109://已完成 |
| | | return 9; |
| | | case 201://转单中 |
| | | return 11; |
| | | case 301://已取消 |
| | | return 10; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | //开始支付操作 |
| | | if(orderPayment.getPayType() == 1){//微信支付 |
| | | return weixinPay(order, appUser, orderPayment.getCouponId()); |
| | | return weixinPay(order, appUser, orderPayment.getCouponId(), orderPayment.getPath(), orderPayment.getIp()); |
| | | } |
| | | if(orderPayment.getPayType() == 2){//余额支付 |
| | | return balancePayment(order, appUser, orderPayment.getCouponId()); |
| | | } |
| | | // if(orderPayment.getPayType() == 3){//线下支付(由司机端操作) |
| | | // } |
| | | if(orderPayment.getPayType() == 4){//微信+余额 |
| | | return weixinAndBalancePayment(order, appUser, orderPayment.getCouponId()); |
| | | } |
| | | // if(orderPayment.getPayType() == 4){//微信+余额 |
| | | // return weixinAndBalancePayment(order, appUser, orderPayment.getCouponId()); |
| | | // } |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public ResultUtil weixinPay(Order order, AppUser appUser, Integer couponId) throws Exception{ |
| | | public ResultUtil weixinPay(Order order, AppUser appUser, Integer couponId, String path, String ip) throws Exception{ |
| | | Double payMoney = order.getPayMoney(); |
| | | order.setPayType(1); |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); |
| | | String out_trade_no = sdf.format(new Date()) + order.getId(); |
| | | ResultUtil resultUtil = ResultUtil.success(new Object()); |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | if(null == order.getIsCreated() || 0 == order.getIsCreated()){ |
| | | //调用中台创建订单及拉起支付接口 |
| | | TradeOrderCreateData tradeOrderCreateData = new TradeOrderCreateData(); |
| | | tradeOrderCreateData.setTreatShopId(driver.getEmpId().toString()); |
| | | tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isCompensate\":\"0\",\"isPromote\":\"0\"}"); |
| | | tradeOrderCreateData.setCharge(new BigDecimal(payMoney).setScale(2, RoundingMode.HALF_EVEN)); |
| | | tradeOrderCreateData.setOrderNo("DJ" + order.getId()); |
| | | tradeOrderCreateData.setCustomerId(appUser.getOnconUUID()); |
| | | tradeOrderCreateData.setPartnerPayId(order.getTravelId()); |
| | | tradeOrderCreateData.setTotalFee(Double.valueOf(payMoney * 100).intValue() + ""); |
| | | tradeOrderCreateData.setOrderDesc("完成订单"); |
| | | tradeOrderCreateData.setRetUrl(path); |
| | | tradeOrderCreateData.setClientIp(ip); |
| | | tradeOrderCreateData.setServiceType(3); |
| | | |
| | | // |
| | | // PaymentOrder paymentOrder = new PaymentOrder(); |
| | | // paymentOrder.setBizOrderId(out_trade_no); |
| | | // paymentOrder.setAmount(new BigDecimal(payMoney).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + ""); |
| | | // paymentOrder.setOrderName("代驾服务费"); |
| | | // paymentOrder.setPayType("WX_MINI"); |
| | | // paymentOrder.setTransferType("0"); |
| | | // paymentOrder.setAsynSplitFlag("1"); |
| | | // paymentOrder.setAppid(appletsAppid); |
| | | // paymentOrder.setOpenid(appUser.getOpenid()); |
| | | // paymentOrder.setTerminalIp(InetAddress.getLocalHost().getHostAddress()); |
| | | // List<PaymentOrderGood> goodsDetail = new ArrayList<>(); |
| | | // PaymentOrderGood paymentOrderGood = new PaymentOrderGood(); |
| | | // paymentOrderGood.setGoodsName("服务费"); |
| | | // goodsDetail.add(paymentOrderGood); |
| | | // paymentOrder.setGoodsDetail(goodsDetail); |
| | | // paymentOrder.setFrontUrl(callbackPath + "/base/order/orderPayCallback"); |
| | | // paymentOrder.setNotifyUrl(callbackPath + "/base/order/orderPayCallback"); |
| | | // paymentOrder.setParameter1(order.getId().toString()); |
| | | // |
| | | // TrhRequest<PaymentOrder> request = new TrhRequest(); |
| | | // InterfaceResponse execute = request.execute(paymentOrder, PaymentOrder.SERVICE_CODE); |
| | | return MiniAppPay.pay(appUser.getOpenid(),new BigDecimal(payMoney).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "","/base/order/orderPayCallback",order.getCode()); |
| | | // return payMoneyUtil.weixinpay("服务费", String.valueOf(order.getId()),out_trade_no,new BigDecimal(payMoney).multiply(new BigDecimal(100)).setScale(0, RoundingMode.HALF_EVEN).longValue() + "","/base/order/orderPayCallback","APP"); |
| | | List<GoodsInfoRequest> goodsInfo = new ArrayList<>(); |
| | | GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest(); |
| | | goodsInfoRequest.setSubOpenId(appUser.getOpenid()); |
| | | 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()); |
| | | } |
| | | order.setIsCreated(1); |
| | | order.setTravelId(tradeOrderCreate.getOrderInfo().getOrderId()); |
| | | resultUtil = ResultUtil.success(payInfo.getData().getRedirectUrl()); |
| | | }else{ |
| | | //拉起支付 |
| | | TradePayOff1Data tradePayOff1Data = new TradePayOff1Data(); |
| | | tradePayOff1Data.setPartnerPayId(order.getTravelId()); |
| | | tradePayOff1Data.setTotalFee(Double.valueOf(payMoney * 100).intValue() + ""); |
| | | tradePayOff1Data.setRetUrl(path); |
| | | tradePayOff1Data.setClientIp(ip); |
| | | tradePayOff1Data.setOrderDesc("完成订单"); |
| | | List<GoodsInfoRequest> goodsInfo = new ArrayList<>(); |
| | | GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest(); |
| | | goodsInfoRequest.setSubOpenId(appUser.getOpenid()); |
| | | 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()); |
| | | } |
| | | resultUtil = ResultUtil.success(payInfo.getData().getRedirectUrl()); |
| | | } |
| | | this.updateById(order); |
| | | |
| | | //创建定时任务查询订单支付状态 |
| | | 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); |
| | | Order order1 = this.selectById(order.getId()); |
| | | if (order1.getState() != 107) { |
| | | break; |
| | | } |
| | | GetTravelItineraryListRequest request = new GetTravelItineraryListRequest(); |
| | | request.setCustomerId(appUser.getOnconUUID()); |
| | | request.setOrderNo("DJ" + order1.getId()); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | ListPage<List<TravelItinerary>> travelItineraryList = OrderUtil.getTravelItineraryList(request); |
| | | TravelItinerary travelItinerary = travelItineraryList.getList().get(0); |
| | | if(travelItinerary.getStatus() != 7 || Arrays.asList(3, 11).contains(travelItinerary.getOrderStatus())){ |
| | | GetPaymentInfoDataRequest getPaymentInfoDataRequest1 = new GetPaymentInfoDataRequest(); |
| | | getPaymentInfoDataRequest1.setPartnerPayId(order1.getTravelId()); |
| | | GetPaymentInfo getPaymentInfo1 = OrderUtil.paymentInfo(getPaymentInfoDataRequest1); |
| | | orderPayCallback(order1.getId().toString(), getPaymentInfo1.getPayId()); |
| | | break; |
| | | } |
| | | Thread.sleep(wait); |
| | | num++; |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | }finally { |
| | | threadPoolExecutor.shutdown(); |
| | | } |
| | | |
| | | }); |
| | | |
| | | // |
| | | // if(!"0000".equals(execute.getCode())){ |
| | | // return ResultUtil.error(execute.getMsg()); |
| | | // } |
| | | // JSONObject jsonObject = JSON.parseObject(execute.getResult()); |
| | | // String status = jsonObject.getString("status"); |
| | | // if("2".equals(status)){ |
| | | // return ResultUtil.error("失败"); |
| | | // } |
| | | // String merOrderId = jsonObject.getString("merOrderId"); |
| | | // String payCode = jsonObject.getString("payCode"); |
| | | // this.updateById(order); |
| | | |
| | | // if(ToolUtil.isNotEmpty(payCode)){ |
| | | // new Thread(new Runnable() { |
| | | // @Override |
| | | // public void run() { |
| | | // try { |
| | | // int num = 1; |
| | | // int wait = 0; |
| | | // while (num <= 10){ |
| | | // int min = 5000; |
| | | // wait += (min * num); |
| | | // Order order1 = OrderServiceImpl.this.selectById(order.getId()); |
| | | // if(order1.getState() != 107){ |
| | | // return; |
| | | // } |
| | | // QueryOrder queryOrder = new QueryOrder(); |
| | | // queryOrder.setOriginalMerOrderId(merOrderId); |
| | | // queryOrder.setQueryType("1"); |
| | | // TrhRequest<QueryOrder> request = new TrhRequest(); |
| | | // InterfaceResponse execute1 = request.execute(queryOrder, QueryOrder.SERVICE_CODE); |
| | | // if("0000".equals(execute1.getCode())){ |
| | | // JSONObject jsonObject1 = JSON.parseObject(execute1.getResult()); |
| | | // String status1 = jsonObject1.getString("status"); |
| | | // if("0".equals(status1)){//待处理 |
| | | // Thread.sleep(wait); |
| | | // num++; |
| | | // } |
| | | // if("1".equals(status1)){//成功 |
| | | // String merOrderId = jsonObject1.getString("merOrderId"); |
| | | // ResultUtil resultUtil = orderPayCallback(order1.getId().toString(), merOrderId); |
| | | |
| | | // break; |
| | | // } |
| | | // if("2".equals(status1) || 10 == num){//失败 |
| | | // break; |
| | | // } |
| | | // }else{ |
| | | // Thread.sleep(wait); |
| | | // num++; |
| | | // } |
| | | // } |
| | | // }catch (Exception e){ |
| | | // e.printStackTrace(); |
| | | // } |
| | | // } |
| | | // }).start(); |
| | | // } |
| | | |
| | | // return ResultUtil.success(payCode); |
| | | return resultUtil; |
| | | } |
| | | |
| | | |
| | |
| | | } |
| | | order.setState(109); |
| | | this.updateById(order); |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | //中台修改订单状态 |
| | | if(null != order.getTravelId()){ |
| | | ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest(); |
| | | request.setOrderId(order.getTravelId()); |
| | | request.setStatus(getState(order.getState())); |
| | | BranchOffice branchOffice = branchOfficeService.selectById(order.getBranchOfficeId()); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | request.setSupplierShopId(branchOffice.getEnterCode()); |
| | | OrderUtil.modifyTravelItinerary(request); |
| | | } |
| | | |
| | | Evaluate evaluate = new Evaluate(); |
| | | evaluate.setOrderId(orderId.intValue()); |
| | | evaluate.setCreateTime(new Date()); |
| | |
| | | evaluate.setStatus(1); |
| | | evaluate.setUserId(uid); |
| | | evaluateService.insert(evaluate); |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | driver.setScore(((null == driver.getScore() ? 0 : driver.getScore()) + score) / 2); |
| | | if(score == 5){//司机积分奖励 |
| | | SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4)); |