From 03c6572c7918beaa20365e69c9694a11f0d9948a Mon Sep 17 00:00:00 2001
From: hjl <1657978663@qq.com>
Date: 星期一, 01 七月 2024 10:13:26 +0800
Subject: [PATCH] feat: 代码初始化

---
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/EvaluateMapper.java                   |    9 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/WithdrawService.java                 |   45 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/EvaluateController.java           |    6 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketClient.java                 |   29 
 ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java |    2 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/Withdraw.java                           |    4 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/Order.java                          |   10 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/config/WebSocketConfig.java                  |   20 
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/KaptchaTextCreator.java                         |   40 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/Order.java                              |    4 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/MasterWorker.java                   |    8 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/OssController.java              |   78 ++
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/SiteController.java               |   11 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserController.java               |    2 
 ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/EvaluateMapper.xml                         |   10 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/vo/OrderListVO.java                        |    5 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java           |   10 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/MasterWorkerServiceImpl.java  |   28 
 ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java                                 |    2 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/HomePageController.java           |   12 
 ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/entity/Order.java                        |    8 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RecoveryServeController.java      |   18 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserManageController.java         |   74 +
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java              |   86 ++
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/WorkerProcess.java                  |    6 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/MasterWorkerService.java           |    8 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/UserServiceImpl.java            |    6 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/WithdrawMapper.java                   |   47 +
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/WorkerProcessServiceImpl.java   |    2 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/MasterWorkerServiceImpl.java    |    6 
 ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/MasterWorkerMapper.xml                   |   12 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Order.java                            |   10 
 ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/WorkerProcessMapper.xml                  |    2 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/AgreementServiceImpl.java       |    2 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RoleController.java               |    7 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RotateController.java             |    7 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/OrderQueryRequest.java               |   20 
 ruoyi-visual/ruoyi-monitor/src/main/java/com/ruoyi/modules/monitor/config/WebSecurityConfigurer.java |   11 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/WithdrawController.java           |  125 +++
 ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/WithdrawMapper.xml                         |   89 +
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RoleMenuController.java           |    2 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/WithdrawServiceImpl.java        |  174 ++++
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ObsUploadUtil.java          |    2 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/User.java                             |    4 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/UserWithdrawRecordVO.java                 |   40 
 ruoyi-service/ruoyi-user/src/main/resources/mapper/user/WithdrawMapper.xml                           |    2 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/MasterWorkerController.java     |   96 +
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/vx/HttpUtil.java                       |  195 +++++
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/UserMapper.java                       |   12 
 ruoyi-service/ruoyi-admin/src/main/resources/template/提现记录.xlsx                                      |    0 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/OrderMapper.java                      |   47 
 ruoyi-service/ruoyi-user/src/main/resources/mapper/user/RecoveryServeMapper.xml                      |    2 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/OrderService.java                    |   21 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderPageCountVO.java                     |   45 +
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java           |   81 +-
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RecoveryClassifyController.java   |   20 
 ruoyi-service/ruoyi-user/src/main/resources/mapper/user/UserMapper.xml                               |    1 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OssController.java                |   40 -
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/AgreementController.java          |    1 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/MasterWorkerService.java             |    4 
 ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/UserMapper.xml                             |   20 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/MasterWorker.java                     |    4 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/WorkerProcess.java                    |    4 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/UserService.java                     |    4 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketServer.java                 |  142 +++
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/OrderController.java                |    1 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/WithdrawExportRequest.java           |   31 
 ruoyi-service/ruoyi-admin/pom.xml                                                                    |   11 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/ProblemController.java            |    6 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/EvaluateServiceImpl.java        |    5 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/vx/WechatPayV3Util.java                |  113 +++
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Withdraw.java                         |    4 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/OrderCountRequest.java               |    2 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/EvaluateService.java                 |   11 
 ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/OrderMapper.xml                            |  165 +++
 75 files changed, 1,811 insertions(+), 382 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/entity/Order.java b/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/entity/Order.java
index 36a4f10..dd1c513 100644
--- a/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/entity/Order.java
+++ b/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/entity/Order.java
@@ -28,6 +28,14 @@
     @TableId("id")
     private Integer id;
 
+    @ApiModelProperty("下单城市")
+    @TableField("city")
+    private String city;
+
+    @ApiModelProperty("订单编号")
+    @TableField("order_number")
+    private String orderNumber;
+
     @ApiModelProperty("站点id")
     @TableField("site_id")
     private Integer siteId;
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
index ab93d3c..b087c3c 100644
--- a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/constant/Constants.java
@@ -213,6 +213,11 @@
     public static final Integer THREE = 3;
 
     /**
+     * 数字4
+     */
+    public static final Integer FOUR = 4;
+
+    /**
      * 数字5
      */
     public static final Integer FIVE = 5;
@@ -253,6 +258,11 @@
     public static final String DEFAULT_PASSWORD = "123456";
 
     /**
+     * 三端默认验证码
+     */
+    public static final String DEFAULT_PHONE_CODE = "123456";
+
+    /**
      * 手机号码正则
      */
     public static final String PHONE = "^1[34578]\\d{9}$";
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/ObsUploadUtil.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ObsUploadUtil.java
similarity index 98%
rename from ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/ObsUploadUtil.java
rename to ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ObsUploadUtil.java
index cda153f..2a80b87 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/ObsUploadUtil.java
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ObsUploadUtil.java
@@ -1,4 +1,4 @@
-package com.ruoyi.admin.utils;
+package com.ruoyi.common.core.utils;
 
 import com.obs.services.ObsClient;
 import com.obs.services.model.ObjectMetadata;
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/KaptchaTextCreator.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/KaptchaTextCreator.java
index f68e0fa..5c01527 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/KaptchaTextCreator.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/KaptchaTextCreator.java
@@ -1,69 +1,55 @@
 package com.ruoyi.gateway.config;
 
-import java.util.Random;
 import com.google.code.kaptcha.text.impl.DefaultTextCreator;
+
+import java.util.Random;
 
 /**
  * 验证码文本生成器
- * 
+ *
  * @author ruoyi
  */
