From fa4d91768a990d5e8b759300a1271b12f54c10ca Mon Sep 17 00:00:00 2001 From: liujie <1793218484@qq.com> Date: 星期五, 22 八月 2025 23:14:15 +0800 Subject: [PATCH] 8.22 --- UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java | 1006 ++++++++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 896 insertions(+), 110 deletions(-) diff --git a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java index 9c7231c..6734c15 100644 --- a/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java +++ b/UserOKTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/crossCity/server/impl/OrderCrossCityServiceImpl.java @@ -16,6 +16,7 @@ import com.stylefeng.guns.modular.crossCity.server.ILineService; import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService; import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpper; +import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpperPushOrder; import com.stylefeng.guns.modular.specialTrain.dao.OrderPrivateCarMapper; import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; @@ -54,6 +55,7 @@ import java.math.MathContext; import java.math.RoundingMode; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; @@ -178,14 +180,14 @@ @Value("${callbackPath}") private String callbackPath; + public static List<Integer> crossCityOrderIds = new ArrayList<>(); + public Map<String, Thread> threadMap = new HashMap<>(); //存储摆渡车无接单后推送标识,实现多个类型的摆渡车订单无人接单后只给前端推送一次 public static Map<Integer, Boolean> pushEndMap = new HashMap<>(); - - - - + @Autowired + private CarMapper carMapper; /** @@ -274,6 +276,165 @@ } +// /** +// * 订单支付 +// * @param payType +// * @param orderId +// * @param couponId +// * @param type +// * @return +// * @throws Exception +// */ +// @Override +// public ResultUtil payCrossCityOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { +// OrderCrossCity orderCrossCity = this.selectById(orderId); +// if(orderCrossCity.getState() != 7){ +// return ResultUtil.error("订单已完成支付,不允许重复支付", ""); +// } +// Integer uid = orderCrossCity.getUserId(); +// Double orderMoney = orderCrossCity.getOrderMoney(); +// System.err.println(orderMoney); +// UserInfo userInfo = userInfoService.selectById(uid); +// ResultUtil resultUtil = ResultUtil.success(""); +// orderCrossCity.setCouponMoney(0D);//初始化历史数据 +// orderCrossCity.setCouponId(null); +// +// //计算优惠券 +// BigDecimal payMoney = new BigDecimal(0); +// UserCouponRecord userCouponRecord = null; +// if(null != couponId){ +// userCouponRecord = userCouponRecordService.selectById(couponId); +// if(userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()){ +// return ResultUtil.error("优惠券不能用于此订单", ""); +// } +// if(userCouponRecord.getState() == 2){ +// return ResultUtil.error("优惠券已使用", ""); +// } +// if(userCouponRecord.getState() == 3){ +// return ResultUtil.error("优惠券已过期", ""); +// } +// if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3){ +// return ResultUtil.error("优惠券不能用于此类型订单", ""); +// } +// if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ +// return ResultUtil.error("优惠券不能用于此订单", ""); +// } +// payMoney = new BigDecimal(orderMoney.toString()).subtract(new BigDecimal(userCouponRecord.getMoney())); +// System.err.println(payMoney); +// orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); +// orderCrossCity.setCouponId(couponId); +// } +// if(payMoney.compareTo(new BigDecimal(0)) == 0 ){ +// payMoney = new BigDecimal(orderMoney.toString()); +// } +// //计算红包 +// UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); +//// if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ +//// orderMoney = orderMoney - query.getMoney(); +//// orderCrossCity.setRedPacketMoney(query.getMoney()); +//// orderCrossCity.setRedPacketId(query.getId()); +//// } +//// +//// //计算折扣 +//// UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); +//// if(null != query2){ +//// Double special = query2.getSpecial(); +//// orderCrossCity.setDiscount(special); +//// double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); +//// if(orderMoney.compareTo(v) > 0){ +//// orderCrossCity.setDiscountMoney(orderMoney - v); +//// orderCrossCity.setActivityId(query2.getId()); +//// orderMoney = v; +//// } +//// } +// if(payType == 1){//微信支付 +// String value = redisUtil.getValue("appletOpenId"); +// String appletsOpenId = null; +// if(ToolUtil.isNotEmpty(value)){ +// JSONObject jsonObject = JSON.parseObject(value); +// appletsOpenId = jsonObject.getString(uid.toString()); +// }else{ +// appletsOpenId = userInfo.getAppletsOpenId(); +// } +//// Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId); +//// if(map.get("code").equals("200")){ +//// paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 +//// resultUtil = ResultUtil.success(map.get("data")); +//// }else{ +//// resultUtil = ResultUtil.error(map.get("msg"), ""); +//// } +// String app = type == 1 ? "APP" : "JSAPI"; +// resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), payMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); +// paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, Double.valueOf(payMoney.toString()), "", 1);//添加预支付数据 +// } +// if(payType == 2){//支付宝支付 +// Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); +// if(map.get("code").equals("200")){ +// paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 2, orderMoney, map.get("order_id"), 1);//添加预支付数据 +// resultUtil = ResultUtil.success(map.get("data")); +// }else{ +// resultUtil = ResultUtil.error(map.get("msg"), ""); +// } +// } +// if(payType == 3){//余额支付 +// if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ +// return ResultUtil.error("余额不足,无法完成支付", ""); +// } +// +// userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// +// SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); +// userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 +// +// //添加交易明细 +// transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 3, orderId); +// userInfoService.updateById(userInfo); +// +// orderCrossCity.setState(2);//跨城支付完成后才开始服务 +// orderCrossCity.setPayType(3); +// orderCrossCity.setPayMoney(orderMoney); +// +// //处理优惠券和红包 +// if(null != userCouponRecord){ +// userCouponRecord.setState(2); +// userCouponRecord.setEndTime(new Date()); +// userCouponRecordService.updateById(userCouponRecord); +// } +// if(null != query){ +// query.setState(2); +// query.setEndTime(new Date()); +// userRedPacketRecordService.updateById(query); +// } +// +// //添加已收入明细 +// Line line = lineService.selectById(orderCrossCity.getLineId()); +// Double speMoney = Double.valueOf(line.getRakeRate()); +// BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 +// BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 +// incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); +// incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); +// Driver driver = driverService.selectById(orderCrossCity.getDriverId()); +// driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// driverService.updateById(driver); +// +// // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 +// new Thread(new Runnable() { +// @Override +// public void run() { +// pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); +// pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); +// pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); +// } +// }).start(); +// +// systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); +// } +// +// this.updateAllColumnById(orderCrossCity); +// return resultUtil; +// } /** * 订单支付 * @param payType @@ -296,37 +457,38 @@ ResultUtil resultUtil = ResultUtil.success(""); orderCrossCity.setCouponMoney(0D);//初始化历史数据 orderCrossCity.setCouponId(null); + if (orderCrossCity.getDriverId() != null) { - //计算优惠券 - BigDecimal payMoney = new BigDecimal(0); - UserCouponRecord userCouponRecord = null; - if(null != couponId){ - userCouponRecord = userCouponRecordService.selectById(couponId); - if(userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()){ - return ResultUtil.error("优惠券不能用于此订单", ""); + //计算优惠券 + BigDecimal payMoney = new BigDecimal(0); + UserCouponRecord userCouponRecord = null; + if (null != couponId) { + userCouponRecord = userCouponRecordService.selectById(couponId); + if (userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + if (userCouponRecord.getState() == 2) { + return ResultUtil.error("优惠券已使用", ""); + } + if (userCouponRecord.getState() == 3) { + return ResultUtil.error("优惠券已过期", ""); + } + if (userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3) { + return ResultUtil.error("优惠券不能用于此类型订单", ""); + } + if (userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0) { + return ResultUtil.error("优惠券不能用于此订单", ""); + } + payMoney = new BigDecimal(orderMoney.toString()).subtract(new BigDecimal(userCouponRecord.getMoney())); + System.err.println(payMoney); + orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); + orderCrossCity.setCouponId(couponId); } - if(userCouponRecord.getState() == 2){ - return ResultUtil.error("优惠券已使用", ""); + if (payMoney.compareTo(new BigDecimal(0)) == 0) { + payMoney = new BigDecimal(orderMoney.toString()); } - if(userCouponRecord.getState() == 3){ - return ResultUtil.error("优惠券已过期", ""); - } - if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3){ - return ResultUtil.error("优惠券不能用于此类型订单", ""); - } - if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ - return ResultUtil.error("优惠券不能用于此订单", ""); - } - payMoney = new BigDecimal(orderMoney.toString()).subtract(new BigDecimal(userCouponRecord.getMoney())); - System.err.println(payMoney); - orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); - orderCrossCity.setCouponId(couponId); - } - if(payMoney.compareTo(new BigDecimal(0)) == 0 ){ - payMoney = new BigDecimal(orderMoney.toString()); - } - //计算红包 - UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); + //计算红包 + UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); // if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ // orderMoney = orderMoney - query.getMoney(); // orderCrossCity.setRedPacketMoney(query.getMoney()); @@ -345,15 +507,15 @@ // orderMoney = v; // } // } - if(payType == 1){//微信支付 - String value = redisUtil.getValue("appletOpenId"); - String appletsOpenId = null; - if(ToolUtil.isNotEmpty(value)){ - JSONObject jsonObject = JSON.parseObject(value); - appletsOpenId = jsonObject.getString(uid.toString()); - }else{ - appletsOpenId = userInfo.getAppletsOpenId(); - } + if (payType == 1) {//微信支付 + String value = redisUtil.getValue("appletOpenId"); + String appletsOpenId = null; + if (ToolUtil.isNotEmpty(value)) { + JSONObject jsonObject = JSON.parseObject(value); + appletsOpenId = jsonObject.getString(uid.toString()); + } else { + appletsOpenId = userInfo.getAppletsOpenId(); + } // Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId); // if(map.get("code").equals("200")){ // paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 @@ -361,79 +523,378 @@ // }else{ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } - String app = type == 1 ? "APP" : "JSAPI"; - resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), payMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); - paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, Double.valueOf(payMoney.toString()), "", 1);//添加预支付数据 - } - if(payType == 2){//支付宝支付 - Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); - if(map.get("code").equals("200")){ - paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 2, orderMoney, map.get("order_id"), 1);//添加预支付数据 - resultUtil = ResultUtil.success(map.get("data")); - }else{ - resultUtil = ResultUtil.error(map.get("msg"), ""); + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), payMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, Double.valueOf(payMoney.toString()), "", 1);//添加预支付数据 } - } - if(payType == 3){//余额支付 - if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ - return ResultUtil.error("余额不足,无法完成支付", ""); + if (payType == 2) {//支付宝支付 + Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); + if (map.get("code").equals("200")) { + paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 2, orderMoney, map.get("order_id"), 1);//添加预支付数据 + resultUtil = ResultUtil.success(map.get("data")); + } else { + resultUtil = ResultUtil.error(map.get("msg"), ""); + } } + if (payType == 3) {//余额支付 + if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { + return ResultUtil.error("余额不足,无法完成支付", ""); + } - userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); - userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 + SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); + userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 - //添加交易明细 - transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 3, orderId); - userInfoService.updateById(userInfo); + //添加交易明细 + transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 3, orderId); + userInfoService.updateById(userInfo); - orderCrossCity.setState(2);//跨城支付完成后才开始服务 - orderCrossCity.setPayType(3); - orderCrossCity.setPayMoney(orderMoney); + orderCrossCity.setState(2);//跨城支付完成后才开始服务 + orderCrossCity.setPayType(3); + orderCrossCity.setPayMoney(orderMoney); - //处理优惠券和红包 - if(null != userCouponRecord){ - userCouponRecord.setState(2); - userCouponRecord.setEndTime(new Date()); - userCouponRecordService.updateById(userCouponRecord); + //处理优惠券和红包 + if (null != userCouponRecord) { + userCouponRecord.setState(2); + userCouponRecord.setEndTime(new Date()); + userCouponRecordService.updateById(userCouponRecord); + } + if (null != query) { + query.setState(2); + query.setEndTime(new Date()); + userRedPacketRecordService.updateById(query); + } + + //添加已收入明细 + Line line = lineService.selectById(orderCrossCity.getLineId()); + Double speMoney = Double.valueOf(line.getRakeRate()); + BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 + BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 + incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); + incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); + Driver driver = driverService.selectById(orderCrossCity.getDriverId()); + driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); + driverService.updateById(driver); + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 + new Thread(new Runnable() { + @Override + public void run() { + pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); + } + }).start(); + + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); } - if(null != query){ - query.setState(2); - query.setEndTime(new Date()); - userRedPacketRecordService.updateById(query); + }else { + //没有指定司机 + //计算优惠券 + BigDecimal payMoney = new BigDecimal(0); + UserCouponRecord userCouponRecord = null; + if(null != couponId){ + userCouponRecord = userCouponRecordService.selectById(couponId); + if(userCouponRecord.getCompanyId() != null){ + return ResultUtil.error("优惠券不能用于此订单", ""); + } + if(userCouponRecord.getState() == 2){ + return ResultUtil.error("优惠券已使用", ""); + } + if(userCouponRecord.getState() == 3){ + return ResultUtil.error("优惠券已过期", ""); + } + if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3){ + return ResultUtil.error("优惠券不能用于此类型订单", ""); + } + if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ + return ResultUtil.error("优惠券不能用于此订单", ""); + } + payMoney = new BigDecimal(orderMoney.toString()).subtract(new BigDecimal(userCouponRecord.getMoney())); + System.err.println(payMoney); + orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); + orderCrossCity.setCouponId(couponId); } + if(payMoney.compareTo(new BigDecimal(0)) == 0 ){ + payMoney = new BigDecimal(orderMoney.toString()); + } + //计算红包 + //TODO:红包是否必须指定公司,必须要公司则不能用红包 +// UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); +// if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ +// orderMoney = orderMoney - query.getMoney(); +// orderCrossCity.setRedPacketMoney(query.getMoney()); +// orderCrossCity.setRedPacketId(query.getId()); +// } +// +// //计算折扣 +// UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); +// if(null != query2){ +// Double special = query2.getSpecial(); +// orderCrossCity.setDiscount(special); +// double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); +// if(orderMoney.compareTo(v) > 0){ +// orderCrossCity.setDiscountMoney(orderMoney - v); +// orderCrossCity.setActivityId(query2.getId()); +// orderMoney = v; +// } +// } + if(payType == 1){//微信支付 + String value = redisUtil.getValue("appletOpenId"); + String appletsOpenId = null; + if(ToolUtil.isNotEmpty(value)){ + JSONObject jsonObject = JSON.parseObject(value); + appletsOpenId = jsonObject.getString(uid.toString()); + }else{ + appletsOpenId = userInfo.getAppletsOpenId(); + } +// Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId); +// if(map.get("code").equals("200")){ +// paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 +// resultUtil = ResultUtil.success(map.get("data")); +// }else{ +// resultUtil = ResultUtil.error(map.get("msg"), ""); +// } + String app = type == 1 ? "APP" : "JSAPI"; + resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), payMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); + paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, Double.valueOf(payMoney.toString()), "", 1);//添加预支付数据 + } + if(payType == 2){//支付宝支付 + Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); + if(map.get("code").equals("200")){ + paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 2, orderMoney, map.get("order_id"), 1);//添加预支付数据 + resultUtil = ResultUtil.success(map.get("data")); + }else{ + resultUtil = ResultUtil.error(map.get("msg"), ""); + } + } + if(payType == 3){//余额支付 + if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ + return ResultUtil.error("余额不足,无法完成支付", ""); + } - //添加已收入明细 - Line line = lineService.selectById(orderCrossCity.getLineId()); - Double speMoney = Double.valueOf(line.getRakeRate()); - BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 - BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 - incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); - incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); - Driver driver = driverService.selectById(orderCrossCity.getDriverId()); - driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - driverService.updateById(driver); + userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); - // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 - new Thread(new Runnable() { - @Override - public void run() { - pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); +// SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); +// userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 + + //添加交易明细 + transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 3, orderId); + userInfoService.updateById(userInfo); + + orderCrossCity.setState(1);//跨城支付完成后才开始推单 + orderCrossCity.setPayType(3); + orderCrossCity.setPayMoney(orderMoney); + + //处理优惠券和红包 + if(null != userCouponRecord){ + userCouponRecord.setState(2); + userCouponRecord.setEndTime(new Date()); + userCouponRecordService.updateById(userCouponRecord); + } +// if(null != query){ +// query.setState(2); +// query.setEndTime(new Date()); +// userRedPacketRecordService.updateById(query); +// } + + //添加已收入明细 +// Line line = lineService.selectById(orderCrossCity.getLineId()); +// Double speMoney = Double.valueOf(line.getRakeRate()); +// BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 +// BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 +// incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); +// incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); +// Driver driver = driverService.selectById(orderCrossCity.getDriverId()); +// driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// driverService.updateById(driver); + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 +// new Thread(new Runnable() { +// @Override +// public void run() { +// pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); +// pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); +// pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); +// } +// }).start(); + + systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); + } +// 支付成功后,触发推单(异步执行,不阻塞支付响应) + new Thread(() -> { + try { + //推单操作 + if(orderCrossCity.getState() == 1){ + this.pushCrossCityOrder(orderCrossCity); + System.out.println("推单!!"); + } + } catch (Exception e) { + e.printStackTrace(); } }).start(); - - systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); } - this.updateAllColumnById(orderCrossCity); + + + if(userInfo.getPhone()!=null){ + SMSUtil.send(userInfo.getPhone(), "您的订单已生成,如有疑问请咨询0715-8911666", "2431012323525"); + } return resultUtil; } - +// /** +// * 订单支付(推单场景) +// * @param payType +// * @param orderId +// * @param couponId +// * @param type +// * @return +// * @throws Exception +// */ +// @Override +// public ResultUtil payCrossCityOrder2(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { +// OrderCrossCity orderCrossCity = this.selectById(orderId); +// if(orderCrossCity.getState() != 7){ +// return ResultUtil.error("订单已完成支付,不允许重复支付", ""); +// } +// Integer uid = orderCrossCity.getUserId(); +// Double orderMoney = orderCrossCity.getOrderMoney(); +// System.err.println(orderMoney); +// UserInfo userInfo = userInfoService.selectById(uid); +// ResultUtil resultUtil = ResultUtil.success(""); +// orderCrossCity.setCouponMoney(0D);//初始化历史数据 +// orderCrossCity.setCouponId(null); +// +// //计算优惠券 +// BigDecimal payMoney = new BigDecimal(0); +// UserCouponRecord userCouponRecord = null; +// if(null != couponId){ +// userCouponRecord = userCouponRecordService.selectById(couponId); +// if(userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()){ +// return ResultUtil.error("优惠券不能用于此订单", ""); +// } +// if(userCouponRecord.getState() == 2){ +// return ResultUtil.error("优惠券已使用", ""); +// } +// if(userCouponRecord.getState() == 3){ +// return ResultUtil.error("优惠券已过期", ""); +// } +// if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3){ +// return ResultUtil.error("优惠券不能用于此类型订单", ""); +// } +// if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ +// return ResultUtil.error("优惠券不能用于此订单", ""); +// } +// payMoney = new BigDecimal(orderMoney.toString()).subtract(new BigDecimal(userCouponRecord.getMoney())); +// System.err.println(payMoney); +// orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); +// orderCrossCity.setCouponId(couponId); +// } +// if(payMoney.compareTo(new BigDecimal(0)) == 0 ){ +// payMoney = new BigDecimal(orderMoney.toString()); +// } +// //计算红包 +// UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); +//// if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ +//// orderMoney = orderMoney - query.getMoney(); +//// orderCrossCity.setRedPacketMoney(query.getMoney()); +//// orderCrossCity.setRedPacketId(query.getId()); +//// } +//// +//// //计算折扣 +//// UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); +//// if(null != query2){ +//// Double special = query2.getSpecial(); +//// orderCrossCity.setDiscount(special); +//// double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); +//// if(orderMoney.compareTo(v) > 0){ +//// orderCrossCity.setDiscountMoney(orderMoney - v); +//// orderCrossCity.setActivityId(query2.getId()); +//// orderMoney = v; +//// } +//// } +// if(payType == 1){//微信支付 +// String value = redisUtil.getValue("appletOpenId"); +// String appletsOpenId = null; +// if(ToolUtil.isNotEmpty(value)){ +// JSONObject jsonObject = JSON.parseObject(value); +// appletsOpenId = jsonObject.getString(uid.toString()); +// }else{ +// appletsOpenId = userInfo.getAppletsOpenId(); +// } +//// Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId); +//// if(map.get("code").equals("200")){ +//// paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 +//// resultUtil = ResultUtil.success(map.get("data")); +//// }else{ +//// resultUtil = ResultUtil.error(map.get("msg"), ""); +//// } +// String app = type == 1 ? "APP" : "JSAPI"; +// resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), payMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); +// paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, Double.valueOf(payMoney.toString()), "", 1);//添加预支付数据 +// } +// if(payType == 2){//支付宝支付 +// Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); +// if(map.get("code").equals("200")){ +// paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 2, orderMoney, map.get("order_id"), 1);//添加预支付数据 +// resultUtil = ResultUtil.success(map.get("data")); +// }else{ +// resultUtil = ResultUtil.error(map.get("msg"), ""); +// } +// } +// if(payType == 3){//余额支付 +// if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ +// return ResultUtil.error("余额不足,无法完成支付", ""); +// } +// +// userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); +// +// SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); +// userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 +// +// //添加交易明细 +// transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 3, orderId); +// userInfoService.updateById(userInfo); +// +// orderCrossCity.setState(2);//跨城支付完成后才开始服务 +// orderCrossCity.setPayType(3); +// orderCrossCity.setPayMoney(orderMoney); +// +// //处理优惠券和红包 +// if(null != userCouponRecord){ +// userCouponRecord.setState(2); +// userCouponRecord.setEndTime(new Date()); +// userCouponRecordService.updateById(userCouponRecord); +// } +// if(null != query){ +// query.setState(2); +// query.setEndTime(new Date()); +// userRedPacketRecordService.updateById(query); +// } +// +// //添加已收入明细 +// Line line = lineService.selectById(orderCrossCity.getLineId()); +// Double speMoney = Double.valueOf(line.getRakeRate()); +// BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 +// BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 +// incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); +// incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); +// +// systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); +// } +// +// this.updateAllColumnById(orderCrossCity); +// //没有司机,推单操作 +// if(orderCrossCity.getDriverId() == null && orderCrossCity.getState() == 2){ +// this.pushCrossCityOrder(orderCrossCity); +// } +// return resultUtil; +// } /** * 支付成功后的回调操作 @@ -467,7 +928,11 @@ } //添加交易明细 transactionDetailsService.saveData(orderCrossCity.getUserId(), "完成订单", query.getAmount(), 2, 1, 1, 3, query.getOrderId()); - orderCrossCity.setState(2);//先支付再服务 + if(orderCrossCity.getDriverId()==null){ + orderCrossCity.setState(1); + }else { + orderCrossCity.setState(2);//先支付再服务 + } orderCrossCity.setPayType(type); orderCrossCity.setPayMoney(query.getAmount()); this.updateById(orderCrossCity); @@ -509,7 +974,7 @@ // driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); // driverService.updateById(driver); - Company company = companyService.selectById(driver.getFranchiseeId()); +// Company company = companyService.selectById(driver.getFranchiseeId()); // if(Objects.isNull(company)){ // company = companyService.selectById(driver.getCompanyId()); // } @@ -533,20 +998,35 @@ // // driverService.updateById(driver); + + + // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); - pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); + + if(driver!=null){ + pushUtil.pushOrderState(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); + }else { + try { + pushCrossCityOrder(orderCrossCity); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } }).start(); // systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功完成出行订单支付,谢谢使用!", orderCrossCity.getUserId(), 1); //添加司机消息提醒 - systemNoticeService.addSystemNotice(2, "用户已线上完成支付", driver.getId(), 1); + if(driver!=null){ + systemNoticeService.addSystemNotice(2, "用户已线上完成支付", driver.getId(), 1); + } }else{ System.err.println("预支付数据异常(orderId = " + id + ")"); } @@ -763,6 +1243,194 @@ return ResultUtil.success(baseWarpper); } + /** + * 跨城下单操作(推单场景) + * @param orderCrossCityWarpperPushOrder + * @param uid + * @return + * @throws Exception + */ + @Override + public synchronized ResultUtil<BaseWarpper> orderCrossCityPushOrder(OrderCrossCityWarpperPushOrder orderCrossCityWarpperPushOrder, Integer uid) throws Exception { + /** + * 1.下了即时单就不能下预约单和即时单 + * 2.下了预约单和再下一张即时单不能再下预约单 + */ + List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11); + 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<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(uid, 1, 2, 3, 4, 5, 7, 11); + if(orderCrossCities1.size() > 0){ + return ResultUtil.error("有未完成的订单"); + } + + if(null == orderCrossCityWarpperPushOrder.getServerCarModelId()){ + return ResultUtil.error("请选择服务车型"); + } + OrderCrossCity orderCrossCity = new OrderCrossCity(); + orderCrossCity.setUserId(uid); + orderCrossCity.setServerCarModelId(orderCrossCityWarpperPushOrder.getServerCarModelId()); +// orderCrossCity.setDriverId(orderCrossCityWarpper.getDriverId()); + orderCrossCity.setLineId(orderCrossCityWarpperPushOrder.getLineId()); +// orderCrossCity.setLineShiftDriverId(orderCrossCityWarpper.getLineShiftDriverId()); +// orderCrossCity.setCarId(orderCrossCityWarpper.getCarId()); + orderCrossCity.setOrderNum(this.getOrderNum(orderCrossCityWarpperPushOrder.getDriverId(), orderCrossCityWarpperPushOrder.getLineShiftDriverId())); + orderCrossCity.setPlacementLon(orderCrossCityWarpperPushOrder.getPlacementLon()); + orderCrossCity.setPlacementLat(orderCrossCityWarpperPushOrder.getPlacementLat()); + String placementAddress = orderCrossCityWarpperPushOrder.getPlacementAddress(); + placementAddress = placementAddress.replaceAll("& #40;", "("); + placementAddress = placementAddress.replaceAll("& #41;", ")"); + orderCrossCity.setPlacementAddress(placementAddress); + orderCrossCity.setStartLon(orderCrossCityWarpperPushOrder.getStartLon()); + orderCrossCity.setStartLat(orderCrossCityWarpperPushOrder.getStartLat()); + String startAddress = orderCrossCityWarpperPushOrder.getStartAddress(); + startAddress = startAddress.replaceAll("& #40;", "("); + startAddress = startAddress.replaceAll("& #41;", ")"); + orderCrossCity.setStartAddress(startAddress); + orderCrossCity.setEndLon(orderCrossCityWarpperPushOrder.getEndLon()); + orderCrossCity.setEndLat(orderCrossCityWarpperPushOrder.getEndLat()); + String endAddress = orderCrossCityWarpperPushOrder.getEndAddress(); + endAddress = endAddress.replaceAll("& #40;", "("); + endAddress = endAddress.replaceAll("& #41;", ")"); + orderCrossCity.setEndAddress(endAddress); + orderCrossCity.setMileage(0D); + ResultUtil<Map<String, Object>> price = this.getPrice(orderCrossCityWarpperPushOrder.getDistance(), orderCrossCityWarpperPushOrder.getPeopleNumber(), orderCrossCityWarpperPushOrder.getTravelMode(), orderCrossCityWarpperPushOrder.getLineId(), + orderCrossCityWarpperPushOrder.getServerCarModelId(), orderCrossCityWarpperPushOrder.getTotalSeat(), orderCrossCityWarpperPushOrder.getSeatNumber()); + Double money = Double.valueOf(price.getData().get("price").toString()); + orderCrossCity.setOrderMoney(money); +// Integer companyId = driver.getCompanyId(); +// orderCrossCity.setCompanyId(companyId); + UserInfo userInfo = userInfoService.selectById(uid); + orderCrossCity.setPassengers(userInfo.getNickName()); + orderCrossCity.setPassengersPhone(userInfo.getPhone()); + orderCrossCity.setPeopleNumber(orderCrossCityWarpperPushOrder.getPeopleNumber()); + orderCrossCity.setSeatNumber(orderCrossCityWarpperPushOrder.getSeatNumber()); + List<OrderCrossCity> orderCrossCities = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderCrossCity.getOrderNum()).eq("isDelete", 1)); + orderCrossCity.setSort(orderCrossCities.size() + 1); + orderCrossCity.setState(7);//待支付 + orderCrossCity.setInsertTime(new Date()); + orderCrossCity.setTravelTime(orderCrossCityWarpperPushOrder.getTravelTime()); + orderCrossCity.setSnatchOrderTime(new Date()); + orderCrossCity.setTravelMode(orderCrossCityWarpperPushOrder.getTravelMode()); + orderCrossCity.setOrderSource(orderCrossCityWarpperPushOrder.getOrderSource()); + orderCrossCity.setIsDelete(1); + orderCrossCity.setRemark(orderCrossCityWarpperPushOrder.getRemark()); + orderCrossCity.setIsReassign(1); + //调用高德创建轨迹 +// String s = gdFalconUtil.selectTerminal(driver.getPhone()); +// String track = gdFalconUtil.createTrack(s); +// orderCrossCity.setTrackId(track); +// if (orderCrossCity.getTravelMode() == 2) {//包车 +// orderCrossCity.setSeatNumber(lineShiftDriver.getLaveSeatNumber()); +// orderCrossCity.setPeopleNumber(lineShiftDriver.getLaveSeat()); +// } + + //调用移动的小号接口 +// Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); +// Region region = regionMapper.query(geocode.get("districtCode")); +// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1))); +// if (String.valueOf(map.get("code")).equals("200")) { +// orderCrossCity.setTelX(map.get("telX")); +// orderCrossCity.setBindId(map.get("bindId")); +// } + this.insert(orderCrossCity); + +// if (driver.getState() == 2) { +// driver.setState(3); +// driverService.updateById(driver); +// } + +// //修改预约班次的数据 +// if (orderCrossCity.getTravelMode() == 2) {//包车 +// lineShiftDriver.setLaveSeat(0); +// lineShiftDriver.setLaveSeatNumber(""); +// } else {//拼车 +// lineShiftDriver.setLaveSeat((lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()) < 0 ? 0 : lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()); +// String[] split = orderCrossCity.getSeatNumber().split(","); +// String[] split1 = lineShiftDriver.getLaveSeatNumber().split(","); +// String seatNumber = ""; +// //先判断选中座位号和剩余座位号是否匹配 +// for (String spl : split) { +// boolean b = true; +// for (String sp : split1) { +// if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) { +// b = false; +// break; +// } +// } +// if (b) { +// throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!"); +// } +// } +// for (String sp : split1) { +// boolean b = true; +// for (String spl : split) { +// if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) { +// b = false; +// break; +// } +// } +// if (b && ToolUtil.isNotEmpty(sp)) { +// seatNumber += (sp + ","); +// } +// } +// lineShiftDriver.setLaveSeatNumber((ToolUtil.isNotEmpty(seatNumber) && seatNumber.length() > 0) ? +// seatNumber.substring(0, seatNumber.length() - 1) : ""); +// } +// lineShiftDriverMapper.updateById(lineShiftDriver); + + //添加消息 + systemNoticeService.addSystemNotice(1, "您的跨城订单已下单成功!", orderCrossCity.getUserId(), 1); + + BaseWarpper baseWarpper = new BaseWarpper(); + baseWarpper.setId(orderCrossCity.getId()); + + //创建定时任务,取消订单30分钟 + TimerTask timerTask = new TimerTask() { + @Override + public void run() { + OrderCrossCity orderCrossCity1 = orderCrossCityMapper.selectById(orderCrossCity.getId()); + if(orderCrossCity1.getState() == 7 && orderCrossCity1.getPayMoney() == null){ + orderCrossCity1.setState(10); + orderCrossCityMapper.updateById(orderCrossCity1); + + OrderCancel orderCancel = new OrderCancel(); + orderCancel.setOrderId(orderCrossCity.getId()); + orderCancel.setOrderType(3); + orderCancel.setReason("用户未及时付款,系统自动取消订单"); + orderCancel.setRemark("用户未及时付款,系统自动取消订单"); + orderCancel.setState(2); + orderCancel.setInsertTime(new Date()); + orderCancel.setUserType(2); + orderCancelService.insert(orderCancel); + +// //修改司机座位 +// LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); +// lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); +// lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber()); +// lineShiftDriverMapper.updateById(lineShiftDriver); +// +// //修改司机为空闲 +// List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11); +// if(orderCrossCities.size() == 0){ +// Driver driver = driverService.selectById(orderCrossCity.getDriverId()); +// driver.setState(2); +// driverService.updateById(driver); +// } + } + } + }; + Timer timer = new Timer(); + timer.schedule(timerTask, 30 * 60 * 1000); + + + return ResultUtil.success(baseWarpper); + } /** * 获取订单 @@ -1280,7 +1948,9 @@ new Thread(new Runnable() { @Override public void run() { - pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + if(orderCrossCity.getDriverId()!=null){ + pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); + } System.err.println("推送取消操作---------------------"); } }).start(); @@ -1288,16 +1958,22 @@ //修改司机座位 LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); - lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); - lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber()); - lineShiftDriverMapper.updateById(lineShiftDriver); + if(lineShiftDriver!=null){ + lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); + lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber()); + lineShiftDriverMapper.updateById(lineShiftDriver); + } + //修改司机为空闲 List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11); if(orderCrossCities.size() == 0){ Driver driver = driverService.selectById(orderCrossCity.getDriverId()); - driver.setState(2); - driverService.updateById(driver); + if(driver!=null){ + driver.setState(2); + driverService.updateById(driver); + } + } // } // else{ @@ -1833,7 +2509,10 @@ LocalDateTime localDateTime = LocalDateTime.now(); LocalDateTime dateTime = localDateTime.minusMinutes(30); String time = dateUtil.localDateTimeToStringHHmm(dateTime); - List<OrderCrossCity> orderCrossCities = this.selectList(new EntityWrapper<OrderCrossCity>().eq("state", 7).like("insertTime", time)); + LocalDateTime start = LocalDateTime.parse(time + ":00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); + LocalDateTime end = start.plusMinutes(1); + + List<OrderCrossCity> orderCrossCities = this.selectList(new EntityWrapper<OrderCrossCity>().eq("state", 7).between("insertTime", start, end)); if(!CollectionUtils.isEmpty(orderCrossCities)){ for (OrderCrossCity orderCrossCity : orderCrossCities) { orderCrossCity.setState(10); @@ -1863,4 +2542,111 @@ } } + + + /** + * 推送跨城抢单数据 + * @param orderCrossCity + * @throws Exception + */ + public void pushCrossCityOrder(OrderCrossCity orderCrossCity) throws Exception{ + new Thread(new Runnable() { + @Override + public void run() { + try { + crossCityOrderIds.add(orderCrossCity.getId());//添加记录,防止调用接口重复提醒无人接单 + String vehicle = redisUtil.getValue("VEHICLE"); + List<Integer> integers = new ArrayList<>(); + if(ToolUtil.isNotEmpty(vehicle)){ + integers = JSON.parseArray(vehicle).toJavaList(Integer.class); + } + Company query = companyCityService.query(String.valueOf(orderCrossCity.getStartLon()), String.valueOf(orderCrossCity.getStartLat()));//获取起点所属分公司 +// List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数 +// Company query = companyService.selectById(1); + for(int i = 1; i <= 3; i++){ +// PushOrder pushOrder = pushOrderService.querys(i, 4, query.getId()).get(0); + //获取同线路的同车型的跨城司机 + List<Driver> list = driverService.queryDriversByLineAndCarModel(3,orderCrossCity.getServerCarModelId(), orderCrossCity.getLineId()); + + if(list.size() > 0){ +// double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 +// int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) +// list = list.subList(0, lastIndex);//获取空闲司机中占比数据 + List<Integer> collect = list.stream().map(Driver::getCarId).collect(Collectors.toList()); + List<Car> cars = carMapper.selectList1( collect); + for(Driver driver : list){//开始进行推送 + // 判断司机的当前进行的订单 看座位数 + Car car1 = cars.stream().filter(car -> car.getId().equals(driver.getCarId())).findFirst().get(); + Integer seat = car1.getSeat(); + List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.selectList(new EntityWrapper<OrderCrossCity>().eq("driverId", driver.getId()).in("state", Arrays.asList(1,2,3,4,5))); +// boolean bo = false; +// for(Integer integer : integers){ +// if(integer.compareTo(driver.getId()) == 0){ +// bo = true; +// break; +// } +// } +// if(bo){ +// continue; +// } + if(seat>=orderCrossCities.size()){ + pushUtil.pushOrderState(2, driver.getId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 10); + } + } + } + Thread.sleep(10 * 1000);//设置等待时间 + Integer state = orderCrossCityMapper.selectById(orderCrossCity.getId()).getState(); + if(state > 1){ + break; + } +// if(i == querys.size() && state == 1){ + if(i == 3 && state == 1){ + pushUtil.pushEndPush(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 3); + orderIds.remove(orderCrossCity.getId()); +// orderCrossCity.setState(10); +// orderCrossCityMapper.updateById(orderCrossCity); +// +// OrderCancel orderCancel = new OrderCancel(); +// orderCancel.setOrderId(orderCrossCity.getId()); +// orderCancel.setOrderType(3); +// orderCancel.setReason("没有司机接单,系统自动取消订单"); +// orderCancel.setRemark("没有司机接单,系统自动取消订单"); +// orderCancel.setState(2); +// orderCancel.setInsertTime(new Date()); +// orderCancel.setUserType(2); +// orderCancelService.insert(orderCancel); +// //TODO:退款 +// UserInfo userInfo = userInfoService.selectById (orderCrossCity.getUserId()); + addCancle(orderCrossCity.getId(),"没有司机接单,系统自动取消订单","没有司机接单,系统自动取消订单",orderCrossCity.getUserId()); + + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } + }).start(); + } + +// /** +// * 下单后继续等待 +// * @param id +// * @return +// * @throws Exception +// */ +// @Override +// public ResultUtil pushOrderCrossCity(Integer id) throws Exception { +// OrderCrossCity orderCrossCity = this.selectById(id); +// if(null == orderCrossCity){ +// return ResultUtil.error("推送订单失败,订单信息有误"); +// } +// if(orderCrossCity.getState() != 1){ +// return ResultUtil.error("订单已被司机接单,不能重复推送"); +// } +// +// +// this.pushCrossCityOrder(orderCrossCity); +// +// return ResultUtil.success(); +// } } -- Gitblit v1.7.1