From 9e91ae67150c35278b69457e5a9b839851af0890 Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期一, 18 八月 2025 22:49:56 +0800 Subject: [PATCH] 8.18 --- DriverOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java | 368 +++++++++++++++++++++++++++++++++++++++------------- 1 files changed, 273 insertions(+), 95 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..77ece13 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; @@ -148,7 +151,6 @@ public Map<String, Object> queryPushOrder(Integer orderId) throws Exception { return orderCrossCityMapper.queryPushOrder(orderId); } - /** @@ -190,11 +192,11 @@ int num = 0; Double serverMoney = 0D; Double totalMoney = 0D; - for(Map<String, Object> m : order){ + for (Map<String, Object> m : order) { num += Integer.valueOf(m.get("peopleNumber").toString()); totalMoney += Double.valueOf(m.get("payMoney").toString()); List<Income> incomes = incomeService.queryData(1, null, 2, Integer.valueOf(m.get("orderId").toString()), 3); - for (Income income : incomes){ + for (Income income : incomes) { serverMoney += income.getMoney(); } } @@ -212,7 +214,6 @@ } - /** * 走订单流程操作 * @param orderId @@ -223,7 +224,7 @@ @Override public ResultUtil process(Integer orderId, Integer state, Double lon, Double lat, String address) throws Exception { OrderCrossCity orderCrossCity = this.selectById(orderId); - switch (state){ + switch (state) { case 3://出发前往预约点 orderCrossCity.setState(3); orderCrossCity.setSetOutTime(new Date()); @@ -254,23 +255,25 @@ //还原座位数 LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); - lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); - lineShiftDriver.setLaveSeatNumber( - (ToolUtil.isNotEmpty(lineShiftDriver.getLaveSeatNumber()) ? lineShiftDriver.getLaveSeatNumber() + "," : "") + - orderCrossCity.getSeatNumber() - ); - lineShiftDriverMapper.updateById(lineShiftDriver); + if (lineShiftDriver != null) { + lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); + lineShiftDriver.setLaveSeatNumber( + (ToolUtil.isNotEmpty(lineShiftDriver.getLaveSeatNumber()) ? lineShiftDriver.getLaveSeatNumber() + "," : "") + + orderCrossCity.getSeatNumber() + ); + lineShiftDriverMapper.updateById(lineShiftDriver); + } //修改司机空闲状态 List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryWithin30Minutes(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11); Driver driver = driverService.selectById(orderCrossCity.getDriverId()); - if(orderCrossCities.size() == 0){ + if (orderCrossCities.size() == 0) { driver.setState(2); driverService.updateById(driver); } Integer placeOrderWay = null; - switch (orderCrossCity.getOrderSource()){ + switch (orderCrossCity.getOrderSource()) { case 2: placeOrderWay = 4; break; @@ -289,26 +292,26 @@ } Company company = companyService.selectById(driver.getFranchiseeId()); - if(Objects.isNull(company)){ + if (Objects.isNull(company)) { company = companyService.selectById(driver.getCompanyId()); } // 司机收入 double moneyTwo; // 平台收入 double money; - if(orderCrossCity.getOrderSource() == 2 || orderCrossCity.getOrderSource() == 3){ + if (orderCrossCity.getOrderSource() == 2 || orderCrossCity.getOrderSource() == 3) { double v = company.getPercentageDeduction() / 100; money = v * orderCrossCity.getOrderMoney(); - moneyTwo = orderCrossCity.getOrderMoney()-money; - }else { + moneyTwo = orderCrossCity.getOrderMoney() - money; + } else { money = company.getFixedDeduction(); - moneyTwo = orderCrossCity.getOrderMoney()-money; + moneyTwo = orderCrossCity.getOrderMoney() - money; } driver.setBalance(driver.getBalance() + moneyTwo); // 新增扣除使用费记录 - transactionDetailsService.saveDataTaxi(driver.getId(), "软件使用费", money, 2, 1, 2, 6, orderCrossCity.getId(),placeOrderWay,company.getId()); + transactionDetailsService.saveDataTaxi(driver.getId(), "软件使用费", money, 2, 1, 2, 6, orderCrossCity.getId(), placeOrderWay, company.getId()); // 司机订单收入 - transactionDetailsService.saveDataTaxi(driver.getId(), "完成订单", moneyTwo, 1, 1, 2, 3, orderCrossCity.getId(),placeOrderWay,company.getId()); + transactionDetailsService.saveDataTaxi(driver.getId(), "完成订单", moneyTwo, 1, 1, 2, 3, orderCrossCity.getId(), placeOrderWay, company.getId()); driverService.updateById(driver); @@ -351,9 +354,9 @@ public void setOrderCrossCitySort(Integer orderId) throws Exception { OrderCrossCity orderCrossCity = this.selectById(orderId); List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderCrossCity.getOrderNum()).ne("state", 10).orderBy("sort")); - for(int i = 0; i < orderCrossCities.size(); i++){ - if(orderCrossCities.get(i).getId().compareTo(orderId) == 0){ - if(i == 0){ + for (int i = 0; i < orderCrossCities.size(); i++) { + if (orderCrossCities.get(i).getId().compareTo(orderId) == 0) { + if (i == 0) { break; } OrderCrossCity orderCrossCity2 = orderCrossCities.get(i); @@ -370,9 +373,6 @@ } - - - /** * 跨城下单操作 * @param orderCrossCityWarpper @@ -386,25 +386,25 @@ * 先判断司机座位数是否符合出行人数 */ LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCityWarpper.getLineShiftDriverId()); - if(orderCrossCityWarpper.getTravelMode() == 1){ - if(lineShiftDriver.getLaveSeat() < orderCrossCityWarpper.getPeopleNumber()){ + if (orderCrossCityWarpper.getTravelMode() == 1) { + if (lineShiftDriver.getLaveSeat() < orderCrossCityWarpper.getPeopleNumber()) { return ResultUtil.error("司机剩余座位数小于出行人数"); } - }else{ - if(lineShiftDriver.getLaveSeat() != lineShiftDriver.getTotalSeat()){ + } else { + if (lineShiftDriver.getLaveSeat() != lineShiftDriver.getTotalSeat()) { return ResultUtil.error("司机车辆上已经有人占座了,不能下包车订单"); } - if(lineShiftDriver.getLaveSeat() == 0){ + if (lineShiftDriver.getLaveSeat() == 0) { return ResultUtil.error("司机剩余座位数不足"); } } Driver driver = driverService.selectById(orderCrossCityWarpper.getDriverId()); - if(driver.getState() == 1){ + if (driver.getState() == 1) { return ResultUtil.error("司机处于离线状态"); } OrderCrossCity orderCrossCity = new OrderCrossCity(); UserInfo userInfo = userInfoMapper.queryByPhone(orderCrossCityWarpper.getPassengersPhone()); - if(userInfo == null){//添加用户信息 + if (userInfo == null) {//添加用户信息 userInfo = new UserInfo(); Integer integer = userInfoMapper.selectCount(null) + 1000001; userInfo.setNickName(ToolUtil.isNotEmpty(orderCrossCityWarpper.getPassengers()) ? orderCrossCityWarpper.getPassengers() : "OK" + String.valueOf(integer).substring(1)); @@ -423,20 +423,20 @@ * 2.下了预约单和再下一张即时单不能再下预约单 */ List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(orderCrossCity.getUserId(), 1, 1, 1, 2, 3, 4, 5, 6, 7, 11); - if(orderPrivateCars.size() > 0){ + if (orderPrivateCars.size() > 0) { return ResultUtil.error("有未完成的订单"); } List<OrderTaxi> list = orderTaxiMapper.queryByState_(orderCrossCity.getUserId(), 1, 1, 1, 2, 3, 4, 5, 6, 11); - if(list.size() > 0){ + if (list.size() > 0) { return ResultUtil.error("有未完成的订单"); } List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(orderCrossCity.getUserId(), 1, 2, 3, 4, 5, 7, 11); - if(orderCrossCities1.size() > 0){ + if (orderCrossCities1.size() > 0) { return ResultUtil.error("有未完成的订单"); } List<OrderCrossCity> orderCrossCities2 = orderCrossCityMapper.queryOrders(orderCrossCityWarpper.getDriverId(), orderCrossCityWarpper.getLineShiftDriverId(), Arrays.asList(5)); - if(orderCrossCities2.size() > 0){ + if (orderCrossCities2.size() > 0) { return ResultUtil.error("司机正在服务中"); } @@ -495,52 +495,52 @@ 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")){ + if (String.valueOf(map.get("code")).equals("200")) { orderCrossCity.setTelX(map.get("telX")); orderCrossCity.setBindId(map.get("bindId")); } - if(orderCrossCityWarpper.getTravelMode() == 2){//包车 + if (orderCrossCityWarpper.getTravelMode() == 2) {//包车 orderCrossCity.setSeatNumber(lineShiftDriver.getLaveSeatNumber()); orderCrossCity.setPeopleNumber(lineShiftDriver.getLaveSeat()); } this.insert(orderCrossCity); - if(driver.getState() == 2){ + if (driver.getState() == 2) { driver.setState(3); driverService.updateById(driver); } //修改预约班次的数据 - if(orderCrossCity.getTravelMode() == 2){//包车 + if (orderCrossCity.getTravelMode() == 2) {//包车 lineShiftDriver.setLaveSeat(0); lineShiftDriver.setLaveSeatNumber(""); - }else{//拼车 + } else {//拼车 lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()); String[] split = orderCrossCity.getSeatNumber().split(","); String[] split1 = lineShiftDriver.getLaveSeatNumber().split(","); String seatNumber = ""; //先判断选中座位号和剩余座位号是否匹配 - for(String spl : split){ + for (String spl : split) { boolean b = true; - for(String sp : split1){ - if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){ + for (String sp : split1) { + if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) { b = false; break; } } - if(b){ + if (b) { throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!"); } } - for(String sp : split1){ + for (String sp : split1) { boolean b = true; - for(String spl : split){ - if(ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)){ + for (String spl : split) { + if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) { b = false; break; } } - if(b && ToolUtil.isNotEmpty(sp)){ + if (b && ToolUtil.isNotEmpty(sp)) { seatNumber += (sp + ","); } } @@ -559,7 +559,7 @@ @Override public void run() { OrderCrossCity orderCrossCity1 = orderCrossCityMapper.selectById(orderCrossCity.getId()); - if(orderCrossCity1.getState() == 7 && orderCrossCity1.getPayMoney() == null){ + if (orderCrossCity1.getState() == 7 && orderCrossCity1.getPayMoney() == null) { orderCrossCity1.setState(10); orderCrossCityMapper.updateById(orderCrossCity1); @@ -581,7 +581,7 @@ //修改司机为空闲 List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11); - if(orderCrossCities.size() == 0){ + if (orderCrossCities.size() == 0) { Driver driver = driverService.selectById(orderCrossCity.getDriverId()); driver.setState(2); driverService.updateById(driver); @@ -642,8 +642,6 @@ } - - /** * 计算支付金额 * @param startLonLat @@ -659,13 +657,11 @@ public ResultUtil queryOrderMoney(String startLonLat, String endLonLat, Integer peopleNumber, Integer travelMode, Integer lineId, Integer serverCarModelId, Integer totalSeat, String seatNumber) throws Exception { Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLonLat, endLonLat, 1);//调用高德计算距离 - if(null != distance){ + if (null != distance) { return this.getPrice(Double.valueOf(distance.get("distance")), peopleNumber, travelMode, lineId, serverCarModelId, totalSeat, seatNumber); } return ResultUtil.error("计算行程距离出错啦!"); } - - /** @@ -680,7 +676,7 @@ @Override public ResultUtil payCrossCityOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { OrderCrossCity orderCrossCity = this.selectById(orderId); - if(orderCrossCity.getState() != 7){ + if (orderCrossCity.getState() != 7) { return ResultUtil.error("订单已被支付,不允许重复支付"); } Integer uid = orderCrossCity.getUserId(); @@ -689,7 +685,7 @@ orderCrossCity.setCouponMoney(0D);//初始化历史数据 orderCrossCity.setCouponId(null); - if(payType == 1){//微信支付 + if (payType == 1) {//微信支付 // Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayCrossCity", "", type, null); // if(map.get("code").equals("200")){ // paymentRecordService.saveData(1, orderCrossCity.getDriverId(), 2, orderId, 3, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 @@ -698,7 +694,7 @@ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } } - if(payType == 2){//支付宝支付 + if (payType == 2) {//支付宝支付 // Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayCrossCity", "", type, null); // if(map.get("code").equals("200")){ // paymentRecordService.saveData(1, orderCrossCity.getDriverId(), 2, orderId, 3, 2, orderMoney, map.get("order_id"), 1);//添加预支付数据 @@ -707,7 +703,7 @@ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } } - if(payType == 3){//扫码支付 + if (payType == 3) {//扫码支付 //调用支付获取收款二维码数据 // ResultUtil<Map<String, Object>> generate = icbcPayUtil.generate(orderCrossCity.getId() + ",3", orderMoney, orderCrossCity.getInsertTime(), orderCrossCity.getOrderNum(), callbackPath + "/base/order/generatePay"); // resultUtil = ResultUtil.success(generate.getData().get("qrcode").toString()); @@ -716,7 +712,6 @@ this.updateAllColumnById(orderCrossCity); return resultUtil; } - /** @@ -729,10 +724,10 @@ @Override public void payOrderCrossCityCallback(Integer id, String order_id, Integer type) throws Exception { OrderCrossCity orderCrossCity = this.selectById(id); - if(orderCrossCity.getState() == 7){ + if (orderCrossCity.getState() == 7) { PaymentRecord query = paymentRecordService.query(1, orderCrossCity.getDriverId(), 2, id, 3, type, 1); - if(null == query){ - System.err.println("预支付数据异常(orderId = " + id + ")"); + if (null == query) { + System.err.println("预支付数据异常(orderId = " + id + ")"); } //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "完成订单", query.getAmount(), 2, 1, 1, 3, query.getOrderId()); @@ -784,43 +779,43 @@ String lon = orderPosition.getLon(); String lat = orderPosition.getLat(); OrderCrossCity order = this.selectById(orderId); - if(null == order){ + if (null == order) { System.err.println("订单数据异常:" + orderId); return false; } //跨城记录所有服务完成之前的订单服务距离 List<OrderCrossCity> orderCrossCities = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", order.getOrderNum()).eq("isDelete", 1).in("state", Arrays.asList(2, 3, 4, 5))); - for(OrderCrossCity orderCrossCity : orderCrossCities){ + for (OrderCrossCity orderCrossCity : orderCrossCities) { boolean b = false; OrderPosition orderPosition1 = orderPositionService.queryNew(orderCrossCity.getId(), 3); - if(null != orderPosition1){ + if (null != orderPosition1) { String now = lon + "," + lat; String old = orderPosition1.getLon() + "," + orderPosition1.getLat(); // Map<String, String> distance = gdMapElectricFenceUtil.getDistance(now, old, 0);//直线距离 Map<String, Double> distance = geodesyUtil.getDistance(now, old); - if(null != distance){ + if (null != distance) { Double distance1 = distance.get("WGS84"); - if(Double.valueOf(distance1) > 50 && orderCrossCity.getState() == 5){//大于50米表示在移动 + if (Double.valueOf(distance1) > 50 && orderCrossCity.getState() == 5) {//大于50米表示在移动 orderCrossCity.setMileage(new BigDecimal(orderCrossCity.getMileage()).add(new BigDecimal(distance1)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); this.updateById(orderCrossCity); b = true; } - }else{ + } else { System.err.println("调用高德计算距离出错"); } - }else{ + } else { orderCrossCity.setMileage(0D); this.updateById(orderCrossCity); b = true;//第一条数据不作处理,直接存储 } - if(b){ + if (b) { //先计算里程,在存储最新位置 orderPosition.setInsertTime(new Date()); //将数据存储到文件中 List<OrderPosition> orderPositions = orderPositionService.queryPosition(orderCrossCity.getId(), 3); File file = new File(filePath + orderCrossCity.getId() + "_3" + ".txt"); - if(!file.exists()){ + if (!file.exists()) { file.getParentFile().mkdirs(); file.createNewFile(); } @@ -862,8 +857,8 @@ * @param seatNumber * @return */ - public ResultUtil<Map<String, Object>> getPrice(Double distance, Integer peopleNumber, Integer travelMode, Integer lineId, Integer serverCarModelId, Integer totalSeat, String seatNumber){ - if(0 >= peopleNumber && peopleNumber > 6){ + public ResultUtil<Map<String, Object>> getPrice(Double distance, Integer peopleNumber, Integer travelMode, Integer lineId, Integer serverCarModelId, Integer totalSeat, String seatNumber) { + if (0 >= peopleNumber && peopleNumber > 6) { return ResultUtil.error("请输入正确的乘车人数"); } @@ -878,39 +873,39 @@ * 4.浮动计费拼车如果选中中间特殊位置既享受优惠系数又享受中间特殊位置的优惠折扣 */ Map<String, Object> query = linePriceMapper.query(lineId, serverCarModelId); - if(null == query){ + if (null == query) { map.put("distance", 0); map.put("price", 0); return ResultUtil.success(map); } String content = query.get("content").toString(); JSONObject jsonObject = JSON.parseObject(content); - if(Integer.valueOf(query.get("type").toString()) == 1){//固定金额 + if (Integer.valueOf(query.get("type").toString()) == 1) {//固定金额 double num1 = Double.valueOf(jsonObject.getString("num1")).doubleValue(); double num2 = Double.valueOf(jsonObject.getString("num2")).doubleValue(); double num3 = Double.valueOf(jsonObject.getString("num3")).doubleValue(); double num4 = Double.valueOf(jsonObject.getString("num4")).doubleValue(); - if(travelMode == 1){//拼车 + if (travelMode == 1) {//拼车 String[] split = seatNumber.split(","); boolean b = false; - for(String s : split){ - if((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))){ + for (String s : split) { + if ((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))) { b = true; break; } } double price1 = 0D; - if(b){ + if (b) { price1 = num1 * (totalSeat == 4 ? num3 : num4); peopleNumber -= 1; } double price = (num1 * peopleNumber) + price1; map.put("price", new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - }else{ + } else { map.put("price", num2);//包车价 } - }else{//浮动计费 + } else {//浮动计费 //计算公式:实际历程 * 基础单价 * (参考费用 / (参考里程 * 基础单价)) + (实际历程 - 参考里程) * 基础单价 * 优惠系数 double num1 = Double.valueOf(jsonObject.getString("num1")).doubleValue();//参考费用 double num2 = Double.valueOf(jsonObject.getString("num2")).doubleValue();//参考里程 @@ -919,24 +914,24 @@ double num5 = Double.valueOf(jsonObject.getString("num5")).doubleValue();//包车系数 double num6 = Double.valueOf(jsonObject.getString("num6")).doubleValue();//五座系数 double num7 = Double.valueOf(jsonObject.getString("num7")).doubleValue();//七座系数 - if(travelMode == 1){//拼车 + if (travelMode == 1) {//拼车 double unitPrice = (distance1 * num3 * (num1 / (num2 * num3))) + ((distance1 - num2) * num3 * num4); String[] split = seatNumber.split(","); boolean b = false; - for(String s : split){ - if((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))){ + for (String s : split) { + if ((totalSeat == 4 && s.equals("3")) || (totalSeat == 6 && s.equals("5"))) { b = true; break; } } double price1 = 0D; - if(b){ + if (b) { price1 = unitPrice * (totalSeat == 4 ? num6 : num7); peopleNumber -= 1; } double price = (unitPrice * peopleNumber) + price1; map.put("price", new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - }else{ + } else { double unitPrice = (distance1 * num3 * (num1 / (num2 * num3))) + ((distance1 - num2) * num3 * num5); double price = unitPrice * totalSeat; map.put("price", new BigDecimal(price).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); @@ -946,26 +941,209 @@ } - - /** * 获取订单编号 * @return * @throws Exception */ - public synchronized String getOrderNum(Integer driverId, Integer lineShiftDriverId) 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){ + if (orderCrossCities.size() > 0) { return orderCrossCities.get(0).getOrderNum(); } int size = this.selectCount(null); - while (true){ + while (true) { String orderNum = "CROSS" + String.valueOf(1000000 + size + 1).substring(1); List<OrderCrossCity> orderNum1 = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderNum)); - if(orderNum1.size() == 0){ + if (orderNum1.size() == 0) { return orderNum; } 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); + + } + + //补充订单、支付明细信息 + // 处理公司和司机收入(原支付方法中删除的逻辑移到这里) + 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(); + } + } -- Gitblit v1.7.1