From 1980a470b8fbad103cef1c1d8f57de547e51773c Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 17 十二月 2024 18:04:01 +0800
Subject: [PATCH] 提交基础版本
---
UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 139 +++++++++++++++++++++++++++++++++------------
1 files changed, 101 insertions(+), 38 deletions(-)
diff --git a/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index b54f179..6610910 100644
--- a/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserAHTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -78,6 +78,9 @@
@Autowired
private IDriverService driverService;
+
+ @Resource
+ private DriverMapper driverMapper;
@Autowired
private IDriverServiceService driverServiceService;
@@ -164,6 +167,15 @@
@Value("${pushMinistryOfTransport}")
private boolean pushMinistryOfTransport;
+
+ @Autowired
+ private IOrderCrossCityService crossCityService;
+
+ @Autowired
+ private GeodesyUtil geodesyUtil;
+
+ @Autowired
+ private IOrderEvaluateService orderEvaluateService;
@@ -482,7 +494,8 @@
//推单操作
if(orderPrivateCar.getState() == 1){
- this.pushOrder(orderPrivateCar);
+ Integer id = orderPrivateCar.getId();
+ redisUtil.addListRight("push_order_ids", id.toString());
}
//添加消息
@@ -550,7 +563,7 @@
double amount = 0;
CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId());
if(null != orderPrivateCar.getDriverId() &&
- (orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < new Date().getTime()){//收费的情况
+ (orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < System.currentTimeMillis()){//收费的情况
if(null != query){
amount += query.getMoney();
}
@@ -830,6 +843,82 @@
}
}).start();
}
+
+
+ /**
+ * 推送抢单数据
+ * @throws Exception
+ */
+ public boolean pushOrder1(Integer id){
+ try {
+ OrderPrivateCar orderPrivateCar = this.selectById(id);
+ Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司
+ List<Driver> drivers = driverMapper.queryIdleDriver_(1, orderPrivateCar.getServerCarModelId(), query.getId());
+ System.err.println("当前获取的司机:"+drivers);
+
+ List<Driver> list = new ArrayList<>();
+
+ //找出距离最近且评分最高的司机
+ Double dis = 100000D;
+ Double pf = 0d;
+ Driver driver1 = null;
+ for(Driver driver : drivers){
+ List<OrderCrossCity> orderCrossCities = crossCityService.selectList(new EntityWrapper<OrderCrossCity>().eq("state", 2).eq("driverId", driver.getId()));
+ if (orderCrossCities!=null&& !orderCrossCities.isEmpty()){
+ continue;
+ }
+ String value = redisUtil.getValue("DRIVER" + driver.getId());
+ if(null != value){
+ Map<String, Double> distance1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value);
+ double d = Double.valueOf(distance1.get("WGS84")).doubleValue();
+ List<OrderEvaluate> evaluates = orderEvaluateService.selectList(new EntityWrapper<OrderEvaluate>().eq("driverId", driver.getId()));
+ double fraction = evaluates.stream().mapToDouble(OrderEvaluate::getFraction).sum();
+ if(fraction > 0){
+ fraction = fraction / evaluates.size();
+ }
+ if(dis > d && fraction > pf){
+ dis = d;
+ pf = fraction;
+ driver1 = driver;
+ }
+ }
+ }
+ if(null != driver1){
+ orderPrivateCar.setDriverId(driver1.getId());
+ orderPrivateCar.setCarId(driver1.getCarId());
+ orderPrivateCar.setCompanyId(driver1.getFranchiseeId() != null && driver1.getFranchiseeId() != 0 ? driver1.getFranchiseeId() : (
+ driver1.getCompanyId() != null && driver1.getCompanyId() != 0 ? driver1.getCompanyId() : 1));
+ orderPrivateCar.setState(2);
+ orderPrivateCar.setSnatchOrderTime(new Date());
+ orderPrivateCarMapper.updateById(orderPrivateCar);
+ //修改司机状态
+ //如果是预约单,则不修改司机为服务中
+ if(orderPrivateCar.getOrderType() != 2 || (orderPrivateCar.getOrderType() == 2 && orderPrivateCar.getTravelTime().getTime() < System.currentTimeMillis() + 600000)){
+ //修改司机为服务中
+ driver1.setState(3);
+ driverService.updateById(driver1);
+ }
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+ pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+ if(orderPrivateCar.getType() == 2){
+ pushUtil.pushFerryOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 2);
+ }
+ }
+ }).start();
+
+ return true;
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return false;
+ }
+
+
+
@Override
public synchronized String getOrderNum() throws Exception{
@@ -950,34 +1039,6 @@
resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi");
paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据
}
-
-
-// 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 + ",1", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId);
-// if(map.get("code").equals("200")){
-// paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据
-// resultUtil = ResultUtil.success(map.get("data"));
-// }else{
-// resultUtil = ResultUtil.error(map.get("msg"), "");
-// }
-// }
-// if(payType == 2) {//支付宝支付
-// Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",1", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null);
-// if (map.get("code").equals("200")) {
-// paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 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("余额不足,无法完成支付");
@@ -1010,21 +1071,22 @@
//添加已收入明细
Company company = companyService.selectById(orderPrivateCar.getCompanyId());
- Double speMoney = company.getSpeMoney();
BigDecimal d = null;//企业收入
BigDecimal c = null;//司机收入
- if(company.getIsSpeFixedOrProportional() == 2){//固定
+ Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+ Double speMoney = driver.getSpecialCarCommission();
+ if(driver.getSpecialCarCommissionType() == 2){//固定
d = new BigDecimal(speMoney);
c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机
}
- if(company.getIsSpeFixedOrProportional() == 1){//比例
+ if(driver.getSpecialCarCommissionType() == 1){//比例
Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney();
d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
}
incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
- Driver driver = driverService.selectById(orderPrivateCar.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());
@@ -1224,21 +1286,22 @@
//添加已收入明细
Company company = companyService.selectById(orderPrivateCar.getCompanyId());
- Double taxi = company.getSpeMoney();
BigDecimal d = null;//企业收入
BigDecimal c = null;//司机收入
- if(company.getIsSpeFixedOrProportional() == 2){//固定
+ Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+ Double taxi = driver.getSpecialCarCommission();
+ if(driver.getSpecialCarCommissionType() == 2){//固定
d = new BigDecimal(taxi);
c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
}
- if(company.getIsSpeFixedOrProportional() == 1){//比例
+ if(driver.getSpecialCarCommissionType() == 1){//比例
Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney();
d = new BigDecimal(price).multiply(new BigDecimal(taxi).divide(new BigDecimal(100), new MathContext(2, RoundingMode.HALF_EVEN))).setScale(2, BigDecimal.ROUND_HALF_EVEN);
c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);
}
incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue());
incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue());
- Driver driver = driverService.selectById(orderPrivateCar.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());
--
Gitblit v1.7.1