From a43a99043e8c7c63187a51a302333cb530dbe9c8 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期三, 22 二月 2023 17:15:24 +0800
Subject: [PATCH] 新增加司机端接口

---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java         |  270 ++++++++++++--
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderMapper.xml                |    1 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java                 |   26 +
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderRefusalService.java          |    7 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/WeatherUtil.java                 |   87 ++++
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderRefusalMapepr.xml         |   15 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/YouTuiDriver.java                    |   50 ++
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/Realtime.java                    |   40 ++
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IYouTuiDriverService.java          |    7 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java                           |    5 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java                          |   20 +
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/DriverMapper.xml               |    5 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/RedisUtil.java                        |  249 ++++++++++---
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/ISystemMessageService.java         |   11 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderRefusalServiceImpl.java  |   16 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/AddOrderWarpper.java               |    6 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/YouTuiDriverMapper.xml         |   14 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/YouTuiDriverMapper.java                |    7 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/OrderRefusalMapper.java                |    7 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java              |   48 ++
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/SystemMessageServiceImpl.java |   15 
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java                   |   77 ++++
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/OrderRefusal.java                    |   55 +++
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/WeatherRes.java                  |   24 +
 driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/YouTuiDriverServiceImpl.java  |   16 
 25 files changed, 962 insertions(+), 116 deletions(-)

diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java
index a9c8287..132e8a4 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/api/OrderController.java
@@ -111,4 +111,81 @@
             return new ResponseWarpper(500, e.getMessage());
         }
     }