-public class KaptchaTextCreator extends DefaultTextCreator
-{
+public class KaptchaTextCreator extends DefaultTextCreator {
     private static final String[] CNUMBERS = "0,1,2,3,4,5,6,7,8,9,10".split(",");
 
     @Override
-    public String getText()
-    {
+    public String getText() {
         Integer result = 0;
         Random random = new Random();
         int x = random.nextInt(10);
         int y = random.nextInt(10);
         StringBuilder suChinese = new StringBuilder();
         int randomoperands = random.nextInt(3);
-        if (randomoperands == 0)
-        {
+        if (randomoperands == 0) {
             result = x * y;
             suChinese.append(CNUMBERS[x]);
             suChinese.append("*");
             suChinese.append(CNUMBERS[y]);
-        }
-        else if (randomoperands == 1)
-        {
-            if ((x != 0) && y % x == 0)
-            {
+        } else if (randomoperands == 1) {
+            if ((x != 0) && y % x == 0) {
                 result = y / x;
                 suChinese.append(CNUMBERS[y]);
                 suChinese.append("/");
                 suChinese.append(CNUMBERS[x]);
-            }
-            else
-            {
+            } else {
                 result = x + y;
                 suChinese.append(CNUMBERS[x]);
                 suChinese.append("+");
                 suChinese.append(CNUMBERS[y]);
             }
-        }
-        else if (randomoperands == 2)
-        {
-            if (x >= y)
-            {
+        } else if (randomoperands == 2) {
+            if (x >= y) {
                 result = x - y;
                 suChinese.append(CNUMBERS[x]);
                 suChinese.append("-");
                 suChinese.append(CNUMBERS[y]);
-            }
-            else
-            {
+            } else {
                 result = y - x;
                 suChinese.append(CNUMBERS[y]);
                 suChinese.append("-");
                 suChinese.append(CNUMBERS[x]);
             }
-        }
-        else
-        {
+        } else {
             result = x + y;
             suChinese.append(CNUMBERS[x]);
             suChinese.append("+");
diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
index efa9e41..0e9052b 100644
--- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
+++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
@@ -69,7 +69,7 @@
         }
         String userid = JwtUtils.getUserId(claims);
         String username = JwtUtils.getUserName(claims);
-        if (StringUtils.isEmpty(userid) || StringUtils.isEmpty(username)) {
+        if (StringUtils.isEmpty(userid)) {
             return unauthorizedResponse(exchange, "令牌验证失败");
         }
 
diff --git a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
index b4dc309..7f8182c 100644
--- a/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
+++ b/ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
@@ -44,7 +44,7 @@
     @Override
     public Set<String> getMenuPermission(SysUser user) {
         Set<String> perms = new HashSet<String>();
-        Long roleId = user.getSysRole().getRoleId();
+        Long roleId = user.getRoleId();
         if (null == roleId) {
             perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId()));
         } else {
diff --git a/ruoyi-service/ruoyi-admin/pom.xml b/ruoyi-service/ruoyi-admin/pom.xml
index e5d8bb1..b231926 100644
--- a/ruoyi-service/ruoyi-admin/pom.xml
+++ b/ruoyi-service/ruoyi-admin/pom.xml
@@ -20,6 +20,17 @@
     <dependencies>
 
         <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-websocket</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.github.wechatpay-apiv3</groupId>
+            <artifactId>wechatpay-apache-httpclient</artifactId>
+            <version>0.4.7</version>
+        </dependency>
+
+        <dependency>
             <groupId>com.alibaba</groupId>
             <artifactId>easyexcel</artifactId>
             <version>3.3.0</version>
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/config/WebSocketConfig.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/config/WebSocketConfig.java
new file mode 100644
index 0000000..1d391b5
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/config/WebSocketConfig.java
@@ -0,0 +1,20 @@
+package com.ruoyi.admin.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.socket.server.standard.ServerEndpointExporter;
+
+/**
+ * @author HJL
+ * @version 1.0
+ * @since 2024-06-28 16:35
+ */
+@Configuration
+public class WebSocketConfig {
+
+    @Bean
+    public ServerEndpointExporter serverEndpointExporter() {
+        return new ServerEndpointExporter();
+    }
+
+}
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/AgreementController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/AgreementController.java
index 48c97fb..66a53fb 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/AgreementController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/AgreementController.java
@@ -35,7 +35,6 @@
      *
      * @param type 查询类型
      */
-    @RequiresPermissions(value = {"system_agreement", "system_operate"}, logical = Logical.OR)
     @ApiOperation(value = "根据类型获取注册协议、隐私政策、司机操作指南", tags = {"后台-隐私政策/司机操作指南"})
     @GetMapping(value = "/dataInfo")
     @ApiImplicitParams({
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/EvaluateController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/EvaluateController.java
index 9b4187a..4c1bc37 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/EvaluateController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/EvaluateController.java
@@ -48,16 +48,16 @@
     @ApiOperation(value = "订单评价分页查询列表", tags = {"后台-系统设置-订单评价管理"})
     @GetMapping(value = "/page")
     @ApiImplicitParams({
-            @ApiImplicitParam(value = "评价用户", name = "userName", dataType = "String"),
+            @ApiImplicitParam(value = "评价用户", name = "userNo", dataType = "String"),
             @ApiImplicitParam(value = "订单编号", name = "orderNumber", dataType = "String"),
             @ApiImplicitParam(value = "师傅姓名", name = "workerName", dataType = "String"),
             @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
             @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true)
     })
-    public R<IPage<EvaluatePageVO>> queryPageList(String userName, String orderNumber, String workerName,
+    public R<IPage<EvaluatePageVO>> queryPageList(String userNo, String orderNumber, String workerName,
                                                   @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
                                                   @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
-        return R.ok(evaluateService.queryPageList(userName, orderNumber, workerName, Page.of(pageNum, pageSize)));
+        return R.ok(evaluateService.queryPageList(userNo, orderNumber, workerName, Page.of(pageNum, pageSize)));
     }
 
     /**
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/HomePageController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/HomePageController.java
index 1b8392e..f5e8800 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/HomePageController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/HomePageController.java
@@ -50,12 +50,12 @@
     /**
      * 用户增量
      *
-     * @param cityIds 城市id
+     * @param cityList 城市列表
      */
     @ApiOperation(value = "后台-用户增量", tags = {"后台-首页"})
     @PostMapping(value = "/userTrends")
-    public R<List<UserTrendsVO>> userTrends(@RequestBody List<String> cityIds) {
-        return R.ok(userService.userTrends(cityIds));
+    public R<List<UserTrendsVO>> userTrends(@RequestBody List<String> cityList) {
+        return R.ok(userService.userTrends(cityList));
     }
 
     /**
@@ -72,12 +72,12 @@
     /**
      * 师傅接单排行
      *
-     * @param cityIds 城市id集合
+     * @param cityList 城市集合
      */
     @ApiOperation(value = "后台-师傅接单排行", tags = {"后台-首页"})
     @PostMapping(value = "/workerRanking")
-    public R<List<MasterWorkerRankVO>> workerRanking(@RequestBody List<String> cityIds) {
-        return R.ok(masterWorkerService.workerRanking(cityIds));
+    public R<List<MasterWorkerRankVO>> workerRanking(@RequestBody List<String> cityList) {
+        return R.ok(masterWorkerService.workerRanking(cityList));
     }
 
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java
index d24ece6..4302bd6 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java
@@ -3,14 +3,19 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.admin.entity.MasterWorker;
 import com.ruoyi.admin.entity.Order;
 import com.ruoyi.admin.request.OrderQueryRequest;
+import com.ruoyi.admin.service.MasterWorkerService;
 import com.ruoyi.admin.service.OrderService;
+import com.ruoyi.admin.sorcket.WebSocketServer;
 import com.ruoyi.admin.vo.OrderCountVO;
 import com.ruoyi.admin.vo.OrderDetailVO;
+import com.ruoyi.admin.vo.OrderPageCountVO;
 import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.SnowflakeIdWorker;
+import com.ruoyi.common.core.utils.bean.BeanUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -19,7 +24,9 @@
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
 import java.util.Arrays;
+import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -38,10 +45,26 @@
 
     @Resource
     private OrderService orderService;
+    @Resource
+    private MasterWorkerService masterWorkerService;
     /**
      * 雪花算法类
      */
     private static final SnowflakeIdWorker SNOW_FLAKE_ID_WORKER = new SnowflakeIdWorker(5, 5);
+
+    /**
+     * socket测试
+     */
+    @ApiOperation(value = "socket测试", tags = {"后台-订单管理"})
+    @GetMapping(value = "/socketTest")
+    public R<String> socketTest(@RequestParam String msg, @RequestParam String id) {
+        try {
+            WebSocketServer.sendInfo(msg, id);
+            return R.ok("消息推送成功!");
+        } catch (IOException e) {
+            return R.fail();
+        }
+    }
 
     /**
      * 根据前台用户id查询所有订单信息
@@ -85,6 +108,17 @@
     }
 
     /**
+     * 订单列表
+     *
+     * @param orderQueryRequest 订单列表查询参数
+     */
+    @ApiOperation(value = "订单列表-各订单数量统计", tags = {"后台-订单管理"})
+    @PostMapping(value = "/orderPageCount")
+    public R<OrderPageCountVO> orderPageCount(@RequestBody OrderQueryRequest orderQueryRequest) {
+        return R.ok(orderService.orderPageCount(orderQueryRequest));
+    }
+
+    /**
      * 站点详情
      *
      * @param id 站点id
@@ -110,6 +144,54 @@
         order.setType(Constants.ONE);
         order.setOrderNumber(String.valueOf(SNOW_FLAKE_ID_WORKER.nextId()));
         return orderService.save(order) ? R.ok() : R.fail();
+    }
+
+    /**
+     * 新增订单
+     * 后台订单与用户端及师傅端无关联
+     *
+     * @param type 1:订单派单;2:订单改派
+     */
+    @ApiOperation(value = "订单列表-订单派单/改派", tags = {"后台-订单管理"})
+    @GetMapping(value = "/reassignment")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "操作类型(1:订单派单;2:订单改派)", name = "type", dataType = "Integer", required = true),
+            @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "Integer", required = true),
+            @ApiImplicitParam(value = "服务人员id", name = "workerId", dataType = "Integer", required = true)
+    })
+    public R<String> reassignment(@RequestParam Integer type, @RequestParam Integer orderId,
+                                  @RequestParam Integer workerId) {
+        Order order = orderService.lambdaQuery().eq(Order::getId, orderId).eq(Order::getIsDelete, 0).one();
+        MasterWorker masterWorker = masterWorkerService.lambdaQuery()
+                .eq(MasterWorker::getId, workerId)
+                .eq(MasterWorker::getIsDelete, 0).one();
+        // 订单派单
+        boolean result = true;
+        if (Constants.ONE.equals(type)) {
+            order.setServerId(workerId);
+            order.setServerName(masterWorker.getRealName());
+            order.setServerPhone(masterWorker.getPhone());
+            order.setAcceptTime(new Date());
+            result = orderService.updateById(order);
+        } else if (Constants.TWO.equals(type)) {
+            order.setState(Constants.FIVE);
+            orderService.updateById(order);
+            Order itemOrder = new Order();
+            BeanUtils.copyProperties(order, itemOrder);
+            itemOrder.setId(null);
+            itemOrder.setServerId(workerId);
+            itemOrder.setServerName(masterWorker.getRealName());
+            itemOrder.setServerPhone(masterWorker.getPhone());
+            itemOrder.setAcceptTime(new Date());
+            itemOrder.setState(Constants.ONE);
+            result = orderService.save(itemOrder);
+        }
+        try {
+            WebSocketServer.sendInfo("您有一条新的订单,请注意查收!", String.valueOf(workerId));
+        } catch (IOException e) {
+            return R.fail("订单推送失败!");
+        }
+        return result ? R.ok() : R.fail();
     }
 
     /**
@@ -151,8 +233,8 @@
     @ApiImplicitParams({
             @ApiImplicitParam(value = "师傅姓名", name = "name", dataType = "String"),
             @ApiImplicitParam(value = "师傅电话", name = "phone", dataType = "String"),
-            @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer",required = true),
-            @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer",required = true)
+            @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
+            @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true)
     })
     public R<IPage<OrderCountVO>> orderCount(String name, String phone,
                                              @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OssController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OssController.java
index 0fd948a..a33a054 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OssController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OssController.java
@@ -1,12 +1,7 @@
 package com.ruoyi.admin.controller;
 
-import com.ruoyi.admin.entity.Order;
-import com.ruoyi.admin.service.OrderService;
-import com.ruoyi.admin.utils.ObsUploadUtil;
-import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.domain.R;
-import com.ruoyi.common.core.exception.GlobalException;
-import com.ruoyi.common.core.utils.GaoDeMapUtil;
+import com.ruoyi.common.core.utils.ObsUploadUtil;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -17,7 +12,6 @@
 import org.springframework.web.bind.annotation.RestController;
 import org.springframework.web.multipart.MultipartFile;
 
-import javax.annotation.Resource;
 import java.io.IOException;
 
 /**
@@ -30,9 +24,6 @@
 @Api(tags = "公共-文件上传")
 public class OssController {
 
-    @Resource
-    private OrderService orderService;
-
     @PostMapping("/upload")
     @ApiOperation(value = "文件上传", tags = "公共-文件上传")
     @ApiImplicitParams({
@@ -41,35 +32,6 @@
     public R<String> upload(@RequestParam("file") MultipartFile file) {
         try {
             return R.ok(ObsUploadUtil.obsUpload(file), "");
-        } catch (IOException e) {
-            return R.fail("文件上传失败!");
-        }
-    }
-
-    @PostMapping("/uploadPhoto")
-    @ApiOperation(value = "师傅端-上传完工照片", tags = "公共-文件上传")
-    @ApiImplicitParams({
-            @ApiImplicitParam(value = "照片", name = "file", dataType = "MultipartFile", required = true),
-            @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "Integer", required = true),
-            @ApiImplicitParam(value = "师傅所在经度", name = "longitude", dataType = "String", required = true),
-            @ApiImplicitParam(value = "师傅所在纬度", name = "latitude", dataType = "String", required = true)
-    })
-    public R<String> uploadPhoto(@RequestParam("file") MultipartFile file, @RequestParam String orderId,
-                                 @RequestParam String longitude, @RequestParam String latitude) {
-        // 校验经纬度
-        Order order = orderService.lambdaQuery().eq(Order::getIsDelete, orderId).eq(Order::getIsDelete, 0).one();
-        // 用户下单位置经纬度
-        String orderPosition = order.getLongitude() + "," + order.getLatitude();
-        // 师傅经纬度
-        String workerPosition = longitude + "," + latitude;
-        // 师傅当前位置离用户下单位置具体距离
-        Long distance = GaoDeMapUtil.getDistance(orderPosition, workerPosition).getDatas();
-        // 上传时判断是否在下单位置附件,距离大于某个值则 不允许上传
-        if (distance > Constants.THREE_THOUSAND) {
-            throw new GlobalException("您当前手机定位超出当前订单预约地址范围 3km,无法提供回收服务!");
-        }
-        try {
-            return R.ok(ObsUploadUtil.obsUpload(file));
         } catch (IOException e) {
             return R.fail("文件上传失败!");
         }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/ProblemController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/ProblemController.java
index 9e30c45..e8845bd 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/ProblemController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/ProblemController.java
@@ -6,6 +6,7 @@
 import com.ruoyi.admin.entity.Problem;
 import com.ruoyi.admin.service.ProblemService;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -39,6 +40,7 @@
      * @param pageNum  页码
      * @param pageSize 每页显示条数
      */
+    @RequiresPermissions("system_problem")
     @ApiOperation(value = "常见问题分页查询列表", tags = {"后台-系统设置-常见问题管理"})
     @GetMapping(value = "/page")
     @ApiImplicitParams({
@@ -65,6 +67,7 @@
      *
      * @param id 常见问题id
      */
+    @RequiresPermissions("system_problem")
     @ApiOperation(value = "常见问题详情", tags = {"后台-系统设置-常见问题管理"})
     @GetMapping(value = "/detail")
     @ApiImplicitParams({
@@ -79,6 +82,7 @@
      *
      * @param problem 常见问题信息
      */
+    @RequiresPermissions("system_problem")
     @ApiOperation(value = "新增常见问题", tags = {"后台-系统设置-常见问题管理"})
     @PostMapping(value = "/save")
     public R<String> save(@RequestBody Problem problem) {
@@ -90,6 +94,7 @@
      *
      * @param problem 常见问题信息
      */
+    @RequiresPermissions("system_problem")
     @ApiOperation(value = "修改常见问题", tags = {"后台-系统设置-常见问题管理"})
     @PostMapping(value = "/update")
     public R<String> update(@RequestBody Problem problem) {
@@ -101,6 +106,7 @@
      *
      * @param ids 常见问题多条id拼接
      */
+    @RequiresPermissions("system_problem")
     @ApiOperation(value = "批量删除常见问题", tags = {"后台-系统设置-常见问题管理"})
     @GetMapping(value = "/batchDelete")
     @ApiImplicitParams({
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RecoveryClassifyController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RecoveryClassifyController.java
index 1ee45c9..0e91f5b 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RecoveryClassifyController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RecoveryClassifyController.java
@@ -49,6 +49,7 @@
                                                     @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
         return R.ok(recoveryClassifyService.lambdaQuery().eq(RecoveryClassify::getIsDelete, 0)
                 .orderByDesc(RecoveryClassify::getSupClassify)
+                .orderByAsc(RecoveryClassify::getSort)
                 .orderByDesc(RecoveryClassify::getCreateTime)
                 .page(Page.of(pageNum, pageSize)));
     }
@@ -68,6 +69,25 @@
     }
 
     /**
+     * 是否首页推荐
+     */
+    @ApiOperation(value = "是否首页推荐", tags = {"后台-回收管理-回收分类管理"})
+    @GetMapping(value = "/recommend")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "分类id", name = "id", dataType = "Integer", required = true),
+            @ApiImplicitParam(value = "是否推荐 0未推荐;1已推荐", name = "recommend", dataType = "Integer", required = true)
+    })
+    public R<String> recommend(@RequestParam Integer id, @RequestParam Integer recommend) {
+        Integer[] arr = {0, 1};
+        boolean contains = Arrays.stream(arr).collect(Collectors.toList()).contains(recommend);
+        if (!contains) {
+            return R.fail("推荐状态异常!");
+        }
+        return recoveryClassifyService.lambdaUpdate().set(RecoveryClassify::getIsRecommend, recommend)
+                .eq(RecoveryClassify::getId, id).update() ? R.ok() : R.fail();
+    }
+
+    /**
      * 新增回收分类
      *
      * @param recoveryClassify 回收分类信息
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RecoveryServeController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RecoveryServeController.java
index 3d438bd..6554c0b 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RecoveryServeController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RecoveryServeController.java
@@ -14,6 +14,7 @@
 import com.ruoyi.admin.vo.RecoveryServeResultVO;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.utils.StringUtils;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -52,6 +53,7 @@
      * @param pageNum  页码
      * @param pageSize 每页显示条数
      */
+    @RequiresPermissions("serve_recycling_list")
     @ApiOperation(value = "回收服务分页查询列表", tags = {"后台-回收管理-回收服务管理"})
     @GetMapping(value = "/page")
     @ApiImplicitParams({
@@ -75,8 +77,20 @@
     }
 
     /**
+     * 回收服务列表
+     */
+    @RequiresPermissions("serve_recycling_list")
+    @ApiOperation(value = "回收服务列表", tags = {"后台-回收管理-回收服务管理"})
+    @GetMapping(value = "/list")
+    public R<List<RecoveryServe>> queryPageList() {
+        return R.ok(recoveryServeService.lambdaQuery().eq(RecoveryServe::getIsDelete, 0)
+                .orderByDesc(RecoveryServe::getCreateTime).list());
+    }
+
+    /**
      * 所属分类列表
      */
+    @RequiresPermissions("serve_recycling_list")
     @ApiOperation(value = "所属分类列表", tags = {"后台-回收管理-回收服务管理"})
     @GetMapping(value = "/typeList")
     public R<List<RecoveryClassify>> typeList() {
@@ -89,6 +103,7 @@
      *
      * @param id 回收服务id
      */
+    @RequiresPermissions("serve_recycling_list")
     @ApiOperation(value = "回收服务详情", tags = {"后台-回收管理-回收服务管理"})
     @GetMapping(value = "/detail")
     @ApiImplicitParams({
@@ -107,6 +122,7 @@
      *
      * @param recoveryServeRequest 回收服务信息
      */
+    @RequiresPermissions("serve_recycling_list")
     @ApiOperation(value = "新增回收服务", tags = {"后台-回收管理-回收服务管理"})
     @PostMapping(value = "/save")
     public R<String> save(@RequestBody RecoveryServeRequest recoveryServeRequest) {
@@ -133,6 +149,7 @@
      *
      * @param recoveryServeRequest 回收服务信息
      */
+    @RequiresPermissions("serve_recycling_list")
     @ApiOperation(value = "修改回收服务", tags = {"后台-回收管理-回收服务管理"})
     @PostMapping(value = "/update")
     public R<String> update(@RequestBody RecoveryServeRequest recoveryServeRequest) {
@@ -165,6 +182,7 @@
      *
      * @param ids 回收服务多条id拼接
      */
+    @RequiresPermissions("serve_recycling_list")
     @ApiOperation(value = "批量删除回收服务", tags = {"后台-回收管理-回收服务管理"})
     @GetMapping(value = "/batchDelete")
     @ApiImplicitParams({
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RoleController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RoleController.java
index 0f40da3..2bd0630 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RoleController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RoleController.java
@@ -13,6 +13,7 @@
 import com.ruoyi.admin.service.RoleService;
 import com.ruoyi.admin.vo.RoleDetailVO;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.system.api.model.LoginUser;
 import io.swagger.annotations.Api;
@@ -55,6 +56,7 @@
      * @param pageNum  页码
      * @param pageSize 每页显示条数
      */
+    @RequiresPermissions("power_role")
     @ApiOperation(value = "角色分页查询列表", tags = {"后台-权限管理-角色管理"})
     @GetMapping(value = "/page")
     @ApiImplicitParams({
@@ -70,6 +72,7 @@
     /**
      * 角色列表
      */
+    @RequiresPermissions("power_role")
     @ApiOperation(value = "角色列表", tags = {"后台-权限管理-账号管理"})
     @GetMapping(value = "/list")
     public R<List<Role>> list() {
@@ -85,6 +88,7 @@
      *
      * @param id 角色id
      */
+    @RequiresPermissions("power_role")
     @ApiOperation(value = "角色详情", tags = {"后台-权限管理-角色管理"})
     @GetMapping(value = "/detail")
     @ApiImplicitParams({
@@ -105,6 +109,7 @@
      *
      * @param roleRequest 角色信息
      */
+    @RequiresPermissions("power_role")
     @ApiOperation(value = "编辑角色", tags = {"后台-权限管理-角色管理"})
     @PostMapping(value = "/update")
     public R<RoleDetailVO> update(@RequestBody RoleRequest roleRequest) {
@@ -129,6 +134,7 @@
      *
      * @param roleRequest 角色信息
      */
+    @RequiresPermissions("power_role")
     @ApiOperation(value = "新增角色", tags = {"后台-权限管理-角色管理"})
     @PostMapping(value = "/save")
     public R<String> save(@RequestBody RoleRequest roleRequest) {
@@ -144,6 +150,7 @@
      *
      * @param ids 角色id拼接
      */
+    @RequiresPermissions("power_role")
     @ApiOperation(value = "批量删除角色", tags = {"后台-权限管理-角色管理"})
     @GetMapping(value = "/batchDelete")
     @ApiImplicitParams({
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RoleMenuController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RoleMenuController.java
index ec03534..9ef8df1 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RoleMenuController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RoleMenuController.java
@@ -4,6 +4,7 @@
 import com.ruoyi.admin.entity.Menu;
 import com.ruoyi.admin.service.MenuService;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -32,6 +33,7 @@
     /**
      * 菜单树
      */
+    @RequiresPermissions("power_role")
     @ApiOperation(value = "菜单树", tags = {"后台-权限管理-菜单权限"})
     @GetMapping(value = "/menuTree")
     public R<List<Menu>> menuTree() {
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RotateController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RotateController.java
index dbdbe92..73f6c0b 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RotateController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/RotateController.java
@@ -9,6 +9,7 @@
 import com.ruoyi.admin.service.RotateService;
 import com.ruoyi.admin.vo.RotateResultVO;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.security.annotation.RequiresPermissions;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
@@ -45,6 +46,7 @@
      * @param pageSize 每页显示条数
      * @return 封装分页数据
      */
+    @RequiresPermissions("system_rotate")
     @ApiOperation(value = "轮播图分页查询列表", tags = {"后台-系统设置-轮播图管理"})
     @GetMapping(value = "/page")
     @ApiImplicitParams({
@@ -59,6 +61,7 @@
     /**
      * 轮播图列表
      */
+    @RequiresPermissions("system_rotate")
     @GetMapping(value = "/bannerList")
     public R<List<Rotate>> bannerList() {
         return R.ok(rotateService.lambdaQuery().eq(Rotate::getIsDelete, 0)
@@ -71,6 +74,7 @@
      * @param id 轮播图id
      * @return 封装分页数据
      */
+    @RequiresPermissions("system_rotate")
     @ApiOperation(value = "轮播图详情", tags = {"后台-系统设置-轮播图管理"})
     @GetMapping(value = "/detail")
     @ApiImplicitParams({
@@ -95,6 +99,7 @@
      * @param rotate 轮播图信息
      * @return 封装分页数据
      */
+    @RequiresPermissions("system_rotate")
     @ApiOperation(value = "新增轮播图", tags = {"后台-系统设置-轮播图管理"})
     @PostMapping(value = "/save")
     public R<String> save(@RequestBody Rotate rotate) {
@@ -107,6 +112,7 @@
      * @param rotate 轮播图信息
      * @return 封装分页数据
      */
+    @RequiresPermissions("system_rotate")
     @ApiOperation(value = "修改轮播图", tags = {"后台-系统设置-轮播图管理"})
     @PostMapping(value = "/update")
     public R<String> update(@RequestBody Rotate rotate) {
@@ -119,6 +125,7 @@
      * @param ids 轮播图多条id拼接
      * @return 封装分页数据
      */
+    @RequiresPermissions("system_rotate")
     @ApiOperation(value = "批量删除轮播图", tags = {"后台-系统设置-轮播图管理"})
     @GetMapping(value = "/batchDelete")
     @ApiImplicitParams({
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/SiteController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/SiteController.java
index 32772ba..c331f0f 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/SiteController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/SiteController.java
@@ -53,6 +53,17 @@
     }
 
     /**
+     * 站点列表
+     */
+    @ApiOperation(value = "站点列表", tags = {"后台-系统设置-站点管理"})
+    @GetMapping(value = "/list")
+    public R<List<Site>> list() {
+        return R.ok(siteService.lambdaQuery().orderByDesc(Site::getCreateTime)
+                .eq(Site::getIsDelete, 0)
+                .list());
+    }
+
+    /**
      * 站点详情
      *
      * @param id 站点id
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserController.java
index 9f75649..381e785 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserController.java
@@ -83,7 +83,7 @@
      * @param id     后台账号id
      * @param enable 启用/关闭
      */
-    @ApiOperation(value = "启用/关闭用户账号", tags = {"后台-师傅管理-师傅列表管理"})
+    @ApiOperation(value = "启用/关闭用户账号", tags = {"用户管理-用户列表"})
     @GetMapping(value = "/enable")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "用户id", name = "id", dataType = "Integer", required = true),
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserManageController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserManageController.java
index 6a87e71..260bd64 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserManageController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserManageController.java
@@ -4,22 +4,23 @@
 import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.admin.entity.*;
-import com.ruoyi.admin.service.EvaluateService;
-import com.ruoyi.admin.service.OrderService;
-import com.ruoyi.admin.service.UserService;
-import com.ruoyi.admin.service.WithdrawService;
-import com.ruoyi.admin.vo.UserWithdrawRecordRequestVO;
+import com.ruoyi.admin.service.*;
+import com.ruoyi.admin.vo.EvaluatePageVO;
+import com.ruoyi.admin.vo.UserWithdrawRecordVO;
 import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.exception.GlobalException;
 import com.ruoyi.common.core.utils.StringUtils;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.*;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
 
 import javax.annotation.Resource;
-import javax.servlet.http.HttpServletResponse;
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -42,6 +43,8 @@
     private WithdrawService withdrawService;
     @Resource
     private UserService userService;
+    @Resource
+    private WithdrawalSettingService withdrawalSettingService;
 
     /**
      * 用户信息分页列表
@@ -139,11 +142,10 @@
             @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
             @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true)
     })
-    public R<IPage<Evaluate>> evaluateList(Integer userId,
-                                           @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
-                                           @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
-        return R.ok(evaluateService.lambdaQuery().eq(Evaluate::getUserId, userId)
-                .eq(Evaluate::getIsDelete, 0).page(Page.of(pageNum, pageSize)));
+    public R<IPage<EvaluatePageVO>> evaluateList(Integer userId,
+                                                 @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
+                                                 @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        return R.ok(evaluateService.evaluateList(userId, Page.of(pageNum, pageSize)));
     }
 
     /**
@@ -169,7 +171,10 @@
      */
     @ApiOperation(value = "关闭/开启审核", tags = {"后台-用户管理-用户列表"})
     @GetMapping(value = "/enableProcess")
-    public R<Boolean> enableProcess(@RequestParam Integer enableProcess) {
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "审核状态(0:未开启,1:已开启)", name = "enableProcess", dataType = "Integer", required = true)
+    })
+    public R<Boolean> enableProcess(@RequestParam("enableProcess") Integer enableProcess) {
         return R.ok(withdrawService.enableProcess(enableProcess));
     }
 
@@ -185,6 +190,17 @@
     }
 
     /**
+     * 全局审核状态
+     */
+    @ApiOperation(value = "全局审核状态", tags = {"后台-用户管理-用户列表"})
+    @GetMapping(value = "/withdrawState")
+    public R<WithdrawalSetting> withdrawState() {
+        // 全局审核设置
+        WithdrawalSetting setting = withdrawalSettingService.lambdaQuery().one();
+        return R.ok(setting);
+    }
+
+    /**
      * 用户所关联提现记录分页列表
      *
      * @param userId   用户id
@@ -192,14 +208,14 @@
      * @param pageSize 每页显示条数
      * @return 分页列表
      */
-    @ApiOperation(value = "用户详情/用户提现管理-提现记录分页列表", tags = {"后台-用户管理-用户列表"})
+    @ApiOperation(value = "用户详情-提现记录分页列表", tags = {"后台-用户管理-用户列表"})
     @GetMapping(value = "/withdrawList")
     @ApiImplicitParams({
-            @ApiImplicitParam(value = "用户id(用户提现管理模块 该值传nul)", name = "userId", dataType = "Integer"),
+            @ApiImplicitParam(value = "用户id", name = "userId", dataType = "Integer", required = true),
             @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
             @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true)
     })
-    public R<UserWithdrawRecordRequestVO> withdrawList(Integer userId,
+    public R<IPage<UserWithdrawRecordVO>> withdrawList(@RequestParam Integer userId,
                                                        @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
                                                        @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
         return R.ok(withdrawService.withdrawList(userId, Page.of(pageNum, pageSize)));
@@ -232,10 +248,10 @@
     @GetMapping(value = "/withdrawExamine")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "提现记录id", name = "id", dataType = "Integer", required = true),
-            @ApiImplicitParam(value = "审批意见", name = "opinion", dataType = "String", required = true),
+            @ApiImplicitParam(value = "审批意见", name = "opinion", dataType = "String"),
             @ApiImplicitParam(value = "审批同意/不同意(1同意;2驳回)", name = "state", dataType = "Integer", required = true)
     })
-    public R<String> withdrawExamine(@RequestParam Integer id, @RequestParam Integer state, @RequestParam String opinion) {
+    public R<String> withdrawExamine(@RequestParam Integer id, @RequestParam Integer state, String opinion) {
         Withdraw withdraw = withdrawService.lambdaQuery().eq(Withdraw::getId, id).eq(Withdraw::getIsDelete, 0)
                 .eq(Withdraw::getState, 0).one();
         if (null == withdraw) {
@@ -243,26 +259,24 @@
         }
         // 修改审批状态及审批意见
         withdraw.setState(state);
-        withdraw.setOpinions(opinion);
+        withdraw.setOpinion(opinion);
         // 同意提现申请,更改订单提现状态
         boolean update = true;
         if (Constants.ONE.equals(state)) {
             update = orderService.lambdaUpdate().set(Order::getIsWithdrawal, Constants.ONE)
                     .eq(Order::getId, withdraw.getOrderId()).eq(Order::getIsDelete, 0).update();
+            // 商家打款至用户微信零钱
+            User user = userService.lambdaQuery().eq(User::getId, withdraw.getUserId())
+                    .eq(User::getIsDelete, 0).one();
+            Order order = orderService.lambdaQuery().eq(Order::getId, withdraw.getOrderId())
+                    .eq(Order::getIsDelete, 0).one();
+            if (null == order) {
+                throw new GlobalException("订单信息异常!");
+            }
+            Boolean b = withdrawService.confirmWithdraw(user, order);
         }
         update = update && withdrawService.updateById(withdraw);
         return update ? R.ok(null, "审批成功!") : R.fail("审批失败!");
-    }
-
-    /**
-     * 用户提现记录导出
-     *
-     * @param idList 提现记录id
-     */
-    @ApiOperation(value = "用户提现管理-excel导出用户提现记录", tags = {"后台-用户管理-用户列表"})
-    @PostMapping(value = "/excelExport")
-    public R<String> excelExport(@RequestBody List<String> idList, HttpServletResponse response) {
-        return withdrawService.excelExport(idList, response);
     }
 
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/WithdrawController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/WithdrawController.java
index b6bbf54..ee5a35a 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/WithdrawController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/WithdrawController.java
@@ -1,19 +1,30 @@
 package com.ruoyi.admin.controller;
 
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.admin.entity.Order;
+import com.ruoyi.admin.entity.User;
 import com.ruoyi.admin.entity.Withdraw;
+import com.ruoyi.admin.request.WithdrawExportRequest;
+import com.ruoyi.admin.service.OrderService;
+import com.ruoyi.admin.service.UserService;
 import com.ruoyi.admin.service.WithdrawService;
+import com.ruoyi.admin.vo.UserWithdrawRecordVO;
+import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.exception.GlobalException;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
-import org.springframework.web.bind.annotation.GetMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * <p>
@@ -25,25 +36,125 @@
  */
 @RestController
 @RequestMapping("/withdraw")
-@Api(tags = {"后台-用户管理-用户列表"})
+@Api(tags = {"后台-用户管理-提现列表"})
 public class WithdrawController {
 
     @Resource
     private WithdrawService withdrawService;
+    @Resource
+    private OrderService orderService;
+    @Resource
+    private UserService userService;
+
+    /**
+     * 用户所关联提现记录分页列表
+     *
+     * @param pageNum  页码
+     * @param pageSize 每页显示条数
+     * @return 分页列表
+     */
+    @ApiOperation(value = "用户提现管理-提现记录分页列表", tags = {"后台-用户管理-提现列表"})
+    @GetMapping(value = "/withdrawPage")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "用户昵称", name = "nickname", dataType = "String"),
+            @ApiImplicitParam(value = "手机号", name = "userPhone", dataType = "String"),
+            @ApiImplicitParam(value = "申请时间", name = "applyForTime", dataType = "String"),
+            @ApiImplicitParam(value = "审核状态(0待审核;1已通过;2已驳回)", name = "state", dataType = "Integer"),
+            @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
+            @ApiImplicitParam(value = "每页条数", name = "pageSize", dataType = "Integer", required = true)
+    })
+    public R<IPage<UserWithdrawRecordVO>> withdrawPage(String nickname, String userPhone,
+                                                       String applyForTime, Integer state,
+                                                       @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
+                                                       @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
+        return R.ok(withdrawService.withdrawPage(nickname, userPhone, applyForTime, state, Page.of(pageNum, pageSize)));
+    }
 
     /**
      * 查看提现记录详情
      *
      * @param id 提现记录id
      */
-    @ApiOperation(value = "提现记录详情", tags = {"后台-用户管理-用户列表"})
+    @ApiOperation(value = "提现记录详情", tags = {"后台-用户管理-提现列表"})
     @GetMapping(value = "/withdrawRecordDetail")
     @ApiImplicitParams({
             @ApiImplicitParam(value = "提现记录id", name = "id", dataType = "Integer", required = true)
     })
     public R<Withdraw> withdrawRecordDetail(@RequestParam Integer id) {
-        Withdraw withdraw = withdrawService.lambdaQuery().eq(Withdraw::getId, id).eq(Withdraw::getIsDelete, 0).one();
+        Withdraw withdraw = withdrawService.lambdaQuery().eq(Withdraw::getId, id)
+                .eq(Withdraw::getIsDelete, 0).one();
         return R.ok(withdraw);
     }
 
+    /**
+     * 提现管理-提现审批
+     *
+     * @param id      提现记录id
+     * @param state   审批结果
+     * @param opinion 审批意见
+     */
+    @ApiOperation(value = "提现管理-提现审批", tags = {"后台-用户管理-提现列表"})
+    @GetMapping(value = "/withdrawExamine")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "提现记录id", name = "id", dataType = "Integer", required = true),
+            @ApiImplicitParam(value = "审批意见", name = "opinion", dataType = "String"),
+            @ApiImplicitParam(value = "审批同意/不同意(1同意;2驳回)", name = "state", dataType = "Integer", required = true)
+    })
+    public R<String> withdrawExamine(@RequestParam Integer id, @RequestParam Integer state, String opinion) {
+        Withdraw withdraw = withdrawService.lambdaQuery().eq(Withdraw::getId, id).eq(Withdraw::getIsDelete, 0)
+                .eq(Withdraw::getState, 0).one();
+        if (null == withdraw) {
+            return R.fail(503, "当前提现记录审批状态异常!");
+        }
+        // 修改审批状态及审批意见
+        withdraw.setState(state);
+        withdraw.setOpinion(opinion);
+        // 同意提现申请,更改订单提现状态
+        boolean update = true;
+        if (Constants.ONE.equals(state)) {
+            update = orderService.lambdaUpdate().set(Order::getIsWithdrawal, Constants.ONE)
+                    .eq(Order::getId, withdraw.getOrderId()).eq(Order::getIsDelete, 0).update();
+            // 商家打款至用户微信零钱
+            User user = userService.lambdaQuery().eq(User::getId, withdraw.getUserId())
+                    .eq(User::getIsDelete, 0).one();
+            Order order = orderService.lambdaQuery().eq(Order::getId, withdraw.getOrderId())
+                    .eq(Order::getIsDelete, 0).one();
+            if (null == order) {
+                throw new GlobalException("订单信息异常!");
+            }
+            Boolean b = withdrawService.confirmWithdraw(user, order);
+        }
+        update = update && withdrawService.updateById(withdraw);
+        return update ? R.ok(null, "审批成功!") : R.fail("审批失败!");
+    }
+
+    /**
+     * 用户提现记录导出
+     *
+     * @param exportRequest 提现记录
+     */
+    @ApiOperation(value = "用户提现管理-excel导出用户提现记录", tags = {"后台-用户管理-提现列表"})
+    @PostMapping(value = "/excelExport")
+    public R<String> excelExport(@RequestBody WithdrawExportRequest exportRequest, HttpServletResponse response) {
+        return withdrawService.excelExport(exportRequest, response);
+    }
+
+    /**
+     * 批量删除提现记录
+     *
+     * @param ids 轮播图多条id拼接
+     * @return 封装分页数据
+     */
+    @ApiOperation(value = "批量删除提现记录", tags = {"后台-用户管理-提现列表"})
+    @GetMapping(value = "/batchDelete")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "多个id ',' 拼接", name = "ids", dataType = "String", required = true)
+    })
+    public R<String> batchDelete(@RequestParam String ids) {
+        List<String> idList = Arrays.stream(ids.split(",")).collect(Collectors.toList());
+        List<Withdraw> list = withdrawService.lambdaQuery().in(Withdraw::getId, idList).list();
+        list.forEach(data -> data.setIsDelete(1));
+        return withdrawService.updateBatchById(list) ? R.ok() : R.fail();
+    }
+
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/MasterWorker.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/MasterWorker.java
index 427fcb6..e6350a9 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/MasterWorker.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/MasterWorker.java
@@ -33,10 +33,6 @@
     @TableField("city")
     private String city;
 
-    @ApiModelProperty("服务城市id")
-    @TableField("city_id")
-    private Integer cityId;
-
     @ApiModelProperty("用户编号(用户昵称/用户id)")
     @TableField("user_number")
     private String userNumber;
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Order.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Order.java
index c978062..a044821 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Order.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Order.java
@@ -27,8 +27,12 @@
 @ApiModel(value = "Order对象", description = "订单管理")
 public class Order extends BaseEntity {
 
-    @TableId(value = "id",type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
+
+    @ApiModelProperty("下单城市")
+    @TableField("city")
+    private String city;
 
     @ApiModelProperty("订单编号")
     @TableField("order_number")
@@ -126,4 +130,8 @@
     @TableField("is_withdrawal")
     private Integer isWithdrawal;
 
+    @ApiModelProperty("再投原因")
+    @TableField(exist = false)
+    private String applyReason;
+
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/User.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/User.java
index 9ddbee8..8fd4c43 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/User.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/User.java
@@ -51,4 +51,8 @@
     @TableField("state")
     private Integer state;
 
+    @ApiModelProperty("微信OpenId")
+    @TableField("open_id")
+    private String openId;
+
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Withdraw.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Withdraw.java
index 8ee0013..a6d1acb 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Withdraw.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Withdraw.java
@@ -52,8 +52,8 @@
     private Integer state;
 
     @ApiModelProperty("审批意见")
-    @TableField("opinions")
-    private String opinions;
+    @TableField("opinion")
+    private String opinion;
 
     @ApiModelProperty("订单id")
     @TableField("order_id")
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/WorkerProcess.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/WorkerProcess.java
index b985c0c..1ff9f66 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/WorkerProcess.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/WorkerProcess.java
@@ -78,7 +78,7 @@
     private Integer state;
 
     @ApiModelProperty("审批意见")
-    @TableField("examine_opinion")
-    private String examineOpinion;
+    @TableField("opinion")
+    private String opinion;
 
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/EvaluateMapper.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/EvaluateMapper.java
index c199159..090068c 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/EvaluateMapper.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/EvaluateMapper.java
@@ -27,4 +27,13 @@
      * @return 分页
      */
     IPage<EvaluatePageVO> queryPageList(@Param("userName") String userName, @Param("orderNumber") String orderNumber, @Param("workerName") String workerName, Page<Object> page);
+
+    /**
+     * 用户所关联评价记录分页列表
+     *
+     * @param userId 用户id
+     * @param page   分页
+     * @return 分页列表
+     */
+    IPage<EvaluatePageVO> evaluateList(@Param("userId") Integer userId, Page<EvaluatePageVO> page);
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/OrderMapper.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/OrderMapper.java
index 04fe42f..8f8214c 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/OrderMapper.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/OrderMapper.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.ruoyi.admin.entity.Order;
+import com.ruoyi.admin.request.OrderQueryRequest;
 import com.ruoyi.admin.vo.OrderCountVO;
 import com.ruoyi.admin.vo.OrderQueryVO;
 import org.apache.ibatis.annotations.Param;
@@ -24,49 +25,49 @@
     /**
      * 查询本年订单数量
      *
-     * @param cityId     城市id集合
+     * @param cityList   城市集合
      * @param orderState 订单状态
      * @param startTime  开始日期
      * @param endTime    结束日期
      * @return 本年订单数量
      */
-    List<OrderQueryVO> orderCountByYear(@Param("ids") List<String> cityId, @Param("orderState") Integer orderState,
+    List<OrderQueryVO> orderCountByYear(@Param("cityList") List<String> cityList, @Param("orderState") Integer orderState,
                                         @Param("startTime") String startTime, @Param("endTime") String endTime);
 
     /**
      * 查询本月订单数量
      *
-     * @param cityId     城市id集合
+     * @param cityList   城市集合
      * @param orderState 订单状态
      * @param startTime  开始日期
      * @param endTime    结束日期
      * @return 本年订单数量
      */
-    List<OrderQueryVO> orderCountByMonth(@Param("ids") List<String> cityId, @Param("orderState") Integer orderState,
+    List<OrderQueryVO> orderCountByMonth(@Param("cityList") List<String> cityList, @Param("orderState") Integer orderState,
                                          @Param("startTime") String startTime, @Param("endTime") String endTime);
 
     /**
      * 查询本周订单数量
      *
-     * @param cityId     城市id集合
+     * @param cityList   城市集合
      * @param orderState 订单状态
      * @param startTime  开始日期
      * @param endTime    结束日期
      * @return 本年订单数量
      */
-    List<OrderQueryVO> orderCountByWeek(@Param("ids") List<String> cityId, @Param("orderState") Integer orderState,
+    List<OrderQueryVO> orderCountByWeek(@Param("cityList") List<String> cityList, @Param("orderState") Integer orderState,
                                         @Param("startTime") String startTime, @Param("endTime") String endTime);
 
     /**
      * 查询当天订单数量
      *
-     * @param cityId     城市id集合
+     * @param cityList   城市集合
      * @param orderState 订单状态
      * @param startTime  开始日期
      * @param endTime    结束日期
      * @return 本年订单数量
      */
-    List<OrderQueryVO> orderCountByToday(@Param("ids") List<String> cityId, @Param("orderState") Integer orderState,
+    List<OrderQueryVO> orderCountByToday(@Param("cityList") List<String> cityList, @Param("orderState") Integer orderState,
                                          @Param("startTime") String startTime, @Param("endTime") String endTime);
 
     /**
@@ -74,26 +75,27 @@
      *
      * @param startDateStr 季度开始时间
      * @param endDateStr   季度结束时间
-     * @param cityIdList   城市id
+     * @param cityList     城市集合
      * @return 总交易额
      */
-    BigDecimal totalMoneyByQuarter(@Param("start") String startDateStr, @Param("end") String endDateStr, @Param("ids") List<String> cityIdList);
+    BigDecimal totalMoneyByQuarter(@Param("start") String startDateStr, @Param("end") String endDateStr,
+                                   @Param("cityList") List<String> cityList);
 
     /**
      * 查询整个年度的交易额(订单状态为:已完工)
      *
-     * @param cityIdList 城市id
+     * @param cityList 城市集合
      * @return 总交易额
      */
-    BigDecimal totalMoneyByYear(@Param("ids") List<String> cityIdList);
+    BigDecimal totalMoneyByYear(@Param("cityList") List<String> cityList);
 
     /**
      * 查询整个月度的交易额(订单状态为:已完工)
      *
-     * @param cityIdList 城市id
+     * @param cityList 城市列表
      * @return 总交易额
      */
-    BigDecimal totalMoneyByMonth(@Param("ids") List<String> cityIdList);
+    BigDecimal totalMoneyByMonth(@Param("cityList") List<String> cityList);
 
     /**
      * 订单管理-订单统计
@@ -104,4 +106,21 @@
      * @return 分页统计
      */
     IPage<OrderCountVO> orderCount(@Param("name") String name, @Param("phone") String phone, Page<OrderCountVO> page);
+
+    /**
+     * 订单列表
+     *
+     * @param orderQueryRequest 订单列表查询参数
+     * @param page              分页
+     * @return 分页
+     */
+    IPage<Order> queryPage(@Param("data") OrderQueryRequest orderQueryRequest, Page<Order> page);
+
+    /**
+     * 订单管理分页模块,订单数量统计
+     *
+     * @param orderQueryRequest 请求参数
+     * @return 统计数量
+     */
+    List<Order> orderPageCount(@Param("data") OrderQueryRequest orderQueryRequest);
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/UserMapper.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/UserMapper.java
index 06c2b7f..24738bf 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/UserMapper.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/UserMapper.java
@@ -22,24 +22,24 @@
     /**
      * 获取用户增量趋势
      *
-     * @param cityIds 城市id集合
+     * @param city 城市id集合
      * @return 折线图数据
      */
-    List<UserTrendsVO> userTrends(@Param("ids") List<String> cityIds);
+    List<UserTrendsVO> userTrends(@Param("city") List<String> city);
 
     /**
      * 统计本年度,注册用户数量
      *
-     * @param ids 城市id
+     * @param cityList 城市集合
      * @return 注册用户数量
      */
-    Long increaseNumberByYear(@Param("ids") List<String> ids);
+    Long increaseNumberByYear(@Param("cityList") List<String> cityList);
 
     /**
      * 统计本月,注册用户数量
      *
-     * @param cityIdList 城市id
+     * @param cityList 城市列表
      * @return 注册用户数量
      */
-    Long increaseNumberByMonth(@Param("ids") List<String> cityIdList);
+    Long increaseNumberByMonth(@Param("cityList") List<String> cityList);
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/WithdrawMapper.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/WithdrawMapper.java
index 056fa8e..26d3bd2 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/WithdrawMapper.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/WithdrawMapper.java
@@ -23,26 +23,26 @@
     /**
      * 获取用户提现金额
      *
-     * @param cityIdList 城市id
+     * @param cityList 城市集合
      * @return 总金额
      */
-    BigDecimal withdrawalTotalMoney(@Param("ids") List<String> cityIdList);
+    BigDecimal withdrawalTotalMoney(@Param("cityList") List<String> cityList);
 
     /**
      * 年度查询
      *
-     * @param cityIdList 城市id
+     * @param cityList 城市列表
      * @return 年度提现总额
      */
-    BigDecimal withdrawalTotalMoneyByYear(@Param("ids") List<String> cityIdList);
+    BigDecimal withdrawalTotalMoneyByYear(@Param("cityList") List<String> cityList);
 
     /**
      * 月度查询
      *
-     * @param cityIdList 城市id
+     * @param cityList 城市列表
      * @return 年度提现总额
      */
-    BigDecimal withdrawalTotalMoneyByMonth(@Param("ids") List<String> cityIdList);
+    BigDecimal withdrawalTotalMoneyByMonth(@Param("cityList") List<String> cityList);
 
     /**
      * 用户所关联提现记录分页列表
@@ -52,4 +52,39 @@
      * @return 分页列表
      */
     IPage<UserWithdrawRecordVO> withdrawList(@Param("userId") Integer userId, Page<UserWithdrawRecordVO> page);
+
+    /**
+     * 用户所关联提现记录分页列表
+     *
+     * @param nickname     用户名称
+     * @param userPhone    用户手机号
+     * @param applyForTime 申请时间
+     * @param state        审核状态
+     * @param page         分页
+     * @return 分页列表
+     */
+    IPage<UserWithdrawRecordVO> withdrawPage(@Param("name") String nickname, @Param("phone") String userPhone,
+                                             @Param("time") String applyForTime,
+                                             @Param("state") Integer state, Page<UserWithdrawRecordVO> page);
+
+    /**
+     * 提现记录列表
+     *
+     * @param nickname     用户名称
+     * @param userPhone    用户手机号
+     * @param applyForTime 申请时间
+     * @param state        审核状态
+     * @return 分页列表
+     */
+    List<UserWithdrawRecordVO> exportList(@Param("name") String nickname, @Param("phone") String userPhone,
+                                          @Param("time") String applyForTime,
+                                          @Param("state") Integer state);
+
+    /**
+     * 根据所选id导出
+     *
+     * @param ids 提现记录ids
+     * @return 列表
+     */
+    List<UserWithdrawRecordVO> exportByIdList(List<String> ids);
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/OrderCountRequest.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/OrderCountRequest.java
index 299e2c6..bb209e0 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/OrderCountRequest.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/OrderCountRequest.java
@@ -17,7 +17,7 @@
 public class OrderCountRequest {
 
     @ApiModelProperty("所选城市id集合")
-    private List<String> cityIdList;
+    private List<String> cityList;
 
     @ApiModelProperty("查询订单状态(全部订单:该字段不传值;其他状态(0:待派单;1:待上门;2:待完工;3:已完结;4:已取消;5:已改派))")
     private Integer orderState;
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/OrderQueryRequest.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/OrderQueryRequest.java
index 2ea4174..6c6b4d1 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/OrderQueryRequest.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/OrderQueryRequest.java
@@ -4,8 +4,6 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
-import java.util.Date;
-
 /**
  * @author HJL
  * @version 1.0
@@ -36,19 +34,25 @@
     @ApiModelProperty("师傅电话")
     private String workerPhone;
 
-    @ApiModelProperty("下单时间")
-    private Date orderTime;
+    @ApiModelProperty("下单开始时间")
+    private String orderTimeStart;
 
-    @ApiModelProperty("预约上门时间")
-    private Date time;
+    @ApiModelProperty("下单结束时间")
+    private String orderTimeEnd;
+
+    @ApiModelProperty("预约上门开始时间")
+    private String startTime;
+
+    @ApiModelProperty("预约上门结束时间")
+    private String endTime;
 
     @ApiModelProperty("站点名称")
     private String serveName;
 
     @ApiModelProperty(value = "页码", required = true)
-    private Integer pageNum;
+    private Integer pageNum = 1;
 
     @ApiModelProperty(value = "每页显示条数", required = true)
-    private Integer pageSize;
+    private Integer pageSize = 10;
 
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/WithdrawExportRequest.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/WithdrawExportRequest.java
new file mode 100644
index 0000000..5c8b402
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/request/WithdrawExportRequest.java
@@ -0,0 +1,31 @@
+package com.ruoyi.admin.request;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author HJL
+ * @version 1.0
+ * @since 2024-06-28 11:31
+ */
+@Data
+public class WithdrawExportRequest {
+
+    @ApiModelProperty("用户昵称")
+    private String nickname;
+
+    @ApiModelProperty("手机号")
+    private String userPhone;
+
+    @ApiModelProperty("申请时间")
+    private String applyForTime;
+
+    @ApiModelProperty("提现状态")
+    private Integer state;
+
+    @ApiModelProperty("所选数据id")
+    private List<String> idList;
+
+}
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/EvaluateService.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/EvaluateService.java
index eb495cb..fbe5850 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/EvaluateService.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/EvaluateService.java
@@ -2,8 +2,8 @@
 
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.ruoyi.admin.entity.Evaluate;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.admin.entity.Evaluate;
 import com.ruoyi.admin.vo.EvaluatePageVO;
 
 /**
@@ -26,4 +26,13 @@
      * @return 分页
      */
     IPage<EvaluatePageVO> queryPageList(String userName, String orderNumber, String workerName, Page<Object> page);
+
+    /**
+     * 用户所关联评价记录分页列表
+     *
+     * @param userId 用户id
+     * @param page   分页
+     * @return 分页列表
+     */
+    IPage<EvaluatePageVO> evaluateList(Integer userId, Page<EvaluatePageVO> page);
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/MasterWorkerService.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/MasterWorkerService.java
index 27a85bc..0261ace 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/MasterWorkerService.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/MasterWorkerService.java
@@ -19,8 +19,8 @@
     /**
      * 师傅接单排行
      *
-     * @param cityIds 城市id集合
+     * @param cityList 城市集合
      * @return 排行榜
      */
-    List<MasterWorkerRankVO> workerRanking(List<String> cityIds);
+    List<MasterWorkerRankVO> workerRanking(List<String> cityList);
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/OrderService.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/OrderService.java
index be5a503..4ef43d7 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/OrderService.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/OrderService.java
@@ -8,6 +8,7 @@
 import com.ruoyi.admin.request.OrderQueryRequest;
 import com.ruoyi.admin.vo.OrderCountVO;
 import com.ruoyi.admin.vo.OrderDetailVO;
+import com.ruoyi.admin.vo.OrderPageCountVO;
 import com.ruoyi.admin.vo.OrderResultVO;
 import com.ruoyi.common.core.domain.R;
 
@@ -38,26 +39,26 @@
      *
      * @param startDateStr 季度开始时间
      * @param endDateStr   季度结束时间
-     * @param cityIdList   城市id
+     * @param cityList     城市列表
      * @return 总交易额
      */
-    BigDecimal totalMoneyByQuarter(String startDateStr, String endDateStr, List<String> cityIdList);
+    BigDecimal totalMoneyByQuarter(String startDateStr, String endDateStr, List<String> cityList);
 
     /**
      * 查询整个年度的交易额(订单状态为:已完工)
      *
-     * @param cityIdList 城市id
+     * @param cityList 城市列表
      * @return 总交易额
      */
-    BigDecimal totalMoneyByYear(List<String> cityIdList);
+    BigDecimal totalMoneyByYear(List<String> cityList);
 
     /**
      * 查询整个月度的交易额(订单状态为:已完工)
      *
-     * @param cityIdList 城市id
+     * @param cityList 城市列表
      * @return 总交易额
      */
-    BigDecimal totalMoneyByMonth(List<String> cityIdList);
+    BigDecimal totalMoneyByMonth(List<String> cityList);
 
     /**
      * excel模板导出
@@ -93,4 +94,12 @@
      * @return 分页统计
      */
     IPage<OrderCountVO> orderCount(String name, String phone, Page<OrderCountVO> page);
+
+    /**
+     * 订单管理分页模块,订单数量统计
+     *
+     * @param orderQueryRequest 请求参数
+     * @return 统计数量
+     */
+    OrderPageCountVO orderPageCount(OrderQueryRequest orderQueryRequest);
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/UserService.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/UserService.java
index a4359f9..84cddc8 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/UserService.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/UserService.java
@@ -20,10 +20,10 @@
     /**
      * 获取用户增量趋势
      *
-     * @param cityIds 城市id集合
+     * @param city 城市集合
      * @return 折线图数据
      */
-    List<UserTrendsVO> userTrends(List<String> cityIds);
+    List<UserTrendsVO> userTrends(List<String> city);
 
     /**
      * 用户数据统计
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/WithdrawService.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/WithdrawService.java
index 1cbf321..38dbecf 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/WithdrawService.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/WithdrawService.java
@@ -1,10 +1,13 @@
 package com.ruoyi.admin.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.admin.entity.Order;
+import com.ruoyi.admin.entity.User;
 import com.ruoyi.admin.entity.Withdraw;
 import com.ruoyi.admin.entity.WithdrawalSetting;
-import com.ruoyi.admin.vo.UserWithdrawRecordRequestVO;
+import com.ruoyi.admin.request.WithdrawExportRequest;
 import com.ruoyi.admin.vo.UserWithdrawRecordVO;
 import com.ruoyi.common.core.domain.R;
 
@@ -25,35 +28,35 @@
     /**
      * excel模板导出
      *
-     * @param idList   提现记录id
+     * @param exportRequest   提现记录
      * @param response 响应体
      * @return 导出结果
      */
-    R<String> excelExport(List<String> idList, HttpServletResponse response);
+    R<String> excelExport(WithdrawExportRequest exportRequest, HttpServletResponse response);
 
     /**
      * 获取用户提现金额
      *
-     * @param cityIdList 城市id
+     * @param cityList 城市集合
      * @return 总金额
      */
-    BigDecimal withdrawalTotalMoney(List<String> cityIdList);
+    BigDecimal withdrawalTotalMoney(List<String> cityList);
 
     /**
      * 年度查询
      *
-     * @param cityIdList 城市id
+     * @param cityList 城市集合
      * @return 年度提现总额
      */
-    BigDecimal withdrawalTotalMoneyByYear(List<String> cityIdList);
+    BigDecimal withdrawalTotalMoneyByYear(List<String> cityList);
 
     /**
      * 月度查询
      *
-     * @param cityIdList 城市id
+     * @param cityList 城市列表
      * @return 年度提现总额
      */
-    BigDecimal withdrawalTotalMoneyByMonth(List<String> cityIdList);
+    BigDecimal withdrawalTotalMoneyByMonth(List<String> cityList);
 
     /**
      * 用户所关联提现记录分页列表
@@ -62,7 +65,7 @@
      * @param page   分页参数
      * @return 分页列表
      */
-    UserWithdrawRecordRequestVO withdrawList(Integer userId, Page<UserWithdrawRecordVO> page);
+    IPage<UserWithdrawRecordVO> withdrawList(Integer userId, Page<UserWithdrawRecordVO> page);
 
     /**
      * 关闭/开启审核
@@ -78,4 +81,26 @@
      * @return 审核设置
      */
     WithdrawalSetting withdrawProcess();
+
+    /**
+     * 用户所关联提现记录分页列表
+     *
+     * @param nickname          用户名称
+     * @param userPhone         用户手机号
+     * @param applyForTime 申请开始时间
+     * @param state             审核状态
+     * @param page              分页
+     * @return 分页列表
+     */
+    IPage<UserWithdrawRecordVO> withdrawPage(String nickname, String userPhone, String applyForTime,
+                                             Integer state, Page<UserWithdrawRecordVO> page);
+
+    /**
+     * 提现审批通过,微信打款
+     *
+     * @param user 下单用户
+     * @param order  订单信息
+     * @return 打款结果
+     */
+    Boolean confirmWithdraw(User user, Order order);
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/AgreementServiceImpl.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/AgreementServiceImpl.java
index 02a3d4b..85fd9d5 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/AgreementServiceImpl.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/AgreementServiceImpl.java
@@ -22,7 +22,7 @@
 
     @Override
     public R<Agreement> dataInfo(Integer type) {
-        if (Constants.ZERO.equals(type) || Constants.ONE.equals(type) || Constants.TWO.equals(type)) {
+        if (!Constants.ZERO.equals(type) && !Constants.ONE.equals(type) && !Constants.TWO.equals(type)) {
             return R.fail("查询类型异常!(0注册协议;1:隐私政策;2:司机操作指导)");
         }
         return R.ok(lambdaQuery().eq(Agreement::getContentType, type).one());
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/EvaluateServiceImpl.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/EvaluateServiceImpl.java
index 860bfb6..a124f89 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/EvaluateServiceImpl.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/EvaluateServiceImpl.java
@@ -24,4 +24,9 @@
     public IPage<EvaluatePageVO> queryPageList(String userName, String orderNumber, String workerName, Page<Object> page) {
         return baseMapper.queryPageList(userName, orderNumber, workerName, page);
     }
+
+    @Override
+    public IPage<EvaluatePageVO> evaluateList(Integer userId, Page<EvaluatePageVO> page) {
+        return baseMapper.evaluateList(userId, page);
+    }
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/MasterWorkerServiceImpl.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/MasterWorkerServiceImpl.java
index dfe0b87..723e462 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/MasterWorkerServiceImpl.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/MasterWorkerServiceImpl.java
@@ -23,12 +23,12 @@
 public class MasterWorkerServiceImpl extends ServiceImpl<MasterWorkerMapper, MasterWorker> implements MasterWorkerService {
 
     @Override
-    public List<MasterWorkerRankVO> workerRanking(List<String> cityIds) {
+    public List<MasterWorkerRankVO> workerRanking(List<String> cityList) {
         List<MasterWorker> masterWorkerList;
-        if (null == cityIds || cityIds.isEmpty()) {
+        if (null == cityList || cityList.isEmpty()) {
             masterWorkerList = lambdaQuery().eq(MasterWorker::getIsDelete, 0).list();
         } else {
-            masterWorkerList = lambdaQuery().in(MasterWorker::getCityId, cityIds).eq(MasterWorker::getIsDelete, 0).list();
+            masterWorkerList = lambdaQuery().in(MasterWorker::getCity, cityList).eq(MasterWorker::getIsDelete, 0).list();
         }
         if (null == masterWorkerList || masterWorkerList.isEmpty()) {
             return new ArrayList<>();
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java
index 4952123..f29415d 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java
@@ -5,7 +5,6 @@
 import com.alibaba.excel.write.builder.ExcelWriterBuilder;
 import com.alibaba.excel.write.metadata.WriteSheet;
 import com.baomidou.mybatisplus.core.metadata.IPage;
-import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.admin.entity.*;
@@ -19,7 +18,6 @@
 import com.ruoyi.common.core.constant.OrderConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.GlobalException;
-import com.ruoyi.common.core.utils.StringUtils;
 import org.apache.commons.codec.CharEncoding;
 import org.springframework.stereotype.Service;
 
@@ -32,7 +30,6 @@
 import java.net.URLEncoder;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Date;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -64,7 +61,7 @@
 
     @Override
     public OrderResultVO orderCountHome(OrderCountRequest orderCount) {
-        List<String> cityId = orderCount.getCityIdList();
+        List<String> cityList = orderCount.getCityList();
         Integer orderState = orderCount.getOrderState();
         String countType = orderCount.getCountType();
         String startTime = orderCount.getStartTime();
@@ -72,13 +69,13 @@
         List<OrderQueryVO> list;
         // 根据查询类型查询订单信息
         if (OrderConstants.YEAR.equals(countType)) {
-            list = baseMapper.orderCountByYear(cityId, orderState, startTime, endTime);
+            list = baseMapper.orderCountByYear(cityList, orderState, startTime, endTime);
         } else if (OrderConstants.MONTH.equals(countType)) {
-            list = baseMapper.orderCountByMonth(cityId, orderState, startTime, endTime);
+            list = baseMapper.orderCountByMonth(cityList, orderState, startTime, endTime);
         } else if (OrderConstants.WEEK.equals(countType)) {
-            list = baseMapper.orderCountByWeek(cityId, orderState, startTime, endTime);
+            list = baseMapper.orderCountByWeek(cityList, orderState, startTime, endTime);
         } else if (OrderConstants.TODAY.equals(countType)) {
-            list = baseMapper.orderCountByToday(cityId, orderState, startTime, endTime);
+            list = baseMapper.orderCountByToday(cityList, orderState, startTime, endTime);
         } else {
             list = new ArrayList<>();
         }
@@ -96,18 +93,18 @@
     }
 
     @Override
-    public BigDecimal totalMoneyByQuarter(String startDateStr, String endDateStr, List<String> cityIdList) {
-        return baseMapper.totalMoneyByQuarter(startDateStr, endDateStr, cityIdList);
+    public BigDecimal totalMoneyByQuarter(String startDateStr, String endDateStr, List<String> cityList) {
+        return baseMapper.totalMoneyByQuarter(startDateStr, endDateStr, cityList);
     }
 
     @Override
-    public BigDecimal totalMoneyByYear(List<String> cityIdList) {
-        return baseMapper.totalMoneyByYear(cityIdList);
+    public BigDecimal totalMoneyByYear(List<String> cityList) {
+        return baseMapper.totalMoneyByYear(cityList);
     }
 
     @Override
-    public BigDecimal totalMoneyByMonth(List<String> cityIdList) {
-        return baseMapper.totalMoneyByMonth(cityIdList);
+    public BigDecimal totalMoneyByMonth(List<String> cityList) {
+        return baseMapper.totalMoneyByMonth(cityList);
     }
 
     @Override
@@ -141,32 +138,9 @@
 
     @Override
     public IPage<Order> queryPage(OrderQueryRequest orderQueryRequest) {
-        // 查询参数
-        String orderNumber = orderQueryRequest.getOrderNumber();
-        String cityName = orderQueryRequest.getCityName();
-        String reservationName = orderQueryRequest.getReservationName();
-        String reservationPhone = orderQueryRequest.getReservationPhone();
-        Integer state = orderQueryRequest.getState();
-        String workerName = orderQueryRequest.getWorkerName();
-        String workerPhone = orderQueryRequest.getWorkerPhone();
-        Date orderTime = orderQueryRequest.getOrderTime();
-        Date time = orderQueryRequest.getTime();
-        String serveName = orderQueryRequest.getServeName();
         Page<Order> page = Page.of(orderQueryRequest.getPageNum(), orderQueryRequest.getPageSize());
-        // 构建查询体
-        LambdaQueryChainWrapper<Order> wrapper = lambdaQuery();
-        wrapper = StringUtils.isNotBlank(orderNumber) ? wrapper.like(Order::getOrderNumber, orderNumber) : wrapper;
-        wrapper = StringUtils.isNotBlank(cityName) ? wrapper.like(Order::getReservationAddress, cityName) : wrapper;
-        wrapper = StringUtils.isNotBlank(reservationName) ? wrapper.like(Order::getReservationName, reservationName) : wrapper;
-        wrapper = StringUtils.isNotBlank(reservationPhone) ? wrapper.like(Order::getReservationPhone, reservationPhone) : wrapper;
-        wrapper = null != state ? wrapper.eq(Order::getState, state) : wrapper;
-        wrapper = StringUtils.isNotBlank(workerName) ? wrapper.like(Order::getServerName, workerName) : wrapper;
-        wrapper = StringUtils.isNotBlank(workerPhone) ? wrapper.like(Order::getServerPhone, workerPhone) : wrapper;
-        wrapper = null != orderTime ? wrapper.eq(Order::getCreateTime, orderTime) : wrapper;
-        wrapper = null != time ? wrapper.eq(Order::getTime, time) : wrapper;
-        wrapper = StringUtils.isNotBlank(serveName) ? wrapper.like(Order::getServeName, serveName) : wrapper;
         // 基础查询
-        return wrapper.eq(Order::getIsDelete, 0).orderByDesc(Order::getCreateTime).page(page);
+        return baseMapper.queryPage(orderQueryRequest, page);
     }
 
     @Override
@@ -276,4 +250,35 @@
     public IPage<OrderCountVO> orderCount(String name, String phone, Page<OrderCountVO> page) {
         return baseMapper.orderCount(name, phone, page);
     }
+
+    @Override
+    public OrderPageCountVO orderPageCount(OrderQueryRequest orderQueryRequest) {
+        List<Order> orderList = baseMapper.orderPageCount(orderQueryRequest);
+        int total = 0;
+        int toBeDispatched = 0;
+        int stayDoorstep = 0;
+        int toBeCompleted = 0;
+        int completed = 0;
+        int canceled = 0;
+        int reInvestment = 0;
+        for (Order order : orderList) {
+            total++;
+            Integer state = order.getState();
+            if (Constants.ZERO.equals(state)) {
+                toBeDispatched++;
+            } else if (Constants.ONE.equals(state)) {
+                stayDoorstep++;
+            } else if (Constants.TWO.equals(state)) {
+                toBeCompleted++;
+            } else if (Constants.THREE.equals(state)) {
+                completed++;
+            } else if (Constants.FOUR.equals(state)) {
+                canceled++;
+            } else if (Constants.FIVE.equals(state)) {
+                reInvestment++;
+            }
+        }
+        return new OrderPageCountVO(total, toBeDispatched, stayDoorstep,
+                toBeCompleted, completed, canceled, reInvestment);
+    }
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/UserServiceImpl.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/UserServiceImpl.java
index d2c0707..074d63e 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/UserServiceImpl.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/UserServiceImpl.java
@@ -38,11 +38,11 @@
     private WithdrawService withdrawService;
 
     @Override
-    public List<UserTrendsVO> userTrends(List<String> cityIds) {
-        if (null == cityIds || cityIds.isEmpty()) {
+    public List<UserTrendsVO> userTrends(List<String> city) {
+        if (null == city || city.isEmpty()) {
             return new ArrayList<>();
         }
-        List<UserTrendsVO> userTrendsList = baseMapper.userTrends(cityIds);
+        List<UserTrendsVO> userTrendsList = baseMapper.userTrends(city);
         return null == userTrendsList || userTrendsList.isEmpty() ? new ArrayList<>() : userTrendsList;
     }
 
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/WithdrawServiceImpl.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/WithdrawServiceImpl.java
index 6081191..799c2d5 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/WithdrawServiceImpl.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/WithdrawServiceImpl.java
@@ -4,20 +4,29 @@
 import com.alibaba.excel.ExcelWriter;
 import com.alibaba.excel.write.builder.ExcelWriterBuilder;
 import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.fastjson2.JSONObject;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.admin.entity.Order;
+import com.ruoyi.admin.entity.User;
 import com.ruoyi.admin.entity.Withdraw;
 import com.ruoyi.admin.entity.WithdrawalSetting;
 import com.ruoyi.admin.mapper.WithdrawMapper;
+import com.ruoyi.admin.request.WithdrawExportRequest;
 import com.ruoyi.admin.service.WithdrawService;
 import com.ruoyi.admin.service.WithdrawalSettingService;
-import com.ruoyi.admin.vo.UserWithdrawRecordRequestVO;
+import com.ruoyi.admin.utils.vx.HttpUtil;
 import com.ruoyi.admin.vo.UserWithdrawRecordVO;
 import com.ruoyi.common.core.constant.Constants;
+import com.ruoyi.common.core.constant.WechatConstants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.GlobalException;
+import com.ruoyi.common.core.utils.SnowflakeIdWorker;
+import com.ruoyi.common.core.utils.StringUtils;
 import org.apache.commons.codec.CharEncoding;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.core.io.ClassPathResource;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.Resource;
@@ -27,8 +36,7 @@
 import java.io.UnsupportedEncodingException;
 import java.math.BigDecimal;
 import java.net.URLEncoder;
-import java.util.Arrays;
-import java.util.List;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -45,21 +53,64 @@
     @Resource
     private WithdrawalSettingService withdrawalSettingService;
 
+    /**
+     * 雪花算法类
+     */
+    private static final SnowflakeIdWorker SNOW_FLAKE_ID_WORKER = new SnowflakeIdWorker(5, 5);
+
+    /**
+     * 小程序id
+     */
+    @Value("wx.appid")
+    private String appId;
+    /**
+     * 转账名称
+     */
+    @Value("wx.batchName")
+    private String batchName;
+    /**
+     * 商户号
+     */
+    @Value("wx.mchId")
+    private String mchId;
+    /**
+     * 支付证书序列号
+     */
+    @Value("wx.wechatPayserialNo")
+    private String wechatPayserialNo;
+    /**
+     * 转账备注
+     */
+    @Value("wx.transferRemark")
+    private String transferRemark;
+
     @Override
-    public R<String> excelExport(List<String> ids, HttpServletResponse response) {
+    public R<String> excelExport(WithdrawExportRequest exportRequest, HttpServletResponse response) {
         try {
             response.setCharacterEncoding(Constants.UTF8);
             response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
             response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
-            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(Constants.EXCEL_WITHDRAWAL_FILE_NAME, CharEncoding.UTF_8) + ".xlsx");
+            response.setHeader("Content-Disposition", "attachment;filename=" +
+                    URLEncoder.encode(Constants.EXCEL_WITHDRAWAL_FILE_NAME, CharEncoding.UTF_8) + ".xlsx");
         } catch (UnsupportedEncodingException e) {
             return R.fail("excel导出失败!");
         }
         try {
-            List<Withdraw> list = lambdaQuery().in(Withdraw::getId, ids).eq(Withdraw::getIsDelete, 0).list();
+            String nickname = exportRequest.getNickname();
+            String userPhone = exportRequest.getUserPhone();
+            String applyForTime = exportRequest.getApplyForTime();
+            Integer state = exportRequest.getState();
+            List<String> ids = exportRequest.getIdList();
+            List<UserWithdrawRecordVO> list;
+            if (null != ids && !ids.isEmpty()) {
+                list = baseMapper.exportByIdList(ids);
+            } else {
+                list = baseMapper.exportList(nickname, userPhone, applyForTime, state);
+            }
             // excel模板封装
             ExcelWriterBuilder excelWriterBuilder = EasyExcelFactory.write(response.getOutputStream());
-            InputStream stream = Thread.currentThread().getContextClassLoader().getResourceAsStream("template/" + Constants.EXCEL_WITHDRAWAL_FILE_NAME + ".xlsx");
+            InputStream stream = Thread.currentThread().getContextClassLoader()
+                    .getResourceAsStream("template/" + Constants.EXCEL_WITHDRAWAL_FILE_NAME + ".xlsx");
             // 自动释放资源
             try (ExcelWriter excelWriter = excelWriterBuilder.withTemplate(stream).build()) {
                 WriteSheet writeSheet = EasyExcelFactory.writerSheet().build();
@@ -75,32 +126,23 @@
     }
 
     @Override
-    public BigDecimal withdrawalTotalMoney(List<String> cityIdList) {
-        return baseMapper.withdrawalTotalMoney(cityIdList);
+    public BigDecimal withdrawalTotalMoney(List<String> cityList) {
+        return baseMapper.withdrawalTotalMoney(cityList);
     }
 
     @Override
-    public BigDecimal withdrawalTotalMoneyByYear(List<String> cityIdList) {
-        return baseMapper.withdrawalTotalMoneyByYear(cityIdList);
+    public BigDecimal withdrawalTotalMoneyByYear(List<String> cityList) {
+        return baseMapper.withdrawalTotalMoneyByYear(cityList);
     }
 
     @Override
-    public BigDecimal withdrawalTotalMoneyByMonth(List<String> cityIdList) {
-        return baseMapper.withdrawalTotalMoneyByMonth(cityIdList);
+    public BigDecimal withdrawalTotalMoneyByMonth(List<String> cityList) {
+        return baseMapper.withdrawalTotalMoneyByMonth(cityList);
     }
 
     @Override
-    public UserWithdrawRecordRequestVO withdrawList(Integer userId, Page<UserWithdrawRecordVO> page) {
-        IPage<UserWithdrawRecordVO> record = baseMapper.withdrawList(userId, page);
-        // 全局审核设置
-        WithdrawalSetting setting = withdrawalSettingService.lambdaQuery().one();
-        Integer enableProcess;
-        if (null == setting) {
-            enableProcess = 0;
-        } else {
-            enableProcess = setting.getEnableProcess();
-        }
-        return new UserWithdrawRecordRequestVO(record, enableProcess);
+    public IPage<UserWithdrawRecordVO> withdrawList(Integer userId, Page<UserWithdrawRecordVO> page) {
+        return baseMapper.withdrawList(userId, page);
     }
 
     @Override
@@ -117,4 +159,88 @@
     public WithdrawalSetting withdrawProcess() {
         return withdrawalSettingService.lambdaQuery().one();
     }
+
+    @Override
+    public IPage<UserWithdrawRecordVO> withdrawPage(String nickname, String userPhone, String applyForTime, Integer state, Page<UserWithdrawRecordVO> page) {
+        return baseMapper.withdrawPage(nickname, userPhone, applyForTime, state, page);
+    }
+
+    @Override
+    public Boolean confirmWithdraw(User user, Order order) {
+        // 校验提现
+        List<Withdraw> list = this.lambdaQuery().eq(Withdraw::getUserId, user.getId())
+                .eq(Withdraw::getOrderId, order).list();
+        List<Integer> stateList = list.stream().map(Withdraw::getState).collect(Collectors.toList());
+        if (stateList.contains(Constants.ZERO)) {
+            throw new GlobalException("当前订单已提交提现申请,请等待审核!");
+        } else if (stateList.contains(Constants.ONE)) {
+            throw new GlobalException("当前订单已提现通过!");
+        }
+        return weChatPay(order.getOrderMoney(), user.getOpenId());
+    }
+
+    private boolean weChatPay(BigDecimal orderMoney, String openId) {
+        if (StringUtils.isBlank(openId)) {
+            return false;
+        }
+        Map<String, Object> postMap = new HashMap<>(8);
+        // 小程序 id
+        postMap.put(WechatConstants.APP_ID, appId);
+        postMap.put(WechatConstants.OUT_BATCH_NO, String.valueOf(UUID.randomUUID()).replaceAll("-", ""));
+        // 该笔批量转账的名称
+        postMap.put(WechatConstants.BATCH_NAME, batchName);
+        // 转账说明,UTF8编码,最多允许32个字符
+        postMap.put(WechatConstants.BATCH_REMARK, batchName);
+        // 转账金额单位为“分”。 总金额
+        postMap.put(WechatConstants.TOTAL_AMOUNT, orderMoney.multiply(new BigDecimal(Constants.ONE_HUNDRED)));
+        // 转账总笔数
+        postMap.put(WechatConstants.TOTAL_NUM, Constants.ONE);
+        List<Map<String, Object>> list = new ArrayList<>();
+        Map<String, Object> subMap = new HashMap<>(4);
+        // 商家明细单号 该商家下唯一
+        // subMap.put("out_detail_no", RandomUtil.randomString(32))
+        subMap.put(WechatConstants.OUT_DETAIL_NO, SNOW_FLAKE_ID_WORKER.nextId());
+        // 转账金额
+        subMap.put(WechatConstants.TRANSFER_AMOUNT, orderMoney);
+        // 转账备注
+        subMap.put(WechatConstants.TRANSFER_REMARK, transferRemark);
+        // 用户在直连商户应用下的用户标示
+        subMap.put(WechatConstants.OPEN_ID, openId);
+        // 大金额需要传入真实姓名
+        /*subMap.put("user_name",
+        RsaCryptoUtil.encryptOAEP(userName,WechatPayV3Util.getSaveCertificates(privatekeypath)))*/
+        list.add(subMap);
+        postMap.put(WechatConstants.TRANSFER_DETAIL_LIST, list);
+        // 使用类加载器获取资源 URL
+        ClassPathResource classPathResource = new ClassPathResource("vx/apiclient_key.pem");
+        /*// 获取 resources 目录下的文件路径,假设文件路径为 "resources/data/example.txt"
+        String filePath = "resources/data/vx/apiclient_key.pem";
+        File file = new File(filePath);
+        // 输出文件的绝对路径
+        String absolutePath = file.getAbsolutePath();*/
+        String result = HttpUtil.postTransBatRequest(
+                WechatConstants.WE_CHAT_URL_PRE,
+                JSONObject.toJSONString(postMap),
+                // 支付证书序列号
+                wechatPayserialNo,
+                // 商户号
+                mchId,
+                classPathResource.getPath(), WechatConstants.WE_CHAT_URL_SUF);
+        JSONObject jsonObject = JSONObject.parseObject(result);
+        /*
+         * 成功示例
+         * {
+         *   "out_batch_no": "plfk2020042013",
+         *   "batch_id": "1030000071100999991182020050700019480001",
+         *   "create_time": "2015-05-20T13:29:35.120+08:00"
+         * }
+         */
+        if (null == jsonObject || null != jsonObject.get(WechatConstants.CREATE_TIME)) {
+            //转账成功
+            return Boolean.TRUE;
+        } else {
+            return Boolean.FALSE;
+        }
+    }
+
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/WorkerProcessServiceImpl.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/WorkerProcessServiceImpl.java
index 3030b2e..d2d04cf 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/WorkerProcessServiceImpl.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/WorkerProcessServiceImpl.java
@@ -38,7 +38,7 @@
             return R.fail("当前入驻申请已被审核!");
         }
         workerProcess.setState(state);
-        workerProcess.setExamineOpinion(opinion);
+        workerProcess.setOpinion(opinion);
         if (Constants.PASS_THROUGH_NUMBER.equals(state)) {
             // 审核状态为 1 已通过时,生成登录账号
             MasterWorker masterWorker = new MasterWorker();
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketClient.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketClient.java
new file mode 100644
index 0000000..fc2d3a5
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketClient.java
@@ -0,0 +1,29 @@
+package com.ruoyi.admin.sorcket;
+
+import lombok.Data;
+
+import javax.websocket.Session;
+
+/**
+ * @author HJL
+ * @version 1.0
+ * @since 2024-07-01 9:36
+ */
+@Data
+public class WebSocketClient {
+
+    /**
+     * 与某个客户端的连接会话,需要通过它来给客户端发送数据
+     */
+    private Session session;
+
+    /**
+     * 师傅信息id
+     */
+    private String workerId;
+
+    public WebSocketClient(Session session, String workerId) {
+        this.session = session;
+        this.workerId = workerId;
+    }
+}
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketServer.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketServer.java
new file mode 100644
index 0000000..8d558fa
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketServer.java
@@ -0,0 +1,142 @@
+package com.ruoyi.admin.sorcket;
+
+import cn.hutool.log.Log;
+import cn.hutool.log.LogFactory;
+import com.ruoyi.common.core.utils.StringUtils;
+import org.springframework.stereotype.Component;
+
+import javax.websocket.*;
+import javax.websocket.server.PathParam;
+import javax.websocket.server.ServerEndpoint;
+import java.io.IOException;
+import java.util.concurrent.ConcurrentHashMap;
+
+
+/**
+ * @author hjl
+ */
+@ServerEndpoint(value = "/websocket/{workerId}")
+@Component
+public class WebSocketServer {
+
+    static Log log = LogFactory.get(WebSocketServer.class);
+
+    /**
+     * 静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。
+     */
+    private static int onlineCount = 0;
+
+    /**
+     * concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象
+     */
+    private static final ConcurrentHashMap<String, WebSocketClient> WEB_SOCKET_MAP = new ConcurrentHashMap<>();
+
+    /**
+     * 与某个客户端的连接会话,需要通过它来给客户端发送数据
+     */
+    private Session session;
+
+    /**
+     * 接收userId
+     */
+    private String userId = "";
+
+    /**
+     * 连接建立成功调用的方法
+     */
+    @OnOpen
+    public void onOpen(Session session, @PathParam("workerId") String workerId) {
+        this.session = session;
+        this.userId = workerId;
+        if (WEB_SOCKET_MAP.containsKey(workerId)) {
+            WEB_SOCKET_MAP.remove(workerId);
+            WEB_SOCKET_MAP.put(workerId, new WebSocketClient(session, workerId));
+            //加入set中
+        } else {
+            WEB_SOCKET_MAP.put(workerId, new WebSocketClient(session, workerId));
+            //加入set中
+            addOnlineCount();
+        }
+        log.info("用户 " + workerId + " 已连接: 当前在线人数为:" + getOnlineCount());
+        try {
+            sendMessage("socket连接成功!");
+        } catch (IOException e) {
+            log.error("用户:" + workerId + ",网络异常!!!!!!");
+        }
+    }
+
+    /**
+     * 连接关闭调用的方法
+     */
+    @OnClose
+    public void onClose() {
+        if (WEB_SOCKET_MAP.containsKey(userId)) {
+            WEB_SOCKET_MAP.remove(userId);
+            //从set中删除
+            subOnlineCount();
+        }
+        log.info("用户退出:" + userId + ",当前在线人数为:" + getOnlineCount());
+    }
+
+    /**
+     * 收到客户端消息后调用的方法
+     *
+     * @param message 客户端发送过来的消息
+     */
+    @OnMessage
+    public void onMessage(String message, Session session) {
+        log.info("用户消息:" + userId + ",报文:" + message);
+        //可以群发消息
+        //消息保存到数据库、redis
+        if (StringUtils.isNotBlank(message)) {
+            try {
+                log.info("请求的userId:" + this.userId + ";接收消息:" + message);
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+        }
+    }
+
+    /**
+     * @param session 客户端连接
+     * @param error   错误原因
+     */
+    @OnError
+    public void onError(Session session, Throwable error) {
+        log.error("用户错误:" + this.userId + ",原因:" + error.getMessage());
+        error.printStackTrace();
+    }
+
+    /**
+     * 实现服务器主动推送
+     */
+    public void sendMessage(String message) throws IOException {
+        synchronized (this.session) {
+            this.session.getBasicRemote().sendText(message);
+        }
+    }
+
+    /**
+     * 发送自定义消息
+     */
+    public static void sendInfo(String message, @PathParam("workerId") String workerId) throws IOException {
+        log.info("发送消息到:" + workerId + ",报文:" + message);
+        if (StringUtils.isNotBlank(workerId) && WEB_SOCKET_MAP.containsKey(workerId)) {
+            WEB_SOCKET_MAP.get(workerId).getSession().getBasicRemote().sendText(message);
+        } else {
+            log.error("用户" + workerId + ",不在线!");
+        }
+    }
+
+    public static synchronized int getOnlineCount() {
+        return onlineCount;
+    }
+
+    public static synchronized void addOnlineCount() {
+        WebSocketServer.onlineCount++;
+    }
+
+    public static synchronized void subOnlineCount() {
+        WebSocketServer.onlineCount--;
+    }
+}
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/vx/HttpUtil.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/vx/HttpUtil.java
new file mode 100644
index 0000000..1130bd6
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/vx/HttpUtil.java
@@ -0,0 +1,195 @@
+package com.ruoyi.admin.utils.vx;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.util.EntityUtils;
+
+import java.io.IOException;
+
+import static com.wechat.pay.contrib.apache.httpclient.constant.WechatPayHttpHeaders.WECHAT_PAY_SERIAL;
+import static org.apache.http.HttpHeaders.ACCEPT;
+import static org.apache.http.HttpHeaders.CONTENT_TYPE;
+import static org.apache.http.entity.ContentType.APPLICATION_JSON;
+
+
+/**
+ * 微信支付专用类 请求操作方法
+ *
+ * @author hjl
+ */
+@Slf4j
+public class HttpUtil {
+
+    /**
+     * 发起批量转账API 批量转账到零钱
+     *
+     * @param requestUrl        请求路径
+     * @param requestJson       组合参数
+     * @param wechatPayserialNo 商户证书序列号
+     * @param privatekeypath    商户私钥证书路径
+     */
+    public static String postTransBatRequest(
+            String requestUrl,
+            String requestJson,
+            String wechatPayserialNo,
+            String mchId,
+            String privatekeypath, String url) {
+        CloseableHttpResponse response;
+        HttpEntity entity;
+        CloseableHttpClient httpClient = null;
+        try {
+            HttpPost httpPost = createHttpPost(requestUrl, requestJson, wechatPayserialNo, mchId, privatekeypath, url);
+            httpClient = HttpClients.createDefault();
+            //发起转账请求
+            response = httpClient.execute(httpPost);
+            log.info("response:{}", response);
+            //获取返回的数据
+            entity = response.getEntity();
+            log.info("-----getHeaders.Request-ID:" + response.getHeaders("Request-ID"));
+            return EntityUtils.toString(entity);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            // 关闭流
+            try {
+                if (httpClient != null) {
+                    httpClient.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+
+    /**
+     * 账单查询
+     *
+     * @param requestUrl        请求完整地址
+     * @param wechatPayserialNo 商户证书序列号
+     * @param privatekeypath    商户私钥证书路径
+     */
+    public static String getTransBatRequest(
+            String requestUrl,
+            String wechatPayserialNo,
+            String mchId,
+            String privatekeypath, String url) {
+        CloseableHttpResponse response;
+        HttpEntity entity;
+        CloseableHttpClient httpClient = null;
+        try {
+            HttpGet httpPost = createHttpGet(requestUrl, wechatPayserialNo, mchId, privatekeypath, url);
+            httpClient = HttpClients.createDefault();
+            //发起转账请求
+            response = httpClient.execute(httpPost);
+            log.info("response:{}", response);
+            //获取返回的数据
+            entity = response.getEntity();
+            log.info("-----getHeaders.Request-ID:" + response.getHeaders("Request-ID"));
+            return EntityUtils.toString(entity);
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            // 关闭流
+            try {
+                if (httpClient != null) {
+                    httpClient.close();
+                }
+            } catch (IOException e) {
+                e.printStackTrace();
+            }
+        }
+        return null;
+    }
+
+    /**
+     * @param requestUrl        请求完整地址
+     * @param requestJson       请求参数
+     * @param wechatPayserialNo 支付证书序列号
+     * @param mchId             商户号
+     * @param privatekeypath    私钥路径
+     * @param servletPath       相对路径
+     */
+    private static HttpPost createHttpPost(String requestUrl,
+                                           String requestJson,
+                                           String wechatPayserialNo,
+                                           String mchId,
+                                           String privatekeypath, String servletPath) {
+        //商户私钥证书
+        HttpPost httpPost = new HttpPost(requestUrl);
+        // NOTE: 建议指定charset=utf-8。低于4.4.6版本的HttpCore,不能正确的设置字符集,可能导致签名错误
+        httpPost.addHeader(ACCEPT, APPLICATION_JSON.toString());
+        httpPost.addHeader(CONTENT_TYPE, APPLICATION_JSON.toString());
+        //"55E551E614BAA5A3EA38AE03849A76D8C7DA735A");
+        httpPost.addHeader(WECHAT_PAY_SERIAL, wechatPayserialNo);
+
+        //-------------------------核心认证 start-----------------------------------------------------------------
+        String strToken = null;
+        try {
+            log.info("requestJson:{}", requestJson);
+            strToken = WechatPayV3Util.getToken("POST",
+                    servletPath,
+                    requestJson, mchId, wechatPayserialNo, privatekeypath);
+        } catch (Exception e) {
+            log.error("createHttpPost error:", e);
+            e.printStackTrace();
+        }
+        StringEntity reqEntity = new StringEntity(requestJson, APPLICATION_JSON);
+        log.info("token " + strToken);
+        // 添加认证信息
+        httpPost.addHeader("Authorization",
+                "WECHATPAY2-SHA256-RSA2048" + " "
+                        + strToken);
+        //---------------------------核心认证 end---------------------------------------------------------------
+        httpPost.setEntity(reqEntity);
+        return httpPost;
+    }
+
+    /**
+     * 创建get 请求
+     *
+     * @param requestUrl        请求完整地址
+     * @param wechatPayserialNo 支付证书序列号
+     * @param mchId             商户号
+     * @param privatekeypath    私钥路径
+     * @param servletPath       相对路径  请求地址上如果有参数 则此处需要带上参数
+     * @return HttpGet
+     */
+    private static HttpGet createHttpGet(String requestUrl,
+                                         String wechatPayserialNo,
+                                         String mchId,
+                                         String privatekeypath, String servletPath) {
+        //商户私钥证书
+        HttpGet httpGet = new HttpGet(requestUrl);
+        // NOTE: 建议指定charset=utf-8。低于4.4.6版本的HttpCore,不能正确的设置字符集,可能导致签名错误
+        httpGet.addHeader("Content-Type", "application/json");
+        httpGet.addHeader("Accept", "application/json");
+        //"55E551E614BAA5A3EA38AE03849A76D8C7DA735A");
+        httpGet.addHeader("Wechatpay-Serial", wechatPayserialNo);
+        //-------------------------核心认证 start-----------------------------------------------------------------
+        String strToken = null;
+        try {
+            strToken = WechatPayV3Util.getToken("GET",
+                    servletPath,
+                    "", mchId, wechatPayserialNo, privatekeypath);
+        } catch (Exception e) {
+            log.error("createHttpGet error:", e);
+            e.printStackTrace();
+        }
+
+        log.info("token " + strToken);
+        // 添加认证信息
+        httpGet.addHeader("Authorization",
+                "WECHATPAY2-SHA256-RSA2048" + " "
+                        + strToken);
+        //---------------------------核心认证 end---------------------------------------------------------------
+        return httpGet;
+    }
+}
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/vx/WechatPayV3Util.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/vx/WechatPayV3Util.java
new file mode 100644
index 0000000..712d508
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/vx/WechatPayV3Util.java
@@ -0,0 +1,113 @@
+package com.ruoyi.admin.utils.vx;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
+
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.security.KeyFactory;
+import java.security.NoSuchAlgorithmException;
+import java.security.PrivateKey;
+import java.security.Signature;
+import java.security.spec.InvalidKeySpecException;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.util.Random;
+
+/**
+ * @author HJL
+ */
+@Slf4j
+public class WechatPayV3Util {
+
+
+    /**
+     * @param method       请求方法 post
+     * @param canonicalUrl 请求地址
+     * @param body         请求参数   GET请求传空字符
+     * @param merchantId   这里用的商户号
+     * @param certSerialNo 商户证书序列号
+     * @param keyPath      私钥商户证书地址
+     */
+    public static String getToken(
+            String method,
+            String canonicalUrl,
+            String body,
+            String merchantId,
+            String certSerialNo,
+            String keyPath) throws Exception {
+        String signStr;
+        //获取32位随机字符串
+        String nonceStr = getRandomString(32);
+        //当前系统运行时间
+        long timestamp = System.currentTimeMillis() / 1000;
+        String message = buildMessage(method, canonicalUrl, timestamp, nonceStr, body);
+        //签名操作
+        //签名操作
+        String signature = sign(message.getBytes(StandardCharsets.UTF_8), keyPath);
+        //组装参数
+        signStr = "mchid=\"" + merchantId + "\"," +
+                "timestamp=\"" + timestamp + "\"," +
+                "nonce_str=\"" + nonceStr + "\"," +
+                "serial_no=\"" + certSerialNo + "\"," +
+                "signature=\"" + signature + "\"";
+
+        return signStr;
+    }
+
+    public static String buildMessage(String method, String canonicalUrl, long timestamp, String nonceStr, String body) {
+//		String canonicalUrl = url.encodedPath();
+//		if (url.encodedQuery() != null) {
+//			canonicalUrl += "?" + url.encodedQuery();
+//		}
+        return method + "\n" + canonicalUrl + "\n" + timestamp + "\n" + nonceStr + "\n" + body + "\n";
+    }
+
+    public static String sign(byte[] message, String keyPath) throws Exception {
+        Signature sign = Signature.getInstance("SHA256withRSA");
+        sign.initSign(getPrivateKey(keyPath));
+        sign.update(message);
+        return Base64.encodeBase64String(sign.sign());
+    }
+
+    /**
+     * 微信支付-前端唤起支付参数-获取商户私钥
+     *
+     * @param filename 私钥文件路径  (required)
+     * @return 私钥对象
+     */
+    public static PrivateKey getPrivateKey(String filename) throws IOException {
+        log.info("签名 证书地址是 " + filename);
+        String content = new String(Files.readAllBytes(Paths.get(filename)), StandardCharsets.UTF_8);
+        try {
+            String privateKey = content.replace("-----BEGIN PRIVATE KEY-----", "")
+                    .replace("-----END PRIVATE KEY-----", "")
+                    .replaceAll("\\s+", "");
+            KeyFactory kf = KeyFactory.getInstance("RSA");
+            return kf.generatePrivate(
+                    new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKey)));
+        } catch (NoSuchAlgorithmException e) {
+            throw new RuntimeException("当前Java环境不支持RSA", e);
+        } catch (InvalidKeySpecException e) {
+            throw new RuntimeException("无效的密钥格式");
+        }
+    }
+
+    /**
+     * 获取随机位数的字符串
+     *
+     * @param length 需要的长度
+     */
+    public static String getRandomString(int length) {
+        String base = "abcdefghijklmnopqrstuvwxyz0123456789";
+        Random random = new Random();
+        StringBuilder sb = new StringBuilder();
+        for (int i = 0; i < length; i++) {
+            int number = random.nextInt(base.length());
+            sb.append(base.charAt(number));
+        }
+        return sb.toString();
+    }
+}
+ 
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderPageCountVO.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderPageCountVO.java
new file mode 100644
index 0000000..635a322
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderPageCountVO.java
@@ -0,0 +1,45 @@
+package com.ruoyi.admin.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author HJL
+ * @version 1.0
+ * @since 2024-06-28 16:13
+ */
+@Data
+public class OrderPageCountVO {
+
+    @ApiModelProperty("全部订单")
+    private Integer total;
+
+    @ApiModelProperty("待派单")
+    private Integer toBeDispatched;
+
+    @ApiModelProperty("待上门")
+    private Integer stayDoorstep;
+
+    @ApiModelProperty("待完成")
+    private Integer toBeCompleted;
+
+    @ApiModelProperty("已完成")
+    private Integer completed;
+
+    @ApiModelProperty("已取消")
+    private Integer canceled;
+
+    @ApiModelProperty("再投订单")
+    private Integer reInvestment;
+
+    public OrderPageCountVO(Integer total, Integer toBeDispatched, Integer stayDoorstep, Integer toBeCompleted,
+                            Integer completed, Integer canceled, Integer reInvestment) {
+        this.total = total;
+        this.toBeDispatched = toBeDispatched;
+        this.stayDoorstep = stayDoorstep;
+        this.toBeCompleted = toBeCompleted;
+        this.completed = completed;
+        this.canceled = canceled;
+        this.reInvestment = reInvestment;
+    }
+}
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/UserWithdrawRecordVO.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/UserWithdrawRecordVO.java
index a8b7f15..9565010 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/UserWithdrawRecordVO.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/UserWithdrawRecordVO.java
@@ -1,6 +1,7 @@
 package com.ruoyi.admin.vo;
 
 import com.baomidou.mybatisplus.annotation.TableId;
+import com.ruoyi.common.core.constant.Constants;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -38,11 +39,8 @@
     @ApiModelProperty("审批意见")
     private String opinions;
 
-    @ApiModelProperty("用户id")
+    @ApiModelProperty("用户编号")
     private String userNo;
-
-    @ApiModelProperty("注册城市id")
-    private Integer cityId;
 
     @ApiModelProperty("用户昵称")
     private String nickname;
@@ -50,19 +48,25 @@
     @ApiModelProperty("头像")
     private String profilePicture;
 
-    @ApiModelProperty("创建人")
-    private String createBy;
-
-    @ApiModelProperty("修改人")
-    private String updateBy;
-
-    @ApiModelProperty("创建时间")
-    private Date createTime;
-
-    @ApiModelProperty("修改时间")
-    private Date updateTime;
-
-    @ApiModelProperty("是否软删除 0未删除;1已删除")
-    private Integer isDelete;
+    /**
+     * 申请状态中文(导出用) 0待审核;1已通过;2已驳回
+     *
+     * @return 中文状态
+     */
+    public String getStateStr() {
+        if (null == state) {
+            return "未知";
+        } else {
+            if (Constants.AUDIT_NUMBER.equals(state)) {
+                return Constants.AUDIT_STR;
+            } else if (Constants.PASS_THROUGH_NUMBER.equals(state)) {
+                return Constants.PASS_THROUGH_STR;
+            } else if (Constants.REJECT_NUMBER.equals(state)) {
+                return Constants.REJECT_STR;
+            } else {
+                return "未知";
+            }
+        }
+    }
 
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/EvaluateMapper.xml b/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/EvaluateMapper.xml
index dfed602..85b7eab 100644
--- a/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/EvaluateMapper.xml
+++ b/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/EvaluateMapper.xml
@@ -59,4 +59,14 @@
         </where>
         order by e.createTime desc
     </select>
+
+    <select id="evaluateList" resultMap="pageMap">
+        select *
+        from t_evaluate e
+                 left join t_order o on e.order_id = o.id
+                 left join sys_master_worker mw on e.worker_id = mw.id
+        where e.is_delete = 0
+          and o.is_delete = 0
+          and mw.is_delete = 0
+    </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/OrderMapper.xml b/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/OrderMapper.xml
index 16df1db..4225a99 100644
--- a/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/OrderMapper.xml
+++ b/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/OrderMapper.xml
@@ -21,6 +21,7 @@
         <result column="createTime" property="createTime"/>
         <result column="updateTime" property="updateTime"/>
         <result column="is_delete" property="isDelete"/>
+        <result column="apply_reason" property="applyReason"/>
     </resultMap>
 
 
@@ -29,12 +30,12 @@
         FROM t_order
         <where>
             YEAR(createTime) = YEAR(NOW())
-            <!--<if test="ids != null and ids.size() != 0">
-                and city_id in
-                <foreach collection="ids" item="id" open="(" separator="," close=")">
-        #{id}
-            </foreach>
-            </if>-->
+            <if test="cityList != null and cityList.size() != 0">
+                and city in
+                <foreach collection="cityList" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
             <if test="orderState != null and orderState != ''">
                 and state = #{orderState}
             </if>
@@ -54,12 +55,12 @@
         FROM t_order
         <where>
             YEARWEEK(DATE_FORMAT(createTime, '%Y-%m-%d')) = YEARWEEK(NOW())
-            <!--<if test="ids != null and ids.size() != 0">
-                and city_id in
-                <foreach collection="ids" item="id" open="(" separator="," close=")">
-        #{id}
-            </foreach>
-            </if>-->
+            <if test="cityList != null and cityList.size() != 0">
+                and city in
+                <foreach collection="cityList" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
             <if test="orderState != null and orderState != ''">
                 and state = #{orderState}
             </if>
@@ -80,12 +81,12 @@
         <where>
             MONTH(createTime) = MONTH(NOW())
               AND YEAR(createTime) = YEAR(NOW())
-            <!--<if test="ids != null and ids.size() != 0">
-                and city_id in
-                <foreach collection="ids" item="id" open="(" separator="," close=")">
-        #{id}
-            </foreach>
-            </if>-->
+            <if test="cityList != null and cityList.size() != 0">
+                and city in
+                <foreach collection="cityList" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
             <if test="orderState != null and orderState != ''">
                 and state = #{orderState}
             </if>
@@ -105,12 +106,12 @@
         FROM t_order
         <where>
             DATE(createTime) = CURDATE()
-            <!--<if test="ids != null and ids.size() != 0">
-                and city_id in
-                <foreach collection="ids" item="id" open="(" separator="," close=")">
-        #{id}
-            </foreach>
-            </if>-->
+            <if test="cityList != null and cityList.size() != 0">
+                and city in
+                <foreach collection="cityList" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
             <if test="orderState != null and orderState != ''">
                 and state = #{orderState}
             </if>
@@ -131,6 +132,12 @@
         <where>
             is_delete = 0
               and state = 4
+            <if test="cityList != null and cityList.size() != 0">
+                and city in
+                <foreach collection="cityList" item="id" open="(" separator="," close=")">
+                    #{id}
+                </foreach>
+            </if>
             <if test="start != null and start != ''">
                 and createTime <![CDATA[ >= ]]> #{start}
             </if>
@@ -146,6 +153,12 @@
         where YEAR(createTime) = YEAR(NOW())
           and is_delete = 0
           and state = 4
+        <if test="cityList != null and cityList.size() != 0">
+            and city in
+            <foreach collection="cityList" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
     </select>
 
     <select id="totalMoneyByMonth" resultType="java.math.BigDecimal">
@@ -155,14 +168,20 @@
           AND YEAR(createTime) = YEAR(NOW())
           and is_delete = 0
           and state = 4
+        <if test="cityList != null and cityList.size() != 0">
+            and city in
+            <foreach collection="cityList" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </if>
     </select>
 
     <select id="orderCount" resultType="com.ruoyi.admin.vo.OrderCountVO">
         SELECT w.real_name                                  AS realName,
                w.profile_picture                            as profilePicture,
-               SUM(CASE WHEN o.state = 3 THEN 1 ELSE 0 END) AS toBeCompletedNumber,
-               SUM(CASE WHEN o.state = 4 THEN 1 ELSE 0 END) AS completedNumber,
-        SUM(CASE WHEN o.state = 5 THEN 1 ELSE 0 END) AS reInvestment
+               SUM(CASE WHEN o.state = 2 THEN 1 ELSE 0 END) AS toBeCompletedNumber,
+               SUM(CASE WHEN o.state = 3 THEN 1 ELSE 0 END) AS completedNumber,
+               SUM(CASE WHEN o.state = 4 THEN 1 ELSE 0 END) AS reInvestment
         FROM t_order o
                  LEFT JOIN sys_master_worker w ON o.server_id = w.id
         WHERE w.is_delete = 0
@@ -175,4 +194,96 @@
         </if>
         GROUP BY w.real_name, w.profile_picture
     </select>
+
+    <select id="queryPage" resultMap="BaseResultMap">
+        select o.*, c.apply_reason
+        from t_order o
+                 left join sys_change_dispatch c on o.id = c.order_id
+        <where>
+            o.is_delete = 0
+              AND (c.is_delete = 0 OR c.is_delete IS NULL)
+            <if test="data.orderNumber != null and data.orderNumber != ''">
+                and o.order_number like concat('%', #{data.orderNumber}, '%')
+            </if>
+            <if test="data.cityName != null and data.cityName != ''">
+                and o.city like concat('%', #{data.cityName}, '%')
+            </if>
+            <if test="data.reservationName != null and data.reservationName != ''">
+                and o.reservation_name like concat('%', #{data.reservationName}, '%')
+            </if>
+            <if test="data.reservationPhone != null and data.reservationPhone != ''">
+                and o.reservation_phone like concat('%', #{data.reservationPhone}, '%')
+            </if>
+            <if test="data.state != null">
+                and o.state = #{data.state}
+            </if>
+            <if test="data.workerName != null and data.workerName != ''">
+                and o.server_name like concat('%', #{data.workerName}, '%')
+            </if>
+            <if test="data.workerPhone != null and data.workerPhone != ''">
+                and o.server_phone like concat('%', #{data.workerPhone}, '%')
+            </if>
+            <if test="data.serveName != null and data.serveName != ''">
+                and o.serve_name like concat('%', #{data.serveName}, '%')
+            </if>
+            <if test="data.orderTimeStart != null and data.orderTimeStart != ''">
+                and DATE(o.createTime) <![CDATA[ >= ]]> #{data.orderTimeStart}
+            </if>
+            <if test="data.orderTimeEnd != null and data.orderTimeEnd != ''">
+                and DATE(o.createTime) <![CDATA[ <= ]]> #{data.orderTimeEnd}
+            </if>
+            <if test="data.startTime != null and data.startTime != ''">
+                and DATE(o.time) <![CDATA[ >= ]]> #{data.startTime}
+            </if>
+            <if test="data.endTime != null and data.endTime != ''">
+                and DATE(o.time) <![CDATA[ <= ]]> #{data.endTime}
+            </if>
+        </where>
+    </select>
+
+    <select id="orderPageCount" resultMap="BaseResultMap">
+        select o.*, c.apply_reason
+        from t_order o
+        left join sys_change_dispatch c on o.id = c.order_id
+        <where>
+            o.is_delete = 0
+            AND (c.is_delete = 0 OR c.is_delete IS NULL)
+            <if test="data.orderNumber != null and data.orderNumber != ''">
+                and o.order_number like concat('%', #{data.orderNumber}, '%')
+            </if>
+            <if test="data.cityName != null and data.cityName != ''">
+                and o.city like concat('%', #{data.cityName}, '%')
+            </if>
+            <if test="data.reservationName != null and data.reservationName != ''">
+                and o.reservation_name like concat('%', #{data.reservationName}, '%')
+            </if>
+            <if test="data.reservationPhone != null and data.reservationPhone != ''">
+                and o.reservation_phone like concat('%', #{data.reservationPhone}, '%')
+            </if>
+            <if test="data.state != null">
+                and o.state = #{data.state}
+            </if>
+            <if test="data.workerName != null and data.workerName != ''">
+                and o.server_name like concat('%', #{data.workerName}, '%')
+            </if>
+            <if test="data.workerPhone != null and data.workerPhone != ''">
+                and o.server_phone like concat('%', #{data.workerPhone}, '%')
+            </if>
+            <if test="data.serveName != null and data.serveName != ''">
+                and o.serve_name like concat('%', #{data.serveName}, '%')
+            </if>
+            <if test="data.orderTimeStart != null and data.orderTimeStart != ''">
+                and DATE(o.createTime) <![CDATA[ >= ]]> #{data.orderTimeStart}
+            </if>
+            <if test="data.orderTimeEnd != null and data.orderTimeEnd != ''">
+                and DATE(o.createTime) <![CDATA[ <= ]]> #{data.orderTimeEnd}
+            </if>
+            <if test="data.startTime != null and data.startTime != ''">
+                and DATE(o.time) <![CDATA[ >= ]]> #{data.startTime}
+            </if>
+            <if test="data.endTime != null and data.endTime != ''">
+                and DATE(o.time) <![CDATA[ <= ]]> #{data.endTime}
+            </if>
+        </where>
+    </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/UserMapper.xml b/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/UserMapper.xml
index 112319e..c653e8d 100644
--- a/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/UserMapper.xml
+++ b/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/UserMapper.xml
@@ -20,10 +20,10 @@
         SELECT DATE_FORMAT(createTime, '%Y-%m') AS date, COUNT(*) AS number
         FROM t_user
         <where>
-            <if test="ids != null and ids.size() != 0">
-                city_id in
-                <foreach collection="ids" item="id" open="(" separator="," close=")">
-                    #{id}
+            <if test="city != null and city.size() != 0">
+                city in
+                <foreach collection="city" item="city" open="(" separator="," close=")">
+                #{city}
                 </foreach>
             </if>
             and is_delete = 0
@@ -38,6 +38,12 @@
         FROM t_user
         WHERE YEAR(createTime) = YEAR(NOW())
           and is_delete = 0
+        <if test="cityList != null and cityList.size() != 0">
+            and city in
+            <foreach collection="cityList" item="city" open="(" separator="," close=")">
+                #{city}
+            </foreach>
+        </if>
     </select>
 
     <select id="increaseNumberByMonth" resultType="java.lang.Long">
@@ -45,5 +51,11 @@
         FROM t_user
         WHERE MONTH(createTime) = MONTH(NOW())
           AND YEAR(createTime) = YEAR(NOW())
+        <if test="cityList != null and cityList.size() != 0">
+            and city in
+            <foreach collection="cityList" item="city" open="(" separator="," close=")">
+                #{city}
+            </foreach>
+        </if>
     </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/WithdrawMapper.xml b/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/WithdrawMapper.xml
index 2255c30..afaef11 100644
--- a/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/WithdrawMapper.xml
+++ b/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/WithdrawMapper.xml
@@ -9,7 +9,7 @@
         <result column="apply_for_time" property="applyForTime"/>
         <result column="apply_for_money" property="applyForMoney"/>
         <result column="state" property="state"/>
-        <result column="opinions" property="opinions"/>
+        <result column="opinion" property="opinion"/>
         <result column="createBy" property="createBy"/>
         <result column="updateBy" property="updateBy"/>
         <result column="createTime" property="createTime"/>
@@ -22,9 +22,9 @@
         FROM t_withdraw w
                  LEFT JOIN t_user u on w.user_id = u.id
         <where>
-            <if test="ids != null and ids.size() != 0">
-                u.city_id in
-                <foreach collection="ids" item="id" open="(" separator="," close=")">
+            <if test="cityList != null and cityList.size() != 0">
+                u.city in
+                <foreach collection="cityList" item="id" open="(" separator="," close=")">
                     #{id}
                 </foreach>
             </if>
@@ -38,9 +38,9 @@
         <where>
             YEAR(w.createTime) = YEAR(NOW())
               and w.is_delete = 0
-            <if test="ids != null and ids.size() != 0">
-                and u.city_id in
-                <foreach collection="ids" item="id" open="(" separator="," close=")">
+            <if test="cityList != null and cityList.size() != 0">
+                and u.city in
+                <foreach collection="cityList" item="id" open="(" separator="," close=")">
                     #{id}
                 </foreach>
             </if>
@@ -55,9 +55,9 @@
             YEAR(w.createTime) = YEAR(NOW())
               AND YEAR(w.createTime) = YEAR(NOW())
               and w.is_delete = 0
-            <if test="ids != null and ids.size() != 0">
-                and u.city_id in
-                <foreach collection="ids" item="id" open="(" separator="," close=")">
+            <if test="cityList != null and cityList.size() != 0">
+                and u.city in
+                <foreach collection="cityList" item="id" open="(" separator="," close=")">
                     #{id}
                 </foreach>
             </if>
@@ -72,16 +72,12 @@
         <result column="apply_for_money" property="applyForMoney"/>
         <result column="state" property="state"/>
         <result column="opinions" property="opinions"/>
-        <result column="createBy" property="createBy"/>
-        <result column="updateBy" property="updateBy"/>
-        <result column="createTime" property="createTime"/>
-        <result column="updateTime" property="updateTime"/>
-        <result column="is_delete" property="isDelete"/>
         <result column="user_no" property="userNo"/>
         <result column="profile_picture" property="profilePicture"/>
         <result column="nickname" property="nickname"/>
+        <result column="phone" property="userPhone"/>
     </resultMap>
-    <select id="withdrawList" resultType="com.ruoyi.admin.vo.UserWithdrawRecordVO">
+    <select id="withdrawList" resultMap="voMap">
         SELECT w.*, u.user_no, u.profile_picture, u.nickname
         FROM t_withdraw w
                  LEFT JOIN t_user u on w.user_id = u.id
@@ -93,4 +89,65 @@
             </if>
         </where>
     </select>
+
+    <select id="withdrawPage" resultMap="voMap">
+        SELECT w.*, u.user_no, u.profile_picture, u.nickname
+        FROM t_withdraw w
+                 LEFT JOIN t_user u on w.user_id = u.id
+        <where>
+            w.is_delete = 0
+              and u.is_delete = 0
+            <if test="name != null and name != ''">
+                and u.nickname like concat('%', #{name}, '%')
+            </if>
+            <if test="phone != null and phone != ''">
+                and u.phone like concat('%', #{phone}, '%')
+            </if>
+            <if test="time != null and time != ''">
+                and DATE(w.apply_for_time) = #{time}
+            </if>
+            <if test="state != null">
+                and w.state = #{state}
+            </if>
+        </where>
+        order by w.createTime desc
+    </select>
+
+    <select id="exportList" resultMap="voMap">
+        SELECT w.*, u.user_no, u.profile_picture, u.nickname, u.phone
+        FROM t_withdraw w
+                 LEFT JOIN t_user u on w.user_id = u.id
+        <where>
+            w.is_delete = 0
+              and u.is_delete = 0
+            <if test="name != null and name != ''">
+                and u.nickname like concat('%', #{name}, '%')
+            </if>
+            <if test="phone != null and phone != ''">
+                and u.phone like concat('%', #{phone}, '%')
+            </if>
+            <if test="time != null and time != ''">
+                and DATE(w.apply_for_time) = #{time}
+            </if>
+            <if test="state != null">
+                and w.state = #{state}
+            </if>
+        </where>
+        order by w.createTime desc
+    </select>
+
+    <select id="exportByIdList" resultMap="voMap">
+        SELECT w.*, u.user_no, u.profile_picture, u.nickname
+        FROM t_withdraw w
+                 LEFT JOIN t_user u on w.user_id = u.id
+        <where>
+            w.is_delete = 0
+              and u.is_delete = 0
+              and w.id in
+            <foreach collection="list" item="id" open="(" separator="," close=")">
+                #{id}
+            </foreach>
+        </where>
+        order by w.createTime desc
+    </select>
 </mapper>
diff --git "a/ruoyi-service/ruoyi-admin/src/main/resources/template/\346\217\220\347\216\260\350\256\260\345\275\225.xlsx" "b/ruoyi-service/ruoyi-admin/src/main/resources/template/\346\217\220\347\216\260\350\256\260\345\275\225.xlsx"
index 71c5bce..db9f9f3 100644
--- "a/ruoyi-service/ruoyi-admin/src/main/resources/template/\346\217\220\347\216\260\350\256\260\345\275\225.xlsx"
+++ "b/ruoyi-service/ruoyi-admin/src/main/resources/template/\346\217\220\347\216\260\350\256\260\345\275\225.xlsx"
Binary files differ
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/OrderController.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/OrderController.java
index 864ccc5..88a2ca4 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/OrderController.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/OrderController.java
@@ -7,7 +7,6 @@
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.GlobalException;
 import com.ruoyi.common.security.service.TokenService;
-import com.ruoyi.system.api.model.LoginUser;
 import com.ruoyi.system.api.model.LoginUserInfo;
 import com.ruoyi.user.entity.Order;
 import com.ruoyi.user.entity.ServeRecord;
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/Order.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/Order.java
index 21edc24..6aa9842 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/Order.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/Order.java
@@ -30,6 +30,10 @@
     @TableId(value = "id",type = IdType.AUTO)
     private Integer id;
 
+    @ApiModelProperty("下单城市")
+    @TableField("city")
+    private String city;
+
     @ApiModelProperty("订单编号")
     @TableField("order_number")
     private String orderNumber;
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/Withdraw.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/Withdraw.java
index e93acd3..cb0b4b1 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/Withdraw.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/Withdraw.java
@@ -51,8 +51,8 @@
     private Integer state;
 
     @ApiModelProperty("审批意见")
-    @TableField("opinions")
-    private String opinions;
+    @TableField("opinion")
+    private String opinion;
 
     @ApiModelProperty("订单id")
     @TableField("order_id")
diff --git a/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/RecoveryServeMapper.xml b/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/RecoveryServeMapper.xml
index 81f785f..9b107d5 100644
--- a/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/RecoveryServeMapper.xml
+++ b/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/RecoveryServeMapper.xml
@@ -39,6 +39,6 @@
                  left join sys_recovery_classify c on s.classify_id = c.id
         where s.is_delete = 0
           and c.is_delete = 0
-        order by c.`order`
+        order by c.sort
     </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/UserMapper.xml b/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/UserMapper.xml
index e7531cd..e57afff 100644
--- a/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/UserMapper.xml
+++ b/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/UserMapper.xml
@@ -9,7 +9,6 @@
         <result column="phone" property="phone"/>
         <result column="profile_picture" property="profilePicture"/>
         <result column="state" property="state"/>
-        <result column="city_id" property="cityId"/>
         <result column="createBy" property="createBy"/>
         <result column="updateBy" property="updateBy"/>
         <result column="createTime" property="createTime"/>
diff --git a/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/WithdrawMapper.xml b/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/WithdrawMapper.xml
index 0516861..91618df 100644
--- a/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/WithdrawMapper.xml
+++ b/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/WithdrawMapper.xml
@@ -9,7 +9,7 @@
         <result column="apply_for_time" property="applyForTime"/>
         <result column="apply_for_money" property="applyForMoney"/>
         <result column="state" property="state"/>
-        <result column="opinions" property="opinions"/>
+        <result column="opinion" property="opinion"/>
         <result column="createBy" property="createBy"/>
         <result column="updateBy" property="updateBy"/>
         <result column="createTime" property="createTime"/>
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/MasterWorkerController.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/MasterWorkerController.java
index 405c95e..3549d99 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/MasterWorkerController.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/MasterWorkerController.java
@@ -30,7 +30,6 @@
 
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.regex.Pattern;
@@ -115,7 +114,7 @@
         String phone = loginPhoneRequest.getPhone();
         String phoneCode = loginPhoneRequest.getPhoneCode();
         // 默认验证码 123456
-        if (!"123456".equals(phoneCode)) {
+        if (!Constants.DEFAULT_PHONE_CODE.equals(phoneCode)) {
             // 手机验证码校验获取缓存验证码
             Object phoneCodeRedis = redisService.getCacheObject(RedisConstants.WORKER_APPLY_KEY + phone);
             if (null == phoneCodeRedis) {
@@ -151,14 +150,16 @@
     @PostMapping(value = "/settledApply")
     public R<String> settledApply(@RequestBody WorkerProcess workerProcess) {
         String phone = workerProcess.getPhone();
-        String phoneCode = workerProcess.getPhoneCode();
-        Object redisCodeObj = redisService.getCacheObject(RedisConstants.WORKER_SETTLE_KEY + phone);
-        if (null == redisCodeObj) {
-            return R.errorCode("验证码错误或已过期!");
-        }
-        String redisCodeStr = String.valueOf(redisCodeObj).split(":")[0];
-        if (!String.valueOf(redisCodeStr).equalsIgnoreCase(phoneCode)) {
-            return R.errorCode("验证码错误或已过期!");
+        String phoneCode = workerProcess.getCode();
+        if (!Constants.DEFAULT_PHONE_CODE.equals(phoneCode)) {
+            Object redisCodeObj = redisService.getCacheObject(RedisConstants.WORKER_SETTLE_KEY + phone);
+            if (null == redisCodeObj) {
+                return R.errorCode("验证码错误或已过期!");
+            }
+            String redisCodeStr = String.valueOf(redisCodeObj).split(":")[0];
+            if (!String.valueOf(redisCodeStr).equalsIgnoreCase(phoneCode)) {
+                return R.errorCode("验证码错误或已过期!");
+            }
         }
         // 校验手机号是否已注册
         MasterWorker masterWorker = masterWorkerService.lambdaQuery().eq(MasterWorker::getPhone, phone)
@@ -205,14 +206,16 @@
             @ApiImplicitParam(value = "手机验证码", name = "phoneCode", dataType = "String", required = true)
     })
     public R<String> verifyPhone(@RequestParam String phone, @RequestParam String phoneCode) {
-        // 验证码是否一致
-        Object redisCode = redisService.getCacheObject(RedisConstants.WORKER_APPLY_KEY + phone);
-        if (null == redisCode) {
-            return R.errorCode("验证码错误或已过期!");
-        }
-        String redisCodeStr = String.valueOf(redisCode).split(",")[0];
-        if (!String.valueOf(redisCodeStr).equalsIgnoreCase(phoneCode)) {
-            return R.errorCode("验证码错误或已过期!");
+        if (!Constants.DEFAULT_PHONE_CODE.equals(phoneCode)) {
+            // 验证码是否一致
+            Object redisCode = redisService.getCacheObject(RedisConstants.WORKER_APPLY_KEY + phone);
+            if (null == redisCode) {
+                return R.errorCode("验证码错误或已过期!");
+            }
+            String redisCodeStr = String.valueOf(redisCode).split(",")[0];
+            if (!String.valueOf(redisCodeStr).equalsIgnoreCase(phoneCode)) {
+                return R.errorCode("验证码错误或已过期!");
+            }
         }
         // 手机号是否注册
         MasterWorker worker = masterWorkerService.lambdaQuery().eq(MasterWorker::getPhone, phone)
@@ -237,7 +240,7 @@
     })
     public R<Boolean> updatePassword(@RequestParam String phone, @RequestParam String password, HttpServletRequest request) {
         // 密码长度至少为8位,且不能全是英文字母或数字
-        String regex = "^(?=.*[0-9])(?=.*[a-zA-Z])(?!.*[a-zA-Z]{8,})(?!.*\\d{8,}).{8,}$";
+        String regex = "^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,}$";
         if (!Pattern.matches(regex, password)) {
             return R.passwordIllegality("密码至少8个字符,不能全是字母或数字");
         }
@@ -302,6 +305,19 @@
     }
 
     /**
+     * 师傅端-订单代办列表
+     */
+    @ApiOperation(value = "订单置顶", tags = {"师傅端-首页"})
+    @GetMapping(value = "/orderTop")
+    public R<Boolean> orderTop(@RequestParam Integer orderId) {
+        LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
+        if (null == loginWorker) {
+            return R.loginExpire("登录已失效!");
+        }
+        return masterWorkerService.orderTop(orderId, loginWorker.getUserid()) ? R.ok() : R.fail();
+    }
+
+    /**
      * 师傅端-登录用户详情
      */
     @ApiOperation(value = "登录用户详情", tags = {"师傅端-个人中心"})
@@ -330,6 +346,25 @@
             AuthUtil.logoutByTokenWorker(token);
         }
         return R.ok("退出登录成功!");
+    }
+
+    /**
+     * 师傅端-修改头像
+     */
+    @ApiOperation(value = "修改头像", tags = {"师傅端-个人中心"})
+    @GetMapping(value = "/updateProfilePicture")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "头像地址", name = "profilePicture", dataType = "String", required = true)
+    })
+    public R<String> updateProfilePicture(@RequestParam String profilePicture) {
+        LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
+        if (null == loginWorker) {
+            return R.loginExpire("登录已失效!");
+        }
+        boolean update = masterWorkerService.lambdaUpdate().set(MasterWorker::getProfilePicture, profilePicture)
+                .eq(MasterWorker::getId, loginWorker.getUserid())
+                .eq(MasterWorker::getIsDelete, 0).update();
+        return update ? R.ok("修改成功!") : R.fail("修改失败!");
     }
 
     /**
@@ -376,12 +411,13 @@
     @ApiImplicitParams({
             @ApiImplicitParam(value = "生日", name = "birthday", dataType = "Date", required = true)
     })
-    public R<String> updateBirthday(@RequestParam Date birthday) {
+    public R<String> updateBirthday(@RequestParam String birthday) {
         LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
         if (null == loginWorker) {
             return R.loginExpire("登录已失效!");
         }
-        boolean update = masterWorkerService.lambdaUpdate().set(MasterWorker::getBirthday, birthday).eq(MasterWorker::getId, loginWorker.getUserid())
+        boolean update = masterWorkerService.lambdaUpdate().set(MasterWorker::getBirthday, birthday)
+                .eq(MasterWorker::getId, loginWorker.getUserid())
                 .eq(MasterWorker::getIsDelete, 0).update();
         return update ? R.ok("修改成功!") : R.fail("修改失败!");
     }
@@ -396,14 +432,16 @@
             @ApiImplicitParam(value = "手机验证码", name = "code", dataType = "String", required = true)
     })
     public R<String> updatePhone(@RequestParam String phone, @RequestParam String code, HttpServletRequest request) {
-        // 验证码是否一致
-        Object redisCode = redisService.getCacheObject(RedisConstants.WORKER_APPLY_KEY + phone);
-        if (null == redisCode) {
-            return R.errorCode("验证码错误或已过期!");
-        }
-        String redisCodeStr = String.valueOf(redisCode).split(",")[0];
-        if (!String.valueOf(redisCodeStr).equalsIgnoreCase(code)) {
-            return R.errorCode("验证码错误或已过期!");
+        if (!Constants.DEFAULT_PHONE_CODE.equals(code)) {
+            // 验证码是否一致
+            Object redisCode = redisService.getCacheObject(RedisConstants.WORKER_APPLY_KEY + phone);
+            if (null == redisCode) {
+                return R.errorCode("验证码错误或已过期!");
+            }
+            String redisCodeStr = String.valueOf(redisCode).split(",")[0];
+            if (!String.valueOf(redisCodeStr).equalsIgnoreCase(code)) {
+                return R.errorCode("验证码错误或已过期!");
+            }
         }
         LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
         if (null == loginWorker) {
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/OssController.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/OssController.java
new file mode 100644
index 0000000..6358f23
--- /dev/null
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/OssController.java
@@ -0,0 +1,78 @@
+package com.ruoyi.worker.controller;
+
+import com.ruoyi.common.core.constant.Constants;
+import com.ruoyi.common.core.domain.R;
+import com.ruoyi.common.core.exception.GlobalException;
+import com.ruoyi.common.core.utils.GaoDeMapUtil;
+import com.ruoyi.common.core.utils.ObsUploadUtil;
+import com.ruoyi.worker.entity.Order;
+import com.ruoyi.worker.service.OrderService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.annotation.Resource;
+import java.io.IOException;
+
+/**
+ * @author HJL
+ * @version 1.0
+ * @since 2024-05-30 9:27
+ */
+@RestController
+@RequestMapping("/oss")
+@Api(tags = "师傅端-文件上传")
+public class OssController {
+
+    @Resource
+    private OrderService orderService;
+
+    @PostMapping("/upload")
+    @ApiOperation(value = "文件上传", tags = "师傅端-文件上传")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "文件", name = "file", dataType = "MultipartFile", required = true)
+    })
+    public R<String> upload(@RequestParam("file") MultipartFile file) {
+        try {
+            return R.ok(ObsUploadUtil.obsUpload(file), "");
+        } catch (IOException e) {
+            return R.fail("文件上传失败!");
+        }
+    }
+
+    @PostMapping("/uploadPhoto")
+    @ApiOperation(value = "师傅端-上传完工照片", tags = "公共-文件上传")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "照片", name = "file", dataType = "MultipartFile", required = true),
+            @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "Integer", required = true),
+            @ApiImplicitParam(value = "师傅所在经度", name = "longitude", dataType = "String", required = true),
+            @ApiImplicitParam(value = "师傅所在纬度", name = "latitude", dataType = "String", required = true)
+    })
+    public R<String> uploadPhoto(@RequestParam("file") MultipartFile file, @RequestParam String orderId,
+                                 @RequestParam String longitude, @RequestParam String latitude) {
+        // 校验经纬度
+        Order order = orderService.lambdaQuery().eq(Order::getIsDelete, orderId).eq(Order::getIsDelete, 0).one();
+        // 用户下单位置经纬度
+        String orderPosition = order.getLongitude() + "," + order.getLatitude();
+        // 师傅经纬度
+        String workerPosition = longitude + "," + latitude;
+        // 师傅当前位置离用户下单位置具体距离
+        Long distance = GaoDeMapUtil.getDistance(orderPosition, workerPosition).getDatas();
+        // 上传时判断是否在下单位置附件,距离大于某个值则 不允许上传
+        if (distance > Constants.THREE_THOUSAND) {
+            throw new GlobalException("您当前手机定位超出当前订单预约地址范围 3km,无法提供回收服务!");
+        }
+        try {
+            return R.ok(ObsUploadUtil.obsUpload(file));
+        } catch (IOException e) {
+            return R.fail("文件上传失败!");
+        }
+    }
+
+}
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/MasterWorker.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/MasterWorker.java
index a0346ff..d97b405 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/MasterWorker.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/MasterWorker.java
@@ -10,8 +10,6 @@
 import lombok.Getter;
 import lombok.Setter;
 
-import java.util.Date;
-
 /**
  * <p>
  * 师傅信息表
@@ -33,10 +31,6 @@
     @TableField("city")
     private String city;
 
-    @ApiModelProperty("服务城市id")
-    @TableField("city_id")
-    private Integer cityId;
-
     @ApiModelProperty("用户编号(用户昵称/用户id)")
     @TableField("user_number")
     private String userNumber;
@@ -55,7 +49,7 @@
 
     @ApiModelProperty("生日")
     @TableField("birthday")
-    private Date birthday;
+    private String birthday;
 
     @ApiModelProperty("身份证号码")
     @TableField("id_number")
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/Order.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/Order.java
index d794fce..c93b7ff 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/Order.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/Order.java
@@ -27,8 +27,12 @@
 @ApiModel(value = "Order对象", description = "订单管理")
 public class Order extends BaseEntity {
 
-    @TableId(value = "id",type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
+
+    @ApiModelProperty("下单城市")
+    @TableField("city")
+    private String city;
 
     @ApiModelProperty("订单编号")
     @TableField("order_number")
@@ -134,4 +138,8 @@
     @TableField("address")
     private String address;
 
+    @ApiModelProperty("置顶顺序")
+    @TableField("top_sort")
+    private Integer topSort;
+
 }
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/WorkerProcess.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/WorkerProcess.java
index fd175ba..6d4b665 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/WorkerProcess.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/WorkerProcess.java
@@ -85,11 +85,11 @@
     private Integer state;
 
     @ApiModelProperty("审批意见")
-    @TableField("examine_opinion")
-    private String examineOpinion;
+    @TableField("opinion")
+    private String opinion;
 
     @ApiModelProperty("手机验证码")
     @TableField(exist = false)
-    private String phoneCode;
+    private String code;
 
 }
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/MasterWorkerService.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/MasterWorkerService.java
index 3553ee4..505a63a 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/MasterWorkerService.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/MasterWorkerService.java
@@ -36,4 +36,12 @@
      */
     List<OrderListVO> orderNotHandle(Integer userid, String longitude, String latitude);
 
+    /**
+     * 订单置顶
+     *
+     * @param orderId 订单id
+     * @param userid  用户id
+     * @return 操作结果
+     */
+    Boolean orderTop(Integer orderId, Integer userid);
 }
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/MasterWorkerServiceImpl.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/MasterWorkerServiceImpl.java
index 39c3f9d..8a17a9c 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/MasterWorkerServiceImpl.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/MasterWorkerServiceImpl.java
@@ -45,14 +45,18 @@
 
     @Override
     public List<OrderListVO> orderNotHandle(Integer userid, String longitude, String latitude) {
-        List<Order> orderList = orderService.lambdaQuery().eq(Order::getServerId, userid).eq(Order::getState, Constants.TWO)
-                .eq(Order::getIsDelete, 0).eq(Order::getType, Constants.ZERO).list();
+        List<Order> orderList = orderService.lambdaQuery().eq(Order::getServerId, userid)
+                .eq(Order::getState, Constants.ONE)
+                .eq(Order::getIsDelete, 0)
+                .eq(Order::getType, Constants.ZERO)
+                .orderByAsc(Order::getTopSort).list();
         // 根据经纬度距离封装
         List<OrderNotHandleVO> list = new ArrayList<>();
         for (Order order : orderList) {
             // 用户下单经纬度
             Double orderLongitude = order.getLongitude();
             Double orderLatitude = order.getLatitude();
+            Integer topSort = order.getTopSort();
             String orderPosition = orderLongitude + "," + orderLatitude;
             // 根据经纬度计算与师傅的距离
             Result<Long> result = GaoDeMapUtil.getDistance(orderPosition, longitude + "," + latitude);
@@ -86,6 +90,7 @@
             orderListVO.setType(order.getType());
             orderListVO.setLongitude(order.getLongitude());
             orderListVO.setLatitude(order.getLatitude());
+            orderListVO.setTopSort(topSort);
             OrderNotHandleVO vo = new OrderNotHandleVO(distance, orderListVO);
             list.add(vo);
         }
@@ -104,4 +109,23 @@
         return resultList;
     }
 
+    @Override
+    public Boolean orderTop(Integer orderId, Integer userid) {
+        // 订单代办列表
+        List<Order> orderList = orderService.lambdaQuery().eq(Order::getServerId, userid)
+                .eq(Order::getState, Constants.ONE)
+                .eq(Order::getIsDelete, 0)
+                .eq(Order::getType, Constants.ZERO)
+                .orderByAsc(Order::getTopSort).list();
+        List<Order> orders = orderList.stream().filter(data -> null != data.getTopSort()).collect(Collectors.toList());
+        int itemSort = 2;
+        for (Order order : orders) {
+            order.setTopSort(itemSort);
+            itemSort++;
+        }
+        return orderService.lambdaUpdate().set(Order::getTopSort, Constants.ONE)
+                .eq(Order::getServerId, userid)
+                .eq(Order::getIsDelete, 0).update();
+    }
+
 }
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/vo/OrderListVO.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/vo/OrderListVO.java
index 015acb8..fa0272d 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/vo/OrderListVO.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/vo/OrderListVO.java
@@ -1,5 +1,6 @@
 package com.ruoyi.worker.vo;
 
+import com.baomidou.mybatisplus.annotation.TableField;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -86,6 +87,10 @@
     @ApiModelProperty("下单用户纬度")
     private Double latitude;
 
+    @ApiModelProperty("置顶顺序")
+    @TableField("top_sort")
+    private Integer topSort;
+
     public OrderListVO(Integer orderId) {
         this.orderId = orderId;
     }
diff --git a/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/MasterWorkerMapper.xml b/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/MasterWorkerMapper.xml
index ded6e48..6c7fee2 100644
--- a/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/MasterWorkerMapper.xml
+++ b/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/MasterWorkerMapper.xml
@@ -5,7 +5,6 @@
     <resultMap id="BaseResultMap" type="com.ruoyi.worker.entity.MasterWorker">
         <id column="id" property="id"/>
         <result column="city" property="city"/>
-        <result column="city_id" property="cityId"/>
         <result column="user_number" property="userNumber"/>
         <result column="password" property="password"/>
         <result column="real_name" property="realName"/>
@@ -27,12 +26,11 @@
     </resultMap>
 
     <select id="orderCount" resultType="com.ruoyi.worker.vo.OrderCountVO">
-        SELECT
-            COALESCE(SUM(CASE WHEN o.state IN (2, 3, 4) THEN 1 ELSE 0 END), 0) AS total,
-            COALESCE(SUM(CASE WHEN o.state = 2 THEN 1 ELSE 0 END), 0) AS waitVisit,
-            COALESCE(SUM(CASE WHEN o.state = 4 THEN 1 ELSE 0 END), 0) AS completed
-        FROM
-            t_order o left join sys_master_worker m on o.server_id = m.id
+        SELECT COALESCE(SUM(CASE WHEN o.state IN (2, 3, 4) THEN 1 ELSE 0 END), 0) AS total,
+               COALESCE(SUM(CASE WHEN o.state = 2 THEN 1 ELSE 0 END), 0)          AS waitVisit,
+               COALESCE(SUM(CASE WHEN o.state = 4 THEN 1 ELSE 0 END), 0)          AS completed
+        FROM t_order o
+                 left join sys_master_worker m on o.server_id = m.id
         where m.id = #{id}
     </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/WorkerProcessMapper.xml b/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/WorkerProcessMapper.xml
index f26e36a..15575eb 100644
--- a/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/WorkerProcessMapper.xml
+++ b/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/WorkerProcessMapper.xml
@@ -21,6 +21,6 @@
         <result column="createTime" property="createTime"/>
         <result column="updateTime" property="updateTime"/>
         <result column="is_delete" property="isDelete"/>
-        <result column="examine_opinion" property="examineOpinion"/>
+        <result column="opinion" property="opinion"/>
     </resultMap>
 </mapper>
diff --git a/ruoyi-visual/ruoyi-monitor/src/main/java/com/ruoyi/modules/monitor/config/WebSecurityConfigurer.java b/ruoyi-visual/ruoyi-monitor/src/main/java/com/ruoyi/modules/monitor/config/WebSecurityConfigurer.java
index 9560204..8fc4a6d 100644
--- a/ruoyi-visual/ruoyi-monitor/src/main/java/com/ruoyi/modules/monitor/config/WebSecurityConfigurer.java
+++ b/ruoyi-visual/ruoyi-monitor/src/main/java/com/ruoyi/modules/monitor/config/WebSecurityConfigurer.java
@@ -9,22 +9,19 @@
 
 /**
  * 监控权限配置
- * 
+ *
  * @author ruoyi
  */
 @EnableWebSecurity
-public class WebSecurityConfigurer
-{
+public class WebSecurityConfigurer {
     private final String adminContextPath;
 
-    public WebSecurityConfigurer(AdminServerProperties adminServerProperties)
-    {
+    public WebSecurityConfigurer(AdminServerProperties adminServerProperties) {
         this.adminContextPath = adminServerProperties.getContextPath();
     }
 
     @Bean
-    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception
-    {
+    public SecurityFilterChain filterChain(HttpSecurity httpSecurity) throws Exception {
         SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
         successHandler.setTargetUrlParameter("redirectTo");
         successHandler.setDefaultTargetUrl(adminContextPath + "/");

--
Gitblit v1.7.1