| | |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.util.LinkedMultiValueMap; |
| | | import org.springframework.util.MultiValueMap; |
| | | import org.springframework.util.StringUtils; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | public synchronized ResultUtil<BaseWarpper> saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat, |
| | | String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid, |
| | | BigDecimal estimatedPrice,String cityCode,Integer carIndex) throws Exception { |
| | | |
| | | long timeMillis = System.currentTimeMillis(); |
| | | //如果出行时间大于当前10分钟则默认为预约单 |
| | | if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){ |
| | | reservation = 2; |
| | |
| | | orderPrivateCar.setTravelTime(travelTime); |
| | | orderPrivateCar.setOrderType(reservation); |
| | | orderPrivateCar.setOrderSource(orderSource); |
| | | Driver driver2 = driverService.selectById(driverId); |
| | | if(orderSource == 2){//扫码下单 |
| | | Driver driver = driverService.selectById(driverId); |
| | | if(null == driver){ |
| | | if(null == driver2){ |
| | | return ResultUtil.error("司机信息有误,无法完成下单"); |
| | | } |
| | | if(driver.getAuthState() == 1){ |
| | | if(driver2.getAuthState() == 1){ |
| | | return ResultUtil.error("司机信息还未完成审核,无法完成下单"); |
| | | } |
| | | if(driver.getAuthState() == 3){ |
| | | if(driver2.getAuthState() == 3){ |
| | | return ResultUtil.error("司机账户已被冻结,无法提供服务"); |
| | | } |
| | | if(driver.getAuthState() == 4){ |
| | | if(driver2.getAuthState() == 4){ |
| | | return ResultUtil.error("司机信息未通过审核,无法提供服务"); |
| | | } |
| | | if(driver.getState() == 1){ |
| | | if(driver2.getState() == 1){ |
| | | return ResultUtil.error("司机还未上线,无法提供服务"); |
| | | } |
| | | if(driver.getState() == 3){ |
| | | if(driver2.getState() == 3){ |
| | | return ResultUtil.error("司机正在服务中,无法提供服务"); |
| | | } |
| | | List<DriverService> query = driverServiceService.query(driverId, 1); |
| | |
| | | } |
| | | |
| | | orderPrivateCar.setDriverId(driverId); |
| | | orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( |
| | | driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); |
| | | orderPrivateCar.setCompanyId(driver2.getFranchiseeId() != null && driver2.getFranchiseeId() != 0 ? driver2.getFranchiseeId() : ( |
| | | driver2.getCompanyId() != null && driver2.getCompanyId() != 0 ? driver2.getCompanyId() : 1)); |
| | | orderPrivateCar.setState(2); |
| | | orderPrivateCar.setCarId(driver.getCarId()); |
| | | CarService query1 = carServiceMapper.query(1, driver.getCarId()); |
| | | orderPrivateCar.setCarId(driver2.getCarId()); |
| | | CarService query1 = carServiceMapper.query(1, driver2.getCarId()); |
| | | orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); |
| | | orderPrivateCar.setSnatchOrderTime(new Date()); |
| | | driver.setState(3); |
| | | driverService.updateById(driver); |
| | | driver2.setState(3); |
| | | driverService.updateById(driver2); |
| | | } |
| | | // 查询城市的订单额度 |
| | | OpenCity openCity = openCityService.selectOne(new EntityWrapper<OpenCity>() |
| | |
| | | // 查询预估价格 |
| | | ResultUtil<List<ServerCarModelWarpper>> listResultUtil = serverCarModelService.queryServerCarModel(startLon + "," + startLat, endLon + "," + endLat, 1); |
| | | List<ServerCarModelWarpper> data = listResultUtil.getData(); |
| | | data = data.stream().filter(e -> serverCarModelId.equals(e.getId())).sorted(Comparator.comparing(ServerCarModelWarpper::getAmount)).collect(Collectors.toList()); |
| | | if(Objects.isNull(serverCarModelId)){ |
| | | //获取经营业务 |
| | | CarService query = new CarService(); |
| | | query.setCarId(driver2.getCarId()); |
| | | CarService service = carServiceMapper.selectOne(query); |
| | | if(Objects.nonNull(service)){ |
| | | serverCarModelId = service.getServerCarModelId(); |
| | | } |
| | | } |
| | | 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){ |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | |
| | | return ResultUtil.success(baseWarpper); |
| | | }else { |
| | | if(orderSource == 2){ |
| | | orderPrivateCar.setEstimatedPrice(data.get(0).getAmount()); |
| | | if(!CollectionUtils.isEmpty(data)){ |
| | | orderPrivateCar.setEstimatedPrice(data.get(0).getAmount()); |
| | | } |
| | | }else { |
| | | orderPrivateCar.setEstimatedPrice(data.get(carIndex).getAmount()); |
| | | } |
| | |
| | | } |
| | | AssignOrder assignOrder = assignOrderService.selectOne(new EntityWrapper<AssignOrder>().eq("companyId", query.getId()).eq("type", 1)); |
| | | if(null != assignOrder){//配置了指派规则才处理 |
| | | boolean lock = redisUtil.lock("order_lock", 10); |
| | | boolean lock = redisUtil.lock("order_lock", 10, 30); |
| | | if(!lock){ |
| | | int num1 = 1; |
| | | while (num1 <= 10){ |
| | | Thread.sleep(3000);//等待3秒 |
| | | lock = redisUtil.lock("order_lock", 10); |
| | | if(lock){ |
| | | break; |
| | | }else{ |
| | | num1++; |
| | | } |
| | | } |
| | | return ResultUtil.error("系统繁忙,请稍后重试"); |
| | | } |
| | | try { |
| | | //获取空闲司机 |
| | |
| | | */ |
| | | @Override |
| | | public ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception { |
| | | boolean lock = redisUtil.lock(id + "_cancleOrder", 10); |
| | | boolean lock = redisUtil.lock(id + "_cancleOrder", 10, 30); |
| | | if(!lock){ |
| | | int num1 = 1; |
| | | while (num1 <= 10){ |
| | | Thread.sleep(3000);//等待3秒 |
| | | lock = redisUtil.lock(id + "_cancleOrder", 10); |
| | | if(lock){ |
| | | break; |
| | | }else{ |
| | | num1++; |
| | | } |
| | | } |
| | | return ResultUtil.error("系统繁忙,请稍后重试"); |
| | | } |
| | | ResultUtil resultUtil = ResultUtil.success(""); |
| | | try { |
| | |
| | | |
| | | @Override |
| | | public ResultUtil payPrivateCarOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { |
| | | boolean lock = redisUtil.lock(orderId + "_payment", 10); |
| | | boolean lock = redisUtil.lock(orderId + "_payment", 10, 30); |
| | | if(!lock){ |
| | | int num1 = 1; |
| | | while (num1 <= 10){ |
| | | Thread.sleep(3000);//等待3秒 |
| | | lock = redisUtil.lock(orderId + "_payment", 10); |
| | | if(lock){ |
| | | break; |
| | | }else{ |
| | | num1++; |
| | | } |
| | | } |
| | | return ResultUtil.error("系统繁忙,请稍后重试"); |
| | | } |
| | | try { |
| | | OrderPrivateCar orderPrivateCar = this.selectById(orderId); |
| | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public synchronized void payOrderPrivateCarCallback(Integer id, String order_id, Integer type) throws Exception { |
| | | boolean lock = redisUtil.lock(order_id + "_paymentCallback", 10); |
| | | boolean lock = redisUtil.lock(order_id + "_paymentCallback", 10, 30); |
| | | if(!lock){ |
| | | int num1 = 1; |
| | | while (num1 <= 10){ |
| | | Thread.sleep(3000);//等待3秒 |
| | | lock = redisUtil.lock(order_id + "_paymentCallback", 10); |
| | | if(lock){ |
| | | break; |
| | | }else{ |
| | | num1++; |
| | | } |
| | | } |
| | | return; |
| | | } |
| | | |
| | | |
| | | |
| | | try { |
| | | PaymentRecord query = paymentRecordService.query(1, null, null, Integer.valueOf(id), 1, type, null); |
| | | if(null != query){ |
| | |
| | | transactionDetailsService.saveData(orderPrivateCar.getUserId(), "完成订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId()); |
| | | // orderPrivateCar.setState(8); |
| | | orderPrivateCar.setPayType(type); |
| | | orderPrivateCar.setTransactionId(order_id); |
| | | if(!StringUtils.hasLength(orderPrivateCar.getTransactionId())){ |
| | | orderPrivateCar.setTransactionId(order_id); |
| | | } |
| | | this.updateById(orderPrivateCar); |
| | | |
| | | // UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); |