+
+
+
+
+    @ResponseBody
+    @PostMapping("/api/order/rejectionOrder")
+    @ServiceLog(name = "司机拒绝接单", url = "/api/order/rejectionOrder")
+    @ApiOperation(value = "司机拒绝接单", tags = {"司机端-首页"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResponseWarpper rejectionOrder(Long orderId, HttpServletRequest request){
+        if(null == orderId){
+            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
+        }
+        try {
+            Integer uid = driverService.getUserByRequset(request);
+            if(null == uid){
+                return ResponseWarpper.success(ResultUtil.tokenErr());
+            }
+            ResultUtil resultUtil = orderService.rejectionOrder(uid, orderId);
+            return ResponseWarpper.success(resultUtil);
+        }catch (Exception e){
+            e.printStackTrace();
+            return new ResponseWarpper(500, e.getMessage());
+        }
+    }
+
+
+
+
+
+    @ResponseBody
+    @PostMapping("/api/order/receiveOrder")
+    @ServiceLog(name = "司机接单操作", url = "/api/order/receiveOrder")
+    @ApiOperation(value = "司机接单操作", tags = {"司机端-首页"}, notes = "")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "long"),
+            @ApiImplicitParam(name = "Authorization", value = "用户token(Bearer +token)", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
+    })
+    public ResponseWarpper receiveOrder(Long orderId, HttpServletRequest request){
+        if(null == orderId){
+            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
+        }
+        try {
+            Integer uid = driverService.getUserByRequset(request);
+            if(null == uid){
+                return ResponseWarpper.success(ResultUtil.tokenErr());
+            }
+            ResultUtil resultUtil = orderService.receiveOrder(uid, orderId);
+            return ResponseWarpper.success(resultUtil);
+        }catch (Exception e){
+            e.printStackTrace();
+            return new ResponseWarpper(500, e.getMessage());
+        }
+    }
+
+
+
+    public ResponseWarpper<> queryOrderInfo(Long orderId, HttpServletRequest request){
+        if(null == orderId){
+            return ResponseWarpper.success(ResultUtil.paranErr("orderId"));
+        }
+        try {
+            Integer uid = driverService.getUserByRequset(request);
+            if(null == uid){
+                return ResponseWarpper.success(ResultUtil.tokenErr());
+            }
+            ResultUtil resultUtil = orderService.receiveOrder(uid, orderId);
+            return ResponseWarpper.success(resultUtil);
+        }catch (Exception e){
+            e.printStackTrace();
+            return new ResponseWarpper(500, e.getMessage());
+        }
+    }
+
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/OrderRefusalMapper.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/OrderRefusalMapper.java
new file mode 100644
index 0000000..21a48e4
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/OrderRefusalMapper.java
@@ -0,0 +1,7 @@
+package com.supersavedriving.driver.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.supersavedriving.driver.modular.system.model.OrderRefusal;
+
+public interface OrderRefusalMapper extends BaseMapper<OrderRefusal> {
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/YouTuiDriverMapper.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/YouTuiDriverMapper.java
new file mode 100644
index 0000000..9eb731b
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/YouTuiDriverMapper.java
@@ -0,0 +1,7 @@
+package com.supersavedriving.driver.modular.system.dao;
+
+import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.supersavedriving.driver.modular.system.model.YouTuiDriver;
+
+public interface YouTuiDriverMapper extends BaseMapper<YouTuiDriver> {
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/DriverMapper.xml b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/DriverMapper.xml
index 8beaa61..f33ea5e 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/DriverMapper.xml
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/DriverMapper.xml
@@ -16,6 +16,7 @@
         <result column="emergencyPhone" property="emergencyPhone"/>
         <result column="driverLicenseNumber" property="driverLicenseNumber"/>
         <result column="driverLicense" property="driverLicense"/>
+        <result column="firstCertificateTime" property="firstCertificateTime"/>
         <result column="idcard" property="idcard"/>
         <result column="idcardFront" property="idcardFront"/>
         <result column="idcardBack" property="idcardBack"/>
@@ -24,13 +25,17 @@
         <result column="agentId" property="agentId"/>
         <result column="branchOfficeId" property="branchOfficeId"/>
         <result column="balance" property="balance"/>
+        <result column="backgroundBalance" property="backgroundBalance"/>
         <result column="approvalStatus" property="approvalStatus"/>
         <result column="approvalNotes" property="approvalNotes"/>
         <result column="approvalUserId" property="approvalUserId"/>
         <result column="approvalTime" property="approvalTime"/>
         <result column="serverStatus" property="serverStatus"/>
         <result column="integral" property="integral"/>
+        <result column="score" property="score"/>
         <result column="status" property="status"/>
+        <result column="remark" property="remark"/>
+        <result column="isException" property="isException"/>
         <result column="createTime" property="createTime"/>
     </resultMap>
 </mapper>
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderMapper.xml b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderMapper.xml
index e4c19a6..344442d 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderMapper.xml
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderMapper.xml
@@ -38,6 +38,7 @@
         <result column="badWeatherPrice" property="badWeatherPrice" />
         <result column="overBadWeatherDistance" property="overBadWeatherDistance" />
         <result column="overBadWeatherPrice" property="overBadWeatherPrice" />
+        <result column="weather" property="weather"/>
         <result column="estimatedPrice" property="estimatedPrice" />
         <result column="estimatedMileage" property="estimatedMileage"/>
         <result column="orderMoney" property="orderMoney" />
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderRefusalMapepr.xml b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderRefusalMapepr.xml
new file mode 100644
index 0000000..99e6da9
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/OrderRefusalMapepr.xml
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.supersavedriving.driver.modular.system.dao.OrderRefusalMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.supersavedriving.driver.modular.system.model.OrderRefusal">
+        <id column="id" property="id" />
+        <result column="order_id" property="orderId" />
+        <result column="driver_id" property="driverId" />
+        <result column="startAddress" property="startAddress" />
+        <result column="endAddress" property="endAddress" />
+        <result column="code" property="code" />
+        <result column="createTime" property="createTime" />
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/YouTuiDriverMapper.xml b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/YouTuiDriverMapper.xml
new file mode 100644
index 0000000..d923f0d
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/dao/mapping/YouTuiDriverMapper.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.supersavedriving.driver.modular.system.dao.YouTuiDriverMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.supersavedriving.driver.modular.system.model.YouTuiDriver">
+        <id column="id" property="id" />
+        <result column="driverId" property="driverId" />
+        <result column="youTuiId" property="youTuiId" />
+        <result column="integral" property="integral" />
+        <result column="failureTime" property="failureTime" />
+        <result column="createTime" property="createTime" />
+    </resultMap>
+</mapper>
\ No newline at end of file
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java
index 28384d5..fd782b1 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java
@@ -78,6 +78,11 @@
     @TableField("driverLicense")
     private String driverLicense;
     /**
+     * 驾驶证初次领证时间
+     */
+    @TableField("firstCertificateTime")
+    private Date firstCertificateTime;
+    /**
      * 身份证号码
      */
     @TableField("idcard")
@@ -118,6 +123,11 @@
     @TableField("balance")
     private Double balance;
     /**
+     * 后台充值余额
+     */
+    @TableField("backgroundBalance")
+    private Double backgroundBalance;
+    /**
      * 审核状态(1=待审核,2=已同意,3=已拒绝)
      */
     @TableField("approvalStatus")
@@ -148,11 +158,21 @@
     @TableField("integral")
     private Integer integral;
     /**
+     * 评分
+     */
+    @TableField("score")
+    private Double score;
+    /**
      * 状态(1=正常,2=冻结,3=删除)
      */
     @TableField("status")
     private Integer status;
     /**
+     * 启用冻结理由
+     */
+    @TableField("remark")
+    private String remark;
+    /**
      * 添加时间
      */
     @TableField("createTime")
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java
index 33ed6bb..e6ac824 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Order.java
@@ -188,6 +188,11 @@
     @TableField("overBadWeatherPrice")
     private Double overBadWeatherPrice;
     /**
+     * 天气
+     */
+    @TableField("weather")
+    private String weather;
+    /**
      * 预估价
      */
     @TableField("estimatedPrice")
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/OrderRefusal.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/OrderRefusal.java
new file mode 100644
index 0000000..2e2a888
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/OrderRefusal.java
@@ -0,0 +1,55 @@
+package com.supersavedriving.driver.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* 司机拒单记录
+* @author pzb
+* @Date 2023/2/22 10:21
+*/
+@Data
+@TableName("t_order_refusal")
+public class OrderRefusal {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 订单id
+     */
+    @TableField("order_id")
+    private Long orderId;
+    /**
+     * 司机id
+     */
+    @TableField("driver_id")
+    private Integer driverId;
+    /**
+     * 起点地址
+     */
+    @TableField("startAddress")
+    private String startAddress;
+    /**
+     * 终点地址
+     */
+    @TableField("endAddress")
+    private String endAddress;
+    /**
+     * 编号
+     */
+    @TableField("code")
+    private String code;
+    /**
+     * 添加时间
+     */
+    @TableField("createTime")
+    private Date createTime;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/YouTuiDriver.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/YouTuiDriver.java
new file mode 100644
index 0000000..eea4efa
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/YouTuiDriver.java
@@ -0,0 +1,50 @@
+package com.supersavedriving.driver.modular.system.model;
+
+import com.baomidou.mybatisplus.annotations.TableField;
+import com.baomidou.mybatisplus.annotations.TableId;
+import com.baomidou.mybatisplus.annotations.TableName;
+import com.baomidou.mybatisplus.enums.IdType;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+* 司机优推数据
+* @author pzb
+* @Date 2023/2/22 14:01
+*/
+@Data
+@TableName("t_you_tui_driver")
+public class YouTuiDriver {
+    /**
+     * 主键
+     */
+    @TableId(value = "id", type = IdType.AUTO)
+    @TableField("id")
+    private Integer id;
+    /**
+     * 司机id
+     */
+    @TableField("driverId")
+    private Integer driverId;
+    /**
+     * 优推id
+     */
+    @TableField("youTuiId")
+    private Integer youTuiId;
+    /**
+     * 积分
+     */
+    @TableField("integral")
+    private Integer integral;
+    /**
+     * 失效时间
+     */
+    @TableField("failureTime")
+    private Date failureTime;
+    /**
+     * 添加时间
+     */
+    @TableField("createTime")
+    private Date createTime;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderRefusalService.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderRefusalService.java
new file mode 100644
index 0000000..3f14bbb
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderRefusalService.java
@@ -0,0 +1,7 @@
+package com.supersavedriving.driver.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.supersavedriving.driver.modular.system.model.OrderRefusal;
+
+public interface IOrderRefusalService extends IService<OrderRefusal> {
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java
index 925ff00..65888c8 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java
@@ -45,4 +45,30 @@
      * @throws Exception
      */
     List<HallOrderList> queryOrderHall(Integer uid, Integer pageNum, Integer pageSize) throws Exception;
+
+
+    /**
+     * 司机拒单
+     * @param uid
+     * @param orderId
+     * @return
+     * @throws Exception
+     */
+    ResultUtil rejectionOrder(Integer uid, Long orderId) throws Exception;
+
+
+
+
+    /**
+     * 司机接单操作
+     * @param uid
+     * @param orderId
+     * @return
+     * @throws Exception
+     */
+    ResultUtil receiveOrder(Integer uid, Long orderId) throws Exception;
+
+
+
+    queryOrderInfo(Long orderId) throws Exception;
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/ISystemMessageService.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/ISystemMessageService.java
index 2f42fbf..3c3e5e4 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/ISystemMessageService.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/ISystemMessageService.java
@@ -33,4 +33,15 @@
      * @throws Exception
      */
     void  readSystems(Integer uid, String ids) throws Exception;
+
+
+    /**
+     * 添加系统消息
+     * @param userId        接收用户id
+     * @param userType      接收用户类型
+     * @param title         标题
+     * @param content       消息内容
+     * @throws Exception
+     */
+    void addSystemMessage(Integer userId, Integer userType, String title, String content) ;
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IYouTuiDriverService.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IYouTuiDriverService.java
new file mode 100644
index 0000000..7b688cc
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IYouTuiDriverService.java
@@ -0,0 +1,7 @@
+package com.supersavedriving.driver.modular.system.service;
+
+import com.baomidou.mybatisplus.service.IService;
+import com.supersavedriving.driver.modular.system.model.YouTuiDriver;
+
+public interface IYouTuiDriverService extends IService<YouTuiDriver> {
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderRefusalServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderRefusalServiceImpl.java
new file mode 100644
index 0000000..84bbcfb
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderRefusalServiceImpl.java
@@ -0,0 +1,16 @@
+package com.supersavedriving.driver.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.supersavedriving.driver.modular.system.dao.OrderRefusalMapper;
+import com.supersavedriving.driver.modular.system.model.OrderRefusal;
+import com.supersavedriving.driver.modular.system.service.IOrderRefusalService;
+import org.springframework.stereotype.Service;
+
+/**
+* 司机拒单
+* @author pzb
+* @Date 2023/2/22 10:28
+*/
+@Service
+public class OrderRefusalServiceImpl extends ServiceImpl<OrderRefusalMapper, OrderRefusal> implements IOrderRefusalService {
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
index 475be7c..517f955 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -5,14 +5,13 @@
 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.GeodesyUtil;
-import com.supersavedriving.driver.modular.system.util.PushUtil;
-import com.supersavedriving.driver.modular.system.util.ResultUtil;
-import com.supersavedriving.driver.modular.system.util.UUIDUtil;
+import com.supersavedriving.driver.modular.system.util.juhe.WeatherUtil;
 import com.supersavedriving.driver.modular.system.util.mongodb.model.Location;
 import com.supersavedriving.driver.modular.system.warpper.AddOrderWarpper;
 import com.supersavedriving.driver.modular.system.warpper.HallOrderList;
@@ -58,6 +57,18 @@
 
     @Autowired
     private IAppUserService appUserService;
+
+    @Autowired
+    private RedisUtil redisUtil;
+
+    @Autowired
+    private ISystemMessageService systemMessageService;
+
+    @Autowired
+    private IOrderRefusalService orderRefusalService;
+
+    @Autowired
+    private IYouTuiDriverService youTuiDriverService;
 
 
 
@@ -122,13 +133,16 @@
         order.setEndAddress(addOrderWarpper.getEndAddress());
         order.setEndLat(addOrderWarpper.getEndLat());
         order.setEndLng(addOrderWarpper.getEndLng());
-        Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1);
-        if(null == distance){
-            return ResultUtil.error("获取预估距离出错");
+        Double d = 0D;
+        if(ToolUtil.isNotEmpty(addOrderWarpper.getEndAddress())){
+            Map<String, String> distance = MapUtil.getDistance(order.getStartLng() + "," + order.getStartLat(), order.getEndLng() + "," + order.getEndLat(), 1);
+            if(null == distance){
+                return ResultUtil.error("获取预估距离出错");
+            }
+            d = Double.valueOf(distance.get("distance")) / 1000;
+            order.setEstimatedMileage(d);
         }
-        Double d = Double.valueOf(distance.get("distance")) / 1000;
-        order.setEstimatedMileage(d);
-        order = getOrderPrice(1, d, 0, order);
+        order = getOrderPrice(1, d, 0, order, "");
         order.setHallOrder(0);
         order.setState(null == order.getDriverId() ? 101 : 102);
         order.setStatus(1);
@@ -148,13 +162,14 @@
 
     /**
      * 获取订单价格
-     * @param type
-     * @param distance
-     * @param waitTime
-     * @param order
+     * @param type          计算类型(1=预估价,2=订单费)
+     * @param distance      行驶公里
+     * @param waitTime      等待时长
+     * @param order         订单数据
+     * @param city          查询天气的城市
      * @return
      */
-    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order){
+    public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){
         order = getOrderInitialPrice(order);
         SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5));
         if(null == systemConfig){
@@ -252,7 +267,8 @@
         }
 
         //恶劣天气
-        if(true){
+        boolean badWeather = WeatherUtil.isBadWeather(city);
+        if(badWeather){
             order.setBadWeatherDistance(num5);//恶劣天气公里
             order.setBadWeatherPrice(num6);//恶劣天气费
             if(distance.compareTo(num7) > 0){
@@ -321,53 +337,123 @@
      */
     public void pushOrder(Order order){
         /**
-         * 系统根据配置进行三轮的范围查找司机。
-         * 只要找到司机就直接推出去。
-         * 当推出去的司机都没有接单,直接将订单放入大厅,不再去更大范围找司机。
+         * 1.先找最大推单范围内的优推司机 -》 距离最近
+         * 没有1 - 》
+         *      2.按照后台推送配置在范围内查找合适司机
+         *        合适司:积分 > 评分 > 距离
+         *      3.司机没有接单直接将订单置入大厅
          */
         SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1));
-        if(null != systemConfig){
-            JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
-            Integer num4 = jsonObject.getInteger("num4");//接单时间
-            String startLat = order.getStartLat();
-            String startLng = order.getStartLng();
+        if(null == systemConfig){
+            return;
+        }
+        JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
+        Double num3 = jsonObject.getDouble("num3");//推单最大范围
+        Integer num4 = jsonObject.getInteger("num4");//接单时间
+        String startLat = order.getStartLat();
+        String startLng = order.getStartLng();
 
-            //找到中心点
-            GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(startLat), Double.valueOf(startLng));
+        //1
+        //找到中心点
+        GeoJsonPoint geoJsonPoint = new GeoJsonPoint(Double.valueOf(startLat), Double.valueOf(startLng));
+        Double num = num3 / 1000;//范围公里
+        //构造半径
+        Distance distanceR = new Distance(num, Metrics.KILOMETERS);
+        //画圆
+        Circle circle = new Circle(geoJsonPoint, distanceR);
+        // 构造query对象
+        Query query = Query.query(Criteria.where("location").withinSphere(circle));
+        List<Location> locations = mongoTemplate.find(query, Location.class);
+        List<Integer> driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList());
+        Integer driver = null;
+        if(driverIds.size() > 0){
+            List<YouTuiDriver> youTuiDrivers = youTuiDriverService.selectList(new EntityWrapper<YouTuiDriver>().in("driverId", driverIds).last(" and now() < failureTime"));
+            Double d = null;
+            for (YouTuiDriver youTuiDriver : youTuiDrivers) {
+                String value = redisUtil.getValue("DRIVER" + youTuiDriver.getDriverId());
+                if(ToolUtil.isEmpty(value)){
+                    continue;
+                }
+                Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
+                Double wgs84 = distance.get("WGS84");
+                if(d == null || d.compareTo(wgs84) > 0){
+                    d = wgs84;
+                    driver = youTuiDriver.getDriverId();
+                }
+            }
+        }
+
+
+        //开始范围查找
+        if(null == driver){
             for (int i = 1; i < 4; i++) {
-                Double num = jsonObject.getDouble("num" + i) / 1000;//范围公里
+                num = jsonObject.getDouble("num" + i) / 1000;//范围公里
                 //构造半径
-                Distance distanceR = new Distance(num, Metrics.KILOMETERS);
+                distanceR = new Distance(num, Metrics.KILOMETERS);
                 //画圆
-                Circle circle = new Circle(geoJsonPoint, distanceR);
+                circle = new Circle(geoJsonPoint, distanceR);
                 // 构造query对象
-                Query query = Query.query(Criteria.where("location").withinSphere(circle));
-                List<Location> locations = mongoTemplate.find(query, Location.class);
+                query = Query.query(Criteria.where("location").withinSphere(circle));
+                locations = mongoTemplate.find(query, Location.class);
 
-                List<Integer> driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList());
+                driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList());
                 if(driverIds.size() > 0){
                     List<Driver> drivers = driverService.selectList(new EntityWrapper<Driver>().eq("approvalStatus", 2).eq("serverStatus", 1).eq("status", 1).in("id", driverIds));
                     if(drivers.size() == 0){
                         continue;
                     }
 
-                    for (Driver driver : drivers) {
-                        pushUtil.pushGrabOrder(driver.getId(), 2, order.getId(), num4);
-                    }
-
-                    //创建定时任务处理订单到大厅
-                    new Timer().schedule(new TimerTask() {
-                        @Override
-                        public void run() {
-                            Order order1 = OrderServiceImpl.this.selectById(order.getId());
-                            if(order1.getState() == 101){
-                                order1.setHallOrder(1);
-                                OrderServiceImpl.this.updateById(order1);
+                    Integer integral = null;
+                    Double score = null;
+                    Double d = null;
+                    for (Driver driver1 : drivers) {
+                        if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大
+                            integral = driver1.getIntegral();
+                            score = driver1.getScore();
+                            driver = driver1.getId();
+                            continue;
+                        }
+                        if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) < 0){//积分相同对比评分
+                            integral = driver1.getIntegral();
+                            score = driver1.getScore();
+                            driver = driver1.getId();
+                            continue;
+                        }
+                        if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) == 0){//积分相同/评分相同对比距离
+                            String value = redisUtil.getValue("DRIVER" + driver1.getId());
+                            if(ToolUtil.isEmpty(value)){
+                                continue;
+                            }
+                            Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
+                            Double wgs84 = distance.get("WGS84");
+                            if(d == null || d.compareTo(wgs84) > 0){
+                                d = wgs84;
+                                driver = driver1.getId();
+                                continue;
                             }
                         }
-                    }, num4 * 1000);
+                    }
+
                 }
             }
+        }
+
+        if(null != driver){
+            pushUtil.pushGrabOrder(driver, 2, order.getId(), num4);
+            //创建定时任务处理订单到大厅
+            new Timer().schedule(new TimerTask() {
+                @Override
+                public void run() {
+                    Order order1 = OrderServiceImpl.this.selectById(order.getId());
+                    if(order1.getState() == 101){
+                        order1.setHallOrder(1);
+                        OrderServiceImpl.this.updateById(order1);
+                    }
+                }
+            }, num4 * 1000);
+        }else{
+            order.setHallOrder(1);
+            this.updateById(order);
         }
     }
 
