From 4f75e746dc006f487a1a7de8e14c497148911b0e Mon Sep 17 00:00:00 2001 From: guyue <1721849008@qq.com> Date: 星期六, 16 八月 2025 00:30:09 +0800 Subject: [PATCH] 抢单以及转派 --- DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java | 109 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 109 insertions(+), 0 deletions(-) diff --git a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java index 3675096..867187b 100644 --- a/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java +++ b/DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java @@ -128,6 +128,9 @@ @Autowired private GeodesyUtil geodesyUtil; + @Autowired + private ICarService carService; + @Value("${filePath}") private String filePath; @@ -953,6 +956,7 @@ * @return * @throws Exception */ + @Override public synchronized String getOrderNum(Integer driverId, Integer lineShiftDriverId) throws Exception{ List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryOrders(driverId, lineShiftDriverId, Arrays.asList(2, 3, 4, 7)); if(orderCrossCities.size() > 0){ @@ -968,4 +972,109 @@ size++; } } + + /** + * 抢单操作 + * @param orderId + * @param uid + * @return + * @throws Exception + */ + @Override + public synchronized ResultUtil grabOrder(Integer orderId, Integer uid) throws Exception { + OrderCrossCity orderCrossCity = selectById(orderId); + + if(orderCrossCity.getState() == 9){ + return ResultUtil.error("订单已取消"); + } + if(orderCrossCity.getState() != 1){ + return ResultUtil.error("手速有点慢哦,订单已被抢啦!"); + } + Driver driver = driverService.selectById(uid); + orderCrossCity.setDriverId(uid); + orderCrossCity.setCarId(driver.getCarId()); + orderCrossCity.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( + driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); + orderCrossCity.setState(2); + orderCrossCity.setSnatchOrderTime(new Date()); + + //调用高德创建轨迹 + String s = gdFalconUtil.selectTerminal(driver.getPhone()); + String track = gdFalconUtil.createTrack(s); + orderCrossCity.setTrackId(track); + + //调用移动的小号接口 + Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); + Region region = regionMapper.query(geocode.get("districtCode")); + Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1))); + if(String.valueOf(map.get("code")).equals("200")){ + orderCrossCity.setTelX(map.get("telX")); + orderCrossCity.setBindId(map.get("bindId")); + } + + this.updateById(orderCrossCity); + + //修改司机为服务中 + if (driver.getState() == 2) { + driver.setState(3); + + } + + //TODO:补充订单、支付明细信息 + // 处理公司和司机收入(原支付方法中删除的逻辑移到这里) + Line line = lineService.selectById(orderCrossCity.getLineId()); + Double speMoney = Double.valueOf(line.getRakeRate()); + BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 + BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 + incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); + incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); + + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + + //推送相关代码------------------start---------------- + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 1, orderCrossCity.getState()); + pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 1, orderCrossCity.getState()); +// if(orderCrossCity.getType() == 2){ +// pushUtil.pushFerryOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 2); +// } + } + }).start(); + + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushDriverPosition(orderId, 1); + } + }).start(); + + systemNoticeService.addSystemNotice(2, "您已成功抢得跨城订单,请及时联系客户!", orderCrossCity.getDriverId()); + systemNoticeService.addSystemNotice(1, "您的订单已指派给" + driver.getName().substring(0, 1) + "师傅,请保持电话畅通!", orderCrossCity.getUserId()); + + new Thread(new Runnable() { + @Override + public void run() { + if(pushMinistryOfTransport){ + //上传数据 + pushMinistryOfTransportUtil.orderCreate(orderId); + pushMinistryOfTransportUtil.orderMatch(orderId); + } + } + }).start(); + //发送短信 + try{ + Car car = carService.selectById(orderCrossCity.getCarId()); + SMSUtil.send(orderCrossCity.getPassengersPhone(), "您的订单已被司机" + driver.getName() + "接单,联系电话" + driver.getPhone() + "车牌号" + car.getCarLicensePlate() + "请耐心等待。", "2431012312845"); +// String sData = aLiSendSms.sendSms(orderPrivateCar.getPassengersPhone(), "SMS_476900230", "{\"code1\":\"" + driver.getName() + "\",\"code2\":\"" + driver.getPhone() + "\",\"code3\":\"" + car.getCarLicensePlate() + "\"}"); + }catch (Exception e){ + + } + return ResultUtil.success(); + } + } -- Gitblit v1.7.1