| | |
| | | @Autowired |
| | | private GeodesyUtil geodesyUtil; |
| | | |
| | | @Autowired |
| | | private ICarService carService; |
| | | |
| | | @Value("${filePath}") |
| | | private String filePath; |
| | | |
| | |
| | | * @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){ |
| | |
| | | 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); |
| | | |
| | | // /** |
| | | // * 先判断司机座位数是否符合出行人数 |
| | | // */ |
| | | // List<LineShiftDriver> query = lineShiftDriverMapper.queryByDriver(lineShiftDriver.getLineShiftId(), driverId, tOrderCrossCity.getTravelTime()); |
| | | // |
| | | // LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); |
| | | // if(orderCrossCityWarpper.getTravelMode() == 1){//拼车判断座位数 |
| | | // if(lineShiftDriver.getLaveSeat() < orderCrossCityWarpper.getPeopleNumber()){ |
| | | // return ResultUtil.error("司机剩余座位数小于出行人数"); |
| | | // } |
| | | // }else{ |
| | | // if(lineShiftDriver.getLaveSeat() != lineShiftDriver.getTotalSeat()){ |
| | | // return ResultUtil.error("司机车辆上已经有人占座了,不能下包车订单"); |
| | | // } |
| | | // if(lineShiftDriver.getLaveSeat() == 0){ |
| | | // return ResultUtil.error("司机车辆没有剩余空位了"); |
| | | // } |
| | | // } |
| | | |
| | | |
| | | |
| | | 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); |
| | | |
| | | // // //修改预约班次的数据 |
| | | // |
| | | // CarModel carModel = carModelMapper.selectById(carService.selectById(driverService.selectById(driverId).getCarId()).getCarModelId()); |
| | | // |
| | | // LineShiftDriver lineShiftDriver0 = new LineShiftDriver(); |
| | | // lineShiftDriver0.setLineShiftId(lineShiftDriver.getLineShiftId()); |
| | | // lineShiftDriver0.setDriverId(driverId); |
| | | // lineShiftDriver0.setDay(lineShiftDriver.getDay()); |
| | | // lineShiftDriver0.setTotalSeat(carModel.getSeat() - 1); |
| | | // lineShiftDriver0.setLaveSeat(carModel.getSeat() - 1); |
| | | // lineShiftDriver0.setInserTime(new Date()); |
| | | // String seatNumber = ""; |
| | | // for(int i = 1; i < carModel.getSeat(); i++){ |
| | | // seatNumber += i + ","; |
| | | // } |
| | | // lineShiftDriver0.setLaveSeatNumber(seatNumber.substring(0, seatNumber.length() - 1)); |
| | | // |
| | | // Integer insert = lineShiftDriverMapper.insert(lineShiftDriver0); |
| | | // lineShiftDriver1 = lineShiftDriver0; |
| | | // |
| | | // if (orderCrossCity.getTravelMode() == 2) {//包车 |
| | | // lineShiftDriver.setLaveSeat(0); |
| | | // lineShiftDriver.setLaveSeatNumber(""); |
| | | // } else {//拼车 |
| | | // lineShiftDriver.setLaveSeat((lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()) < 0 ? 0 : lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()); |
| | | // String[] split = orderCrossCity.getSeatNumber().split(","); |
| | | // String[] split1 = lineShiftDriver.getLaveSeatNumber().split(","); |
| | | // String seatNumber = ""; |
| | | // //先判断选中座位号和剩余座位号是否匹配 |
| | | // for (String spl : split) { |
| | | // boolean b = true; |
| | | // for (String sp : split1) { |
| | | // if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) { |
| | | // b = false; |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (b) { |
| | | // throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!"); |
| | | // } |
| | | // } |
| | | // for (String sp : split1) { |
| | | // boolean b = true; |
| | | // for (String spl : split) { |
| | | // if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) { |
| | | // b = false; |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (b && ToolUtil.isNotEmpty(sp)) { |
| | | // seatNumber += (sp + ","); |
| | | // } |
| | | // } |
| | | // lineShiftDriver.setLaveSeatNumber((ToolUtil.isNotEmpty(seatNumber) && seatNumber.length() > 0) ? |
| | | // seatNumber.substring(0, seatNumber.length() - 1) : ""); |
| | | // } |
| | | // lineShiftDriverMapper.updateById(lineShiftDriver); |
| | | |
| | | //推送相关代码------------------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, 3); |
| | | } |
| | | }).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(); |
| | | } |
| | | |
| | | } |