@@ -392,4 +478,98 @@
         });
         return hallOrderLists;
     }
+
+
+    /**
+     * 司机拒单
+     * @param uid
+     * @param orderId
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil rejectionOrder(Integer uid, Long orderId) throws Exception {
+        Order order = this.selectById(orderId);
+        DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", uid).eq("status", 1));
+        if(null == driverWork){
+            return ResultUtil.error("请先上班");
+        }
+        OrderRefusal orderRefusal = new OrderRefusal();
+        orderRefusal.setCode(order.getCode());
+        orderRefusal.setCreateTime(new Date());
+        orderRefusal.setDriverId(uid);
+        orderRefusal.setEndAddress(order.getEndAddress());
+        orderRefusal.setStartAddress(order.getStartAddress());
+        orderRefusal.setOrderId(orderId);
+        orderRefusalService.insert(orderRefusal);
+        return ResultUtil.success();
+    }
+
+    /**
+     * 司机接单操作
+     * @param uid
+     * @param orderId
+     * @return
+     * @throws Exception
+     */
+    @Override
+    public ResultUtil receiveOrder(Integer uid, Long orderId) throws Exception {
+        try {
+            Driver driver = driverService.selectById(uid);
+            DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", uid).eq("status", 1));
+            if(null == driverWork){
+                return ResultUtil.error("请先上班");
+            }
+            boolean lock = redisUtil.lock(5);
+            if(!lock){
+                int num1 = 1;
+                while (num1 <= 10){
+                    Thread.sleep(3000);//等待3秒
+                    lock = redisUtil.lock(5);
+                    if(lock){
+                        break;
+                    }else{
+                        num1++;
+                    }
+                }
+            }
+            Order order = this.selectById(orderId);
+            if(order.getState() != 301){
+                redisUtil.unlock();
+                return ResultUtil.error("订单已被取消");
+            }
+            if(order.getState() != 101){
+                redisUtil.unlock();
+                return ResultUtil.error("手速慢了哦");
+            }
+            order.setDriverId(uid);
+            order.setAgentId(driver.getAgentId());
+            order.setBranchOfficeId(driver.getBranchOfficeId());
+            order.setState(102);
+            this.updateById(order);
+            redisUtil.unlock();
+
+            driver.setServerStatus(2);
+            driverService.updateById(driver);
+
+            //推动订单数据
+            new Thread(new Runnable() {
+                @Override
+                public void run() {
+                    //发送系统消息
+                    systemMessageService.addSystemMessage(uid, 2, "接单成功", "您已成功接到用户订单,请尽快联系客户!");
+                    pushUtil.pushOrderStatus(order.getDriverId(), 2, order.getId(), order.getState());
+                    if(null != order.getUserId()){
+                        systemMessageService.addSystemMessage(order.getUserId(), 1, "接单成功", driver.getName() + "师傅已成功接到您的订单,请保持电话畅通!");
+                        pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState());
+                    }
+                }
+            }).start();
+        }catch (Exception e){
+            redisUtil.unlock();
+            e.printStackTrace();
+            throw e;
+        }
+        return ResultUtil.success();
+    }
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/SystemMessageServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/SystemMessageServiceImpl.java
index 904991d..b24a68d 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/SystemMessageServiceImpl.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/SystemMessageServiceImpl.java
@@ -8,6 +8,7 @@
 import com.supersavedriving.driver.modular.system.warpper.SystemMessageWarpper;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 
 /**
@@ -50,4 +51,18 @@
         }
         this.updateBatchById(systemMessages);
     }
+
+
+    @Override
+    public void addSystemMessage(Integer userId, Integer userType, String title, String content) {
+        SystemMessage systemMessage = new SystemMessage();
+        systemMessage.setIsRead(0);
+        systemMessage.setContent(content);
+        systemMessage.setCreateTime(new Date());
+        systemMessage.setStatus(1);
+        systemMessage.setTitle(title);
+        systemMessage.setUserId(userId);
+        systemMessage.setUserType(userType);
+        this.insert(systemMessage);
+    }
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/YouTuiDriverServiceImpl.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/YouTuiDriverServiceImpl.java
new file mode 100644
index 0000000..557bd0a
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/YouTuiDriverServiceImpl.java
@@ -0,0 +1,16 @@
+package com.supersavedriving.driver.modular.system.service.impl;
+
+import com.baomidou.mybatisplus.service.impl.ServiceImpl;
+import com.supersavedriving.driver.modular.system.dao.YouTuiDriverMapper;
+import com.supersavedriving.driver.modular.system.model.YouTuiDriver;
+import com.supersavedriving.driver.modular.system.service.IYouTuiDriverService;
+import org.springframework.stereotype.Service;
+
+/**
+* 用户优推数据
+* @author pzb
+* @Date 2023/2/22 14:06
+*/
+@Service
+public class YouTuiDriverServiceImpl extends ServiceImpl<YouTuiDriverMapper, YouTuiDriver> implements IYouTuiDriverService {
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/RedisUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/RedisUtil.java
index 8af7f66..e2750c2 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/RedisUtil.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/RedisUtil.java
@@ -1,16 +1,15 @@
 package com.supersavedriving.driver.modular.system.util;
 
-import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONObject;
 import com.supersavedriving.driver.core.util.ToolUtil;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.http.HttpEntity;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
 import org.springframework.stereotype.Component;
-import org.springframework.util.LinkedMultiValueMap;
-import org.springframework.util.MultiValueMap;
-import org.springframework.web.client.RestTemplate;
+import org.springframework.util.StringUtils;
+import redis.clients.jedis.Jedis;
+import redis.clients.jedis.JedisPool;
+import redis.clients.jedis.Pipeline;
+
+import java.io.IOException;
+import java.util.*;
 
 
 /**
@@ -20,7 +19,9 @@
 public class RedisUtil {
 
     @Autowired
-    private RestTemplate internalRestTemplate;
+    private JedisPool jedisPool;
+
+    private Timer timer;
 
 
     /**
@@ -29,23 +30,11 @@
      * @param value
      */
     public void setStrValue(String key, String value){
-        if(ToolUtil.isNotEmpty(key)){
-            //发送验证码短信
-            HttpHeaders headers = new HttpHeaders();
-            // 以表单的方式提交
-            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-            //将请求头部和参数合成一个请求
-            MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
-            params.add("key", key);
-            params.add("value", value);
-            HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
-            String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/setValue_", requestEntity, String.class);
-            JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
-            if(jsonObject.getIntValue("code") != 200){
-                System.err.println("调用redis出错了");
-            }
+        if(ToolUtil.isNotEmpty(key) && ToolUtil.isNotEmpty(value)){
+            Jedis resource = jedisPool.getResource();
+            String set = resource.set(key, value);
+            closeJedis(resource);
         }
-
     }
 
 
@@ -56,22 +45,10 @@
      * @param time 秒
      */
     public void setStrValue(String key, String value, int time){
-        if(ToolUtil.isNotEmpty(key)){
-            //发送验证码短信
-            HttpHeaders headers = new HttpHeaders();
-            // 以表单的方式提交
-            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-            //将请求头部和参数合成一个请求
-            MultiValueMap<String, String> params = new LinkedMultiValueMap<>();
-            params.add("key", key);
-            params.add("value", value);
-            params.add("time", String.valueOf(time));
-            HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);
-            String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/setValue", requestEntity, String.class);
-            JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
-            if(jsonObject.getIntValue("code") != 200){
-                System.err.println("调用redis出错了");
-            }
+        if(ToolUtil.isNotEmpty(key) && ToolUtil.isNotEmpty(value)){
+            Jedis resource = jedisPool.getResource();
+            String setex = resource.setex(key, time, value);
+            closeJedis(resource);
         }
     }
 
@@ -83,19 +60,43 @@
      */
     public String getValue(String key){
         if(ToolUtil.isNotEmpty(key)){
-            HttpHeaders headers = new HttpHeaders();
-            // 以表单的方式提交
-            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-            //将请求头部和参数合成一个请求
-            MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
-            params.add("key", key);
-            HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
-            String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/getValue",requestEntity , String.class);
-            JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
-            if(jsonObject.getIntValue("code") != 200){
-                System.err.println("调用redis出错了");
+            Jedis resource = jedisPool.getResource();
+            String data = resource.get(key);
+            closeJedis(resource);
+            return data;
+        }
+        return null;
+    }
+
+
+    /**
+     * 批量获取
+     * @param kes
+     * @return
+     */
+    public List<Object> getValues(List<String> kes){
+        if(null != kes){
+            Jedis resource = jedisPool.getResource();
+            Pipeline pipelined = resource.pipelined();
+            for(String key : kes){
+                pipelined.get(key);
             }
-            return jsonObject.getString("data");
+            List<Object> list = pipelined.syncAndReturnAll();
+
+            closeJedis(resource);
+            pipelined.clear();
+            try {
+                pipelined.close();
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+            List<Object> data = new ArrayList<>();
+            for(Object o : list){
+                if(null != o){
+                    data.add(o);
+                }
+            }
+            return data;
         }
         return null;
     }
@@ -105,22 +106,134 @@
      * 删除key
      * @param key
      */
-    public String remove(String key){
+    public void remove(String key){
         if(ToolUtil.isNotEmpty(key)){
-            HttpHeaders headers = new HttpHeaders();
-            // 以表单的方式提交
-            headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
-            //将请求头部和参数合成一个请求
-            MultiValueMap<String, Object> params = new LinkedMultiValueMap<>();
-            params.add("key", key);
-            HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(params, headers);
-            String s = internalRestTemplate.postForObject("http://zuul-gateway/redis/remove",requestEntity , String.class);
-            JSONObject jsonObject = JSON.parseObject(s, JSONObject.class);
-            if(jsonObject.getIntValue("code") != 200){
-                System.err.println("调用redis出错了");
-            }
-            return jsonObject.getString("data");
+            Jedis resource = jedisPool.getResource();
+            Long del = resource.del(key);
+            closeJedis(resource);
         }
-        return null;
+    }
+
+
+    /**
+     * 向集合key添加数据
+     * @param key
+     * @param members
+     */
+    public void addSetValue(String key, String...members){
+        if(ToolUtil.isNotEmpty(key) && ToolUtil.isNotEmpty(members)){
+            Jedis resource = jedisPool.getResource();
+            Long sadd = resource.sadd(key, members);
+            resource.close();
+        }
+    }
+
+
+    /**
+     * 返回Set集合数据
+     * @param key
+     * @return
+     */
+    public Set<String> getSetAllValue(String key){
+        Set<String> smembers = new HashSet<>();
+        if(ToolUtil.isNotEmpty(key)){
+            Jedis resource = jedisPool.getResource();
+            smembers = resource.smembers(key);
+            resource.close();
+        }
+        return smembers;
+    }
+
+
+    /**
+     * 删除Set集合中的值
+     * @param key
+     * @param members
+     */
+    public void delSetValue(String key, String...members){
+        if(ToolUtil.isNotEmpty(key) && ToolUtil.isNotEmpty(members)){
+            Jedis resource = jedisPool.getResource();
+            Long sadd = resource.srem(key, members);
+            resource.close();
+        }
+    }
+
+
+    /**
+     * 删除资源
+     * @param jedis
+     */
+    public void closeJedis(Jedis jedis){
+        if(null != jedis){
+            jedis.close();
+        }
+    }
+
+
+    /**
+     * redis加锁
+     * @param key
+     * @param value
+     * @param time
+     * @return
+     */
+    public boolean lock(String key, String value, int time){
+        if(!StringUtils.isEmpty(key)){
+            key += "_lock";
+            Jedis resource = jedisPool.getResource();
+            String set = resource.set(key, value, "nx", "ex", time);
+            if("OK".equals(set)){
+                String finalKey = key;
+                timer = new Timer();
+                timer.schedule(new TimerTask() {
+                    @Override
+                    public void run() {
+                        System.err.println("定时任务启动");
+                        Jedis resource = jedisPool.getResource();
+                        resource.setex(finalKey, time, value);
+                        resource.close();
+                    }
+                }, 1000, 500);
+            }
+            resource.close();
+            return "OK".equals(set) ? true : false;
+        }
+        return false;
+    }
+
+    /**
+     * 获取redis锁
+     * @param time
+     * @return
+     */
+    public boolean lock(int time){
+        String uuid = UUID.randomUUID().toString();
+        return lock("redis", uuid, time);
+    }
+
+
+    /**
+     * redis释放锁
+     * @param key
+     * @return
+     */
+    public boolean unlock(String key){
+        if(!StringUtils.isEmpty(key)){
+            key += "_lock";
+            Jedis resource = jedisPool.getResource();
+            timer.cancel();//取消定时任务
+            Long del = resource.del(key);
+            resource.close();
+            return del != 0 ? true : false;
+        }
+        return false;
+    }
+
+    /**
+     * 删除锁
+     * @return
+     */
+    public boolean unlock(){
+        return unlock("redis");
     }
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/Realtime.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/Realtime.java
new file mode 100644
index 0000000..0874dc7
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/Realtime.java
@@ -0,0 +1,40 @@
+package com.supersavedriving.driver.modular.system.util.juhe;
+
+import lombok.Data;
+
+/**
+* 天气实况
+* @author pzb
+* @Date 2023/2/20 11:38
+*/
+@Data
+public class Realtime {
+    /**
+     * 天气情况,如:晴、多云
+     */
+    private String info;
+    /**
+     * 天气标识id,可参考小接口2
+     */
+    private String wid;
+    /**
+     * 温度,可能为空
+     */
+    private String temperature;
+    /**
+     * 湿度,可能为空
+     */
+    private String humidity;
+    /**
+     * 风向,可能为空
+     */
+    private String direct;
+    /**
+     * 风力,可能为空
+     */
+    private String power;
+    /**
+     * 空气质量指数,可能为空
+     */
+    private String aqi;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/WeatherRes.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/WeatherRes.java
new file mode 100644
index 0000000..4df8b04
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/WeatherRes.java
@@ -0,0 +1,24 @@
+package com.supersavedriving.driver.modular.system.util.juhe;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 天气返回结果
+ */
+@Data
+public class WeatherRes {
+    /**
+     * 返回码,0为查询成功
+     */
+    private Integer error_code;
+    /**
+     * 返回说明
+     */
+    private String reason;
+    /**
+     * 返回结果集
+     */
+    private  result;
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/WeatherUtil.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/WeatherUtil.java
new file mode 100644
index 0000000..3c19f2e
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/juhe/WeatherUtil.java
@@ -0,0 +1,87 @@
+package com.supersavedriving.driver.modular.system.util.juhe;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.supersavedriving.driver.core.util.ToolUtil;
+import com.supersavedriving.driver.modular.system.util.httpClinet.HttpClientUtil;
+import com.supersavedriving.driver.modular.system.util.httpClinet.HttpResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+
+/**
+* 天气工具类
+* @author pzb
+* @Date 2023/2/18 16:54
+*/
+public class WeatherUtil {
+
+    static Logger logger = LoggerFactory.getLogger("ServiceLog");
+
+    private final static String weather_type = "[{\"wid\":\"00\",\"weather\":\"晴\"},{\"wid\":\"01\",\"weather\":\"多云\"},{\"wid\":\"02\",\"weather\":\"阴\"},{\"wid\":\"03\",\"weather\":\"阵雨\"},{\"wid\":\"04\",\"weather\":\"雷阵雨\"},{\"wid\":\"05\",\"weather\":\"雷阵雨伴有冰雹\"},{\"wid\":\"06\",\"weather\":\"雨夹雪\"},{\"wid\":\"07\",\"weather\":\"小雨\"},{\"wid\":\"08\",\"weather\":\"中雨\"},{\"wid\":\"09\",\"weather\":\"大雨\"},{\"wid\":\"10\",\"weather\":\"暴雨\"},{\"wid\":\"11\",\"weather\":\"大暴雨\"},{\"wid\":\"12\",\"weather\":\"特大暴雨\"},{\"wid\":\"13\",\"weather\":\"阵雪\"},{\"wid\":\"14\",\"weather\":\"小雪\"},{\"wid\":\"15\",\"weather\":\"中雪\"},{\"wid\":\"16\",\"weather\":\"大雪\"},{\"wid\":\"17\",\"weather\":\"暴雪\"},{\"wid\":\"18\",\"weather\":\"雾\"},{\"wid\":\"19\",\"weather\":\"冻雨\"},{\"wid\":\"20\",\"weather\":\"沙尘暴\"},{\"wid\":\"21\",\"weather\":\"小到中雨\"},{\"wid\":\"22\",\"weather\":\"中到大雨\"},{\"wid\":\"23\",\"weather\":\"大到暴雨\"},{\"wid\":\"24\",\"weather\":\"暴雨到大暴雨\"},{\"wid\":\"25\",\"weather\":\"大暴雨到特大暴雨\"},{\"wid\":\"26\",\"weather\":\"小到中雪\"},{\"wid\":\"27\",\"weather\":\"中到大雪\"},{\"wid\":\"28\",\"weather\":\"大到暴雪\"},{\"wid\":\"29\",\"weather\":\"浮尘\"},{\"wid\":\"30\",\"weather\":\"扬沙\"},{\"wid\":\"31\",\"weather\":\"强沙尘暴\"},{\"wid\":\"53\",\"weather\":\"霾\"}]";
+
+    private final static String bad_weather = "[{\"wid\":\"03\",\"weather\":\"阵雨\"},{\"wid\":\"04\",\"weather\":\"雷阵雨\"},{\"wid\":\"05\",\"weather\":\"雷阵雨伴有冰雹\"},{\"wid\":\"06\",\"weather\":\"雨夹雪\"},{\"wid\":\"07\",\"weather\":\"小雨\"},{\"wid\":\"08\",\"weather\":\"中雨\"},{\"wid\":\"09\",\"weather\":\"大雨\"},{\"wid\":\"10\",\"weather\":\"暴雨\"},{\"wid\":\"11\",\"weather\":\"大暴雨\"},{\"wid\":\"12\",\"weather\":\"特大暴雨\"},{\"wid\":\"13\",\"weather\":\"阵雪\"},{\"wid\":\"14\",\"weather\":\"小雪\"},{\"wid\":\"15\",\"weather\":\"中雪\"},{\"wid\":\"16\",\"weather\":\"大雪\"},{\"wid\":\"17\",\"weather\":\"暴雪\"},{\"wid\":\"19\",\"weather\":\"冻雨\"},{\"wid\":\"20\",\"weather\":\"沙尘暴\"},{\"wid\":\"21\",\"weather\":\"小到中雨\"},{\"wid\":\"22\",\"weather\":\"中到大雨\"},{\"wid\":\"23\",\"weather\":\"大到暴雨\"},{\"wid\":\"24\",\"weather\":\"暴雨到大暴雨\"},{\"wid\":\"25\",\"weather\":\"大暴雨到特大暴雨\"},{\"wid\":\"26\",\"weather\":\"小到中雪\"},{\"wid\":\"27\",\"weather\":\"中到大雪\"},{\"wid\":\"28\",\"weather\":\"大到暴雪\"},{\"wid\":\"30\",\"weather\":\"扬沙\"},{\"wid\":\"31\",\"weather\":\"强沙尘暴\"},{\"wid\":\"53\",\"weather\":\"霾\"}]";
+
+    private final static String key = "aaebb3e5c18fd371257a2ab6b5670efe";
+
+    private static HttpClientUtil httpClientUtil = new HttpClientUtil();
+
+
+    /**
+     * 获取天气实况数据
+     * @param city  要查询的城市名称/id,城市名称如:温州、上海、北京,需要utf8 urlencode
+     * @return
+     */
+    public static Realtime queryNowWeather(String city){
+        if(ToolUtil.isEmpty(city)){
+            return null;
+        }
+        String url = "http://apis.juhe.cn/simpleWeather/query?city=" + city + "&key=" + key;
+        HttpResult httpResult = null;
+        try {
+            httpResult = httpClientUtil.pushHttpRequset("GET", url, null, null, "json");
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        if(httpResult.getCode() != 200){
+            logger.debug("查询天气失败:" + httpResult.getData());
+            return null;
+        }
+        String data = httpResult.getData();
+        JSONObject jsonObject = JSON.parseObject(data);
+        Integer error_code = jsonObject.getInteger("error_code");
+        if(0 != error_code){
+            logger.debug("查询天气失败:" + jsonObject.getString("reason"));
+            return null;
+        }
+        Realtime realtime = jsonObject.getObject("realtime", Realtime.class);
+        return realtime;
+    }
+
+
+    /**
+     * 查询是否是恶劣天气
+     * @param city
+     * @return
+     */
+    public static boolean isBadWeather(String city){
+        if(null == city){
+            return false;
+        }
+        Realtime realtime = queryNowWeather(city);
+        if(null == realtime){
+            return false;
+        }
+        String wid = realtime.getWid();
+        JSONArray badWeather = JSON.parseArray(bad_weather);
+        for (int i = 0; i < badWeather.size(); i++) {
+            JSONObject jsonObject = badWeather.getJSONObject(i);
+            String wid1 = jsonObject.getString("wid");
+            if(wid.equals(wid1)){
+                return true;
+            }
+        }
+        return false;
+    }
+}
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/AddOrderWarpper.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/AddOrderWarpper.java
index 8515c25..b46bc17 100644
--- a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/AddOrderWarpper.java
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/AddOrderWarpper.java
@@ -17,10 +17,10 @@
     private String startLng;
     @ApiModelProperty(value = "起点纬度", required = true, dataType = "string")
     private String startLat;
-    @ApiModelProperty(value = "终点地址", required = true, dataType = "string")
+    @ApiModelProperty(value = "终点地址", required = false, dataType = "string")
     private String endAddress;
-    @ApiModelProperty(value = "终点经度", required = true, dataType = "string")
+    @ApiModelProperty(value = "终点经度", required = false, dataType = "string")
     private String endLng;
-    @ApiModelProperty(value = "终点纬度", required = true, dataType = "string")
+    @ApiModelProperty(value = "终点纬度", required = false, dataType = "string")
     private String endLat;
 }
diff --git a/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java
new file mode 100644
index 0000000..f3fc7a3
--- /dev/null
+++ b/driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java
@@ -0,0 +1,48 @@
+package com.supersavedriving.driver.modular.system.warpper;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel
+public class OrderInfoWarpper {
+    @ApiModelProperty("订单id")
+    private Long id;
+    @ApiModelProperty("用户头像")
+    private String avatar;
+    @ApiModelProperty("用户名称")
+    private String userName;
+    @ApiModelProperty("用户电话")
+    private String userPhone;
+    @ApiModelProperty("下单次数")
+    private Integer orderTimes;
+    @ApiModelProperty("取消次数")
+    private Integer cancelTimes;
+    @ApiModelProperty("与用户距离")
+    private Double currentDistance;
+    @ApiModelProperty("订单来源(1=用户创建,2=司机创建)")
+    private Integer source;
+    @ApiModelProperty("下单时间")
+    private Long createTime;
+    @ApiModelProperty("起点")
+    private String startAddress;
+    @ApiModelProperty("起点纬度")
+    private String startLat;
+    @ApiModelProperty("起点经度")
+    private String startLng;
+    @ApiModelProperty("终点")
+    private String endAddress;
+    @ApiModelProperty("终点纬度")
+    private String endLat;
+    @ApiModelProperty("终点经度")
+    private String endLng;
+    @ApiModelProperty("预估费")
+    private Double estimatedPrice;
+    @ApiModelProperty("预估里程")
+    private Double estimatedMileage;
+    @ApiModelProperty("起步价")
+    private Double startPrice;
+    @ApiModelProperty("订单状态(101=待接单,102=已接单,103=前往预约点,104=到达预约点,105=开始服务,106=到达目的地,107=待评价,108=已完成,201=转单中,301=已取消)")
+    private Integer state;
+}

--
Gitblit v1.7.1