| | |
| | | if (orderSource != 2) { // 扫码下单跳过先付判断(扫码下单已有固定司机) |
| | | TSysPaymentMode paymentMode = tSysPaymentModeService.selectOne( |
| | | new EntityWrapper<TSysPaymentMode>().last("LIMIT 1")); |
| | | baseWarpper.setPaymentMode(paymentMode.getPrivateType()); |
| | | if (paymentMode != null && Integer.valueOf(1).equals(paymentMode.getPrivateType())) { |
| | | // 先付模式:计算预估金额,订单状态改为7(待支付) |
| | | Company payCompany = companyCityService.query(geocode.get("districtCode")); |
| | |
| | | Double estimateMoney = Double.valueOf(amountMap.get("zongfeiyong").toString()); |
| | | orderPrivateCar.setEstimateAmount(estimateMoney); |
| | | orderPrivateCar.setOrderMoney(estimateMoney); |
| | | baseWarpper.setEstimateAmount(estimateMoney); |
| | | } |
| | | } |
| | | // 先付模式:覆盖状态为7(待支付),不进行派单 |
| | |
| | | orderPrivateCar.setPassengersPhone(userInfo.getPhone()); |
| | | } |
| | | orderPrivateCar.setState(1); |
| | | if (orderSource != 2) { |
| | | TSysPaymentMode paymentMode = tSysPaymentModeService.selectOne( |
| | | new EntityWrapper<TSysPaymentMode>().last("LIMIT 1")); |
| | | if (paymentMode != null && paymentMode.getPrivateType() != null) { |
| | | baseWarpper.setPaymentMode(paymentMode.getPrivateType()); |
| | | } |
| | | if (paymentMode != null && Integer.valueOf(1).equals(paymentMode.getPrivateType())) { |
| | | Company payCompany = companyCityService.query(geocode.get("districtCode")); |
| | | if (payCompany != null) { |
| | | try { |
| | | double distanceMeters = orderPrivateCar.getEstimateMileage() != null |
| | | ? orderPrivateCar.getEstimateMileage() : 0; |
| | | long durationSeconds = orderPrivateCar.getEstimateTime() != null |
| | | ? (long) (orderPrivateCar.getEstimateTime() * 60) : 0; |
| | | List<ServerCarModelWarpper> priceList = serverCarModelService.getPrice( |
| | | payCompany.getId(), distanceMeters, durationSeconds, 0L, 1, geocode); |
| | | Double estimateMoney = getBatchEstimateAmount(serverCarModel, priceList); |
| | | if (estimateMoney != null) { |
| | | orderPrivateCar.setEstimateAmount(estimateMoney); |
| | | orderPrivateCar.setOrderMoney(estimateMoney); |
| | | orderPrivateCar.setState(7); |
| | | orderPrivateCar.setCompanyId(payCompany.getId()); |
| | | orderPrivateCar.setPaymentMode(1); |
| | | baseWarpper.setEstimateAmount(estimateMoney); |
| | | } else { |
| | | orderPrivateCar.setPaymentMode(2); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | orderPrivateCar.setPaymentMode(2); |
| | | orderPrivateCar.setState(1); |
| | | } |
| | | } else { |
| | | orderPrivateCar.setPaymentMode(1); |
| | | } |
| | | } else { |
| | | orderPrivateCar.setPaymentMode( |
| | | (paymentMode != null && paymentMode.getPrivateType() != null) |
| | | ? paymentMode.getPrivateType() |
| | | : 2 |
| | | ); |
| | | } |
| | | } |
| | | orderPrivateCar.setInsertTime(new Date()); |
| | | orderPrivateCar.setTravelTime(travelTime); |
| | | orderPrivateCar.setOrderType(reservation); |
| | |
| | | JSONArray jsonArray = JSON.parseArray(serverCarModel); |
| | | this.insert(orderPrivateCar); |
| | | |
| | | |
| | | for (int i = 0; i < jsonArray.size(); i++) { |
| | | JSONObject jsonObject1 = jsonArray.getJSONObject(i); |
| | | Integer serverCarModelId = jsonObject1.getInteger("serverCarModelId"); |
| | | Integer rideType = jsonObject1.getInteger("rideType"); |
| | | if (0 == serverCarModelId) { |
| | | OrderTaxi orderTaxi = new OrderTaxi(); |
| | | orderTaxi.setId(orderPrivateCar.getId()); |
| | | orderTaxi.setState(1); |
| | | orderTaxi.setUserId(orderPrivateCar.getUserId()); |
| | | orderTaxi.setStartLon(orderPrivateCar.getStartLon()); |
| | | orderTaxi.setStartLat(orderPrivateCar.getStartLat()); |
| | | orderTaxiService.pushOrder(orderTaxi, 3); |
| | | } |
| | | |
| | | if (rideType != 3) { |
| | | //推单操作-独享 |
| | | this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat()); |
| | | } else { |
| | | OrderPrivateCar orderPrivateCar1 = null; |
| | | OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); |
| | | TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId())); |
| | | //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单 |
| | | List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).in("state", "2,3,4").le("totalPeopleNum", 4 - peopleNum)); |
| | | for (OrderPrivateCar order : orderList) { |
| | | if (spellOrderRule != null) { |
| | | JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); |
| | | //判断时间 |
| | | if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) { |
| | | // Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), order.getStartLon() + "," + order.getStartLat(), 1).get("distance").toString()); |
| | | // Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString()); |
| | | // TODO: 2023/11/4 已改成计算直线距离 |
| | | Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), order.getStartLon() + "," + order.getStartLat()).get("WGS84"); |
| | | Double dis2 = geodesyUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat()).get("WGS84"); |
| | | //判断距离 |
| | | if (dis1 <= jsonObject.getInteger("num1") * 1000 && dis2 <= jsonObject.getInteger("num2") * 1000) { |
| | | orderPrivateCar1 = order; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | if (orderPrivateCar.getState() != 7) { |
| | | for (int i = 0; i < jsonArray.size(); i++) { |
| | | JSONObject jsonObject1 = jsonArray.getJSONObject(i); |
| | | Integer serverCarModelId = jsonObject1.getInteger("serverCarModelId"); |
| | | Integer rideType = jsonObject1.getInteger("rideType"); |
| | | if (0 == serverCarModelId) { |
| | | OrderTaxi orderTaxi = new OrderTaxi(); |
| | | orderTaxi.setId(orderPrivateCar.getId()); |
| | | orderTaxi.setState(1); |
| | | orderTaxi.setUserId(orderPrivateCar.getUserId()); |
| | | orderTaxi.setStartLon(orderPrivateCar.getStartLon()); |
| | | orderTaxi.setStartLat(orderPrivateCar.getStartLat()); |
| | | orderTaxiService.pushOrder(orderTaxi, 3); |
| | | } |
| | | if (orderPrivateCar1 == null) { |
| | | orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).eq("state", 5).le("totalPeopleNum", 4 - peopleNum)); |
| | | |
| | | if (rideType != 3) { |
| | | //推单操作-独享 |
| | | this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat()); |
| | | } else { |
| | | OrderPrivateCar orderPrivateCar1 = null; |
| | | OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); |
| | | TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId())); |
| | | //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单 |
| | | List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).in("state", "2,3,4").le("totalPeopleNum", 4 - peopleNum)); |
| | | for (OrderPrivateCar order : orderList) { |
| | | if (spellOrderRule != null) { |
| | | JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); |
| | | //判断时间 |
| | | if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) { |
| | | String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(order.getDriverId())); |
| | | // Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString()); |
| | | // Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString()); |
| | | |
| | | // TODO: 2023/11/4 已改成计算直线距离 |
| | | Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value).get("WGS84"); |
| | | Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), order.getStartLon() + "," + order.getStartLat()).get("WGS84"); |
| | | Double dis2 = geodesyUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat()).get("WGS84"); |
| | | //判断距离 |
| | | if (dis1 <= jsonObject.getInteger("num3") * 1000 && dis2 <= jsonObject.getInteger("num4") * 1000) { |
| | | if (dis1 <= jsonObject.getInteger("num1") * 1000 && dis2 <= jsonObject.getInteger("num2") * 1000) { |
| | | orderPrivateCar1 = order; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (orderPrivateCar1 == null) { |
| | | this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat()); |
| | | } else { |
| | | Driver driver = driverService.selectById(orderPrivateCar1.getDriverId()); |
| | | orderPrivateCar.setDriverId(driverId); |
| | | orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( |
| | | driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); |
| | | orderPrivateCar.setState(2); |
| | | orderPrivateCar.setDriverId(driver.getId()); |
| | | orderPrivateCar.setCarId(driver.getCarId()); |
| | | CarService query1 = carServiceMapper.query(1, driver.getCarId()); |
| | | orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); |
| | | orderPrivateCar.setRideType(3); |
| | | orderPrivateCar.setSnatchOrderTime(new Date()); |
| | | orderPrivateCar.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum()); |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()); |
| | | |
| | | Integer promotion1 = isPromotion(orderPrivateCar.getUserId(), driver.getPlaceOfEmployment()); |
| | | if(promotion1!=null){ |
| | | orderPrivateCar.setPromotion(2); |
| | | Driver driver1 = driverService.selectById(promotion1); |
| | | orderPrivateCar.setPromotionUser(driver1.getName()); |
| | | orderPrivateCar.setPromotionPhone(driver1.getPhone()); |
| | | orderPrivateCar.setPromotionDriverId(promotion1); |
| | | } |
| | | |
| | | //修改总订单人数 |
| | | OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); |
| | | orderPrivateCar2.setSpellSuccess(1); |
| | | orderPrivateCar2.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum()); |
| | | this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6)); |
| | | this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6)); |
| | | // |
| | | //调用移动的小号接口 |
| | | // Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000)); |
| | | // if (String.valueOf(map.get("code")).equals("200")) { |
| | | // orderPrivateCar.setTelX(map.get("telX")); |
| | | // orderPrivateCar.setBindId(map.get("bindId")); |
| | | // } |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); |
| | | pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 100, 0); |
| | | pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); |
| | | |
| | | if (orderPrivateCar1 == null) { |
| | | orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).eq("state", 5).le("totalPeopleNum", 4 - peopleNum)); |
| | | for (OrderPrivateCar order : orderList) { |
| | | if (spellOrderRule != null) { |
| | | JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent()); |
| | | if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) { |
| | | String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(order.getDriverId())); |
| | | Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value).get("WGS84"); |
| | | Double dis2 = geodesyUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat()).get("WGS84"); |
| | | if (dis1 <= jsonObject.getInteger("num3") * 1000 && dis2 <= jsonObject.getInteger("num4") * 1000) { |
| | | orderPrivateCar1 = order; |
| | | break; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | }).start(); |
| | | List<OrderPrivateCar> orderList1 = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid())); |
| | | for (OrderPrivateCar orderPrivateCar3 : orderList1) { |
| | | } |
| | | if (orderPrivateCar1 == null) { |
| | | this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat()); |
| | | } else { |
| | | Driver driver = driverService.selectById(orderPrivateCar1.getDriverId()); |
| | | orderPrivateCar.setDriverId(driverId); |
| | | orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( |
| | | driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); |
| | | orderPrivateCar.setState(2); |
| | | orderPrivateCar.setDriverId(driver.getId()); |
| | | orderPrivateCar.setCarId(driver.getCarId()); |
| | | CarService query1 = carServiceMapper.query(1, driver.getCarId()); |
| | | orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); |
| | | orderPrivateCar.setRideType(3); |
| | | orderPrivateCar.setSnatchOrderTime(new Date()); |
| | | orderPrivateCar.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum()); |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()); |
| | | |
| | | Integer promotion1 = isPromotion(orderPrivateCar.getUserId(), driver.getPlaceOfEmployment()); |
| | | if(promotion1!=null){ |
| | | orderPrivateCar.setPromotion(2); |
| | | Driver driver1 = driverService.selectById(promotion1); |
| | | orderPrivateCar.setPromotionUser(driver1.getName()); |
| | | orderPrivateCar.setPromotionPhone(driver1.getPhone()); |
| | | orderPrivateCar.setPromotionDriverId(promotion1); |
| | | } |
| | | |
| | | OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); |
| | | orderPrivateCar2.setSpellSuccess(1); |
| | | orderPrivateCar2.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum()); |
| | | this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6)); |
| | | this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6)); |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); |
| | | pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 100, 0); |
| | | pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); |
| | | |
| | | } |
| | | }).start(); |
| | | List<OrderPrivateCar> orderList1 = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid())); |
| | | for (OrderPrivateCar orderPrivateCar3 : orderList1) { |
| | | pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); |
| | | } |
| | | OrderPrivateCar orderPrivateCar3 = this.selectById(orderPrivateCar.getPid()); |
| | | pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); |
| | | } |
| | | OrderPrivateCar orderPrivateCar3 = this.selectById(orderPrivateCar.getPid()); |
| | | pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0); |
| | | } |
| | | } |
| | | } |
| | | |
| | | //添加消息 |
| | | systemNoticeService.addSystemNotice(1, "您的快车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); |
| | | if (orderPrivateCar.getState() == 7) { |
| | | systemNoticeService.addSystemNotice(1, "您的快车订单已生成,请先完成支付。", orderPrivateCar.getUserId(), 1); |
| | | } else { |
| | | systemNoticeService.addSystemNotice(1, "您的快车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); |
| | | } |
| | | baseWarpper.setId(orderPrivateCar.getId()); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | |
| | | return ResultUtil.success(baseWarpper); |
| | | } |
| | | |
| | | private Double getBatchEstimateAmount(String serverCarModel, List<ServerCarModelWarpper> priceList) { |
| | | if (ToolUtil.isEmpty(serverCarModel) || priceList == null || priceList.isEmpty()) { |
| | | return null; |
| | | } |
| | | JSONArray jsonArray = JSON.parseArray(serverCarModel); |
| | | Double minEstimateAmount = null; |
| | | for (int i = 0; i < jsonArray.size(); i++) { |
| | | JSONObject jsonObject = jsonArray.getJSONObject(i); |
| | | Integer serverCarModelId = jsonObject.getInteger("serverCarModelId"); |
| | | Integer rideType = jsonObject.getInteger("rideType"); |
| | | if (serverCarModelId == null || serverCarModelId == 0) { |
| | | continue; |
| | | } |
| | | ServerCarModelWarpper matched = priceList.stream() |
| | | .filter(item -> item.getId() != null && item.getId().equals(serverCarModelId)) |
| | | .findFirst() |
| | | .orElse(null); |
| | | if (matched == null) { |
| | | continue; |
| | | } |
| | | Map<String, Object> amountMap; |
| | | if (Integer.valueOf(2).equals(rideType)) { |
| | | amountMap = matched.getBuyNowAmount(); |
| | | } else if (Integer.valueOf(3).equals(rideType)) { |
| | | amountMap = matched.getPutTogetherOneAmount(); |
| | | } else { |
| | | amountMap = matched.getAmount(); |
| | | } |
| | | if (amountMap == null || amountMap.get("zongfeiyong") == null) { |
| | | continue; |
| | | } |
| | | Double estimateAmount = Double.valueOf(amountMap.get("zongfeiyong").toString()); |
| | | if (minEstimateAmount == null || estimateAmount < minEstimateAmount) { |
| | | minEstimateAmount = estimateAmount; |
| | | } |
| | | } |
| | | return minEstimateAmount; |
| | | } |
| | | |
| | | |
| | | private Integer isPromotion(Integer userId, String code){ |
| | | UserInfo userInfo = userInfoService.selectById(userId); |