| | |
| | | import java.math.RoundingMode; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.LinkedBlockingQueue; |
| | | import java.util.concurrent.ThreadPoolExecutor; |
| | | import java.util.concurrent.TimeUnit; |
| | | import java.util.stream.Collectors; |
| | | |
| | | |
| | |
| | | |
| | | public Map<String, Thread> threadMap = new HashMap<>(); |
| | | |
| | | //存储摆渡车无接单后推送标识,实现多个类型的摆渡车订单无人接单后只给前端推送一次 |
| | | //存储摆渡车无人接单后推送标识,实现多个类型的摆渡车订单无人接单后只给前端推送一次 |
| | | public static Map<Integer, Boolean> pushEndMap = new HashMap<>(); |
| | | @Autowired |
| | | private ICompanyService iCompanyService; |
| | |
| | | if (null != distance) { |
| | | return this.getPrice(Double.valueOf(distance.get("distance")), peopleNumber, travelMode, lineId, serverCarModelId, totalSeat, seatNumber); |
| | | } |
| | | return ResultUtil.error("计算行程距离出错啦!"); |
| | | return ResultUtil.error("获取距离计算出错"); |
| | | } |
| | | |
| | | /** |
| | |
| | | preferentialDataVo.setDiscount(userActivityId.get(0).getLogistics()); |
| | | } |
| | | } |
| | | // 查出当前用户的红包 并将订单的修改 |
| | | // 查出当前用户的红包,并将订单进行修改 |
| | | List<UserRedPacketRecord> userRedPacketRecords = userRedPacketRecordService.selectList(new EntityWrapper<UserRedPacketRecord>().eq("userId", uid).eq("state", 1).le("money", orderCrossCity.getOrderMoney()).gt("expirationTime", new Date()).gt("endTime", new Date())); |
| | | if (userRedPacketRecords.size() > 0) { |
| | | |
| | |
| | | } |
| | | } |
| | | if (t.getType() == 4) {//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} |
| | | Double discount = jsonObject.getDouble("discount");//折扣 |
| | | Double discount = jsonObject.getDouble("discount");//鎶樻墸 |
| | | JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | |
| | | } |
| | | |
| | | |
| | | //亲密账户 |
| | | //浜插瘑璐︽埛 |
| | | List<UserUser> bindUserId = userUserService.selectList(new EntityWrapper<UserUser>().eq("bindUserId", uid)); |
| | | CompanyCity finalCompanyCity = companyCity; |
| | | bindUserId.forEach(userUser -> { |
| | |
| | | } |
| | | } |
| | | } else { |
| | | str = "全国;"; |
| | | str = "鍏ㄥ浗;"; |
| | | } |
| | | couponsListVo.setCity(str.substring(0, str.length() - 1)); |
| | | |
| | |
| | | transactionDetailsService.saveData(uid, "跨城出行订单", orderMoney, 2, 1, 1, 3, orderId); |
| | | userInfoService.updateById(userInfo); |
| | | |
| | | orderCrossCity.setState(2);//跨城支付完成后才开始服务 |
| | | orderCrossCity.setState(2);//已支付,订单状态修改为待出发 |
| | | orderCrossCity.setPayType(3); |
| | | orderCrossCity.setPayMoney(orderMoney); |
| | | orderCrossCity.setPayTime(new Date()); |
| | | |
| | | //处理优惠券和红包 |
| | | //核销优惠券和红包 |
| | | if (null != userCouponRecord) { |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | |
| | | orderCrossCity.setCouponId(objectId); |
| | | } |
| | | |
| | | //打车卡 |
| | | //计算打车卡 |
| | | UserTaxiCard userTaxiCard = null; |
| | | if (null != objectId && objectType == 2) { |
| | | userTaxiCard = userTaxiCardService.selectById(objectId); |
| | |
| | | } |
| | | } |
| | | if (userTaxiCard.getType() == 4) {//打折天数卡{"businessTypes":[1,2,3],"discount":5,"timeQuantum":["08:00:00 - 09:00:00","17:00:00 - 18:00:00"]} |
| | | Double discount = jsonObject.getDouble("discount");//折扣 |
| | | Double discount = jsonObject.getDouble("discount");//鎶樻墸 |
| | | JSONArray timeQuantum = jsonObject.getJSONArray("timeQuantum");//使用时间段 |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); |
| | | SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | |
| | | transactionDetailsService.saveData(uid, "跨城出行订单", orderMoney, 2, 1, 1, 3, orderId); |
| | | |
| | | |
| | | orderCrossCity.setState(2);//跨城支付完成后才开始服务 |
| | | orderCrossCity.setState(2);//已支付,订单状态修改为待出发 |
| | | orderCrossCity.setPayType(3); |
| | | orderCrossCity.setPayMoney(orderMoney); |
| | | orderCrossCity.setPayTime(new Date()); |
| | | |
| | | //处理优惠券和红包 |
| | | //核销优惠券 |
| | | if (null != userCouponRecord) { |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | } |
| | | //处理打车卡 |
| | | //核销打车卡 |
| | | if (null != userTaxiCard) { |
| | | userTaxiCardService.updateById(userTaxiCard); |
| | | } |
| | |
| | | /** |
| | | * 支付成功后的回调操作 |
| | | * |
| | | * @param id 订单=id |
| | | * @param id 订单id |
| | | * @param order_id 工行支付单号 |
| | | * @param type 1=微信,2=支付宝 |
| | | * @throws Exception |
| | |
| | | |
| | | |
| | | /** |
| | | * 跨城下单操作 |
| | | * 用户跨城下单操作 |
| | | * |
| | | * @param orderCrossCityWarpper |
| | | * @param uid |
| | |
| | | } |
| | | |
| | | /** |
| | | * 先判断司机座位数是否符合出行人数 |
| | | * 鍏堝垽鏂徃鏈哄骇浣嶆暟鏄惁绗﹀悎鍑鸿浜烘暟 |
| | | */ |
| | | LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCityWarpper.getLineShiftDriverId()); |
| | | if (orderCrossCityWarpper.getTravelMode() == 1) {//拼车判断座位数 |
| | |
| | | } |
| | | } else { |
| | | if (lineShiftDriver.getLaveSeat() != lineShiftDriver.getTotalSeat()) { |
| | | return ResultUtil.error("司机车辆上已经有人占座了,不能下包车订单"); |
| | | return ResultUtil.error("司机车辆上已经有人占座,不能下包车订单"); |
| | | } |
| | | if (lineShiftDriver.getLaveSeat() == 0) { |
| | | return ResultUtil.error("司机车辆没有剩余空位了"); |
| | |
| | | BaseWarpper baseWarpper = new BaseWarpper(); |
| | | baseWarpper.setId(orderCrossCity.getId()); |
| | | |
| | | //创建定时任务,取消订单30分钟 |
| | | //创建定时任务,取消订单10分钟 |
| | | TimerTask timerTask = new TimerTask() { |
| | | @Override |
| | | public void run() { |
| | |
| | | @Override |
| | | public Map<String, Object> queryOrderInfo(Integer orderId) throws Exception { |
| | | Map<String, Object> map = orderCrossCityMapper.queryOrderInfo(orderId); |
| | | if (null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2) {//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用 |
| | | if (null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2) {//如果订单有改派提醒,则查询后重置为未提醒 |
| | | OrderCrossCity orderCrossCity = this.selectById(orderId); |
| | | orderCrossCity.setReassignNotice(0); |
| | | this.updateById(orderCrossCity); |
| | |
| | | if(Integer.valueOf(String.valueOf(map.get("state"))) ==7 && (map.get("responsibilityType")==null || Integer.valueOf(String.valueOf(map.get("responsibilityType")))<4)){ |
| | | map.put("appealButton", 1); |
| | | } |
| | | //跨城不需要申诉 |
| | | //接口数据初始化为0 |
| | | map.put("appealStatus", 0); |
| | | if(map.get("travelMode")!=null &&map.get("travelMode").toString().equals("2") ){ |
| | | map.put("zwNum", 1); |
| | |
| | | } |
| | | |
| | | /** |
| | | * 获取取消订单的支付费用 |
| | | * 获取取消订单需要支付的金额(包含小费) |
| | | * |
| | | * @param id |
| | | * @return |
| | |
| | | orderCancel.setPayType(1); |
| | | orderCancelService.updateById(orderCancel); |
| | | |
| | | String app = type == 1 ? "APP" : "JSAPI"; |
| | | resultUtil = payMoneyUtil.weixinpay("订单取消", "", id + "_3_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/wxCancelOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 1, query.getMoney(), "", 1);//添加预支付数据 |
| | | String outTradeNo = "CANCEL_" + id + "_3_" + UUIDUtil.getRandomCode(5); |
| | | JSONObject response = cbyzxOrderPayHelper.createOrder(orderCrossCity.getUserId(), userInfo.getAppletsOpenId(), outTradeNo, query.getMoney()); |
| | | if (!cbyzxOrderPayHelper.isCreateSuccess(response)) { |
| | | return ResultUtil.error(cbyzxOrderPayHelper.extractMessage(response), response); |
| | | } |
| | | String recordCode = cbyzxOrderPayHelper.extractRecordCode(response); |
| | | String paymentCode = ToolUtil.isNotEmpty(recordCode) ? recordCode : outTradeNo; |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 1, query.getMoney(), paymentCode, 1);//添加预支付数据 |
| | | |
| | | // Map<String, String> map = icbcPayUtil.placeAnOrder(id + ",3", 9, 5, uid.toString(), "订单取消", query.getMoney(), callbackPath + "/base/wxCancelOrderTaxi", "", type, appletsOpenId); |
| | | // if(map.get("code").equals("200")){ |
| | |
| | | orderCancel.setPayType(3); |
| | | orderCancelService.updateById(orderCancel); |
| | | |
| | | //添加已收入明细 |
| | | //添加交易明细 |
| | | incomeService.saveData(1, orderCrossCity.getCompanyId(), 3, orderCrossCity.getId(), 3, query.getMoney()); |
| | | |
| | | this.deleteTask(id);//删除定时任务 |
| | |
| | | } |
| | | |
| | | Map<String, Object> map = new HashMap<>(); |
| | | double distance1 = distance.doubleValue() / 1000;//公里 |
| | | double distance1 = distance.doubleValue() / 1000;//鍏噷 |
| | | map.put("distance", distance); |
| | | |
| | | /** |
| | | * 1.固定价格的包车是整车价格 |
| | | * 2.五座车和七座车的优惠系数是中间特殊位置的优惠折扣 |
| | | * 3.包车的情况不享受中间特殊位置的优惠折扣 |
| | | * 4.浮动计费拼车如果选中中间特殊位置既享受优惠系数又享受中间特殊位置的优惠折扣 |
| | | * 4.浮动计费拼车如果选中中间特殊位置时享受优惠系数又享受中间特殊位置的优惠折扣 |
| | | */ |
| | | Map<String, Object> query = linePriceMapper.query(lineId, serverCarModelId); |
| | | if (null == query) { |
| | |
| | | } |
| | | |
| | | } else {//浮动计费 |
| | | //计算公式:实际历程 * 基础单价 * (参考费用 / (参考里程 * 基础单价)) + (实际历程 - 参考里程) * 基础单价 * 优惠系数 |
| | | //计算公式:实际里程 * 基础单价 * (参考费用 / (参考里程 * 基础单价)) + (实际里程 - 参考里程) * 基础单价 * 优惠系数 |
| | | double num1 = Double.valueOf(jsonObject.getString("num1")).doubleValue();//参考价格 |
| | | double num2 = Double.valueOf(jsonObject.getString("num2")).doubleValue();//参考里程 |
| | | double num3 = Double.valueOf(jsonObject.getString("num3")).doubleValue();//保底价 |
| | |
| | | |
| | | |
| | | /** |
| | | * 1、实际里程>=参考里程 |
| | | * 参考价+((实际里程-参考里程)*(参考价/参考里程)*超出参考里程优惠系数) |
| | | * 1、实际里程 > 参考里程 |
| | | * 参考价 + ((实际里程 - 参考里程)*(参考价 / 参考里程)*超出参考里程优惠系数) |
| | | * |
| | | * 2、实际里程<参考里程 |
| | | * 参考价-(参考里程-实际路程)*(参考价/参考里程)*低于参考里程优惠系数 |
| | | * 2、实际里程 < 参考里程 |
| | | * 参考价 - ((参考里程 - 实际里程)*(参考价 / 参考里程)*低于参考里程优惠系数) |
| | | */ |
| | | double unitPrice = 0d; |
| | | if (distance1 > num2) {//1 |
| | |
| | | */ |
| | | @Override |
| | | public void deleteTask(Integer orderId) { |
| | | //发送验证码短信 |
| | | //调用 driver-server 删除定时任务 |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | // 以表单的方式提交 |
| | | // 浠ヨ〃鍗曠殑鏂瑰紡鎻愪氦 |
| | | headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); |
| | | //将请求头部和参数合成一个请求 |
| | | MultiValueMap<String, Object> params = new LinkedMultiValueMap<>(); |
| | |
| | | |
| | | |
| | | /** |
| | | * 分享成功后添加红包 |
| | | * 分享红包活动 |
| | | * |
| | | * @param orderId |
| | | * @return |
| | |
| | | /** |
| | | * 取消订单支付后的处理 |
| | | * |
| | | * @param id 订单=id |
| | | * @param order_id 工行支付单号 |
| | | * @param id 订单id |
| | | * @param order_id 支付订单号 |
| | | * @param type 1=微信,2=支付宝 |
| | | * @throws Exception |
| | | */ |
| | |
| | | @Override |
| | | public void run() { |
| | | pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); |
| | | System.err.println("推送取消操作---------------------"); |
| | | System.err.println("推送取消操作--------------------"); |
| | | } |
| | | }).start(); |
| | | } |
| | |
| | | } |
| | | |
| | | if (query.getPayType() == 1) {//微信 |
| | | //TODO 退款 |
| | | Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), id + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay"); |
| | | if (!"SUCCESS".equals(map.get("return_code"))) { |
| | | return ResultUtil.error(map.get("return_msg")); |
| | | } |
| | | transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, id); |
| | | } else if (query.getPayType() == 4) { // 云闪付 |
| | | // TODO 退款 |
| | | userInfo.setBalance(userInfo.getBalance() + orderCrossCity.getPayMoney()); |
| | |
| | | orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0"); |
| | | orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0"); |
| | | orderServerWarpper.setReassignNotice(orderCrossCity.getReassignNotice()); |
| | | if (orderCrossCity.getState() == 2 || orderCrossCity.getState() == 3) {//前往预约地 |
| | | if (orderCrossCity.getState() == 2 || orderCrossCity.getState() == 3) {//已接单或已出发 |
| | | // TODO: 2023/11/4 无法修改 |
| | | Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderCrossCity.getStartLon() + "," + orderCrossCity.getStartLat(), 1); |
| | | String d = "0"; |
| | |
| | | orderServerWarpper.setLaveMileage("0"); |
| | | orderServerWarpper.setLaveTime("0"); |
| | | } |
| | | if (orderCrossCity.getState() == 5 || orderCrossCity.getState() == 6) {//服务中 |
| | | if (orderCrossCity.getState() == 5 || orderCrossCity.getState() == 6) {//服务中或已到达 |
| | | // TODO: 2023/11/4 无法修改 |
| | | Map<String, String> distance = gdMapElectricFenceUtil.getDistance(value, orderCrossCity.getEndLon() + "," + orderCrossCity.getEndLat(), 1); |
| | | String d = "0"; |
| | |
| | | try { |
| | | if (orderType == 1) {//专车 |
| | | OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(orderId); |
| | | OrderPrivateCarServiceImpl.orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单 |
| | | OrderPrivateCarServiceImpl.orderIds.add(orderPrivateCar.getId());//记录当前订单,避免重复推送 |
| | | OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); |
| | | List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数 |
| | | List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//查询推单配置 |
| | | for (int i = 1; i <= querys.size() + 15; i++) { |
| | | //订单被抢后的处理 |
| | | //循环检查订单状态 |
| | | Integer state = orderPrivateCarMapper.selectById(orderId).getState(); |
| | | if (state != 1) { |
| | | //关闭其他推送线程 |
| | | //中断其他订单推送线程 |
| | | Set<String> keySet = threadMap.keySet(); |
| | | datas.forEach(e->{ |
| | | threadMap.get(orderId + "_1"); |
| | |
| | | |
| | | for (String key : keySet) { |
| | | if (!key.equals(orderId + "_1")) { |
| | | Thread thread1 = threadMap.get(key);//中断线程 |
| | | Thread thread1 = threadMap.get(key);//获取推单线程 |
| | | if (null != thread1) { |
| | | thread1.interrupt(); |
| | | } |
| | | threadMap.remove(key); |
| | | } |
| | | } |
| | | //删除其他无效数据 |
| | | //删除其余子订单数据 |
| | | for (Map<String, Integer> map : datas) { |
| | | Integer orderType = map.get("orderType"); |
| | | Integer orderId = map.get("orderId"); |
| | |
| | | break; |
| | | } |
| | | |
| | | //开始进行推送的处理 |
| | | //循环推送司机 |
| | | int finalI = i; |
| | | PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null); |
| | | //获取空闲司机 |
| | | List<Driver> list = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机 |
| | | List<Driver> list = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//查询指定距离内的空闲司机 |
| | | if (list.size() > 0) { |
| | | double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 |
| | | int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) |
| | | list = list.subList(0, lastIndex);//获取空闲司机中占比数据 |
| | | for (Driver driver : list) {//开始进行推送 |
| | | double driverProportion = pushOrder.getDriverProportion() / 100;//司机推送比例 |
| | | int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//根据比例计算推送司机数量 |
| | | list = list.subList(0, lastIndex);//截取本轮需要推送的司机 |
| | | for (Driver driver : list) {//循环推送司机 |
| | | boolean bo = false; |
| | | for (Integer integer : integers) { |
| | | if (integer.compareTo(driver.getId()) == 0) { |
| | |
| | | } |
| | | } |
| | | |
| | | //所有推送完后的处理 |
| | | //检查推单结束是否仍无人接单 |
| | | Boolean b = pushEndMap.get(orderPrivateCar.getCrossCityOrderId()); |
| | | if (i == querys.size() + 15 && state == 1 && (null != b && !b.booleanValue())) { |
| | | pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1); |
| | | OrderPrivateCarServiceImpl.orderIds.remove(orderPrivateCar.getId()); |
| | | pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), Boolean.TRUE);//推送后添加标识 |
| | | pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), Boolean.TRUE);//更新推单结束标识 |
| | | break; |
| | | } |
| | | Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 |
| | | Thread.sleep(pushOrder.getPushTime() * 1000);//等待当前轮推送结束 |
| | | } |
| | | } |
| | | |
| | | if (orderType == 2) {//出租车 |
| | | OrderTaxi orderTaxi = orderTaxiMapper.selectById(orderId); |
| | | OrderTaxiServiceImpl.orderIds.add(orderTaxi.getId());//添加记录,防止调用接口重复提醒无人接单 |
| | | OrderTaxiServiceImpl.orderIds.add(orderTaxi.getId());//记录当前订单,避免重复推送 |
| | | OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); |
| | | List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//获取需要推送的次数 |
| | | List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//查询推单配置 |
| | | for (int i = 1; i <= querys.size() + 15; i++) { |
| | | //处理订单被抢 |
| | | //循环检查订单状态 |
| | | Integer state = orderTaxiMapper.selectById(orderId).getState(); |
| | | if (state != 1) { |
| | | //关闭其他推送任务 |
| | | //中断其他订单推送线程 |
| | | Set<String> keySet = threadMap.keySet(); |
| | | for (String key : keySet) { |
| | | if (!key.equals(orderId + "_2")) { |
| | | Thread thread1 = threadMap.get(key);//中断线程 |
| | | Thread thread1 = threadMap.get(key);//获取推单线程 |
| | | if (null != thread1) { |
| | | thread1.interrupt(); |
| | | } |
| | | threadMap.remove(key); |
| | | } |
| | | } |
| | | //删除其他无效数据 |
| | | //删除其余子订单数据 |
| | | for (Map<String, Integer> map : datas) { |
| | | Integer orderType = map.get("orderType"); |
| | | Integer orderId = map.get("orderId"); |
| | |
| | | break; |
| | | } |
| | | |
| | | //开始进行推送 |
| | | //循环推送司机 |
| | | int finalI = i; |
| | | PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null); |
| | | //获取空闲司机 |
| | | List<Driver> list = driverService.queryIdleDriver(2, orderTaxi.getStartLon(), orderTaxi.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机 |
| | | List<Driver> list = driverService.queryIdleDriver(2, orderTaxi.getStartLon(), orderTaxi.getStartLat(), pushOrder.getPushDistance(), null);//查询指定距离内的空闲司机 |
| | | if (list.size() > 0) { |
| | | double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 |
| | | int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) |
| | | list = list.subList(0, lastIndex);//获取空闲司机中占比数据 |
| | | for (Driver driver : list) {//开始进行推送 |
| | | double driverProportion = pushOrder.getDriverProportion() / 100;//司机推送比例 |
| | | int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//根据比例计算推送司机数量 |
| | | list = list.subList(0, lastIndex);//截取本轮需要推送的司机 |
| | | for (Driver driver : list) {//循环推送司机 |
| | | boolean bo = false; |
| | | for (Integer integer : integers) { |
| | | if (integer.compareTo(driver.getId()) == 0) { |
| | |
| | | OrderCrossCity orderCrossCity = this.selectById(orderId); |
| | | ResultUtil resultUtil = ResultUtil.success(); |
| | | if (payType == 1) {//微信支付 |
| | | String app = type == 1 ? "APP" : "JSAPI"; |
| | | resultUtil = payMoneyUtil.weixinpay("感谢费", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/wxPayThankYouFee", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(3, uid, 1, orderId, 3, 1, money, "", 1);//添加预支付数据 |
| | | String outTradeNo = "THANK_" + orderId + "_3_" + UUIDUtil.getRandomCode(5); |
| | | JSONObject response = cbyzxOrderPayHelper.createOrder(orderCrossCity.getUserId(), userInfo.getAppletsOpenId(), outTradeNo, money); |
| | | if (!cbyzxOrderPayHelper.isCreateSuccess(response)) { |
| | | return ResultUtil.error(cbyzxOrderPayHelper.extractMessage(response), response); |
| | | } |
| | | String recordCode = cbyzxOrderPayHelper.extractRecordCode(response); |
| | | String paymentCode = ToolUtil.isNotEmpty(recordCode) ? recordCode : outTradeNo; |
| | | paymentRecordService.saveData(3, uid, 1, orderId, 3, 1, money, paymentCode, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 2) {//支付宝支付 |
| | | resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee"); |
| | |
| | | orderCrossCity.setThankYouFee(money); |
| | | this.updateById(orderCrossCity); |
| | | |
| | | //添加已收入明细 |
| | | //添加交易明细 |
| | | incomeService.saveData(2, orderCrossCity.getDriverId(), 6, orderCrossCity.getId(), 3, money); |
| | | Driver driver = driverService.selectById(orderCrossCity.getDriverId()); |
| | | driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(new BigDecimal(money)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | |
| | | Driver driver = driverService.selectById(orderCrossCity.getDriverId()); |
| | | BeanUtils.copyProperties(driver, driverInfoWarpper); |
| | | unPayOrderVO.setDriverInfoWarpper(driverInfoWarpper); |
| | | //其余信息 |
| | | //其他信息 |
| | | BeanUtils.copyProperties(orderCrossCity, unPayOrderVO); |
| | | unPayOrderVOList.add(unPayOrderVO); |
| | | } |
| | |
| | | } |
| | | |
| | | /** |
| | | * 【202601】获取扫码下单详情 |
| | | * 【02601】获取扫码下单详情 |
| | | * |
| | | * @param lineShiftDriverId 司机排班记录ID |
| | | * @return 扫码下单详情 |
| | |
| | | // 城市信息 |
| | | result.setStartCityName(data.get("startCityName") != null ? data.get("startCityName").toString() : null); |
| | | result.setEndCityName(data.get("endCityName") != null ? data.get("endCityName").toString() : null); |
| | | // 默认点信息(起点和终点) |
| | | // 起点默认点信息 |
| | | // 默认点位信息:起点和终点 |
| | | // 起点默认点位信息 |
| | | result.setStartDefaultPointAddress(data.get("startDefaultPointAddress") != null ? data.get("startDefaultPointAddress").toString() : null); |
| | | result.setStartDefaultPointLon(data.get("startDefaultPointLon") != null ? Double.parseDouble(data.get("startDefaultPointLon").toString()) : null); |
| | | result.setStartDefaultPointLat(data.get("startDefaultPointLat") != null ? Double.parseDouble(data.get("startDefaultPointLat").toString()) : null); |
| | | |
| | | // 终点默认点信息 |
| | | // 终点默认点位信息 |
| | | result.setEndDefaultPointAddress(data.get("endDefaultPointAddress") != null ? data.get("endDefaultPointAddress").toString() : null); |
| | | result.setEndDefaultPointLon(data.get("endDefaultPointLon") != null ? Double.parseDouble(data.get("endDefaultPointLon").toString()) : null); |
| | | result.setEndDefaultPointLat(data.get("endDefaultPointLat") != null ? Double.parseDouble(data.get("endDefaultPointLat").toString()) : null); |
| | |
| | | return ResultUtil.error("乘客手机号不能为空"); |
| | | } |
| | | if (warpper.getPlacementLat() == null || warpper.getPlacementLon() == null || ToolUtil.isEmpty(warpper.getPlacementAddress())) { |
| | | return ResultUtil.error("下单地点点信息不完整"); |
| | | return ResultUtil.error("下单地点点位信息不完整"); |
| | | } |
| | | if (warpper.getStartLon() == null || warpper.getStartLat() == null || ToolUtil.isEmpty(warpper.getStartAddress())) { |
| | | return ResultUtil.error("上车点信息不完整"); |
| | |
| | | // 15. 添加系统消息 |
| | | systemNoticeService.addSystemNotice(1, "您的跨城订单已下单成功,请尽快完成支付!", orderCrossCity.getUserId(), 1); |
| | | |
| | | // 16. 创建定时任务,30分钟未支付自动取消 |
| | | // 16. 创建定时任务,10分钟未支付自动取消 |
| | | TimerTask timerTask = new TimerTask() { |
| | | @Override |
| | | public void run() { |