| | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.supersavedriving.driver.core.util.ToolUtil; |
| | | import com.supersavedriving.driver.modular.system.dao.OrderMapper; |
| | | import com.supersavedriving.driver.modular.system.model.*; |
| | | import com.supersavedriving.driver.modular.system.service.*; |
| | | import com.supersavedriving.driver.modular.system.util.*; |
| | | import com.supersavedriving.driver.modular.system.util.GaoDe.MapUtil; |
| | | import com.supersavedriving.driver.modular.system.util.GaoDe.model.District; |
| | | import com.supersavedriving.driver.modular.system.util.MallBook.model.*; |
| | | import com.supersavedriving.driver.modular.system.util.MallBook.util.TrhRequest; |
| | | import com.supersavedriving.driver.modular.system.util.mongodb.model.Location; |
| | | import com.supersavedriving.driver.modular.system.util.qianyuntong.EmployeeUtil; |
| | | import com.supersavedriving.driver.modular.system.util.qianyuntong.OrderUtil; |
| | | import com.supersavedriving.driver.modular.system.util.qianyuntong.model.AddAccountInfoRequest; |
| | | import com.supersavedriving.driver.modular.system.util.qianyuntong.model.CreateTravelItineraryRequest; |
| | | import com.supersavedriving.driver.modular.system.util.qianyuntong.model.ModifyTravelItineraryRequest; |
| | | import com.supersavedriving.driver.modular.system.util.zhenglian.ZhengLianUtil; |
| | | import com.supersavedriving.driver.modular.system.util.zhenglian.model.TradeTerminalInfo; |
| | | import com.supersavedriving.driver.modular.system.util.zhenglian.model.ZLUserInfo; |
| | | import com.supersavedriving.driver.modular.system.warpper.*; |
| | | import com.supersavedriving.driver.core.util.ToolUtil; |
| | | import com.supersavedriving.driver.modular.system.util.GaoDe.model.District; |
| | | import com.supersavedriving.driver.modular.system.util.juhe.WeatherUtil; |
| | | import com.supersavedriving.driver.modular.system.util.PushUtil; |
| | | import com.supersavedriving.driver.modular.system.warpper.AddOrderWarpper; |
| | | import com.supersavedriving.driver.modular.system.warpper.HallOrderList; |
| | | import com.supersavedriving.driver.modular.system.warpper.OrderInfoWarpper; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.BeanUtils; |
| | |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.net.InetAddress; |
| | | import java.net.NetworkInterface; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | |
| | | order.setState(null == order.getDriverId() ? 101 : 102); |
| | | } |
| | | order.setStatus(1); |
| | | |
| | | this.insert(order); |
| | | driverService.updateById(driver); |
| | | if(null != appUser && null != order.getDriverId()){ |
| | | BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId()); |
| | | //调三方订单中心创建行程单 |
| | | CreateTravelItineraryRequest request = new CreateTravelItineraryRequest(); |
| | | request.setOrderNo("DJ" + order.getId()); |
| | | request.setCustomerId(appUser.getOnconUUID()); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | request.setSupplierShopId(branchOffice.getEnterCode()); |
| | | request.setServiceType(5); |
| | | String travelItinerary = OrderUtil.createTravelItinerary(request); |
| | | order.setTravelId(travelItinerary); |
| | | this.updateById(order); |
| | | } |
| | | |
| | | |
| | | //推送状态 |
| | | if(null != order.getDriverId()){ |
| | | //推动订单数据 |
| | |
| | | .eq("state", 2).last(" and surplusQuantity > 0 and now() < endTime and now() < failureTime")); |
| | | Double d = null; |
| | | for (YouTuiDriver youTuiDriver : youTuiDrivers) { |
| | | String value = redisUtil.getValue("DRIVER" + youTuiDriver.getDriverId()); |
| | | String value = redisUtil.getValue("daijia:DRIVER" + youTuiDriver.getDriverId()); |
| | | if(ToolUtil.isEmpty(value)){ |
| | | continue; |
| | | } |
| | |
| | | Double score = null;//评分 |
| | | Double d = null; |
| | | for (Driver driver1 : drivers) { |
| | | String value = redisUtil.getValue("DRIVER" + driver1.getId()); |
| | | String value = redisUtil.getValue("daijia:DRIVER" + driver1.getId()); |
| | | if(ToolUtil.isEmpty(value)){ |
| | | continue; |
| | | } |
| | |
| | | return; |
| | | } |
| | | for (Driver driver1 : drivers) { |
| | | String value = redisUtil.getValue("DRIVER" + driver1.getId()); |
| | | String value = redisUtil.getValue("daijia:DRIVER" + driver1.getId()); |
| | | if (ToolUtil.isEmpty(value)) { |
| | | continue; |
| | | } |
| | |
| | | */ |
| | | @Override |
| | | public List<HallOrderList> queryOrderHall(Integer uid, Integer pageNum, Integer pageSize) throws Exception { |
| | | Driver driver = driverService.selectById(uid); |
| | | //获取证联数据 |
| | | if(null == driver.getCustId() || 0 == driver.getAccOpenFlag()){ |
| | | TradeTerminalInfo tradeTerminalInfo = new TradeTerminalInfo(); |
| | | tradeTerminalInfo.setTerminal("1"); |
| | | InetAddress inetAddress = InetAddress.getLocalHost(); |
| | | String ip = inetAddress.getHostAddress(); |
| | | tradeTerminalInfo.setIp(ip); |
| | | NetworkInterface networkInterface = NetworkInterface.getByInetAddress(inetAddress); |
| | | byte[] mac = networkInterface.getHardwareAddress(); |
| | | StringBuilder macAddress = new StringBuilder(); |
| | | for (int i = 0; i < mac.length; i++) { |
| | | macAddress.append(String.format("%02X%s", mac[i], (i < mac.length - 1) ? "-" : "")); |
| | | } |
| | | |
| | | tradeTerminalInfo.setMac(macAddress.toString()); |
| | | ZLUserInfo userInfo = ZhengLianUtil.getUserInfo(driver.getEmpId().toString(), tradeTerminalInfo); |
| | | if(null != userInfo){ |
| | | driver.setCustId(userInfo.getCustId()); |
| | | driver.setAccOpenFlag(userInfo.getAccOpenFlag()); |
| | | driverService.updateById(driver); |
| | | } |
| | | } |
| | | //同步到中台 |
| | | if(null != driver.getAccOpenFlag() && 1 == driver.getAccOpenFlag() && 0 == driver.getIsSynchronous()){ |
| | | AddAccountInfoRequest request = new AddAccountInfoRequest(); |
| | | request.setCustId(driver.getCustId()); |
| | | request.setAccountNo(driver.getEmpId().toString()); |
| | | request.setAccountName(driver.getName()); |
| | | request.setMobile(driver.getPhone()); |
| | | Integer status = EmployeeUtil.addAccountInfo(request); |
| | | if(0 == status){ |
| | | driver.setIsSynchronous(1); |
| | | driverService.updateById(driver); |
| | | } |
| | | } |
| | | |
| | | pageNum = (pageNum - 1) * pageSize; |
| | | String value = redisUtil.getValue("DRIVER" + uid); |
| | | String value = redisUtil.getValue("daijia:DRIVER" + uid); |
| | | List<HallOrderList> hallOrderLists = this.baseMapper.queryOrderHall(pageNum, pageSize); |
| | | List<HallOrderList> lists = new ArrayList<>(); |
| | | hallOrderLists.forEach(hallOrderList -> { |
| | |
| | | order.setState(102); |
| | | order.setOrderTakingTime(new Date()); |
| | | this.updateById(order); |
| | | |
| | | redisUtil.unlock(orderId.toString()); |
| | | |
| | | if(null != order.getUserId()){ |
| | |
| | | appUser.setCancelCount(0); |
| | | appUser.setIsException(1); |
| | | appUserService.updateById(appUser); |
| | | BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId()); |
| | | if(null == order.getTravelId()){ |
| | | //调三方订单中心创建行程单 |
| | | CreateTravelItineraryRequest request = new CreateTravelItineraryRequest(); |
| | | request.setOrderNo("DJ" + order.getId()); |
| | | request.setCustomerId(appUser.getOnconUUID()); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | request.setSupplierShopId(branchOffice.getEnterCode()); |
| | | request.setServiceType(5); |
| | | String travelItinerary = OrderUtil.createTravelItinerary(request); |
| | | order.setTravelId(travelItinerary); |
| | | this.updateById(order); |
| | | }else{ |
| | | //中台修改订单状态 |
| | | ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest(); |
| | | request.setOrderId(order.getTravelId()); |
| | | request.setStatus(getState(order.getState())); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | request.setSupplierShopId(branchOffice.getEnterCode()); |
| | | OrderUtil.modifyTravelItinerary(request); |
| | | } |
| | | } |
| | | |
| | | driver.setServerStatus(2); |
| | |
| | | if(ToolUtil.isEmpty(orderInfoWarpper.getAvatar())){ |
| | | orderInfoWarpper.setAvatar("https://csxdj.obs.cn-south-1.myhuaweicloud.com:443/66cc269703a84e4da87fb21e2c21ab1f.png"); |
| | | } |
| | | String value = redisUtil.getValue("DRIVER" + uid); |
| | | String value = redisUtil.getValue("daijia:DRIVER" + uid); |
| | | orderInfoWarpper.setPickUpTime(0); |
| | | if(ToolUtil.isNotEmpty(value)){ |
| | | Map<String, Double> distance = GeodesyUtil.getDistance(orderInfoWarpper.getStartLng() + "," + orderInfoWarpper.getStartLat(), value); |
| | |
| | | Map<String, String> distance1 = MapUtil.getDistance(orderInfoWarpper.getStartLng() + "," + orderInfoWarpper.getStartLat(), value, 0); |
| | | orderInfoWarpper.setPickUpTime(Integer.valueOf(distance1.get("duration")) / 60); |
| | | } |
| | | |
| | | Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1); |
| | | if(null != distance){ |
| | | Double d = Double.valueOf(distance.get("distance")) / 1000; |
| | | orderInfoWarpper.setEstimatedMileage(d); |
| | | orderInfoWarpper.setEstimatedTime(Double.valueOf(Integer.valueOf(distance.get("duration")) / 60)); |
| | | Driver driver = driverService.selectById(uid); |
| | | Order orderPrice = getOrderPrice(1, d, 0, order, "", driver.getBranchOfficeId()); |
| | | orderInfoWarpper.setEstimatedPrice(orderPrice.getEstimatedPrice()); |
| | | } |
| | | |
| | | orderInfoWarpper.setDriverId(order.getDriverId()); |
| | | return orderInfoWarpper; |
| | | } |
| | |
| | | } |
| | | this.updateAllColumnById(order); |
| | | |
| | | if(null != order.getTravelId()){ |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | //中台修改订单状态 |
| | | ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest(); |
| | | request.setOrderId(order.getTravelId()); |
| | | request.setStatus(getState(order.getState())); |
| | | BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId()); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | request.setSupplierShopId(branchOffice.getEnterCode()); |
| | | OrderUtil.modifyTravelItinerary(request); |
| | | } |
| | | |
| | | //推送订单状态 |
| | | pushUtil.pushOrderStatus(order.getDriverId(), 2, order.getId(), order.getState()); |
| | | if(null != order.getUserId()){ |
| | |
| | | .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') ")); |
| | | city = null != weatherCity ? weatherCity.getId().toString() : ""; |
| | | } |
| | | boolean badWeather = WeatherUtil.isBadWeather(city); |
| | | // boolean badWeather = WeatherUtil.isBadWeather(city); |
| | | boolean badWeather = false; |
| | | if(badWeather){ |
| | | Integer num8 = JSON.parseObject(systemConfig.getContent()).getInteger("num8"); |
| | | if(num8 > 0){ |
| | |
| | | return; |
| | | } |
| | | Integer driverId = order.getDriverId(); |
| | | String value = redisUtil.getValue("DRIVER" + driverId); |
| | | String value = redisUtil.getValue("daijia:DRIVER" + driverId); |
| | | if(order.getState() == 106 || order.getState() == 301){ |
| | | redisUtil.delSetValue("orderService", orderId.toString()); |
| | | return; |
| | |
| | | return; |
| | | } |
| | | Integer driverId = order.getDriverId(); |
| | | String value = redisUtil.getValue("DRIVER" + driverId); |
| | | String value = redisUtil.getValue("daijia:DRIVER" + driverId); |
| | | if(order.getState() == 108 || order.getState() == 111){ |
| | | redisUtil.delSetValue("orderService_check", orderId.toString()); |
| | | return; |
| | |
| | | } |
| | | this.updateById(order); |
| | | |
| | | if(null != order.getTravelId()){ |
| | | //中台修改订单状态 |
| | | ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest(); |
| | | request.setOrderId(order.getTravelId()); |
| | | request.setStatus(getState(order.getState())); |
| | | BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId()); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | request.setSupplierShopId(branchOffice.getEnterCode()); |
| | | OrderUtil.modifyTravelItinerary(request); |
| | | } |
| | | |
| | | |
| | | orderTransfer.setOrderId(orderId); |
| | | orderTransfer.setOldDriverId(order.getDriverId()); |
| | |
| | | } |
| | | |
| | | return ResultUtil.success(); |
| | | } |
| | | |
| | | |
| | | private Integer getState(Integer state){ |
| | | switch (state){ |
| | | case 101://待接单 |
| | | return 1; |
| | | case 102://已接单 |
| | | return 2; |
| | | case 103://前往预约点 |
| | | return 3; |
| | | case 104://到达预约点 |
| | | return 4; |
| | | case 105://开始服务 |
| | | return 5; |
| | | case 106://到达目的地 |
| | | return 6; |
| | | case 107://待支付 |
| | | return 7; |
| | | case 108://待评价 |
| | | return 8; |
| | | case 109://已完成 |
| | | return 9; |
| | | case 201://转单中 |
| | | return 11; |
| | | case 301://已取消 |
| | | return 10; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | |
| | |
| | | order.setState(order.getOldState()); |
| | | order.setOldState(null); |
| | | this.updateAllColumnById(order); |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | |
| | | if(null != order.getTravelId()){ |
| | | //中台修改订单状态 |
| | | ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest(); |
| | | request.setOrderId(order.getTravelId()); |
| | | request.setStatus(getState(order.getState())); |
| | | BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId()); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | request.setSupplierShopId(branchOffice.getEnterCode()); |
| | | OrderUtil.modifyTravelItinerary(request); |
| | | } |
| | | |
| | | OrderTransfer orderTransfer = orderTransferService.selectOne(new EntityWrapper<OrderTransfer>().eq("orderId", orderId) |
| | | .eq("status", 1).isNull("successTime").orderBy("createTime desc limit 0, 1")); |
| | |
| | | |
| | | order.setState(301); |
| | | this.updateById(order); |
| | | |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | if(null != order.getTravelId()){ |
| | | //中台修改订单状态 |
| | | ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest(); |
| | | request.setOrderId(order.getTravelId()); |
| | | request.setStatus(getState(order.getState())); |
| | | BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId()); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | request.setSupplierShopId(branchOffice.getEnterCode()); |
| | | OrderUtil.modifyTravelItinerary(request); |
| | | } |
| | | |
| | | |
| | | redisUtil.delSetValue("orderService", orderId.toString()); |
| | | |
| | | CancelOrder cancelOrder = new CancelOrder(); |
| | |
| | | cancelOrder.setStatus(1); |
| | | cancelOrder.setCreateTime(new Date()); |
| | | cancelOrderService.insert(cancelOrder); |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | if(null != driver){ |
| | | driver.setServerStatus(1); |
| | | driverService.updateById(driver); |
| | |
| | | public ResultUtil setOrderStatus(Integer uid, Long orderId, Integer payType, Integer state) throws Exception { |
| | | try { |
| | | boolean lock = redisUtil.lock(orderId + "",5); |
| | | if(!lock){ |
| | | int num1 = 1; |
| | | while (num1 <= 10){ |
| | | Thread.sleep(3000);//等待3秒 |
| | | lock = redisUtil.lock(orderId + "",5); |
| | | if(lock){ |
| | | break; |
| | | }else{ |
| | | num1++; |
| | | } |
| | | } |
| | | } |
| | | if(!lock){ |
| | | redisUtil.unlock(orderId + ""); |
| | | return ResultUtil.error("请稍后重试"); |
| | | } |
| | | // if(!lock){ |
| | | // int num1 = 1; |
| | | // while (num1 <= 10){ |
| | | // Thread.sleep(3000);//等待3秒 |
| | | // lock = redisUtil.lock(orderId + "",5); |
| | | // if(lock){ |
| | | // break; |
| | | // }else{ |
| | | // num1++; |
| | | // } |
| | | // } |
| | | // } |
| | | // if(!lock){ |
| | | // redisUtil.unlock(orderId + ""); |
| | | // return ResultUtil.error("请稍后重试"); |
| | | // } |
| | | |
| | | Order order = this.selectById(orderId); |
| | | if(state == 107 && order.getState() != 106){ |
| | |
| | | } |
| | | if(state == 108 && order.getState() != 107){ |
| | | redisUtil.unlock(orderId + ""); |
| | | return ResultUtil.error("操作失败,请刷新数据"); |
| | | // return ResultUtil.error("操作失败,请刷新数据"); |
| | | } |
| | | |
| | | order.setState(state); |
| | |
| | | order.setPayType(3); |
| | | } |
| | | |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | if(payType == 2 && state == 108){ |
| | | order.setPayTime(new Date()); |
| | | if(null != order.getCouponId()){ |
| | | UserToCoupon userToCoupon = userToCouponService.selectById(order.getCouponId()); |
| | | Coupon coupon = couponService.selectById(userToCoupon.getCouponId()); |
| | | |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | |
| | | AccountChangeDetail accountChangeDetail = new AccountChangeDetail(); |
| | | accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); |
| | | accountChangeDetail.setUserType(2); |
| | |
| | | } |
| | | this.updateById(order); |
| | | |
| | | if(null != order.getTravelId()){ |
| | | //中台修改订单状态 |
| | | ModifyTravelItineraryRequest request = new ModifyTravelItineraryRequest(); |
| | | request.setOrderId(order.getTravelId()); |
| | | request.setStatus(getState(order.getState())); |
| | | BranchOffice branchOffice = branchOfficeService.selectById(driver.getBranchOfficeId()); |
| | | request.setDriverId(driver.getEmpId().toString()); |
| | | request.setSupplierShopId(branchOffice.getEnterCode()); |
| | | OrderUtil.modifyTravelItinerary(request); |
| | | } |
| | | |
| | | if((payType == 1 && state == 107) || (payType == 2 && state == 108)){ |
| | | //修改司机状态和积分 |
| | | Driver driver = driverService.selectById(order.getDriverId()); |
| | | driver.setServerStatus(1); |
| | | driverService.updateById(driver); |
| | | } |