package com.stylefeng.guns.modular.system.service.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.core.common.constant.state.Order; import com.stylefeng.guns.core.util.DateUtil; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity; import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService; import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics; import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; import com.stylefeng.guns.modular.system.dao.PhoneMapper; import com.stylefeng.guns.modular.system.dao.RegionMapper; import com.stylefeng.guns.modular.system.dao.SysReformistMapper; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.*; import com.stylefeng.guns.modular.system.util.GoogleMap.DistancematrixVo; import com.stylefeng.guns.modular.system.util.GoogleMap.FleetEngineUtil; import com.stylefeng.guns.modular.system.util.GoogleMap.GoogleMapUtil; import com.stylefeng.guns.modular.system.util.GoogleMap.ReverseGeocodeVo; import com.stylefeng.guns.modular.system.util.Tingg.TinggPayUtil; import com.stylefeng.guns.modular.system.util.Tingg.model.CheckoutRequest; import com.stylefeng.guns.modular.system.warpper.OrderListWarpper; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.SimpleDateFormat; import java.util.*; /** * 订单相关逻辑类 */ @Service public class OrderServiceImpl implements IOrderService { @Resource private IOrderTaxiService orderTaxiService; @Resource private RegionMapper regionMapper; @Resource private SysReformistMapper sysReformistMapper; @Autowired private GDMapElectricFenceUtil gdMapElectricFenceUtil; @Autowired private GDMapGeocodingUtil gdMapGeocodingUtil; @Autowired private IDriverService driverService; @Autowired private TaskUtil taskUtil; @Autowired private ChinaMobileUtil chinaMobileUtil; @Autowired private RedisUtil redisUtil; @Autowired private PushUtil pushUtil; @Autowired private IOrderPrivateCarService orderPrivateCarService; @Autowired private IOrderCrossCityService orderCrossCityService; @Autowired private IOrderLogisticsService orderLogisticsService; @Autowired private ITransactionDetailsService transactionDetailsService; @Value("${callbackPath}") private String callbackPath; @Autowired private IPaymentRecordService paymentRecordService; @Autowired private IBankCardService bankCardService; @Autowired private ICancleOrderService cancleOrderService; @Autowired private ISettlementDetailService settlementDetailService; @Autowired private ISettlementRecordService settlementRecordService; @Resource private IBalanceUsageRecordService balanceUsageRecordService; @Resource private FleetEngineUtil fleetEngineUtil; @Autowired private IOrderPositionService orderPositionService; @Autowired private ICarService carService; /** * 获取司机首页的订单列表 * @param pageNum * @param size * @param uid * @return * @throws Exception */ @Override public List> queryOrderList(Integer state, Integer pageNum, Integer size, Integer uid, Integer language) throws Exception { pageNum = (pageNum - 1) * size; List> datas = new ArrayList<>(); //出租车 // List> list = orderTaxiService.queryOrderList(state, uid); // datas.addAll(list); //专车 List> list1 = orderPrivateCarService.queryOrderList(state, uid, language); datas.addAll(list1); //跨城 // List> list2 = orderCrossCityService.queryOrderList(state, uid); // datas.addAll(list2); //小件物流 List> list3 = orderLogisticsService.queryOrderList(state, uid, language); datas.addAll(list3); //分页 if(datas.size() >= (pageNum + 1) * size){ datas = datas.subList(pageNum, pageNum + size); }else if(pageNum < datas.size() && datas.size() < (pageNum + 1) * size){ datas = datas.subList(pageNum, datas.size()); }else{ datas = new ArrayList<>(); } return datas; } /** * 获取司机首页的订单列表 * @param pageNum * @param size * @param uid * @return * @throws Exception */ @Override public List> queryOrderList1(Integer state, Integer type, Integer pageNum, Integer size, Integer uid, Integer language) throws Exception { pageNum = (pageNum - 1) * size; List> datas = new ArrayList<>(); if(type == 1){ //出租车 List> list = orderTaxiService.queryOrderList(language, state, uid); datas.addAll(list); //专车 List> list1 = orderPrivateCarService.queryOrderList(state, uid, language); datas.addAll(list1); //跨城 List> list2 = orderCrossCityService.queryOrderList(language, state, uid); datas.addAll(list2); }else{//小件物流 List> list3 = orderLogisticsService.queryOrderList(state, uid, language); datas.addAll(list3); } //分页 if(datas.size() >= (pageNum + 1) * size){ datas = datas.subList(pageNum, pageNum + size); }else if(pageNum < datas.size() && datas.size() < (pageNum + 1) * size){ datas = datas.subList(pageNum, datas.size()); }else{ datas = new ArrayList<>(); } return datas; } /** * 获取司机端我的订单列表 * @param state 1=全部,2=待支付,3=已取消,4=已完成 * @param pageNum * @param size * @param uid * @return * @throws Exception */ @Override public List queryMyAllOrder(Integer state, Integer pageNum, Integer size, Integer uid, Integer language) throws Exception { pageNum = (pageNum - 1) * size; List> datas = new ArrayList<>(); //出租车 // List> list = orderTaxiService.queryMyAllOrder(state, uid); // datas.addAll(list); //专车 List> list1 = orderPrivateCarService.queryMyAllOrder(state, uid, language); for (Map map : list1) { Integer id = Integer.valueOf(map.get("id").toString()); map.put("settleAccounts", 0); SettlementDetail settlementDetail = settlementDetailService.selectOne(new EntityWrapper().eq("orderId", id).eq("orderType", 1)); if(null != settlementDetail){ SettlementRecord settlementRecord = settlementRecordService.selectById(settlementDetail.getSettlementRecordId()); map.put("settleAccounts", null == settlementRecord || settlementRecord.getPaymentStatus() == 1 ? 0 : 1); } } datas.addAll(list1); //跨城 // List> list2 = orderCrossCityService.queryMyAllOrder(state, uid); // datas.addAll(list2); //小件物流 List> list3 = orderLogisticsService.queryMyAllOrder(state, uid, language); for (Map map : list3) { Integer id = Integer.valueOf(map.get("id").toString()); map.put("settleAccounts", 0); SettlementDetail settlementDetail = settlementDetailService.selectOne(new EntityWrapper().eq("orderId", id).eq("orderType", 4)); if(null != settlementDetail){ SettlementRecord settlementRecord = settlementRecordService.selectById(settlementDetail.getSettlementRecordId()); map.put("settleAccounts", null == settlementRecord || settlementRecord.getPaymentStatus() == 1 ? 0 : 1); } } datas.addAll(list3); List orderListWarpper = OrderListWarpper.getOrderListWarpper(datas); //分页 if(orderListWarpper.size() >= (pageNum + 1) * size){ orderListWarpper = orderListWarpper.subList(pageNum, pageNum + size); }else if(pageNum < orderListWarpper.size() && orderListWarpper.size() < (pageNum + 1) * size){ orderListWarpper = orderListWarpper.subList(pageNum, orderListWarpper.size()); }else{ orderListWarpper = new ArrayList<>(); } return orderListWarpper; } /** * 用户下单成功后司机主动去获取推送的订单详情 * @param orderId * @param orderType * @return */ @Override public Map queryPushOrder(Integer orderId, Integer orderType, String lon, String lat, Integer language) throws Exception{ Map map = null; switch (orderType){ case 1://专车 map = orderPrivateCarService.queryPushOrder(orderId, language); OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); String tripId = redisUtil.getValue("trip" + orderPrivateCar.getUserId()); DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(lat), Double.valueOf(lon), tripId); map.put("startDistance", null != distancematrix ? new BigDecimal(distancematrix.getDistance()).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue() : 0); //总距离 distancematrix = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(map.get("endLat").toString()), Double.valueOf(map.get("endLon").toString()), tripId); map.put("totalDistance", null != distancematrix ? new BigDecimal(distancematrix.getDistance()).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue() : 0); Integer orderSource = Integer.valueOf(String.valueOf(map.get("orderSource"))); if(orderSource == 1 || orderSource == 2 || orderSource == 3){ if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ map.put("type", language == 1 ? "乘客创建" : language == 2 ? "Passenger creation" : "Créé par passager"); } if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté"); } if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ map.put("type", language == 1 ? "预约" : language == 2 ? "Make an appointment" : "rendez-vous"); } if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté"); } } if(orderSource == 5){ if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ map.put("type", language == 1 ? "调度创建" : language == 2 ? "Scheduling creation" : "Création de planning"); } if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté"); } if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ map.put("type", language == 1 ? "预约" : language == 2 ? "Make an appointment" : "rendez-vous"); } if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté"); } } break; case 2://出租 // map = orderTaxiService.queryPushOrder(orderId); // String order1 = String.valueOf(map.get("startLon")) + "," + String.valueOf(map.get("startLat")); // String distance1 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, order1, 1).get("distance"); // map.put("startDistance", ToolUtil.isNotEmpty(distance1) ? Double.valueOf(distance1) / 1000 : 0); // // //总距离 // String end1 = String.valueOf(map.get("endLon")) + "," + String.valueOf(map.get("endLat")); // distance = gdMapElectricFenceUtil.getDistance(end1, order1, 1).get("distance"); // map.put("totalDistance", ToolUtil.isNotEmpty(distance) ? Double.valueOf(distance) / 1000 : 0); // // Integer orderSource1 = Integer.valueOf(String.valueOf(map.get("orderSource"))); // if(orderSource1 == 1 || orderSource1 == 2 || orderSource1 == 3){ // if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ // map.put("type", "乘客下单"); // } // if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ // map.put("type", "改派"); // } // if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ // map.put("type", "预约"); // } // if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ // map.put("type", "改派"); // } // } // if(orderSource1 == 5){ // if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ // map.put("type", "调度下单"); // } // if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 1 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ // map.put("type", "改派"); // } // if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ // map.put("type", "预约"); // } // if(Integer.valueOf(String.valueOf(map.get("orderType"))) == 2 && Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ // map.put("type", "改派"); // } // } break; case 3://城际 // map = orderCrossCityService.queryPushOrder(orderId); // String order2 = String.valueOf(map.get("startLon")) + "," + String.valueOf(map.get("startLat")); // String distance2 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, order2, 1).get("distance"); // map.put("startDistance", ToolUtil.isNotEmpty(distance2) ? Double.valueOf(distance2) / 1000 : 0); // // //总距离 // String end2 = String.valueOf(map.get("endLon")) + "," + String.valueOf(map.get("endLat")); // distance = gdMapElectricFenceUtil.getDistance(end2, order2, 1).get("distance"); // map.put("totalDistance", ToolUtil.isNotEmpty(distance) ? Double.valueOf(distance) / 1000 : 0); // // Integer orderSource2 = Integer.valueOf(String.valueOf(map.get("orderSource"))); // if(orderSource2 == 1 || orderSource2 == 2 || orderSource2 == 3){ // if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ // map.put("type", "乘客下单"); // } // if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ // map.put("type", "改派"); // } // } // if(orderSource2 == 5){ // if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ // map.put("type", "调度下单"); // } // if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ // map.put("type", "改派"); // } // } break; case 4://市内小件物流 map = orderLogisticsService.queryPushOrder(orderId, language); OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); String tripId1 = redisUtil.getValue("trip" + orderLogistics.getUserId()); DistancematrixVo distancematrix1 = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(lat), Double.valueOf(lon), tripId1); map.put("startDistance", null != distancematrix1 ? new BigDecimal(distancematrix1.getDistance()).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue() : 0); //总距离 distancematrix1 = GoogleMapUtil.getDistancematrix(Double.valueOf(map.get("startLat").toString()), Double.valueOf(map.get("startLon").toString()), Double.valueOf(map.get("endLat").toString()), Double.valueOf(map.get("endLon").toString()), tripId1); map.put("totalDistance", null != distancematrix1 ? new BigDecimal(distancematrix1.getDistance()).divide(new BigDecimal(1000)).setScale(2, RoundingMode.HALF_EVEN).doubleValue() : 0); Integer orderSource3 = Integer.valueOf(String.valueOf(map.get("orderSource"))); if(orderSource3 == 1 || orderSource3 == 2 || orderSource3 == 3){ if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ map.put("type", language == 1 ? "乘客创建" : language == 2 ? "Passenger creation" : "Créé par passager"); } if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté"); } } if(orderSource3 == 5){ if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ map.put("type", language == 1 ? "调度创建" : language == 2 ? "Scheduling creation" : "Création de planning"); } if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ map.put("type", language == 1 ? "改派" : language == 2 ? "reassignment" : "recruté"); } } break; case 5://跨城小件物流 // map = orderLogisticsService.queryPushOrder(orderId); // String order4 = String.valueOf(map.get("startLon")) + "," + String.valueOf(map.get("startLat")); // String distance4 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, order4, 1).get("distance"); // map.put("startDistance", ToolUtil.isNotEmpty(distance4) ? Double.valueOf(distance4) / 1000 : 0); // // //总距离 // String end4 = String.valueOf(map.get("endLon")) + "," + String.valueOf(map.get("endLat")); // distance = gdMapElectricFenceUtil.getDistance(end4, order4, 1).get("distance"); // map.put("totalDistance", ToolUtil.isNotEmpty(distance) ? Double.valueOf(distance) / 1000 : 0); // // Integer orderSource4 = Integer.valueOf(String.valueOf(map.get("orderSource"))); // if(orderSource4 == 1 || orderSource4 == 2 || orderSource4 == 3){ // if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ // map.put("type", "乘客下单"); // } // if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ // map.put("type", "改派"); // } // } // if(orderSource4 == 5){ // if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 1){ // map.put("type", "调度下单"); // } // if(Integer.valueOf(String.valueOf(map.get("isReassign"))) == 2){ // map.put("type", "改派"); // } // } break; case 6: break; } return map; } /** * 司机执行抢单操作 * @param orderId * @param orderType * @param uid * @return * @throws Exception */ @Override public synchronized ResultUtil grabOrder(Integer orderId, Integer orderType, Integer uid, Integer language) throws Exception { switch (orderType){ case 1://专车 return orderPrivateCarService.grabOrder(orderId, uid, language); case 2://出租 // return orderTaxiService.grabOrder(orderId, uid); case 3://城际 return ResultUtil.success();//不作任何操作,跨城默认选择的司机 case 4://同城小件 return orderLogisticsService.grabOrder(orderId, uid, language); case 5://跨城小件 // return orderLogisticsService.grabOrder(orderId, uid); case 6: break; } return null; } /** * 司机抢单(车载端) * @param orderId * @param orderType * @param uid * @return * @throws Exception */ @Override public synchronized ResultUtil grabOrder_(Integer orderId, Integer orderType, Integer uid) throws Exception { switch (orderType){ case 1://专车 break; case 2://出租 return orderTaxiService.grabOrder_(orderId, uid); case 3://城际 break; case 4://同城小件 // return orderLogisticsService.grabOrder_(orderId, uid); case 5://跨城小件 // return orderLogisticsService.grabOrder_(orderId, uid); case 6: break; } return null; } /** * 获取订单详情页(服务中的页面) * @param orderId * @param orderType * @return * @throws Exception */ @Override public Map queryOrderInfo(Integer language, Integer orderId, Integer orderType) throws Exception { Map map = null; switch (orderType){ case 1://专车 map = orderPrivateCarService.queryOrderInfo(language, orderId); break; case 2://出租 // map = orderTaxiService.queryOrderInfo(orderId); break; case 3://城际 // map = orderCrossCityService.queryOrderCrossCityInfo(orderId); break; case 4://同城小件 map = orderLogisticsService.queryOrderInfo(language, orderId); break; case 5://跨城小件 // map = orderLogisticsService.queryOrderInfo(orderId); break; case 6: break; } if(null != map.get("telX")){ map.put("phone", map.get("telX")); } return map; } /** * 获取改派订单收费金额 * @param orderId * @return * @throws Exception */ @Override public Double queryReassignMoney(Integer orderId, Integer orderType) throws Exception { Integer companyId = null; switch (orderType){ case 1://专车 companyId = orderPrivateCarService.selectById(orderId).getCompanyId(); break; case 2://出租 companyId = orderTaxiService.selectById(orderId).getCompanyId(); break; case 3://城际 companyId = orderCrossCityService.selectById(orderId).getCompanyId(); break; case 4://同城小件 companyId = orderLogisticsService.selectById(orderId).getCompanyId(); break; case 5://跨城小件 companyId = orderLogisticsService.selectById(orderId).getCompanyId(); break; case 6: break; } return sysReformistMapper.queryMoney(companyId); } /** * 走订单流程操作 * @param orderId * @param orderType * @param state * @param uid * @return * @throws Exception */ @Override public ResultUtil process(Integer orderId, Integer orderType, Integer state, Integer uid, Double lon, Double lat,String phone, String pickUpCode, Integer language) throws Exception { switch (orderType){ case 1://专车 return orderPrivateCarService.process(orderId, state, lon, lat, phone, language, uid); case 2://出租 // return orderTaxiService.process(orderId, state, lon, lat, address); case 3://城际 // return orderCrossCityService.process(orderId, state, lon, lat, address); case 4://同城小件 return orderLogisticsService.process(orderId, state, lon, lat, pickUpCode, language, uid); case 5://跨城小件 // return orderLogisticsService.process(orderId, state, lon, lat, address); case 6: break; } return null; } /** * 确认费用操作 * @param orderId * @param orderType * @param type * @param travelFee * @param parkingFee * @param crossingFee * @return * @throws Exception */ @Override public ResultUtil confirmFees(Integer language, Integer orderId, Integer orderType, Integer type, Double travelFee, Double parkingFee, Double crossingFee, Integer uid) throws Exception { switch (orderType){ case 1://专车 return orderPrivateCarService.confirmFees(language, orderId, type, parkingFee, crossingFee, uid); case 2://出租 return orderTaxiService.confirmFees(orderId, type, travelFee, parkingFee, crossingFee); case 3://城际(没有此流程) break; case 4:// return orderLogisticsService.confirmFees(language, orderId, type, parkingFee, crossingFee, uid); case 5: break; case 6: break; } return null; } /** * 确认费用(车载端) * @param orderId * @param orderType * @param type * @param travelFee * @param lon * @param lat * @return * @throws Exception */ @Override public ResultUtil confirmFees_(Integer orderId, Integer orderType, Integer type, Double travelFee, Double lon, Double lat) throws Exception { Map geocode = gdMapGeocodingUtil.geocode(String.valueOf(lon), String.valueOf(lat)); String address = geocode.get("address"); switch (orderType){ case 1://专车 break; case 2://出租 return orderTaxiService.confirmFees_(orderId, type, travelFee, lon, lat, address); case 3://城际 break; case 4:// break; case 5: break; case 6: break; } return null; } /** * 司机确认费用(车载端)不管之前数据状态直接修改到待支付(流程断网情况的处理流程) * @param orderId * @param orderType * @param type * @param travelFee * @param lon * @param lat * @return * @throws Exception */ @Override public ResultUtil confirmFees$(Integer orderId, Integer orderType, Integer type, Double travelFee, Double lon, Double lat) throws Exception { Map geocode = gdMapGeocodingUtil.geocode(String.valueOf(lon), String.valueOf(lat)); String address = geocode.get("address"); switch (orderType){ case 1://专车 break; case 2://出租 return orderTaxiService.confirmFees$(orderId, type, travelFee, lon, lat, address); case 3://城际 break; case 4:// break; case 5: break; case 6: break; } return null; } /** * 获取司机端待支付页面详情 * @param orderId * @param orderType * @return */ @Override public Map queryToBePaidPage(Integer language, Integer orderId, Integer orderType) throws Exception{ switch (orderType){ case 1://专车 return orderPrivateCarService.queryOrderInfo(language, orderId); case 2://出租 return orderTaxiService.queryOrderInfo(language, orderId); case 3://城际(没有此流程) return null; case 4:// return orderLogisticsService.queryOrderInfo(language, orderId); case 5: break; case 6: break; } return null; } /** * 计算实时里程 * @throws Exception */ @Override public boolean calculateMileage(OrderPosition orderPosition) throws Exception { switch (orderPosition.getOrderType()){ case 1://专车 return orderPrivateCarService.calculateMileage(orderPosition.getOrderId(), orderPosition.getLon(), orderPosition.getLat()); case 2://出租 return orderTaxiService.calculateMileage(orderPosition.getOrderId(), orderPosition.getLon(), orderPosition.getLat()); case 3://城际 return orderCrossCityService.calculateMileage(orderPosition); case 4:// return orderLogisticsService.calculateMileage(orderPosition.getOrderId(), orderPosition.getLon(), orderPosition.getLat()); case 5: break; case 6: break; } return false; } /** * 获取完成的订单数量 * @param driverId * @param start * @param end * @return * @throws Exception */ @Override public Integer queryOrderNum(Integer driverId, Date start, Date end) throws Exception { int i = orderPrivateCarService.selectCount(new EntityWrapper().eq("driverId", driverId) .between("insertTime", start, end).in("state", Arrays.asList(6, 7, 8, 9))); int i1 = orderLogisticsService.selectCount(new EntityWrapper().eq("driverId", driverId) .between("insertTime", start, end).in("state", Arrays.asList(6, 7, 8, 9))); return i + i1; } /** * 处理预约单快到出行时间(30分钟内),将司机调整为服务中 * @throws Exception */ @Override public void reservationOrder() throws Exception { //出租车 List list = orderTaxiService.queryMaturity();//获取所有快到期的预约单(出行时间在10分钟内) List drivers = new ArrayList<>(); Set ids = new HashSet<>(); for(OrderTaxi orderTaxi : list){ Driver driver = driverService.selectById(orderTaxi.getDriverId()); if(driver.getState() == 2 && !ids.contains(driver.getId())){ driver.setState(3);//修改司机为服务中 drivers.add(driver); ids.add(driver.getId()); taskUtil.driverIds.add(driver.getId());//添加需要推送提醒的司机 } } if(drivers.size() > 0){ driverService.updateBatchById(drivers);//批量修改状态为服务中 } } /** * 定时任务处理结束订单后30分钟解绑小号功能 * @throws Exception */ @Override public void taskMidAxbUnBindSend() throws Exception { List list = orderTaxiService.taskMidAxbUnBindSend(); for(OrderTaxi orderTaxi : list){ Map map = chinaMobileUtil.midAxbUnBindSend(orderTaxi.getBindId(),orderTaxi.getTelX()); if(!String.valueOf(map.get("code")).equals("200")){ System.err.println(String.valueOf(map.get("msg"))); } orderTaxi.setTelX(""); orderTaxi.setBindId(""); } if(list.size() > 0){ orderTaxiService.updateBatchById(list); } List list1 = orderPrivateCarService.taskMidAxbUnBindSend(); for(OrderPrivateCar orderPrivateCar : list1){ Map map = chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX()); if(!String.valueOf(map.get("code")).equals("200")){ System.err.println(String.valueOf(map.get("msg"))); } orderPrivateCar.setTelX(""); orderPrivateCar.setBindId(""); } if(list1.size() > 0){ orderPrivateCarService.updateBatchById(list1); } } /** * 更新绑定关系 * @param orderId * @param orderType * @throws Exception */ @Override public void RebindMidAxbBindSend(Integer orderId, Integer orderType) throws Exception { switch (orderType){ case 1: OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); if(ToolUtil.isNotEmpty(orderPrivateCar.getBindId())){ Map map1 = chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(),orderPrivateCar.getTelX()); if(!String.valueOf(map1.get("code")).equals("200")){ System.err.println(String.valueOf(map1.get("msg"))); } //调用移动的小号接口 Map geocode = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); Region region = regionMapper.query(geocode.get("districtCode")); Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); Map map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1))); if(String.valueOf(map.get("code")).equals("200")){ orderPrivateCar.setTelX(map.get("telX")); orderPrivateCar.setBindId(map.get("bindId")); } orderPrivateCarService.updateById(orderPrivateCar); } break; case 2: OrderTaxi orderTaxi = orderTaxiService.selectById(orderId); if(ToolUtil.isNotEmpty(orderTaxi.getBindId())){ Map map1 = chinaMobileUtil.midAxbUnBindSend(orderTaxi.getBindId(),orderTaxi.getTelX()); if(!String.valueOf(map1.get("code")).equals("200")){ System.err.println(String.valueOf(map1.get("msg"))); } //调用移动的小号接口 Map geocode = gdMapGeocodingUtil.geocode(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); Region region = regionMapper.query(geocode.get("districtCode")); Driver driver = driverService.selectById(orderTaxi.getDriverId()); Map map = chinaMobileUtil.midAxbBindSend(orderTaxi.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1))); if(String.valueOf(map.get("code")).equals("200")){ orderTaxi.setTelX(map.get("telX")); orderTaxi.setBindId(map.get("bindId")); } orderTaxiService.updateById(orderTaxi); } break; case 3: OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId); if(ToolUtil.isNotEmpty(orderCrossCity.getBindId())){ Map map1 = chinaMobileUtil.midAxbUnBindSend(orderCrossCity.getBindId(),orderCrossCity.getTelX()); if(!String.valueOf(map1.get("code")).equals("200")){ System.err.println(String.valueOf(map1.get("msg"))); } //调用移动的小号接口 Map geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); Region region = regionMapper.query(geocode.get("districtCode")); Driver driver = driverService.selectById(orderCrossCity.getDriverId()); Map 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")); } orderCrossCityService.updateById(orderCrossCity); } break; } } /** * 获取接单后的语音播报 * @param orderId * @param orderType * @return * @throws Exception */ @Override public String queryVoiceBroadcast(Integer orderId, Integer orderType, String lon, String lat) throws Exception { String content = ""; switch (orderType){ case 1: OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); Map distance = gdMapElectricFenceUtil.getDistance(lon + "," + lat, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1); Double d = null != distance ? (Double.valueOf(String.valueOf(distance.get("distance"))) / 1000) : 0; Map distance_ = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1); Double d_ = null != distance_ ? (Double.valueOf(String.valueOf(distance_.get("distance"))) / 1000) : 0; content = (orderPrivateCar.getOrderType() == 1 ? "实时单" : "预约单") + ",距您约" + d + "公里,从" + orderPrivateCar.getStartAddress() + "到" + orderPrivateCar.getEndAddress() + ",全程" + d_ + "公里。"; break; case 2: OrderTaxi orderTaxi = orderTaxiService.selectById(orderId); Map distance1 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, orderTaxi.getStartLon() + "," + orderTaxi.getStartLat(), 1); Double d1 = null != distance1 ? (Double.valueOf(String.valueOf(distance1.get("distance"))) / 1000) : 0; Map distance1_ = gdMapElectricFenceUtil.getDistance(orderTaxi.getStartLon() + "," + orderTaxi.getStartLat(), orderTaxi.getEndLon() + "," + orderTaxi.getEndLat(), 1); Double d1_ = null != distance1_ ? (Double.valueOf(String.valueOf(distance1_.get("distance"))) / 1000) : 0; content = (orderTaxi.getOrderType() == 1 ? "实时单" : "预约单") + ",距您约" + d1 + "公里,从" + orderTaxi.getStartAddress() + "到" + orderTaxi.getEndAddress() + ",全程" + d1_ + "公里。"; break; case 3: OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId); Map distance2 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, orderCrossCity.getStartLon() + "," + orderCrossCity.getStartLat(), 1); Double d2 = null != distance2 ? (Double.valueOf(String.valueOf(distance2.get("distance"))) / 1000) : 0; Map distance2_ = gdMapElectricFenceUtil.getDistance(orderCrossCity.getStartLon() + "," + orderCrossCity.getStartLat(), orderCrossCity.getEndLon() + "," + orderCrossCity.getEndLat(), 1); Double d2_ = null != distance2_ ? (Double.valueOf(String.valueOf(distance2_.get("distance"))) / 1000) : 0; content = "实时单,距您约" + d2 + "公里,从" + orderCrossCity.getStartAddress() + "到" + orderCrossCity.getEndAddress() + ",全程" + d2_ + "公里。"; break; case 4: OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); Map distance3 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, orderLogistics.getStartLon() + "," + orderLogistics.getStartLat(), 1); Double d3 = null != distance3 ? (Double.valueOf(String.valueOf(distance3.get("distance"))) / 1000) : 0; Map distance3_ = gdMapElectricFenceUtil.getDistance(orderLogistics.getStartLon() + "," + orderLogistics.getStartLat(), orderLogistics.getEndLon() + "," + orderLogistics.getEndLat(), 1); Double d3_ = null != distance3_ ? (Double.valueOf(String.valueOf(distance3_.get("distance"))) / 1000) : 0; content = "实时单,距您约" + d3 + "公里,从" + orderLogistics.getStartAddress() + "到" + orderLogistics.getEndAddress() + ",全程" + d3_ + "公里。"; break; case 5: OrderLogistics orderLogistics1 = orderLogisticsService.selectById(orderId); Map distance4 = gdMapElectricFenceUtil.getDistance(lon + "," + lat, orderLogistics1.getStartLon() + "," + orderLogistics1.getStartLat(), 1); Double d4 = null != distance4 ? (Double.valueOf(String.valueOf(distance4.get("distance"))) / 1000) : 0; Map distance4_ = gdMapElectricFenceUtil.getDistance(orderLogistics1.getStartLon() + "," + orderLogistics1.getStartLat(), orderLogistics1.getEndLon() + "," + orderLogistics1.getEndLat(), 1); Double d4_ = null != distance4_ ? (Double.valueOf(String.valueOf(distance4_.get("distance"))) / 1000) : 0; content = "实时单,距您约" + d4 + "公里,从" + orderLogistics1.getStartAddress() + "到" + orderLogistics1.getEndAddress() + ",全程" + d4_ + "公里。"; break; } return content; } /** * 手动完成订单操作 * @param orderId * @param orderType * @return * @throws Exception */ @Override public ResultUtil completeOrder(Integer orderId, Integer orderType, Integer language) throws Exception { Integer userId = 0; Integer driverId = 0; Integer state = 0; switch (orderType){ case 1: OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); if(orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9){ return ResultUtil.error(language == 1 ? "订单已完成支付,不允许重复支付" : language == 2 ? "The order has been paid, recurring payments is not allowed." : "La commande a été payée, les paiements récurrents ne sont pas autorisés."); } if(orderPrivateCar.getState() != 7){ return ResultUtil.error(language == 1 ? "订单不在待支付,无法完成订单" : language == 2 ? "The order is no longer with Pending Payment, unable to complete the order." : "La commande n’est plus en attente de paiement, il est impossible de terminer la commande."); } orderPrivateCar.setPayManner(2);//其他方式支付 orderPrivateCar.setRedPacketMoney(0D); orderPrivateCar.setCouponMoney(0D); orderPrivateCar.setDiscount(0D); orderPrivateCar.setDiscountMoney(0D); orderPrivateCar.setPayMoney(orderPrivateCar.getOrderMoney()); orderPrivateCar.setState(8); orderPrivateCarService.updateById(orderPrivateCar); userId = orderPrivateCar.getUserId(); driverId = orderPrivateCar.getDriverId(); state = orderPrivateCar.getState(); break; case 2: OrderTaxi orderTaxi = orderTaxiService.selectById(orderId); if(orderTaxi.getState() == 8 || orderTaxi.getState() == 9){ return ResultUtil.error(language == 1 ? "订单已完成支付,不允许重复支付" : language == 2 ? "The order has been paid, recurring payments is not allowed." : "La commande a été payée, les paiements récurrents ne sont pas autorisés."); } if(orderTaxi.getState() != 7){ return ResultUtil.error(language == 1 ? "订单不在待支付,无法完成订单" : language == 2 ? "The order is no longer with Pending Payment, unable to complete the order." : "La commande n’est plus en attente de paiement, il est impossible de terminer la commande."); } orderTaxi.setPayManner(2);//其他方式支付 orderTaxi.setRedPacketMoney(0D); orderTaxi.setCouponMoney(0D); orderTaxi.setDiscount(0D); orderTaxi.setDiscountMoney(0D); orderTaxi.setPayMoney(orderTaxi.getOrderMoney()); orderTaxi.setState(8); orderTaxiService.updateById(orderTaxi); userId = orderTaxi.getUserId(); driverId = orderTaxi.getDriverId(); state = orderTaxi.getState(); //司机手动确认收款,删除限制司机6分钟不能接单的标识 String vehicle = redisUtil.getValue("VEHICLE"); if(ToolUtil.isNotEmpty(vehicle)){ JSONArray jsonArray = JSON.parseArray(vehicle); for(int i = 0; i < jsonArray.size(); i++){ if(jsonArray.getInteger(i).compareTo(driverId) == 0){ jsonArray.remove(i); break; } } redisUtil.setStrValue("VEHICLE", jsonArray.toJSONString()); } break; case 4: OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); if(orderLogistics.getState() == 8 || orderLogistics.getState() == 9){ return ResultUtil.error(language == 1 ? "订单已完成支付,不允许重复支付" : language == 2 ? "The order has been paid, recurring payments is not allowed." : "La commande a été payée, les paiements récurrents ne sont pas autorisés."); } if(orderLogistics.getState() != 7){ return ResultUtil.error(language == 1 ? "订单不在待支付,无法完成订单" : language == 2 ? "The order is no longer with Pending Payment, unable to complete the order." : "La commande n’est plus en attente de paiement, il est impossible de terminer la commande."); } orderLogistics.setPayManner(2);//其他方式支付 orderLogistics.setRedPacketMoney(0D); orderLogistics.setCouponMoney(0D); orderLogistics.setDiscount(0D); orderLogistics.setDiscountMoney(0D); orderLogistics.setPayMoney(orderLogistics.getOrderMoney()); orderLogistics.setState(8); orderLogisticsService.updateById(orderLogistics); userId = orderLogistics.getUserId(); driverId = orderLogistics.getDriverId(); state = orderLogistics.getState(); break; } Integer finalDriverId = driverId; Integer finalUserId = userId; Integer finalState = state; new Thread(new Runnable() { @Override public void run() { pushUtil.pushOrderState(1, finalUserId, orderId, orderType, finalState, 0, "", "driver"); pushUtil.pushOrderState(2, finalDriverId, orderId, orderType, finalState, 0, "", "driver"); } }).start(); return ResultUtil.success(); } /** * 获取订单费用明细 * @param orderId * @param orderType * @return * @throws Exception */ @Override public Map queryMoneyInfo(Integer orderId, Integer orderType) throws Exception { switch (orderType){ case 1: return orderPrivateCarService.queryMoneyInfo(orderId); case 2: break; case 4: return orderLogisticsService.queryMoneyInfo(orderId); } return null; } @Autowired private ISystemNoticeService systemNoticeService; @Autowired private ALiSendSms aLiSendSms; /** * 短信催收 * @throws Exception */ @Override public void taskSmsSend() throws Exception { Integer language = 2; //获取未支付订单 Date day = new Date(); List orderList = orderPrivateCarService.getSmsOrderList(); for(OrderPrivateCar order : orderList){ if(order.getSmsTime()==null ){ if(null != order.getGetoffTime() && order.getGetoffTime().getTime()+24*60*60*1000L 0){ orderPrivateCarService.updateBatchById(orderList); } } @Override public ResultUtil payOrder(Integer uid, Integer orderId, Integer orderType, Integer payType, Integer bankCardId, Integer language) throws Exception { Double money = 0D; Driver driver = driverService.selectById(uid); if(orderType == 1){//专车 OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); money = orderPrivateCar.getPayMoney(); if(orderPrivateCar.getPayType() != 4){ return ResultUtil.error(language == 1 ? "无法进行支付" : language == 2 ? "Unable to make payments" : "Impossible d’effectuer des paiements"); } if(orderPrivateCar.getDriverPay() == 2){ return ResultUtil.error(language == 1 ? "不能重复支付" : language == 2 ? "Unable to recur payments" : "Impossible de récurrence des paiements"); } if(payType == 3){//余额支付 if(driver.getBalance().compareTo(money) < 0){ return ResultUtil.error(language == 1 ? "账户余额不足" : language == 2 ? "Insufficient balance" : "Solde insuffisant"); } } } if(orderType == 4){//小件 OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); money = orderLogistics.getPayMoney(); if(orderLogistics.getPayType() != 4){ return ResultUtil.error(language == 1 ? "无法进行支付" : language == 2 ? "Unable to make payments" : "Impossible d’effectuer des paiements"); } if(orderLogistics.getDriverPay() == 2){ return ResultUtil.error(language == 1 ? "不能重复支付" : language == 2 ? "Unable to recur payments" : "Impossible de récurrence des paiements"); } if(payType == 3){//余额支付 if(driver.getBalance().compareTo(money) < 0){ return ResultUtil.error(language == 1 ? "账户余额不足" : language == 2 ? "Insufficient balance" : "Solde insuffisant"); } } } if(0 < money){ if(payType == 1) {//手机支付 SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String merchantTransactionId = sdf.format(new Date()) + "4" + language + orderId; CheckoutRequest checkoutRequest = new CheckoutRequest(); checkoutRequest.setMsisdn(Long.valueOf(driver.getPhone())); checkoutRequest.setCustomerEmail(driver.getEmail()); checkoutRequest.setAccountNumber(driver.getPhone()); checkoutRequest.setCustomerFirstName(driver.getFirstName()); checkoutRequest.setCustomerLastName(driver.getLastName()); checkoutRequest.setRequestAmount(money); checkoutRequest.setMerchantTransactionId(merchantTransactionId); checkoutRequest.setRequestDescription("Travel completion payment"); checkoutRequest.setCallbackUrl(callbackPath + "/base/wxPayOrderTaxi"); checkoutRequest.setPendingRedirectUrl(""); checkoutRequest.setSuccessRedirectUrl("https://igo.i-go.group/payMoney/pages/success.html"); checkoutRequest.setFailRedirectUrl("https://igo.i-go.group/payMoney/pages/fail.html"); ResultUtil resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest); if(resultUtil.getCode()==200){ paymentRecordService.saveData(1, uid, 2, orderId, orderType, 1, money, null, 1);//添加预支付数据 }else{ resultUtil = ResultUtil.error(language == 1 ? "支付失败" : language == 2 ? "Payment failure" : "Échec de paiement", ""); } return resultUtil; } if(payType == 2) {//银行卡支付 BankCard bankCard = bankCardService.selectById(bankCardId); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS"); String merchantTransactionId = sdf.format(new Date()) + "4" + language + orderId; CheckoutRequest checkoutRequest = new CheckoutRequest(); checkoutRequest.setMsisdn(Long.valueOf(bankCard.getCode())); checkoutRequest.setCustomerEmail(driver.getEmail()); checkoutRequest.setAccountNumber(bankCard.getCode()); checkoutRequest.setCustomerFirstName(bankCard.getFirstName()); checkoutRequest.setCustomerLastName(bankCard.getLastName()); checkoutRequest.setRequestAmount(money); checkoutRequest.setMerchantTransactionId(merchantTransactionId); checkoutRequest.setRequestDescription("Travel completion payment"); checkoutRequest.setCallbackUrl(callbackPath + "/base/wxPayOrderTaxi"); checkoutRequest.setPendingRedirectUrl(""); checkoutRequest.setSuccessRedirectUrl("https://igo.i-go.group/payMoney/pages/success.html"); checkoutRequest.setFailRedirectUrl("https://igo.i-go.group/payMoney/pages/fail.html"); ResultUtil resultUtil = TinggPayUtil.checkoutRequest(checkoutRequest); if(resultUtil.getCode()==200){ paymentRecordService.saveData(1, uid, 2, orderId, orderType, 2, money, null, 1);//添加预支付数据 }else{ resultUtil = ResultUtil.error(language == 1 ? "支付失败" : language == 2 ? "Payment failure" : "Échec de paiement", ""); } return resultUtil; } if(payType == 3){//余额支付 driver.setBalance(driver.getBalance() - money); Double laveBusinessMoney = driver.getLaveBusinessMoney(); if(laveBusinessMoney.compareTo(money) < 0){ double b = money - laveBusinessMoney; driver.setLaveBusinessMoney(0D); driver.setLaveActivityMoney(driver.getLaveActivityMoney() - b); driverService.updateById(driver); balanceUsageRecordService.saveBalanceUsageRecord(driver.getId(), 1, b, orderType == 1 ? 1 : 2); balanceUsageRecordService.saveBalanceUsageRecord(driver.getId(), 2, laveBusinessMoney, orderType == 1 ? 1 : 2); }else{ driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - money); driverService.updateById(driver); balanceUsageRecordService.saveBalanceUsageRecord(driver.getId(), 2, money, orderType == 1 ? 1 : 2); } if(orderType == 1){//专车 OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); orderPrivateCar.setDriverPay(2); orderPrivateCarService.updateById(orderPrivateCar); } if(orderType == 4){//小件 OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); orderLogistics.setDriverPay(2); orderLogisticsService.updateById(orderLogistics); } transactionDetailsService.saveData(uid, "现金收款代付", money, 2, 1, 2, orderType, orderId); } } return ResultUtil.success(); } @Override public void getDriverNowPosition() { for (OrderPrivateCar orderPrivateCar : orderPrivateCarService.selectList(new EntityWrapper().eq("state", 5))) { String trackId = orderPrivateCar.getTrackId(); if(ToolUtil.isNotEmpty(trackId)){ String trip = fleetEngineUtil.getTrip(trackId); JSONObject lastLocation = JSON.parseObject(trip).getJSONObject("lastLocation"); JSONObject location = lastLocation.getJSONObject("location"); Double latitude = location.getDouble("latitude"); Double longitude = location.getDouble("longitude"); OrderPosition orderPosition = new OrderPosition(); orderPosition.setOrderId(orderPrivateCar.getId()); orderPosition.setOrderType(1); orderPosition.setDriverId(orderPrivateCar.getDriverId()); orderPosition.setLat(latitude.toString()); orderPosition.setLon(longitude.toString()); orderPosition.setInsertTime(new Date()); try { orderPositionService.saveData(orderPosition); } catch (Exception e) { throw new RuntimeException(e); } } } List orderLogisticsList = orderLogisticsService.selectList(new EntityWrapper().eq("state", 5)); for (OrderLogistics orderLogistics : orderLogisticsList) { String trackId = orderLogistics.getTrackId(); if(ToolUtil.isNotEmpty(trackId)){ String trip = fleetEngineUtil.getTrip(trackId); JSONObject lastLocation = JSON.parseObject(trip).getJSONObject("lastLocation"); JSONObject location = lastLocation.getJSONObject("location"); Double latitude = location.getDouble("latitude"); Double longitude = location.getDouble("longitude"); OrderPosition orderPosition = new OrderPosition(); orderPosition.setOrderId(orderLogistics.getId()); orderPosition.setOrderType(1); orderPosition.setDriverId(orderLogistics.getDriverId()); orderPosition.setLat(latitude.toString()); orderPosition.setLon(longitude.toString()); orderPosition.setInsertTime(new Date()); try { orderPositionService.saveData(orderPosition); } catch (Exception e) { throw new RuntimeException(e); } } } } /** * 结束google订单状态 */ @Override public void overGoogleOrder() { List privateCars = orderPrivateCarService.selectList(new EntityWrapper().isNotNull("tripId") .eq("isover", 0).in("state", Arrays.asList(6, 7, 8, 9, 10, 12)).eq("isDelete", 1)); for (OrderPrivateCar privateCar : privateCars) { Integer state = privateCar.getState(); String tripId = privateCar.getTripId(); String trip = fleetEngineUtil.getTrip(tripId); if(null != trip && "" == trip){ privateCar.setIsover(1); orderPrivateCarService.updateById(privateCar); continue; } if(ToolUtil.isNotEmpty(trip)){ JSONObject jsonObject = JSON.parseObject(trip); String tripStatus = jsonObject.getString("tripStatus"); Car car = carService.selectById(privateCar.getCarId()); if(Arrays.asList(10, 12).contains(state) && !"CANCELED".equals(tripStatus)){ //修改行程信息 boolean updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1); if(!updateTrip){ for (int i = 0; i < 5; i++) { updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1); if(updateTrip){ privateCar.setIsover(1); orderPrivateCarService.updateById(privateCar); break; } try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } } }else{ privateCar.setIsover(1); orderPrivateCarService.updateById(privateCar); } } if(Arrays.asList(6, 7, 8, 9).contains(state) && !"COMPLETE".equals(tripStatus)){ //修改行程信息 boolean updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1); if(!updateTrip){ for (int i = 0; i < 5; i++) { updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1); if(updateTrip){ privateCar.setIsover(1); orderPrivateCarService.updateById(privateCar); break; } try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } } }else{ privateCar.setIsover(1); orderPrivateCarService.updateById(privateCar); } } } } List orderLogisticsList = orderLogisticsService.selectList(new EntityWrapper().isNotNull("tripId") .eq("isover", 0).in("state", Arrays.asList(6, 7, 8, 9, 10, 12)).eq("isDelete", 1)); for (OrderLogistics orderLogistics : orderLogisticsList) { Integer state = orderLogistics.getState(); String tripId = orderLogistics.getTripId(); String trip = fleetEngineUtil.getTrip(tripId); if(null != trip && "" == trip){ orderLogistics.setIsover(1); orderLogisticsService.updateById(orderLogistics); continue; } if(ToolUtil.isNotEmpty(trip)){ JSONObject jsonObject = JSON.parseObject(trip); String tripStatus = jsonObject.getString("tripStatus"); Car car = carService.selectById(orderLogistics.getCarId()); if(Arrays.asList(10, 12).contains(state) && !"CANCELED".equals(tripStatus)){ //修改行程信息 boolean updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4); if(!updateTrip){ for (int i = 0; i < 5; i++) { updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4); if(updateTrip){ orderLogistics.setIsover(1); orderLogisticsService.updateById(orderLogistics); break; } try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } } }else{ orderLogistics.setIsover(1); orderLogisticsService.updateById(orderLogistics); } } if(Arrays.asList(6, 7, 8, 9).contains(state) && !"COMPLETE".equals(tripStatus)){ //修改行程信息 boolean updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4); if(!updateTrip){ for (int i = 0; i < 5; i++) { updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4); if(updateTrip){ orderLogistics.setIsover(1); orderLogisticsService.updateById(orderLogistics); break; } try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } } }else{ orderLogistics.setIsover(1); orderLogisticsService.updateById(orderLogistics); } } } } } }