| | |
| | | import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; |
| | | import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService; |
| | | import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.http.HttpEntity; |
| | |
| | | |
| | | @Service |
| | | public class OrderPrivateCarServiceImpl extends ServiceImpl<OrderPrivateCarMapper, OrderPrivateCar> implements IOrderPrivateCarService { |
| | | |
| | | Logger logger = LoggerFactory.getLogger(OrderPrivateCarServiceImpl.class); |
| | | |
| | | @Resource |
| | | private OrderPrivateCarMapper orderPrivateCarMapper; |
| | |
| | | |
| | | @Autowired |
| | | private GDMapElectricFenceUtil gdMapElectricFenceUtil; |
| | | |
| | | @Autowired |
| | | private GeodesyUtil geodesyUtil; |
| | | |
| | | @Autowired |
| | | private IOrderPositionService orderPositionService; |
| | |
| | | if(orderPrivateCars.size() > 0){ |
| | | return ResultUtil.error("有未完成的订单"); |
| | | } |
| | | List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 11); |
| | | if(list.size() > 0){ |
| | | return ResultUtil.error("有未完成的订单"); |
| | | } |
| | | // List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 11); |
| | | // if(list.size() > 0){ |
| | | // return ResultUtil.error("有未完成的订单"); |
| | | // } |
| | | |
| | | orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11); |
| | | if(orderPrivateCars.size() > 0 && reservation == 2){ |
| | |
| | | } |
| | | |
| | | |
| | | list = orderTaxiMapper.queryByState_(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11); |
| | | if(list.size() > 0 && reservation == 2){ |
| | | return ResultUtil.error("有未完成的订单"); |
| | | } |
| | | // list = orderTaxiMapper.queryByState_(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11); |
| | | // if(list.size() > 0 && reservation == 2){ |
| | | // return ResultUtil.error("有未完成的订单"); |
| | | // } |
| | | |
| | | startAddress = startAddress.replaceAll("& #40;", "("); |
| | | startAddress = startAddress.replaceAll("& #41;", ")"); |
| | |
| | | orderPrivateCar.setSnatchOrderTime(new Date()); |
| | | driver2.setState(3); |
| | | driverService.updateById(driver2); |
| | | serverCarModelId = query1.getServerCarModelId(); |
| | | } |
| | | long timeMillis1 = System.currentTimeMillis(); |
| | | logger.info("第一段用时:" + (timeMillis1 - timeMillis)); |
| | | timeMillis = timeMillis1; |
| | | // 查询城市的订单额度 |
| | | OpenCity openCity = openCityService.selectOne(new EntityWrapper<OpenCity>() |
| | | .eq("code", cityCode) |
| | |
| | | } |
| | | |
| | | // 查询预估价格 |
| | | ResultUtil<List<ServerCarModelWarpper>> listResultUtil = serverCarModelService.queryServerCarModel(startLon + "," + startLat, endLon + "," + endLat, 1); |
| | | List<ServerCarModelWarpper> data = listResultUtil.getData(); |
| | | if(Objects.isNull(serverCarModelId)){ |
| | | //获取经营业务 |
| | | CarService query = new CarService(); |
| | | query.setCarId(driver2.getCarId()); |
| | | CarService service = carServiceMapper.selectOne(query); |
| | | if(Objects.nonNull(service)){ |
| | | serverCarModelId = service.getServerCarModelId(); |
| | | } |
| | | ResultUtil<ServerCarModelWarpper> listResultUtil = serverCarModelService.queryServerCarModel1(serverCarModelId, startLon + "," + startLat, endLon + "," + endLat, 1); |
| | | if(200 != listResultUtil.getCode()){ |
| | | return ResultUtil.error(listResultUtil.getMsg()); |
| | | } |
| | | Integer finalServerCarModelId = serverCarModelId; |
| | | data = data.stream().filter(e -> finalServerCarModelId.equals(e.getId())).sorted(Comparator.comparing(ServerCarModelWarpper::getAmount)).collect(Collectors.toList()); |
| | | if(Objects.nonNull(openCity) && !CollectionUtils.isEmpty(data) && BigDecimal.valueOf(data.get(0).getAmount()).compareTo(openCity.getOrderMagnitude()) > 0){ |
| | | ServerCarModelWarpper data = listResultUtil.getData(); |
| | | if(Objects.nonNull(openCity) && BigDecimal.valueOf(data.getAmount()).compareTo(openCity.getOrderMagnitude()) > 0){ |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setState(7); |
| | | if(orderSource == 2){ |
| | | orderPrivateCar.setOrderMoney(data.get(0).getAmount()); |
| | | orderPrivateCar.setEstimatedPrice(data.get(0).getAmount()); |
| | | }else { |
| | | orderPrivateCar.setOrderMoney(data.get(carIndex).getAmount()); |
| | | orderPrivateCar.setEstimatedPrice(data.get(carIndex).getAmount()); |
| | | } |
| | | orderPrivateCar.setOrderMoney(data.getAmount()); |
| | | orderPrivateCar.setEstimatedPrice(data.getAmount()); |
| | | orderPrivateCar.setPayMethod(0); |
| | | this.insert(orderPrivateCar); |
| | | BaseWarpper baseWarpper = new BaseWarpper(); |
| | |
| | | baseWarpper.setAmount(orderPrivateCar.getOrderMoney()); |
| | | return ResultUtil.success(baseWarpper); |
| | | }else { |
| | | if(orderSource == 2){ |
| | | if(!CollectionUtils.isEmpty(data)){ |
| | | orderPrivateCar.setEstimatedPrice(data.get(0).getAmount()); |
| | | } |
| | | }else { |
| | | orderPrivateCar.setEstimatedPrice(data.get(carIndex).getAmount()); |
| | | } |
| | | orderPrivateCar.setEstimatedPrice(data.getAmount()); |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPayMethod(1); |
| | |
| | | } |
| | | }).start(); |
| | | } |
| | | |
| | | long timeMillis2 = System.currentTimeMillis(); |
| | | logger.info("第二段用时:" + (timeMillis2 - timeMillis)); |
| | | timeMillis = timeMillis2; |
| | | |
| | | // TODO: 2021/5/11 修改,根据后台设定的派单范围查询范围内有无司机,将单子指派给距离最近的司机(距离相同随机取),范围内没有司机再进行推单流程 |
| | | if(orderPrivateCar.getState() == 1){ |
| | |
| | | } |
| | | String value = redisUtil.getValue("DRIVER" + drivers.get(j).getId()); |
| | | if (null != value) { |
| | | // Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 0);//计算距离 |
| | | // Integer d = Integer.valueOf(distance1.get("distance")); |
| | | String[] split = value.split(","); |
| | | double distance = GDMapGeocodingUtil.getDistance(orderPrivateCar.getStartLat(), orderPrivateCar.getStartLon(), Double.valueOf(split[1]), Double.valueOf(split[0])); |
| | | int d = Double.valueOf(distance).intValue(); |
| | | Map<String, Double> distance1 = geodesyUtil.getDistance(orderPrivateCar.getStartLat() + "," + orderPrivateCar.getStartLon(), value); |
| | | int d = distance1.get("WGS84").intValue(); |
| | | if ((0 == m && null == driver) || (d < m)) { |
| | | driver = drivers.get(j); |
| | | m = d; |
| | |
| | | for (Driver driver : ds) { |
| | | String value = redisUtil.getValue("DRIVER" + driver.getId()); |
| | | if (null != value) { |
| | | Map<String, String> distance1 = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1);//计算距离 |
| | | Integer d = Integer.valueOf(distance1.get("distance")); |
| | | if ((0 == m && null == dr) || (d.intValue() < m.intValue())) { |
| | | Map<String, String> distance = gdMapElectricFenceUtil.getDistance(startLon + "," + startLat, value, 1); |
| | | int distance1 = Integer.parseInt(distance.get("distance")); |
| | | if ((0 == m && null == dr) || (distance1 < m.intValue())) { |
| | | dr = driver; |
| | | m = d; |
| | | m = distance1; |
| | | } |
| | | } |
| | | } |
| | |
| | | dr.setState(3); |
| | | } |
| | | driverService.updateById(dr); |
| | | redisUtil.setStrValue("DRIVER_ORDER" + dr.getId(), orderPrivateCar.getId().toString(), 600); |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | long timeMillis3 = System.currentTimeMillis(); |
| | | logger.info("第三段用时:" + (timeMillis3 - timeMillis)); |
| | | timeMillis = timeMillis3; |
| | | |
| | | //推单操作 |
| | | if(orderPrivateCar.getState() == 1){ |
| | |
| | | baseWarpper.setState(orderPrivateCar.getState()); |
| | | baseWarpper.setId(orderPrivateCar.getId()); |
| | | baseWarpper.setPayMethod(1); |
| | | long timeMillis4 = System.currentTimeMillis(); |
| | | logger.info("第四段用时:" + (timeMillis4 - timeMillis)); |
| | | timeMillis = timeMillis4; |
| | | return ResultUtil.success(baseWarpper); |
| | | } |
| | | } |
| | |
| | | if(!lock){ |
| | | return ResultUtil.error("系统繁忙,请稍后重试"); |
| | | } |
| | | String key = orderId + "_during_payment"; |
| | | if(redisUtil.hasKey(key)){ |
| | | return ResultUtil.error("支付中,不能重复发起支付"); |
| | | } |
| | | redisUtil.setStrValue(key, UUIDUtil.getRandomCode(), 10); |
| | | try { |
| | | OrderPrivateCar orderPrivateCar = this.selectById(orderId); |
| | | if(orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9){ |
| | |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单",orderId +"", code,orderMoney+"","/base/wxPayOrderTaxi","JSAPI",userInfo.getAppletsOpenId()); |
| | | if(resultUtil.getCode()==200){ |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, null, 1, code);//添加预支付数据 |
| | | long millis = System.currentTimeMillis(); |
| | | new Thread(()->{ |
| | | long time = millis; |
| | | try { |
| | | Thread.sleep(5000); |
| | | } catch (InterruptedException e) { |
| | | throw new RuntimeException(e); |
| | | } |
| | | //订单创建后15分钟 |
| | | while ((System.currentTimeMillis() - time) <= 900000) { |
| | | int num = 1; |
| | | int wait = 0; |
| | | while (num <= 13) { |
| | | int min = 5000; |
| | | wait += (min * num); |
| | | OrderPrivateCar orderPrivateCar1 = OrderPrivateCarServiceImpl.this.selectById(orderId); |
| | | if(orderPrivateCar1.getState() != 7){ |
| | | break; |
| | |
| | | if ("NOTPAY".equals(s) || "USERPAYING".equals(s)) { |
| | | } |
| | | } |
| | | Thread.sleep(5000); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | }finally { |
| | | try { |
| | | Thread.sleep(wait); |
| | | } catch (InterruptedException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | num++; |
| | | } |
| | | } |
| | | |
| | | OrderPrivateCar orderPrivateCar1 = OrderPrivateCarServiceImpl.this.selectById(orderId); |
| | | if(7 == orderPrivateCar1.getState()){ |
| | | //关闭订单,不允许支付 |
| | |
| | | if(!lock){ |
| | | return; |
| | | } |
| | | |
| | | try { |
| | | PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), 1, type, null); |
| | | if(null != query){ |