From 428519bd1056dd90cd4589dbf85b380e403ff254 Mon Sep 17 00:00:00 2001
From: hjl <1657978663@qq.com>
Date: 星期五, 05 七月 2024 18:13:08 +0800
Subject: [PATCH] feat: 代码初始化、腾讯云短信SDK

---
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/WithdrawService.java                      |   22 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/Order.java                               |   13 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/UserRecipientMapper.java                   |   18 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/Order.java                                   |    6 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/OrderEvaluateVO.java                             |    6 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/GeneratorCodeConfig.java                    |    4 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/OssController.java                   |   11 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/mapper/OrderMapper.java                         |   11 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/vo/OrderListVO.java                             |    7 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/SysServeCoordinateServiceImpl.java |   20 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/SysServeCoordinateService.java          |   16 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserRecipientController.java           |   20 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/MasterWorkerServiceImpl.java       |   70 +-
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/HomePageController.java                |    3 
 ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/OrderMapper.xml                               |   29 +
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/OrderController.java                   |   24 
 ruoyi-service/ruoyi-user/src/main/resources/mapper/user/EvaluateMapper.xml                                |    3 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/UserRecipientServiceImpl.java        |   20 
 ruoyi-service/ruoyi-admin/src/main/resources/logback.xml                                                  |   74 +++
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/EvaluateOrderInfoVO.java                         |    3 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/SendSmsUtil.java                            |  117 ++++
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/ChangeDispatchController.java          |   41 +
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderResultVO.java                             |    2 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/UserRecipientService.java                 |   16 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/UserServiceImpl.java                 |   16 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/WithdrawMapper.java                        |    6 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/MasterWorkerServiceImpl.java         |    7 
 ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/MasterWorkerMapper.xml                        |    2 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/request/OrderRequest.java                           |    3 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Order.java                                 |   20 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/OrderServiceImpl.java                  |    3 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/WithdrawController.java                  |   18 
 ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/WithdrawMapper.xml                              |    9 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/MasterWorkerController.java            |   34 +
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/WithdrawServiceImpl.java             |   14 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByServeVO.java                            |    3 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/UserRecipient.java                           |   10 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/MasterWorkerController.java          |  109 ++-
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByUserInfoVO.java                         |    6 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/UserRecipient.java                         |   81 +++
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/WithdrawOrderVO.java                             |    3 
 ruoyi-service/ruoyi-worker/pom.xml                                                                        |   17 
 ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/feignClient/AdminClient.java                  |    4 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByServeRecordVO.java                      |    5 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/OrderMapper.java                           |    3 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/OrderDetailVO.java                               |    2 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/SysServeCoordinate.java                  |   52 ++
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/Evaluate.java                            |    2 
 ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/entity/ChangeDispatch.java                    |    4 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/OrderService.java                         |    7 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/WithdrawServiceImpl.java               |    1 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/UserServiceImpl.java                   |    2 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/OrderServiceImpl.java                |   19 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/ChangeDispatch.java                        |    2 
 ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/vo/PolylineData.java                   |   25 +
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/MasterWorkerService.java                  |    8 
 ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/UserMapper.xml                                  |    2 
 ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/SysServeCoordinateMapper.xml                  |   18 
 ruoyi-service/ruoyi-user/src/main/resources/logback.xml                                                   |   74 +++
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/UserService.java                          |    3 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/sorcket/WebSocketServer.java                      |    1 
 ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/OrderController.java                     |   14 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/OrderServiceImpl.java              |   13 
 ruoyi-service/ruoyi-admin/pom.xml                                                                         |   17 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/SendSmsController.java                 |   16 
 ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/UserRecipientMapper.xml                         |   23 
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/OrderController.java                 |   53 +
 ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/mapper/SysServeCoordinateMapper.java            |   18 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/SendSmsService.java                       |   10 
 /dev/null                                                                                                 |   20 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/ServeCoordinate.java                       |   14 
 ruoyi-service/ruoyi-user/pom.xml                                                                          |   17 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/Withdraw.java                              |    5 
 ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/SendSmsServiceImpl.java              |   10 
 ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/OrderMapper.xml                                 |   42 +
 75 files changed, 1,202 insertions(+), 221 deletions(-)

diff --git a/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/entity/ChangeDispatch.java b/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/entity/ChangeDispatch.java
index cb988e0..08f5b10 100644
--- a/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/entity/ChangeDispatch.java
+++ b/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/entity/ChangeDispatch.java
@@ -3,11 +3,13 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
 
 import java.util.Date;
 
@@ -42,6 +44,8 @@
 
     @ApiModelProperty("申请改派时间")
     @TableField("apply_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:ss:mm")
+    @DateTimeFormat(pattern = "yyyy-MM-dd HH:ss:mm")
     private Date applyTime;
 
     @ApiModelProperty("改派状态 (0:未改派 ;1:已改派)")
diff --git a/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/feignClient/AdminClient.java b/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/feignClient/AdminClient.java
index ebda7f8..fede35e 100644
--- a/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/feignClient/AdminClient.java
+++ b/ruoyi-api/ruoyi-api-admin/src/main/java/com/ruoyi/admin/api/feignClient/AdminClient.java
@@ -43,7 +43,7 @@
      * @param changeDispatch 改派信息
      * @return 详细数据
      */
-    @PostMapping(value = "/changeDispatch/save")
+    @PostMapping(value = "/changeDispatch/changeDispatchSave")
     R<Boolean> changeDispatchSave(@RequestBody ChangeDispatch changeDispatch);
 
     /**
@@ -52,7 +52,7 @@
      * @param id 订单id
      * @return 改派订单
      */
-    @GetMapping(value = "/changeDispatch/one")
+    @GetMapping(value = "/changeDispatch/changeDispatchOne")
     R<ChangeDispatch> changeDispatchOne(@RequestParam("id") Integer id);
 
     /**
diff --git a/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/vo/PolylineData.java b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/vo/PolylineData.java
new file mode 100644
index 0000000..a5f9c71
--- /dev/null
+++ b/ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/vo/PolylineData.java
@@ -0,0 +1,25 @@
+package com.ruoyi.common.core.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @author HJL
+ * @version 1.0
+ * @since 2024-07-02 9:58
+ */
+@Data
+public class PolylineData {
+
+    @ApiModelProperty("经度")
+    private String longitude;
+
+    @ApiModelProperty("纬度")
+    private String latitude;
+
+    public PolylineData(String longitude, String latitude) {
+        this.longitude = longitude;
+        this.latitude = latitude;
+    }
+
+}
diff --git a/ruoyi-service/ruoyi-admin/pom.xml b/ruoyi-service/ruoyi-admin/pom.xml
index b47827e..7d072bb 100644
--- a/ruoyi-service/ruoyi-admin/pom.xml
+++ b/ruoyi-service/ruoyi-admin/pom.xml
@@ -184,4 +184,21 @@
 
     </dependencies>
 
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/ChangeDispatchController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/ChangeDispatchController.java
index be6ad9f..b24c938 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/ChangeDispatchController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/ChangeDispatchController.java
@@ -10,6 +10,7 @@
 import com.ruoyi.admin.service.ChangeDispatchService;
 import com.ruoyi.admin.service.MasterWorkerService;
 import com.ruoyi.admin.service.OrderService;
+import com.ruoyi.admin.sorcket.WebSocketServer;
 import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.domain.R;
 import com.ruoyi.common.core.exception.GlobalException;
@@ -23,6 +24,7 @@
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.io.IOException;
 import java.util.Arrays;
 import java.util.List;
 import java.util.stream.Collectors;
@@ -86,6 +88,17 @@
     }
 
     /**
+     * 订单改派 -远程调用
+     *
+     * @param changeDispatch 订单改派信息
+     */
+    @ApiOperation(value = "新增订单改派", tags = {"后台-系统设置-订单改派管理"})
+    @PostMapping(value = "/changeDispatchSave")
+    public R<Boolean> changeDispatchSave(@RequestBody ChangeDispatch changeDispatch) {
+        return R.ok(changeDispatchService.save(changeDispatch));
+    }
+
+    /**
      * 订单改派详情
      *
      * @param id 订单改派id
@@ -110,6 +123,23 @@
             @ApiImplicitParam(value = "订单改派id", name = "id", dataType = "Integer", required = true)
     })
     public R<ChangeDispatch> one(@RequestParam("id") Integer id) {
+        ChangeDispatch changeDispatch = changeDispatchService.lambdaQuery()
+                .eq(ChangeDispatch::getOrderId, id)
+                .eq(ChangeDispatch::getState, Constants.ZERO)
+                .one();
+        return R.ok(changeDispatch);
+    }
+
+    /**
+     * 订单改派详情 远程调用
+     *
+     * @param id 订单id
+     */
+    @GetMapping(value = "/changeDispatchOne")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "订单改派id", name = "id", dataType = "Integer", required = true)
+    })
+    public R<ChangeDispatch> changeDispatchOne(@RequestParam("id") Integer id) {
         ChangeDispatch changeDispatch = changeDispatchService.lambdaQuery()
                 .eq(ChangeDispatch::getOrderId, id)
                 .eq(ChangeDispatch::getState, Constants.ZERO)
@@ -159,10 +189,6 @@
         if (null == order) {
             throw new GlobalException("订单不存在!");
         }
-        // 判断订单状态
-        if (!Constants.ZERO.equals(order.getState())) {
-            throw new GlobalException("订单已有师傅正在处理!");
-        }
         MasterWorker masterWorker = masterWorkerService.lambdaQuery().eq(MasterWorker::getId, workerId)
                 .eq(MasterWorker::getIsDelete, 0).one();
         // 师傅信息
@@ -185,7 +211,12 @@
         // 改派信息
         boolean update = changeDispatchService.lambdaUpdate().set(ChangeDispatch::getState, 1)
                 .eq(ChangeDispatch::getId, changeId).eq(ChangeDispatch::getIsDelete, 0).update();
-        return orderUpdate && save && update ? R.ok() : R.fail();
+        try {
+            WebSocketServer.sendInfo("您有一条新的订单,请注意查收!", String.valueOf(workerId));
+            return orderUpdate && save && update ? R.ok() : R.fail();
+        } catch (IOException e) {
+            return R.fail("师傅不在线!");
+        }
     }
 
 }
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 f5e8800..982e410 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
@@ -7,6 +7,7 @@
 import com.ruoyi.admin.service.UserService;
 import com.ruoyi.admin.vo.MasterWorkerRankVO;
 import com.ruoyi.admin.vo.OrderResultVO;
+import com.ruoyi.admin.vo.UserDataCountVO;
 import com.ruoyi.admin.vo.UserTrendsVO;
 import com.ruoyi.common.core.domain.R;
 import io.swagger.annotations.Api;
@@ -43,7 +44,7 @@
      */
     @ApiOperation(value = "后台-用户数据统计", tags = {"后台-首页"})
     @PostMapping(value = "/userDataCount")
-    public R<Object> userDataCount(@RequestBody UserDataCountRequest userDataCountRequest) {
+    public R<UserDataCountVO> userDataCount(@RequestBody UserDataCountRequest userDataCountRequest) {
         return R.ok(userService.userDataCount(userDataCountRequest));
     }
 
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/MasterWorkerController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/MasterWorkerController.java
index 6792ae0..4820535 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/MasterWorkerController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/MasterWorkerController.java
@@ -18,6 +18,7 @@
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
@@ -54,18 +55,21 @@
             @ApiImplicitParam(value = "师傅姓名", name = "name", dataType = "String"),
             @ApiImplicitParam(value = "师傅电话", name = "phone", dataType = "String"),
             @ApiImplicitParam(value = "服务城市", name = "city", dataType = "String"),
+            @ApiImplicitParam(value = "账号启用状态", name = "state", dataType = "Integer"),
             @ApiImplicitParam(value = "页码", name = "pageNum", dataType = "Integer", required = true),
             @ApiImplicitParam(value = "每页显示条数", name = "pageSize", dataType = "Integer", required = true)
     })
-    public R<IPage<MasterWorker>> selectServe(String name, String phone, String city,
+    public R<IPage<MasterWorker>> selectServe(String name, String phone, String city, Integer state,
                                               @RequestParam(name = "pageNum", defaultValue = "1") Integer pageNum,
                                               @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) {
         LambdaQueryChainWrapper<MasterWorker> wrapper = masterWorkerService.lambdaQuery();
         wrapper = StringUtils.isNotBlank(name) ? wrapper.like(MasterWorker::getRealName, name) : wrapper;
         wrapper = StringUtils.isNotBlank(phone) ? wrapper.like(MasterWorker::getPhone, phone) : wrapper;
         wrapper = StringUtils.isNotBlank(city) ? wrapper.like(MasterWorker::getCity, city) : wrapper;
-        return R.ok(wrapper.eq(MasterWorker::getIsDelete, 0)
-                        .eq(MasterWorker::getIsEnable,1)
+        if (null != state) {
+            wrapper.eq(MasterWorker::getIsEnable, Constants.ONE);
+        }
+        return R.ok(wrapper.eq(MasterWorker::getIsDelete, Constants.ZERO)
                 .orderByDesc(MasterWorker::getCreateTime).page(Page.of(pageNum, pageSize)));
     }
 
@@ -77,11 +81,16 @@
     @ApiOperation(value = "新增师傅信息", tags = {"后台-师傅管理-师傅列表管理"})
     @PostMapping(value = "/save")
     public R<String> save(@RequestBody MasterWorker masterWorker) {
-        // MD5加密登录密码(新)
-        BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
-        String md5Password = passwordEncoder.encode(Constants.DEFAULT_PASSWORD);
-        masterWorker.setPassword(md5Password);
-        return masterWorkerService.save(masterWorker) ? R.ok() : R.fail();
+        boolean check = masterWorkerService.checkOnlyPhone(masterWorker.getPhone());
+        if (check) {
+            // MD5加密登录密码(新)
+            BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
+            String md5Password = passwordEncoder.encode(Constants.DEFAULT_PASSWORD);
+            masterWorker.setPassword(md5Password);
+            return masterWorkerService.save(masterWorker) ? R.ok() : R.fail();
+        } else {
+            return R.fail("该手机号已注册账号!");
+        }
     }
 
     /**
@@ -108,8 +117,13 @@
      */
     @ApiOperation(value = "修改师傅信息", tags = {"后台-师傅管理-师傅列表管理"})
     @PostMapping(value = "/update")
-    public R<String> update(@RequestBody MasterWorker masterWorker) {
-        return masterWorkerService.updateById(masterWorker) ? R.ok() : R.fail();
+    public R<String> update(@RequestBody @Validated MasterWorker masterWorker) {
+        boolean check = masterWorkerService.checkOnlyPhone(masterWorker.getPhone());
+        if (check) {
+            return masterWorkerService.updateById(masterWorker) ? R.ok() : R.fail();
+        } else {
+            return R.fail("该手机号已注册账号!");
+        }
     }
 
     /**
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 6b09cdf..ebbe530 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
@@ -118,9 +118,9 @@
      * 订单列表
      */
     @ApiOperation(value = "订单列表-各订单数量统计", tags = {"后台-订单管理"})
-    @GetMapping(value = "/orderPageCount")
-    public R<OrderPageCountVO> orderPageCount() {
-        return R.ok(orderService.orderPageCount());
+    @PostMapping(value = "/orderPageCount")
+    public R<OrderPageCountVO> orderPageCount(@RequestBody OrderQueryRequest orderQueryRequest) {
+        return R.ok(orderService.orderPageCount(orderQueryRequest));
     }
 
     /**
@@ -139,7 +139,7 @@
 
     /**
      * 新增订单
-     * 后台订单与用户端及师傅端无关联
+     * 后台订单为指定订单,默认为待上门状态
      *
      * @param order 站点信息
      */
@@ -177,15 +177,14 @@
         // 后台订单
         order.setType(Constants.ONE);
         // 待派单状态
-        order.setState(Constants.ZERO);
+        order.setState(Constants.ONE);
         order.setSubsidy(BigDecimal.ZERO);
         order.setOrderNumber(String.valueOf(SNOW_FLAKE_ID_WORKER.nextId()));
         return orderService.save(order) ? R.ok() : R.fail();
     }
 
     /**
-     * 新增订单
-     * 后台订单与用户端及师傅端无关联
+     * 订单派单/改派
      *
      * @param type 1:订单派单;2:订单改派
      */
@@ -199,7 +198,8 @@
     })
     public R<String> reassignment(@RequestParam Integer type, @RequestParam Integer orderId,
                                   @RequestParam Integer workerId, String applyReason) {
-        Order order = orderService.lambdaQuery().eq(Order::getId, orderId).eq(Order::getIsDelete, 0).one();
+        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();
@@ -213,7 +213,9 @@
             order.setState(Constants.ONE);
             result = orderService.updateById(order);
         } else if (Constants.TWO.equals(type)) {
-            order.setServeId(workerId);
+            order.setServerId(workerId);
+            // 更新接单时间
+            order.setAcceptTime(new Date());
             order.setServerName(masterWorker.getRealName());
             order.setServerPhone(masterWorker.getPhone());
             result = orderService.updateById(order);
@@ -226,7 +228,9 @@
             changeDispatch.setState(Constants.ONE);
             changeDispatch.setOrderId(String.valueOf(order.getId()));
             changeDispatch.setOrderNumber(order.getOrderNumber());
-            changeDispatch.setUserId(String.valueOf(order.getUserId()));
+            if (null != order.getUserId()) {
+                changeDispatch.setUserId(String.valueOf(order.getUserId()));
+            }
             changeDispatch.setUserName(order.getReservationName());
             changeDispatch.setIsDelete(Constants.ZERO);
             changeDispatchService.save(changeDispatch);
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/SendSmsController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/SendSmsController.java
index 6e77d3b..1772694 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/SendSmsController.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/SendSmsController.java
@@ -1,5 +1,7 @@
 package com.ruoyi.admin.controller;
 
+import com.ruoyi.admin.entity.Order;
+import com.ruoyi.admin.service.OrderService;
 import com.ruoyi.admin.service.SendSmsService;
 import com.ruoyi.common.core.domain.R;
 import io.swagger.annotations.Api;
@@ -25,6 +27,8 @@
 
     @Resource
     private SendSmsService sendSmsService;
+    @Resource
+    private OrderService orderService;
 
     /**
      * 发送派单短信给用户
@@ -34,10 +38,16 @@
     @ApiOperation(value = "后台-发送派单短信", tags = {"发送短信"})
     @GetMapping(value = "/dispatchSms")
     @ApiImplicitParams({
-            @ApiImplicitParam(value = "订单记录id", name = "orderId", dataType = "String", required = true)
+            @ApiImplicitParam(value = "订单记录id", name = "orderId", dataType = "Integer", required = true)
     })
-    public R<Object> userDataCount(@RequestParam String orderId) {
-        return R.ok();
+    public R<Object> dispatchSms(@RequestParam Integer orderId) {
+        Order order = orderService.lambdaQuery()
+                .eq(Order::getId, orderId)
+                .eq(Order::getIsDelete, 0).one();
+        if (null == order) {
+            return R.fail("订单不存在或已删除!");
+        }
+        return R.ok(sendSmsService.dispatchOrder(order));
     }
 
     /**
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserRecipientController.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserRecipientController.java
new file mode 100644
index 0000000..c4fc5a1
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/controller/UserRecipientController.java
@@ -0,0 +1,20 @@
+package com.ruoyi.admin.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 用户收货地址 前端控制器
+ * </p>
+ *
+ * @author hjl
+ * @since 2024-07-02
+ */
+@RestController
+@RequestMapping("/user-recipient")
+public class UserRecipientController {
+
+}
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/ChangeDispatch.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/ChangeDispatch.java
index 569f6a8..29b64f7 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/ChangeDispatch.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/ChangeDispatch.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -43,6 +44,7 @@
 
     @ApiModelProperty("申请改派时间")
     @TableField("apply_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:ss:mm")
     private Date applyTime;
 
     @ApiModelProperty("改派状态 (0:未改派 ;1:已改派)")
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 21dec73..01dfef0 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
@@ -10,7 +10,6 @@
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
-import org.springframework.format.annotation.DateTimeFormat;
 
 import java.math.BigDecimal;
 import java.util.Date;
@@ -80,11 +79,9 @@
     @TableField("reservation_address")
     private String reservationAddress;
 
-    @ApiModelProperty("上门时间")
+    @ApiModelProperty("上门时间段")
     @TableField("time")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
-    private Date time;
+    private String time;
 
     @ApiModelProperty("接单时间(师傅接单或后台派单,更新该字段时间)")
     @TableField("accept_time")
@@ -110,6 +107,11 @@
     @TableField("state")
     private Integer state;
 
+    @ApiModelProperty("师傅到达预约地点时间")
+    @TableField("arrive_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:ss:mm")
+    private Date arriveTime;
+
     @ApiModelProperty("订单类型(0:正常订单,1:后台订单(后台订单与用户端、师傅端无联系))")
     @TableField("type")
     private Integer type;
@@ -134,6 +136,14 @@
     @TableField("is_withdrawal")
     private Integer isWithdrawal;
 
+    @ApiModelProperty("详细地址")
+    @TableField("address")
+    private String address;
+
+    @ApiModelProperty("订单取消原因")
+    @TableField("cancel_reason")
+    private String cancelReason;
+
     @ApiModelProperty("再投原因")
     @TableField(exist = false)
     private String applyReason;
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/ServeCoordinate.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/ServeCoordinate.java
index 794c434..94e7521 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/ServeCoordinate.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/ServeCoordinate.java
@@ -10,6 +10,8 @@
 import lombok.Getter;
 import lombok.Setter;
 
+import java.math.BigDecimal;
+
 /**
  * <p>
  * 师傅路线经纬度信息
@@ -31,8 +33,20 @@
     @TableField("worker_id")
     private Integer workerId;
 
+    @ApiModelProperty("订单id")
+    @TableField("order_id")
+    private Integer orderId;
+
     @ApiModelProperty("路线经纬度")
     @TableField("coordinate")
     private String coordinate;
 
+    @ApiModelProperty("经度")
+    @TableField("longitude")
+    private BigDecimal longitude;
+
+    @ApiModelProperty("纬度")
+    @TableField("latitude")
+    private BigDecimal latitude;
+
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/UserRecipient.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/UserRecipient.java
new file mode 100644
index 0000000..b0f4535
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/entity/UserRecipient.java
@@ -0,0 +1,81 @@
+package com.ruoyi.admin.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * <p>
+ * 用户收货地址
+ * </p>
+ *
+ * @author hjl
+ * @since 2024-07-02
+ */
+@Getter
+@Setter
+@TableName("t_user_recipient")
+@ApiModel(value = "UserRecipient对象", description = "用户收货地址")
+public class UserRecipient {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("用户id")
+    @TableField("user_id")
+    private Integer userId;
+
+    @ApiModelProperty("收件人姓名")
+    @TableField("recipient")
+    private String recipient;
+
+    @ApiModelProperty("收件人电话")
+    @TableField("recipientPhone")
+    private String recipientPhone;
+
+    @ApiModelProperty("地址")
+    @TableField("address")
+    private String address;
+
+    @ApiModelProperty("详细地址")
+    @TableField("address_detail")
+    private String addressDetail;
+
+    @ApiModelProperty("是否为默认地址0否1是")
+    @TableField("isDefault")
+    private Integer isDefault;
+
+    @ApiModelProperty("下单用户经度")
+    @TableField("longitude")
+    private BigDecimal longitude;
+
+    @ApiModelProperty("下单用户纬度")
+    @TableField("latitude")
+    private BigDecimal latitude;
+
+    @TableField("createBy")
+    private String createBy;
+
+    @TableField("updateBy")
+    private String updateBy;
+
+    @TableField("createTime")
+    private Date createTime;
+
+    @TableField("updateTime")
+    private Date updateTime;
+
+    @ApiModelProperty("是否删除 0否1是")
+    @TableField("is_delete")
+    private Integer isDelete;
+
+
+}
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 a6d1acb..186cb6e 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
@@ -11,6 +11,7 @@
 import lombok.Getter;
 import lombok.Setter;
 
+import java.io.Serializable;
 import java.math.BigDecimal;
 import java.util.Date;
 
@@ -26,7 +27,9 @@
 @Setter
 @TableName("t_withdraw")
 @ApiModel(value = "Withdraw对象", description = "用户提现记录表")
-public class Withdraw extends BaseEntity {
+public class Withdraw extends BaseEntity implements Serializable {
+
+    private static final long serialVersionUID = 1L;
 
     @TableId(value = "id",type = IdType.AUTO)
     private Integer id;
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 349cc5b..a95d9f9 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
@@ -119,9 +119,10 @@
     /**
      * 订单管理分页模块,订单数量统计
      *
+     * @param orderQueryRequest 筛选参数
      * @return 统计数量
      */
-    List<Order> orderPageCount();
+    List<Order> orderPageCount(@Param("data") OrderQueryRequest orderQueryRequest);
 
     /**
      * 根据所选id查询
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/UserRecipientMapper.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/UserRecipientMapper.java
new file mode 100644
index 0000000..3e467b5
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/mapper/UserRecipientMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.admin.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.admin.entity.UserRecipient;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 用户收货地址 Mapper 接口
+ * </p>
+ *
+ * @author hjl
+ * @since 2024-07-02
+ */
+@Mapper
+public interface UserRecipientMapper extends BaseMapper<UserRecipient> {
+
+}
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 26d3bd2..238fa2e 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,10 +23,12 @@
     /**
      * 获取用户提现金额
      *
-     * @param cityList 城市集合
+     * @param cityList     城市集合
+     * @param startDateStr 季度开始时间
+     * @param endDateStr   季度结束时间
      * @return 总金额
      */
-    BigDecimal withdrawalTotalMoney(@Param("cityList") List<String> cityList);
+    BigDecimal withdrawalTotalMoney(@Param("cityList") List<String> cityList, @Param("start") String startDateStr, @Param("end") String endDateStr);
 
     /**
      * 年度查询
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 0261ace..4925c9c 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
@@ -23,4 +23,12 @@
      * @return 排行榜
      */
     List<MasterWorkerRankVO> workerRanking(List<String> cityList);
+
+    /**
+     * 校验师傅手机号是否唯一
+     *
+     * @param phone 注册手机号
+     * @return 是否唯一
+     */
+    boolean checkOnlyPhone(String phone);
 }
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 c8ce5e0..d3ce92f 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
@@ -63,8 +63,8 @@
     /**
      * excel模板导出
      *
-     * @param orderQueryRequest   筛选参数
-     * @param response 响应体
+     * @param orderQueryRequest 筛选参数
+     * @param response          响应体
      * @return 导出结果
      */
     R<String> excelExport(OrderQueryRequest orderQueryRequest, HttpServletResponse response);
@@ -98,7 +98,8 @@
     /**
      * 订单管理分页模块,订单数量统计
      *
+     * @param orderQueryRequest 筛选参数
      * @return 统计数量
      */
-    OrderPageCountVO orderPageCount();
+    OrderPageCountVO orderPageCount(OrderQueryRequest orderQueryRequest);
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/SendSmsService.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/SendSmsService.java
index ad25d0b..1cd1f05 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/SendSmsService.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/SendSmsService.java
@@ -1,5 +1,7 @@
 package com.ruoyi.admin.service;
 
+import com.ruoyi.admin.entity.Order;
+
 /**
  * @author HJL
  * @version 1.0
@@ -30,4 +32,12 @@
      * @return 验证码
      */
     String userLoginSms(String phone);
+
+    /**
+     * 后台发送派单短信
+     *
+     * @param order 订单信息
+     * @return 短信结果
+     */
+    String dispatchOrder(Order order);
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/UserRecipientService.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/UserRecipientService.java
new file mode 100644
index 0000000..3aa0420
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/UserRecipientService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.admin.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.admin.entity.UserRecipient;
+
+/**
+ * <p>
+ * 用户收货地址 服务类
+ * </p>
+ *
+ * @author hjl
+ * @since 2024-07-02
+ */
+public interface UserRecipientService extends IService<UserRecipient> {
+
+}
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 84cddc8..2180888 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
@@ -3,6 +3,7 @@
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.ruoyi.admin.entity.User;
 import com.ruoyi.admin.request.UserDataCountRequest;
+import com.ruoyi.admin.vo.UserDataCountVO;
 import com.ruoyi.admin.vo.UserTrendsVO;
 
 import java.util.List;
@@ -31,5 +32,5 @@
      * @param userDataCountRequest 请求参数
      * @return 统计数据信息
      */
-    Object userDataCount(UserDataCountRequest userDataCountRequest);
+    UserDataCountVO userDataCount(UserDataCountRequest userDataCountRequest);
 }
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 38dbecf..06e1380 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
@@ -28,8 +28,8 @@
     /**
      * excel模板导出
      *
-     * @param exportRequest   提现记录
-     * @param response 响应体
+     * @param exportRequest 提现记录
+     * @param response      响应体
      * @return 导出结果
      */
     R<String> excelExport(WithdrawExportRequest exportRequest, HttpServletResponse response);
@@ -37,10 +37,12 @@
     /**
      * 获取用户提现金额
      *
-     * @param cityList 城市集合
+     * @param cityList     城市集合
+     * @param startDateStr 季度开始时间
+     * @param endDateStr   季度结束时间
      * @return 总金额
      */
-    BigDecimal withdrawalTotalMoney(List<String> cityList);
+    BigDecimal withdrawalTotalMoney(List<String> cityList, String startDateStr, String endDateStr);
 
     /**
      * 年度查询
@@ -85,11 +87,11 @@
     /**
      * 用户所关联提现记录分页列表
      *
-     * @param nickname          用户名称
-     * @param userPhone         用户手机号
+     * @param nickname     用户名称
+     * @param userPhone    用户手机号
      * @param applyForTime 申请开始时间
-     * @param state             审核状态
-     * @param page              分页
+     * @param state        审核状态
+     * @param page         分页
      * @return 分页列表
      */
     IPage<UserWithdrawRecordVO> withdrawPage(String nickname, String userPhone, String applyForTime,
@@ -98,8 +100,8 @@
     /**
      * 提现审批通过,微信打款
      *
-     * @param user 下单用户
-     * @param order  订单信息
+     * @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/MasterWorkerServiceImpl.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/MasterWorkerServiceImpl.java
index 723e462..6d6bf62 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
@@ -37,4 +37,11 @@
         List<MasterWorkerRankVO> result = baseMapper.workerRanking(workerIdList);
         return null == result ? new ArrayList<>() : result;
     }
+
+    @Override
+    public boolean checkOnlyPhone(String phone) {
+        MasterWorker masterWorker = lambdaQuery().eq(MasterWorker::getPhone, phone).one();
+        return masterWorker == null;
+    }
+
 }
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 98a4736..f65ae18 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
@@ -113,9 +113,10 @@
     public R<String> excelExport(OrderQueryRequest orderQueryRequest, HttpServletResponse response) {
         try {
             response.setCharacterEncoding(Constants.UTF8);
-            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setContentType("application/vnd.ms-excel");
             response.setHeader("Access-Control-Expose-Headers", "Content-disposition");
-            response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(Constants.EXCEL_ORDER_FILE_NAME, CharEncoding.UTF_8) + ".xlsx");
+            response.setHeader("Content-Disposition", "attachment;filename=" +
+                    URLEncoder.encode(Constants.EXCEL_ORDER_FILE_NAME, CharEncoding.UTF_8) + ".xlsx");
         } catch (UnsupportedEncodingException e) {
             return R.fail("excel导出失败!");
         }
@@ -196,8 +197,11 @@
         ServeRecord serveRecord = serveRecordService.lambdaQuery().eq(ServeRecord::getOrderId, order.getId())
                 .eq(ServeRecord::getIsDelete, 0).one();
         // 师傅路线轨迹
-        List<ServeCoordinate> serveCoordinateList = serveCoordinateService.lambdaQuery().eq(ServeCoordinate::getWorkerId, order.getServerId())
-                .eq(ServeCoordinate::getIsDelete, 0).orderByDesc(ServeCoordinate::getCreateTime).list();
+        List<ServeCoordinate> serveCoordinateList = serveCoordinateService.lambdaQuery()
+                .eq(ServeCoordinate::getWorkerId, order.getServerId())
+                .eq(ServeCoordinate::getIsDelete, 0)
+                .eq(ServeCoordinate::getOrderId, order.getId())
+                .orderByDesc(ServeCoordinate::getCreateTime).list();
         OrderByServeRecordVO orderByServeRecord = new OrderByServeRecordVO();
         orderByServeRecord.setAcceptOrderTime(order.getAcceptTime());
         orderByServeRecord.setReachTime(order.getTime());
@@ -232,6 +236,7 @@
         }
         OrderByServeVO orderByServe = new OrderByServeVO();
         orderByServe.setServeName(recoveryServe.getServeName());
+        orderByServe.setCover(recoveryServe.getCover());
         orderByServe.setSupClassify(recoveryClassify.getSupClassify());
         orderByServe.setSubClassify(recoveryClassify.getSubClassify());
         orderByServe.setPrice(order.getServePrice());
@@ -245,7 +250,7 @@
         // 订单信息
         OrderInfoVO orderInfo = new OrderInfoVO();
         orderInfo.setOrderNumber(order.getOrderNumber());
-        orderInfo.setPlaceOrderTime(order.getTime());
+        orderInfo.setPlaceOrderTime(order.getCreateTime());
         orderInfo.setState(order.getState());
         result.setOrderInfo(orderInfo);
     }
@@ -271,8 +276,8 @@
     }
 
     @Override
-    public OrderPageCountVO orderPageCount() {
-        List<Order> orderList = baseMapper.orderPageCount();
+    public OrderPageCountVO orderPageCount(OrderQueryRequest orderQueryRequest) {
+        List<Order> orderList = baseMapper.orderPageCount(orderQueryRequest);
         int total = 0;
         int toBeDispatched = 0;
         int stayDoorstep = 0;
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/SendSmsServiceImpl.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/SendSmsServiceImpl.java
index e7b95a8..2784b47 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/SendSmsServiceImpl.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/SendSmsServiceImpl.java
@@ -1,6 +1,7 @@
 package com.ruoyi.admin.service.impl;
 
 import cn.hutool.core.util.RandomUtil;
+import com.ruoyi.admin.entity.Order;
 import com.ruoyi.admin.service.SendSmsService;
 import com.ruoyi.admin.utils.SendSmsUtil;
 import com.ruoyi.common.core.constant.Constants;
@@ -43,6 +44,15 @@
                 sendSmsUtil.loginId);
     }
 
+    @Override
+    public String dispatchOrder(Order order) {
+        // 发送验证码
+        String phone = order.getReservationPhone();
+        String[] arr = {order.getOrderNumber()};
+        sendSmsUtil.sendSms(new SendSmsUtil.SendSmsRequest(phone, sendSmsUtil.reservationId, arr));
+        return "发送成功!";
+    }
+
     private String sendPhoneCode(String phone, String redisKey, String templateId) {
         // 生成随机 6位数字 验证码
         String phoneCode = RandomUtil.randomNumbers(6);
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/UserRecipientServiceImpl.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/UserRecipientServiceImpl.java
new file mode 100644
index 0000000..d75331f
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/service/impl/UserRecipientServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.admin.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.admin.entity.UserRecipient;
+import com.ruoyi.admin.mapper.UserRecipientMapper;
+import com.ruoyi.admin.service.UserRecipientService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 用户收货地址 服务实现类
+ * </p>
+ *
+ * @author hjl
+ * @since 2024-07-02
+ */
+@Service
+public class UserRecipientServiceImpl extends ServiceImpl<UserRecipientMapper, UserRecipient> implements UserRecipientService {
+
+}
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 074d63e..20bda70 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
@@ -1,5 +1,6 @@
 package com.ruoyi.admin.service.impl;
 
+import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.admin.entity.User;
 import com.ruoyi.admin.mapper.UserMapper;
@@ -39,15 +40,12 @@
 
     @Override
     public List<UserTrendsVO> userTrends(List<String> city) {
-        if (null == city || city.isEmpty()) {
-            return new ArrayList<>();
-        }
         List<UserTrendsVO> userTrendsList = baseMapper.userTrends(city);
         return null == userTrendsList || userTrendsList.isEmpty() ? new ArrayList<>() : userTrendsList;
     }
 
     @Override
-    public Object userDataCount(UserDataCountRequest userDataCountRequest) {
+    public UserDataCountVO userDataCount(UserDataCountRequest userDataCountRequest) {
         List<String> cityList = userDataCountRequest.getCityList();
         List<User> userList = lambdaQuery().eq(User::getIsDelete, 0).list();
         // 用户总量
@@ -67,12 +65,16 @@
         BigDecimal withdrawalTotalMoney;
         if (OrderConstants.QUARTER.equals(userDataCountRequest.getCountType())) {
             // 用户增长数
-            increaseNumber = lambdaQuery().ge(User::getCreateTime, startDateStr).le(User::getCreateTime, endDateStr)
-                    .in(User::getCity, cityList).eq(User::getIsDelete, 0).count();
+            LambdaQueryChainWrapper<User> wrapper = lambdaQuery().ge(User::getCreateTime, startDateStr)
+                    .le(User::getCreateTime, endDateStr);
+            if (!cityList.isEmpty()) {
+                wrapper.in(User::getCity, cityList);
+            }
+            increaseNumber = wrapper.eq(User::getIsDelete, 0).count();
             // 用户总交易额
             totalMoney = orderService.totalMoneyByQuarter(startDateStr, endDateStr, cityList);
             // 用户提现总额
-            withdrawalTotalMoney = withdrawService.withdrawalTotalMoney(cityList);
+            withdrawalTotalMoney = withdrawService.withdrawalTotalMoney(cityList,startDateStr,endDateStr);
         } else if (OrderConstants.YEAR.equals(userDataCountRequest.getCountType())) {
             // 用户增长数
             increaseNumber = baseMapper.increaseNumberByYear(cityList);
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 799c2d5..c88f7b1 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
@@ -88,7 +88,7 @@
     public R<String> excelExport(WithdrawExportRequest exportRequest, HttpServletResponse response) {
         try {
             response.setCharacterEncoding(Constants.UTF8);
-            response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
+            response.setContentType("application/vnd.ms-excel");
             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");
@@ -126,8 +126,8 @@
     }
 
     @Override
-    public BigDecimal withdrawalTotalMoney(List<String> cityList) {
-        return baseMapper.withdrawalTotalMoney(cityList);
+    public BigDecimal withdrawalTotalMoney(List<String> cityList,String startDateStr, String endDateStr) {
+        return baseMapper.withdrawalTotalMoney(cityList,startDateStr,endDateStr);
     }
 
     @Override
@@ -169,12 +169,10 @@
     public Boolean confirmWithdraw(User user, Order order) {
         // 校验提现
         List<Withdraw> list = this.lambdaQuery().eq(Withdraw::getUserId, user.getId())
-                .eq(Withdraw::getOrderId, order).list();
+                .eq(Withdraw::getOrderId, order.getId()).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("当前订单已提现通过!");
+        if (stateList.contains(Constants.ONE)) {
+            throw new GlobalException("当前订单提现申请已通过!");
         }
         return weChatPay(order.getOrderMoney(), user.getOpenId());
     }
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
index 22651bb..9381d84 100644
--- 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
@@ -125,7 +125,6 @@
             WEB_SOCKET_MAP.get(workerId).getSession().getBasicRemote().sendText(message);
         } else {
             log.error("用户" + workerId + ",不在线!");
-            throw new IOException("用户" + workerId + ",不在线!");
         }
     }
 
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/GeneratorCodeConfig.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/GeneratorCodeConfig.java
index 7d1239b..05947b7 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/GeneratorCodeConfig.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/GeneratorCodeConfig.java
@@ -36,7 +36,7 @@
 
     public static void main(String[] args) {
         // 数据库连接url
-        String dbUrl = "jdbc:mysql://localhost:3306/old_data";
+        String dbUrl = "jdbc:mysql://localhost:3306/secondary_recovery";
         // 数据库用户名
         String dbUsername = "root";
         // 数据库密码
@@ -61,7 +61,7 @@
                 // 包配置
                 .packageConfig(builder -> builder
                                 // 父包名
-                                .parent("com.rouyi.user")
+                                .parent("com.ruoyi.worker")
                                 // 父包模块名 注释即为无
 //                         .moduleName(scanner("模块名"))
                                 // Entity 包名
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/SendSmsUtil.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/SendSmsUtil.java
new file mode 100644
index 0000000..47247df
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/utils/SendSmsUtil.java
@@ -0,0 +1,117 @@
+package com.ruoyi.admin.utils;
+
+import com.ruoyi.common.core.exception.GlobalException;
+import com.tencentcloudapi.common.Credential;
+import com.tencentcloudapi.common.exception.TencentCloudSDKException;
+import com.tencentcloudapi.sms.v20210111.SmsClient;
+import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import lombok.var;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+import java.util.Objects;
+
+/**
+ * 腾讯云发送验证码
+ *
+ * @author HJL
+ */
+@Slf4j
+@Component
+public class SendSmsUtil {
+
+    /**
+     * 短信签名内容,必须填写已审核通过的签名
+     */
+    @Value("${tencent.signName}")
+    private String singName;
+
+    /**
+     * 短信验证码登录模板id
+     */
+    @Value("${tencent.template.loginId}")
+    public String loginId;
+
+    /**
+     * 入驻申请验证码模板id
+     */
+    @Value("${tencent.template.applyId}")
+    public String applyId;
+
+    /**
+     * 预约成功验证码模板id
+     */
+    @Value("${tencent.template.reservationId}")
+    public String reservationId;
+
+    /**
+     * 应用id
+     */
+    @Value("${tencent.appId}")
+    public String appId;
+
+    /**
+     * 密钥id
+     */
+    @Value("${tencent.secretId}")
+    public String secretId;
+
+    /**
+     * 应用的appKey
+     */
+    @Value("${tencent.secretKey}")
+    public String secretKey;
+
+    public void sendSms(SendSmsRequest request) {
+        Credential cred = new Credential(secretId, secretKey);
+        SmsClient client = new SmsClient(cred, "ap-beijing");
+        final var req = new com.tencentcloudapi.sms.v20210111.models.SendSmsRequest();
+        req.setPhoneNumberSet(new String[]{"+86" + request.getPhone()});
+        req.setSmsSdkAppId(appId);
+        req.setSignName(singName);
+        req.setTemplateId(request.getTemplateId());
+        req.setTemplateParamSet(request.getTemplateParamSet());
+        SendSmsResponse res;
+        try {
+            res = client.SendSms(req);
+        } catch (TencentCloudSDKException e) {
+            log.error("发送短信出错:", e);
+            throw new GlobalException("发送短信验证码错误!");
+        }
+        log.info("发送短信结果:", SendSmsResponse.toJsonString(res));
+        if (!Objects.nonNull(res.getSendStatusSet()) && res.getSendStatusSet().length == 0
+                && !"Ok".equals(res.getSendStatusSet()[0].getCode())) {
+            throw new GlobalException("发送短信验证码失败!");
+        }
+    }
+
+    /**
+     * 参数对象
+     */
+    @Data
+    public static class SendSmsRequest {
+        /**
+         * 电话
+         */
+        private String phone;
+
+        /**
+         * 模板 ID: 必须填写已审核通过的模板 ID
+         */
+        private String templateId;
+
+        /**
+         * 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空
+         */
+        private String[] templateParamSet;
+
+        public SendSmsRequest(String phone, String templateId, String[] templateParamSet) {
+            this.phone = phone;
+            this.templateId = templateId;
+            this.templateParamSet = templateParamSet;
+        }
+    }
+
+}
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByServeRecordVO.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByServeRecordVO.java
index 90cd70e..2b604ec 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByServeRecordVO.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByServeRecordVO.java
@@ -21,9 +21,8 @@
     @JsonFormat(pattern = "yyyy-MM-dd")
     private Date acceptOrderTime;
 
-    @ApiModelProperty("到达时间")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date reachTime;
+    @ApiModelProperty("上门时间")
+    private String reachTime;
 
     @ApiModelProperty("路线经纬度集合")
     private List<String> coordinate;
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByServeVO.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByServeVO.java
index 025ebf8..4996bb5 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByServeVO.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByServeVO.java
@@ -27,4 +27,7 @@
     @ApiModelProperty("回收价格")
     private BigDecimal price;
 
+    @ApiModelProperty("封面图片")
+    private String cover;
+
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByUserInfoVO.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByUserInfoVO.java
index 6f99708..b4f144b 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByUserInfoVO.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderByUserInfoVO.java
@@ -1,11 +1,8 @@
 package com.ruoyi.admin.vo;
 
-import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
-
-import java.util.Date;
 
 /**
  * @author HJL
@@ -32,7 +29,6 @@
     private String reservationAddress;
 
     @ApiModelProperty("预约上门时间")
-    @JsonFormat(pattern = "yyyy-MM-dd")
-    private Date time;
+    private String time;
 
 }
diff --git a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderResultVO.java b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderResultVO.java
index 4af8e37..ff7ce78 100644
--- a/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderResultVO.java
+++ b/ruoyi-service/ruoyi-admin/src/main/java/com/ruoyi/admin/vo/OrderResultVO.java
@@ -13,7 +13,7 @@
  * @since 2024-05-30 16:30
  */
 @Data
-@ApiModel(value = "OrderQuery对象", description = "回收订单统计查询类")
+@ApiModel(value = "OrderResultVO对象", description = "回收订单统计查询类")
 public class OrderResultVO {
 
     @ApiModelProperty("订单总额")
diff --git a/ruoyi-service/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-service/ruoyi-admin/src/main/resources/logback.xml
new file mode 100644
index 0000000..7c909ff
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/resources/logback.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 日志存放路径 -->
+	<property name="log.path" value="logs/ruoyi-admin" />
+   <!-- 日志输出格式 -->
+	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
+
+    <!-- 控制台输出 -->
+	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+	</appender>
+
+    <!-- 系统日志输出 -->
+	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/info.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+			<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 日志最大的历史 60天 -->
+			<maxHistory>60</maxHistory>
+		</rollingPolicy>
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+	</appender>
+
+    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/error.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 日志最大的历史 60天 -->
+			<maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>ERROR</level>
+			<!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+			<!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 系统模块日志级别控制  -->
+	<logger name="com.ruoyi" level="info" />
+	<!-- Spring日志级别控制  -->
+	<logger name="org.springframework" level="warn" />
+
+	<root level="info">
+		<appender-ref ref="console" />
+	</root>
+	
+	<!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <appender-ref ref="file_error" />
+    </root>
+</configuration>
\ No newline at end of file
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 48ad3d7..ad56b5b 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
@@ -10,6 +10,7 @@
         <result column="site_name" property="siteName"/>
         <result column="serve_id" property="serveId"/>
         <result column="serve_name" property="serveName"/>
+        <result column="serve_price" property="servePrice"/>
         <result column="reservation_name" property="reservationName"/>
         <result column="reservation_phone" property="reservationPhone"/>
         <result column="reservation_address" property="reservationAddress"/>
@@ -240,12 +241,51 @@
                 and DATE(o.time) <![CDATA[ <= ]]> #{data.endTime}
             </if>
         </where>
+        order by o.createTime desc
     </select>
 
     <select id="orderPageCount" resultMap="BaseResultMap">
         select o.*
         from t_order o
-        where o.is_delete = 0
+        <where>
+            o.is_delete = 0
+            <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="exportByIdList" resultMap="BaseResultMap">
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 c653e8d..81c2dbd 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
@@ -30,7 +30,7 @@
             and state = 1
         </where>
         GROUP BY DATE_FORMAT(createTime, '%Y-%m')
-        ORDER BY createTime;
+        ORDER BY date;
     </select>
 
     <select id="increaseNumberByYear" resultType="java.lang.Long">
diff --git a/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/UserRecipientMapper.xml b/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/UserRecipientMapper.xml
new file mode 100644
index 0000000..195be78
--- /dev/null
+++ b/ruoyi-service/ruoyi-admin/src/main/resources/mapper/admin/UserRecipientMapper.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.admin.mapper.UserRecipientMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.admin.entity.UserRecipient">
+        <id column="id" property="id" />
+        <result column="user_id" property="userId" />
+        <result column="recipient" property="recipient" />
+        <result column="recipientPhone" property="recipientPhone" />
+        <result column="address" property="address" />
+        <result column="address_detail" property="addressDetail" />
+        <result column="isDefault" property="isDefault" />
+        <result column="longitude" property="longitude" />
+        <result column="latitude" property="latitude" />
+        <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" />
+    </resultMap>
+
+</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 afaef11..e0aec8f 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
@@ -22,8 +22,15 @@
         FROM t_withdraw w
                  LEFT JOIN t_user u on w.user_id = u.id
         <where>
+             w.is_delete = 0
+            <if test="start != null and start != ''">
+                and w.createTime <![CDATA[ >= ]]> #{start}
+            </if>
+            <if test="end != null and end != ''">
+                and w.createTime <![CDATA[ <= ]]> #{end}
+            </if>
             <if test="cityList != null and cityList.size() != 0">
-                u.city in
+                and u.city in
                 <foreach collection="cityList" item="id" open="(" separator="," close=")">
                     #{id}
                 </foreach>
diff --git a/ruoyi-service/ruoyi-user/pom.xml b/ruoyi-service/ruoyi-user/pom.xml
index c4daea5..0788d57 100644
--- a/ruoyi-service/ruoyi-user/pom.xml
+++ b/ruoyi-service/ruoyi-user/pom.xml
@@ -165,4 +165,21 @@
 
     </dependencies>
 
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
\ No newline at end of file
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 88a2ca4..4053942 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
@@ -45,6 +45,19 @@
     @Resource
     private TokenService tokenService;
 
+    @GetMapping("/orderList")
+    @ApiOperation(value = "订单列表", tags = {"用户端-订单"})
+    public R<List<Order>> orderList() {
+        LoginUserInfo loginUser = tokenService.getLoginUserByUser();
+        if (null == loginUser) {
+            return R.loginExpire("登录失效!");
+        }
+        return R.ok(orderService.lambdaQuery()
+                .eq(Order::getIsDelete, 0)
+                .eq(Order::getUserId, loginUser.getUserid())
+                .orderByDesc(Order::getCreateTime).list());
+    }
+
     @GetMapping("/detail")
     @ApiOperation(value = "订单详情", tags = {"用户端-订单"})
     @ApiImplicitParams({
@@ -99,6 +112,5 @@
         Boolean result = orderService.placeOrder(orderRequest, loginUser.getUserid());
         return result ? R.ok() : R.fail();
     }
-
 
 }
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/RecoveryClassifyController.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/RecoveryClassifyController.java
deleted file mode 100644
index e72dd80..0000000
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/RecoveryClassifyController.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.ruoyi.user.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 回收分类表 前端控制器
- * </p>
- *
- * @author hjl
- * @since 2024-06-06
- */
-@RestController
-@RequestMapping("/recovery-classify")
-public class RecoveryClassifyController {
-
-}
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/ServeRecordController.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/ServeRecordController.java
deleted file mode 100644
index 816b842..0000000
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/ServeRecordController.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package com.ruoyi.user.controller;
-
-
-import org.springframework.web.bind.annotation.RequestMapping;
-
-import org.springframework.web.bind.annotation.RestController;
-
-/**
- * <p>
- * 师傅服务记录 前端控制器
- * </p>
- *
- * @author hjl
- * @since 2024-06-11
- */
-@RestController
-@RequestMapping("/serve-record")
-public class ServeRecordController {
-
-}
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/WithdrawController.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/WithdrawController.java
index 0c89e0f..69e6061 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/WithdrawController.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/controller/WithdrawController.java
@@ -29,7 +29,7 @@
  */
 @RestController
 @RequestMapping("/withdraw")
-@Api(tags = {"用户端-提现"})
+@Api(tags = {"用户端-个人中心-提现"})
 public class WithdrawController {
 
     @Resource
@@ -38,7 +38,7 @@
     private TokenService tokenService;
 
     @GetMapping("/withdrawList")
-    @ApiOperation(value = "提现列表", tags = {"用户端-个人中心"})
+    @ApiOperation(value = "提现列表", tags = {"用户端-个人中心-提现"})
     public R<WithdrawListVO> withdrawList() {
         LoginUserInfo loginUser = tokenService.getLoginUserByUser();
         if (null == loginUser) {
@@ -47,8 +47,18 @@
         return R.ok(withdrawService.withdrawList(loginUser.getUserid()));
     }
 
+    @GetMapping("/withdrawDetail")
+    @ApiOperation(value = "提现详情", tags = {"用户端-个人中心-提现"})
+    public R<WithdrawListVO> withdrawDetail() {
+        LoginUserInfo loginUser = tokenService.getLoginUserByUser();
+        if (null == loginUser) {
+            return R.loginExpire("登录失效!");
+        }
+        return R.ok(withdrawService.withdrawList(loginUser.getUserid()));
+    }
+
     @GetMapping("/confirmWithdraw")
-    @ApiOperation(value = "确认提现", tags = {"用户端-个人中心"})
+    @ApiOperation(value = "确认提现", tags = {"用户端-个人中心-提现"})
     @ApiImplicitParams({
             @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "Integer", required = true)
     })
@@ -61,7 +71,7 @@
     }
 
     @GetMapping("/withdrawRecord")
-    @ApiOperation(value = "提现记录", tags = {"用户端-个人中心"})
+    @ApiOperation(value = "提现记录", tags = {"用户端-个人中心-提现"})
     public R<List<Withdraw>> withdrawRecord() {
         LoginUserInfo loginUser = tokenService.getLoginUserByUser();
         if (null == loginUser) {
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 6aa9842..b4c1c56 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
@@ -76,7 +76,7 @@
 
     @ApiModelProperty("上门时间")
     @TableField("time")
-    private Date time;
+    private String time;
 
     @ApiModelProperty("服务人员id")
     @TableField("server_id")
@@ -138,4 +138,8 @@
     @TableField("address")
     private String address;
 
+    @ApiModelProperty("订单取消原因")
+    @TableField("cancel_reason")
+    private String cancelReason;
+
 }
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/UserRecipient.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/UserRecipient.java
index 2d9324c..aab5cb4 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/UserRecipient.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/entity/UserRecipient.java
@@ -24,7 +24,7 @@
 @ApiModel(value = "UserRecipient对象", description = "用户收货地址")
 public class UserRecipient extends BaseEntity {
 
-    @TableId(value = "id",type = IdType.AUTO)
+    @TableId(value = "id", type = IdType.AUTO)
     private Integer id;
 
     @ApiModelProperty("用户id")
@@ -51,4 +51,12 @@
     @TableField("isDefault")
     private Integer isDefault;
 
+    @ApiModelProperty("经度")
+    @TableField("longitude")
+    private Double longitude;
+
+    @ApiModelProperty("纬度")
+    @TableField("latitude")
+    private Double latitude;
+
 }
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/request/OrderRequest.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/request/OrderRequest.java
index b9079c4..18fce3f 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/request/OrderRequest.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/request/OrderRequest.java
@@ -5,7 +5,6 @@
 import lombok.Data;
 
 import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * 用户下单请求参数对象
@@ -33,7 +32,7 @@
     private Integer addressId;
 
     @ApiModelProperty("上门时间")
-    private Date time;
+    private String time;
 
     @ApiModelProperty("预约备注(服务备注)")
     private String reservationRemark;
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/OrderServiceImpl.java
index 5adde65..34f1368 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/OrderServiceImpl.java
@@ -16,7 +16,6 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
-import java.util.Date;
 import java.util.List;
 import java.util.Random;
 import java.util.stream.Collectors;
@@ -72,7 +71,7 @@
         String reservationName = orderRequest.getReservationName();
         String reservationPhone = orderRequest.getReservationPhone();
         Integer addressId = orderRequest.getAddressId();
-        Date time = orderRequest.getTime();
+        String time = orderRequest.getTime();
         String reservationRemark = orderRequest.getReservationRemark();
         Double longitude = orderRequest.getLongitude();
         Double latitude = orderRequest.getLatitude();
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/UserServiceImpl.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/UserServiceImpl.java
index 7ebd805..765dc51 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/UserServiceImpl.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/UserServiceImpl.java
@@ -50,7 +50,7 @@
             String openid = json.getString("openid");
             return R.ok(openid);
         } catch (Exception e) {
-            return R.fail("openId生成失败");
+            return R.fail("openId生成失败!");
         }
     }
 }
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/WithdrawServiceImpl.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/WithdrawServiceImpl.java
index 511e740..3b8ebaf 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/WithdrawServiceImpl.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/service/impl/WithdrawServiceImpl.java
@@ -114,6 +114,7 @@
         for (Order order : orderList) {
             RecoveryServe recoveryServe = serveMap.get(order.getServeId());
             WithdrawOrderVO withdrawOrder = new WithdrawOrderVO();
+            withdrawOrder.setOrderId(order.getId());
             withdrawOrder.setOrderNumber(order.getOrderNumber());
             withdrawOrder.setServeId(order.getServeId());
             withdrawOrder.setServeName(recoveryServe.getServeName());
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/EvaluateOrderInfoVO.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/EvaluateOrderInfoVO.java
index 0606ac3..5e1998d 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/EvaluateOrderInfoVO.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/EvaluateOrderInfoVO.java
@@ -13,6 +13,9 @@
 @Data
 public class EvaluateOrderInfoVO {
 
+    @ApiModelProperty("订单id")
+    private String orderId;
+
     @ApiModelProperty("订单编号")
     private String orderNumber;
 
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/OrderDetailVO.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/OrderDetailVO.java
index cf99e4a..da1246a 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/OrderDetailVO.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/OrderDetailVO.java
@@ -37,7 +37,7 @@
     private String reservationAddress;
 
     @ApiModelProperty("上门时间")
-    private Date time;
+    private String time;
 
     @ApiModelProperty("服务人员名称")
     private String serverName;
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/OrderEvaluateVO.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/OrderEvaluateVO.java
index 39c1af8..9ed5352 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/OrderEvaluateVO.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/OrderEvaluateVO.java
@@ -17,10 +17,10 @@
     @ApiModelProperty("评价信息")
     private EvaluateInfoVO evaluateInfo;
 
-    @ApiModelProperty("是否已评价")
-    private Boolean isEvaluate;
+    @ApiModelProperty("是否还未评价")
+    private Boolean evaluate;
 
     public Boolean getEvaluate() {
-        return null != evaluateInfo.getStarRating();
+        return null != evaluateInfo;
     }
 }
diff --git a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/WithdrawOrderVO.java b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/WithdrawOrderVO.java
index c003f6a..9119789 100644
--- a/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/WithdrawOrderVO.java
+++ b/ruoyi-service/ruoyi-user/src/main/java/com/ruoyi/user/vo/WithdrawOrderVO.java
@@ -13,6 +13,9 @@
 @Data
 public class WithdrawOrderVO {
 
+    @ApiModelProperty("订单id")
+    private Integer orderId;
+
     @ApiModelProperty("订单编号")
     private String orderNumber;
 
diff --git a/ruoyi-service/ruoyi-user/src/main/resources/logback.xml b/ruoyi-service/ruoyi-user/src/main/resources/logback.xml
new file mode 100644
index 0000000..18d0dd3
--- /dev/null
+++ b/ruoyi-service/ruoyi-user/src/main/resources/logback.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration scan="true" scanPeriod="60 seconds" debug="false">
+    <!-- 日志存放路径 -->
+	<property name="log.path" value="logs/ruoyi-user" />
+   <!-- 日志输出格式 -->
+	<property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" />
+
+    <!-- 控制台输出 -->
+	<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+	</appender>
+
+    <!-- 系统日志输出 -->
+	<appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/info.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+			<fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 日志最大的历史 60天 -->
+			<maxHistory>60</maxHistory>
+		</rollingPolicy>
+		<encoder>
+			<pattern>${log.pattern}</pattern>
+		</encoder>
+		<filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>INFO</level>
+            <!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+            <!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+	</appender>
+
+    <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender">
+	    <file>${log.path}/error.log</file>
+        <!-- 循环政策:基于时间创建日志文件 -->
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!-- 日志文件名格式 -->
+            <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern>
+			<!-- 日志最大的历史 60天 -->
+			<maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+        <filter class="ch.qos.logback.classic.filter.LevelFilter">
+            <!-- 过滤的级别 -->
+            <level>ERROR</level>
+			<!-- 匹配时的操作:接收(记录) -->
+            <onMatch>ACCEPT</onMatch>
+			<!-- 不匹配时的操作:拒绝(不记录) -->
+            <onMismatch>DENY</onMismatch>
+        </filter>
+    </appender>
+
+    <!-- 系统模块日志级别控制  -->
+	<logger name="com.ruoyi" level="info" />
+	<!-- Spring日志级别控制  -->
+	<logger name="org.springframework" level="warn" />
+
+	<root level="info">
+		<appender-ref ref="console" />
+	</root>
+	
+	<!--系统操作日志-->
+    <root level="info">
+        <appender-ref ref="file_info" />
+        <appender-ref ref="file_error" />
+    </root>
+</configuration>
\ No newline at end of file
diff --git a/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/EvaluateMapper.xml b/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/EvaluateMapper.xml
index 8ebe18b..082dc4d 100644
--- a/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/EvaluateMapper.xml
+++ b/ruoyi-service/ruoyi-user/src/main/resources/mapper/user/EvaluateMapper.xml
@@ -18,6 +18,7 @@
 
     <resultMap id="evaluateMap" type="com.ruoyi.user.vo.OrderEvaluateVO">
         <association property="orderInfo" javaType="com.ruoyi.user.vo.EvaluateOrderInfoVO">
+            <result column="id" property="orderId"/>
             <result column="order_number" property="orderNumber"/>
             <result column="complete_time" property="completeTime"/>
             <result column="serve_name" property="serveName"/>
@@ -33,7 +34,7 @@
         </association>
     </resultMap>
     <select id="orderEvaluate" resultMap="evaluateMap">
-        SELECT o.order_number,
+        SELECT o.id,o.order_number,
                o.complete_time,
                r.serve_name,
                r.serve_describe,
diff --git a/ruoyi-service/ruoyi-worker/pom.xml b/ruoyi-service/ruoyi-worker/pom.xml
index 7d2a393..20c7de5 100644
--- a/ruoyi-service/ruoyi-worker/pom.xml
+++ b/ruoyi-service/ruoyi-worker/pom.xml
@@ -145,4 +145,21 @@
         </dependency>
     </dependencies>
 
+    <build>
+        <finalName>${project.artifactId}</finalName>
+        <plugins>
+            <plugin>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-maven-plugin</artifactId>
+                <executions>
+                    <execution>
+                        <goals>
+                            <goal>repackage</goal>
+                        </goals>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
+
 </project>
\ No newline at end of file
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 3549d99..f346771 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
@@ -32,6 +32,7 @@
 import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Pattern;
 
 /**
@@ -91,15 +92,16 @@
      * @param worker 登录信息
      * @return token
      */
-    private HashMap<String, Object> generateLoginToken(MasterWorker worker) {
+    private Map<String, Object> generateLoginToken(MasterWorker worker) {
         // 校验通过,生成token及过期时间
         LoginUserInfo loginUserInfo = new LoginUserInfo();
         loginUserInfo.setName(worker.getRealName());
         loginUserInfo.setUserid(worker.getId());
         loginUserInfo.setPhone(worker.getPhone());
         loginUserInfo.setLoginTime(System.currentTimeMillis());
-        HashMap<String, Object> map = new HashMap<>(8);
+        Map<String, Object> map = new HashMap<>(8);
         map.put("token", tokenService.createTokenByWorker(loginUserInfo));
+        map.put("userId", worker.getId());
         return map;
     }
 
@@ -135,7 +137,17 @@
                 return R.notEnabled("登录失败,当前账号未启用!");
             }
         } else {
-            return R.unregistered("当前手机号通过入驻申请认证!");
+            // 校验师傅是否已提交入驻申请
+            WorkerProcess process = workerProcessService.lambdaQuery()
+                    .eq(WorkerProcess::getPhone, phone)
+                    .eq(WorkerProcess::getIsDelete, 0).one();
+            if (Constants.ZERO.equals(process.getState())) {
+                return R.fail("入驻申请暂未审核通过,请耐心等待!");
+            } else if (Constants.TWO.equals(process.getState())) {
+                return R.fail("入驻申请已驳回,请重新提交入驻申请!");
+            } else {
+                return R.registered("当前账号未提交入驻申请,无法登录!");
+            }
         }
         // 校验通过,生成token及过期时间
         return R.ok(generateLoginToken(worker));
@@ -148,18 +160,16 @@
      */
     @ApiOperation(value = "入驻申请", tags = {"师傅端-登录"})
     @PostMapping(value = "/settledApply")
-    public R<String> settledApply(@RequestBody WorkerProcess workerProcess) {
+    public R<String> settledApply(@RequestBody @Validated WorkerProcess workerProcess) {
         String phone = workerProcess.getPhone();
         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("验证码错误或已过期!");
-            }
+        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)
@@ -168,27 +178,33 @@
             return R.registered("当前手机号已注册!");
         }
         // 校验手机号是否已提交申请
-        WorkerProcess dbProcess = workerProcessService.lambdaQuery().eq(WorkerProcess::getPhone, phone)
+        WorkerProcess dbProcess = workerProcessService.lambdaQuery()
+                .eq(WorkerProcess::getPhone, phone)
                 .eq(WorkerProcess::getIsDelete, 0).one();
         if (null != dbProcess) {
-            return R.repeatedSubmission("当前手机号已提交申请,请勿重复提交!");
-        }
-        // 默认状态待审核
-        workerProcess.setState(Constants.ZERO);
-        // 获取用户性别
-        String idNumber = workerProcess.getIdNumber();
-        // 判断身份证号码长度是否合法
-        if (idNumber.length() == Constants.EIGHTEEN) {
-            // 获取身份证号码倒数第二位的数字
-            int genderNum = Integer.parseInt(idNumber.substring(16, 17));
-            // 判断性别
-            if (genderNum % Constants.TWO == 0) {
-                workerProcess.setSex("女");
-            } else {
-                workerProcess.setSex("男");
+            if (Constants.ZERO.equals(dbProcess.getState())) {
+                return R.fail("入驻申请已提交,审核未通过,请耐心等待!");
+            } else if (Constants.ONE.equals(dbProcess.getState())) {
+                return R.fail("该手机号入驻申请已通过,请通过手机号登录!");
             }
         } else {
-            return R.idNumberIllegal("身份证号码不合法!");
+            // 默认状态待审核
+            workerProcess.setState(Constants.ZERO);
+            // 获取用户性别
+            String idNumber = workerProcess.getIdNumber();
+            // 判断身份证号码长度是否合法
+            if (idNumber.length() == Constants.EIGHTEEN) {
+                // 获取身份证号码倒数第二位的数字
+                int genderNum = Integer.parseInt(idNumber.substring(16, 17));
+                // 判断性别
+                if (genderNum % Constants.TWO == 0) {
+                    workerProcess.setSex("女");
+                } else {
+                    workerProcess.setSex("男");
+                }
+            } else {
+                return R.idNumberIllegal("身份证号码不合法!");
+            }
         }
         return workerProcessService.save(workerProcess) ? R.ok("申请成功!") : R.fail("申请失败!");
     }
@@ -206,16 +222,14 @@
             @ApiImplicitParam(value = "手机验证码", name = "phoneCode", dataType = "String", required = true)
     })
     public R<String> verifyPhone(@RequestParam String phone, @RequestParam String phoneCode) {
-        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("验证码错误或已过期!");
-            }
+        // 验证码是否一致
+        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)
@@ -302,6 +316,19 @@
             return R.loginExpire("登录已失效!");
         }
         return R.ok(masterWorkerService.orderNotHandle(loginWorker.getUserid(), longitude, latitude));
+    }
+
+    /**
+     * 师傅端-操作指南
+     */
+    @ApiOperation(value = "操作指南", tags = {"师傅端-首页"})
+    @GetMapping(value = "/guide")
+    public R<Agreement> guide() {
+        LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
+        if (null == loginWorker) {
+            return R.loginExpire("登录已失效!");
+        }
+        return R.ok(adminClient.dataInfo(Constants.TWO).getData());
     }
 
     /**
@@ -438,7 +465,7 @@
             if (null == redisCode) {
                 return R.errorCode("验证码错误或已过期!");
             }
-            String redisCodeStr = String.valueOf(redisCode).split(",")[0];
+            String redisCodeStr = String.valueOf(redisCode).split(":")[0];
             if (!String.valueOf(redisCodeStr).equalsIgnoreCase(code)) {
                 return R.errorCode("验证码错误或已过期!");
             }
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/OrderController.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/OrderController.java
index 2ed177b..db2b943 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/OrderController.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/controller/OrderController.java
@@ -9,23 +9,19 @@
 import com.ruoyi.common.core.utils.DateUtils;
 import com.ruoyi.common.security.service.TokenService;
 import com.ruoyi.system.api.model.LoginUserInfo;
-import com.ruoyi.worker.entity.Evaluate;
-import com.ruoyi.worker.entity.MasterWorker;
-import com.ruoyi.worker.entity.Order;
-import com.ruoyi.worker.entity.ServeRecord;
+import com.ruoyi.worker.entity.*;
 import com.ruoyi.worker.request.OrderSubmitRequest;
-import com.ruoyi.worker.service.EvaluateService;
-import com.ruoyi.worker.service.MasterWorkerService;
-import com.ruoyi.worker.service.OrderService;
-import com.ruoyi.worker.service.ServeRecordService;
+import com.ruoyi.worker.service.*;
 import com.ruoyi.worker.vo.OrderDetailVO;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiImplicitParam;
 import io.swagger.annotations.ApiImplicitParams;
 import io.swagger.annotations.ApiOperation;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.annotation.Resource;
+import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
 
@@ -54,6 +50,8 @@
     private ServeRecordService serveRecordService;
     @Resource
     private EvaluateService evaluateService;
+    @Resource
+    private SysServeCoordinateService serveCoordinateService;
 
     /**
      * 师傅端-获取订单列表
@@ -84,6 +82,7 @@
             @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "Integer", required = true),
             @ApiImplicitParam(value = "改派原因", name = "reason", dataType = "String", required = true)
     })
+    @Transactional(rollbackFor = Exception.class)
     public R<String> applyChange(@RequestParam Integer orderId, @RequestParam String reason) {
         LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
         if (null == loginWorker) {
@@ -157,6 +156,7 @@
     @ApiImplicitParams({
             @ApiImplicitParam(value = "orderId", name = "orderId", dataType = "Integer", required = true)
     })
+    @Transactional(rollbackFor = Exception.class)
     public R<Boolean> reachPosition(@RequestParam Integer orderId) {
         LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
         if (null == loginWorker) {
@@ -167,7 +167,9 @@
         if (null == order) {
             throw new GlobalException("请确认当前订单所派单师傅是否是您!");
         }
-        order.setState(Constants.THREE);
+        // 待完工状态
+        order.setState(Constants.TWO);
+        order.setArriveTime(new Date());
         return R.ok(orderService.updateById(order));
     }
 
@@ -179,7 +181,7 @@
     @ApiOperation(value = "订单详情", tags = {"师傅端-订单列表"})
     @GetMapping(value = "/orderDetail")
     @ApiImplicitParams({
-            @ApiImplicitParam(value = "orderId", name = "orderId", dataType = "Integer", required = true)
+            @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "Integer", required = true)
     })
     public R<OrderDetailVO> orderDetail(@RequestParam Integer orderId) {
         // 订单信息
@@ -199,6 +201,7 @@
      */
     @ApiOperation(value = "订单完工-提交订单", tags = {"师傅端-订单列表"})
     @PostMapping(value = "/orderSubmit")
+    @Transactional(rollbackFor = Exception.class)
     public R<Boolean> orderSubmit(@RequestBody OrderSubmitRequest orderSubmitRequest) {
         // 订单信息
         Order order = orderService.lambdaQuery().eq(Order::getId, orderSubmitRequest.getOrderId())
@@ -218,4 +221,34 @@
         return R.ok(update && save);
     }
 
+    /**
+     * 师傅端-定时调度记录师傅所走路线经纬度
+     *
+     * @param orderId   订单id
+     * @param longitude 经度
+     * @param latitude  纬度
+     */
+    @ApiOperation(value = "订单进行-记录路线经纬度", tags = {"师傅端-订单列表"})
+    @GetMapping(value = "/coordinate")
+    @ApiImplicitParams({
+            @ApiImplicitParam(value = "订单id", name = "orderId", dataType = "Integer", required = true),
+            @ApiImplicitParam(value = "经度", name = "longitude", dataType = "Integer", required = true),
+            @ApiImplicitParam(value = "纬度", name = "latitude", dataType = "Integer", required = true)
+    })
+    @Transactional(rollbackFor = Exception.class)
+    public R<Boolean> coordinate(@RequestParam Integer orderId, @RequestParam Double longitude,
+                                 @RequestParam Double latitude) {
+        LoginUserInfo loginWorker = tokenService.getLoginUserByWorker();
+        if (null == loginWorker) {
+            return R.loginExpire("登录失效!");
+        }
+        SysServeCoordinate sysServeCoordinate = new SysServeCoordinate();
+        sysServeCoordinate.setWorkerId(loginWorker.getUserid());
+        sysServeCoordinate.setOrderId(orderId);
+        sysServeCoordinate.setCoordinate(longitude + "," + latitude);
+        sysServeCoordinate.setLongitude(BigDecimal.valueOf(longitude));
+        sysServeCoordinate.setLatitude(BigDecimal.valueOf(latitude));
+        return R.ok(serveCoordinateService.save(sysServeCoordinate));
+    }
+
 }
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
index 1e5bde0..500f7f4 100644
--- 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
@@ -2,7 +2,6 @@
 
 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;
@@ -54,10 +53,11 @@
             @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) {
+    public R<Boolean> 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();
+        Order order = orderService.lambdaQuery().eq(Order::getId, orderId)
+                .eq(Order::getIsDelete, 0).one();
         // 用户下单位置经纬度
         String orderPosition = order.getLongitude() + "," + order.getLatitude();
         // 师傅经纬度
@@ -66,7 +66,8 @@
         Long distance = GaoDeMapUtil.getDistance(orderPosition, workerPosition).getDatas();
         // 上传时判断是否在下单位置附件,距离大于某个值则 不允许上传
         if (distance > Constants.THREE_THOUSAND) {
-            throw new GlobalException("您当前手机定位超出当前订单预约地址范围 3km,无法提供回收服务!");
+//            throw new GlobalException("您当前手机定位超出当前订单预约地址范围 3km,无法提供回收服务!");
+            return R.fail(Boolean.FALSE, "您当前手机定位超出当前订单预约地址范围 3km,无法提供回收服务!");
         }
         try {
             return R.ok(ObsUploadUtil.obsUpload(file));
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/Evaluate.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/Evaluate.java
index 50cac5e..582368b 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/Evaluate.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/Evaluate.java
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
@@ -60,6 +61,7 @@
     private String updateBy;
 
     @TableField("createTime")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:ss:mm")
     private Date createTime;
 
     @TableField("updateTime")
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 c93b7ff..dfe6c12 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
@@ -4,6 +4,7 @@
 import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import com.ruoyi.common.core.domain.BaseEntity;
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -76,7 +77,7 @@
 
     @ApiModelProperty("上门时间")
     @TableField("time")
-    private Date time;
+    private String time;
 
     @ApiModelProperty("服务人员id")
     @TableField("server_id")
@@ -108,6 +109,7 @@
 
     @ApiModelProperty("师傅到达预约地点时间")
     @TableField("arrive_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:ss:mm")
     private Date arriveTime;
 
     @ApiModelProperty("订单类型(0:正常订单,1:后台订单(后台订单与用户端、师傅端无联系))")
@@ -124,6 +126,7 @@
 
     @ApiModelProperty("订单完成时间")
     @TableField("complete_time")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:ss:mm")
     private Date completeTime;
 
     @ApiModelProperty("是否已提现(0:未提现,1:已提现)")
@@ -138,8 +141,16 @@
     @TableField("address")
     private String address;
 
+    @ApiModelProperty("订单取消原因")
+    @TableField("cancel_reason")
+    private String cancelReason;
+
     @ApiModelProperty("置顶顺序")
     @TableField("top_sort")
     private Integer topSort;
 
+    @ApiModelProperty("回收服务封面图")
+    @TableField(exist = false)
+    private String cover;
+
 }
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/SysServeCoordinate.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/SysServeCoordinate.java
new file mode 100644
index 0000000..669210a
--- /dev/null
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/entity/SysServeCoordinate.java
@@ -0,0 +1,52 @@
+package com.ruoyi.worker.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.ruoyi.common.core.domain.BaseEntity;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.math.BigDecimal;
+
+/**
+ * <p>
+ * 师傅路线经纬度信息
+ * </p>
+ *
+ * @author hjl
+ * @since 2024-07-03
+ */
+@Getter
+@Setter
+@TableName("sys_serve_coordinate")
+@ApiModel(value = "SysServeCoordinate对象", description = "师傅路线经纬度信息")
+public class SysServeCoordinate extends BaseEntity {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    @ApiModelProperty("师傅id")
+    @TableField("worker_id")
+    private Integer workerId;
+
+    @ApiModelProperty("订单id")
+    @TableField("order_id")
+    private Integer orderId;
+
+    @ApiModelProperty("路线经纬度")
+    @TableField("coordinate")
+    private String coordinate;
+
+    @ApiModelProperty("经度")
+    @TableField("longitude")
+    private BigDecimal longitude;
+
+    @ApiModelProperty("纬度")
+    @TableField("latitude")
+    private BigDecimal latitude;
+
+}
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/mapper/OrderMapper.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/mapper/OrderMapper.java
index 3b49dd5..e385488 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/mapper/OrderMapper.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/mapper/OrderMapper.java
@@ -3,6 +3,9 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.ruoyi.worker.entity.Order;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
 
 /**
  * <p>
@@ -15,4 +18,12 @@
 @Mapper
 public interface OrderMapper extends BaseMapper<Order> {
 
+    /**
+     * 订单列表
+     *
+     * @param userid 登录id
+     * @param state  区分
+     * @return 订单列表
+     */
+    List<Order> orderList(@Param("userId") Integer userid, @Param("state") Integer state);
 }
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/mapper/SysServeCoordinateMapper.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/mapper/SysServeCoordinateMapper.java
new file mode 100644
index 0000000..8e728e0
--- /dev/null
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/mapper/SysServeCoordinateMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.worker.mapper;
+
+import com.ruoyi.worker.entity.SysServeCoordinate;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 师傅路线经纬度信息 Mapper 接口
+ * </p>
+ *
+ * @author hjl
+ * @since 2024-07-03
+ */
+@Mapper
+public interface SysServeCoordinateMapper extends BaseMapper<SysServeCoordinate> {
+
+}
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/SysServeCoordinateService.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/SysServeCoordinateService.java
new file mode 100644
index 0000000..00daf9a
--- /dev/null
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/SysServeCoordinateService.java
@@ -0,0 +1,16 @@
+package com.ruoyi.worker.service;
+
+import com.ruoyi.worker.entity.SysServeCoordinate;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 师傅路线经纬度信息 服务类
+ * </p>
+ *
+ * @author hjl
+ * @since 2024-07-03
+ */
+public interface SysServeCoordinateService extends IService<SysServeCoordinate> {
+
+}
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 fe86570..233c475 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
@@ -1,5 +1,6 @@
 package com.ruoyi.worker.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.ruoyi.common.core.constant.Constants;
 import com.ruoyi.common.core.domain.Result;
@@ -45,13 +46,22 @@
 
     @Override
     public List<OrderListVO> orderNotHandle(Integer userid, String longitude, String latitude) {
-        List<Order> orderList = orderService.lambdaQuery()
-                .eq(Order::getServerId, userid)
-                .eq(Order::getState, Constants.ONE)
-                .eq(Order::getIsDelete, 0)
-                .orderByAsc(Order::getTopSort).list();
+        QueryWrapper<Order> wrapper = new QueryWrapper<>();
+        wrapper.eq("server_id", userid)
+                .in("state", 1, 2)
+                .eq("is_delete", Constants.ZERO)
+                .orderByAsc("CASE WHEN topSort IS NULL THEN 1 ELSE 0 END")
+                .orderByAsc("topSort");
+        List<Order> orderList = orderService.list(wrapper);
         // 根据经纬度距离封装
         List<OrderNotHandleVO> list = new ArrayList<>();
+        boolean item = false;
+        for (Order order : orderList) {
+            if (null != order.getTopSort()) {
+                item = true;
+                break;
+            }
+        }
         for (Order order : orderList) {
             // 用户下单经纬度
             Double orderLongitude = order.getLongitude();
@@ -62,7 +72,8 @@
             Result<Long> result = GaoDeMapUtil.getDistance(orderPosition, longitude + "," + latitude);
             Long distance = result.getDatas();
             // 回收服务信息
-            RecoveryServe recoveryServe = recoveryServeService.lambdaQuery().eq(RecoveryServe::getId, order.getServeId())
+            RecoveryServe recoveryServe = recoveryServeService.lambdaQuery()
+                    .eq(RecoveryServe::getId, order.getServeId())
                     .eq(RecoveryServe::getIsDelete, 0).one();
             // vo类信息封装
             OrderListVO orderListVO = new OrderListVO(order.getServeId());
@@ -72,8 +83,10 @@
             orderListVO.setSiteName(order.getSiteName());
             orderListVO.setServeId(order.getServeId());
             orderListVO.setServeName(order.getServeName());
-            orderListVO.setServePicture(recoveryServe.getCover());
-            orderListVO.setServePrice(recoveryServe.getDefaultPrice());
+            if (null != recoveryServe) {
+                orderListVO.setServePicture(recoveryServe.getCover());
+                orderListVO.setServePrice(recoveryServe.getDefaultPrice());
+            }
             orderListVO.setUserId(userid);
             orderListVO.setReservationName(order.getReservationName());
             orderListVO.setReservationPhone(order.getReservationPhone());
@@ -94,37 +107,44 @@
             OrderNotHandleVO vo = new OrderNotHandleVO(distance, orderListVO);
             list.add(vo);
         }
-        // 根据距离排序
-        list.sort(Comparator.comparing(OrderNotHandleVO::getDistance));
-        List<OrderListVO> resultList = list.stream().map(OrderNotHandleVO::getOrderList).collect(Collectors.toList());
-        for (OrderListVO orderListVO : resultList) {
-            Integer serveId = orderListVO.getServeId();
-            // 回收服务信息
-            RecoveryServe recoveryServe = recoveryServeService.lambdaQuery().eq(RecoveryServe::getId, serveId)
-                    .eq(RecoveryServe::getIsDelete, 0).one();
-            if (null != recoveryServe) {
-                orderListVO.setServePicture(recoveryServe.getCover());
+        if (item) {
+            return list.stream().map(OrderNotHandleVO::getOrderList).collect(Collectors.toList());
+        } else {
+            // 根据距离排序
+            list.sort(Comparator.comparing(OrderNotHandleVO::getDistance));
+            List<OrderListVO> resultList = list.stream().map(OrderNotHandleVO::getOrderList).collect(Collectors.toList());
+            for (OrderListVO orderListVO : resultList) {
+                Integer serveId = orderListVO.getServeId();
+                // 回收服务信息
+                RecoveryServe recoveryServe = recoveryServeService.lambdaQuery().eq(RecoveryServe::getId, serveId)
+                        .eq(RecoveryServe::getIsDelete, 0).one();
+                if (null != recoveryServe) {
+                    orderListVO.setServePicture(recoveryServe.getCover());
+                }
             }
+            return resultList;
         }
-        return resultList;
+
     }
 
     @Override
     public Boolean orderTop(Integer orderId, Integer userid) {
         // 订单代办列表
         List<Order> orderList = orderService.lambdaQuery().eq(Order::getServerId, userid)
-                .eq(Order::getState, Constants.ONE)
+                .in(Order::getState, Constants.ONE, Constants.TWO)
                 .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++;
+        for (Order order : orderList) {
+            if (null != order.getTopSort()) {
+                order.setTopSort(itemSort);
+                itemSort++;
+            }
         }
+        orderService.updateBatchById(orderList);
         return orderService.lambdaUpdate().set(Order::getTopSort, Constants.ONE)
                 .eq(Order::getServerId, userid)
+                .eq(Order::getId, orderId)
                 .eq(Order::getIsDelete, 0).update();
     }
 
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/OrderServiceImpl.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/OrderServiceImpl.java
index ee472dd..f4e2dd7 100644
--- a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/OrderServiceImpl.java
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/OrderServiceImpl.java
@@ -24,18 +24,15 @@
 
     @Override
     public List<Order> orderList(Integer userid, Integer state) {
-        LambdaQueryChainWrapper<Order> wrapper = lambdaQuery().eq(Order::getIsDelete, 0)
-                .eq(Order::getType, 0);
+        LambdaQueryChainWrapper<Order> wrapper = lambdaQuery()
+                .eq(Order::getIsDelete, 0);
         // 查询所有订单/待上门/已完结订单
-        if (Constants.ZERO.equals(state)) {
-            wrapper.in(Order::getState, 1, 2, 3, 4, 5);
-        } else if (Constants.ONE.equals(state)) {
-            wrapper.eq(Order::getState, 1);
+        if (Constants.ONE.equals(state)) {
+            wrapper.in(Order::getState, 1, 2);
         } else if (Constants.TWO.equals(state)) {
             wrapper.eq(Order::getState, 3);
-        } else {
-            wrapper.in(Order::getState, 1, 2, 3, 4, 5);
         }
+        List<Order> list = baseMapper.orderList(userid, state);
         return wrapper.eq(Order::getServerId, userid).list();
     }
 
diff --git a/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/SysServeCoordinateServiceImpl.java b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/SysServeCoordinateServiceImpl.java
new file mode 100644
index 0000000..0911a6b
--- /dev/null
+++ b/ruoyi-service/ruoyi-worker/src/main/java/com/ruoyi/worker/service/impl/SysServeCoordinateServiceImpl.java
@@ -0,0 +1,20 @@
+package com.ruoyi.worker.service.impl;
+
+import com.ruoyi.worker.entity.SysServeCoordinate;
+import com.ruoyi.worker.mapper.SysServeCoordinateMapper;
+import com.ruoyi.worker.service.SysServeCoordinateService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 师傅路线经纬度信息 服务实现类
+ * </p>
+ *
+ * @author hjl
+ * @since 2024-07-03
+ */
+@Service
+public class SysServeCoordinateServiceImpl extends ServiceImpl<SysServeCoordinateMapper, SysServeCoordinate> implements SysServeCoordinateService {
+
+}
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 fa0272d..f51284a 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,6 +1,7 @@
 package com.ruoyi.worker.vo;
 
 import com.baomidou.mybatisplus.annotation.TableField;
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
@@ -51,8 +52,8 @@
     @ApiModelProperty("预约地址")
     private String reservationAddress;
 
-    @ApiModelProperty("预约上门时间")
-    private Date time;
+    @ApiModelProperty("预约上门时间段")
+    private String time;
 
     @ApiModelProperty("服务人员id")
     private Integer serverId;
@@ -73,9 +74,11 @@
     private Integer state;
 
     @ApiModelProperty("接单时间(师傅接单或后台派单,更新该字段时间)")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:ss:mm")
     private Date acceptTime;
 
     @ApiModelProperty("师傅到达预约地点时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:ss:mm")
     private Date arriveTime;
 
     @ApiModelProperty("订单类型(0:正常订单,1:后台订单(后台订单与用户端、师傅端无联系))")
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 306a8c3..6737672 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
@@ -27,7 +27,7 @@
 
     <select id="orderCount" resultType="com.ruoyi.worker.vo.OrderCountVO">
         SELECT COALESCE(SUM(CASE WHEN o.state IN (1, 2, 3) THEN 1 ELSE 0 END), 0) AS total,
-               COALESCE(SUM(CASE WHEN o.state = 1 THEN 1 ELSE 0 END), 0)          AS waitVisit,
+               COALESCE(SUM(CASE WHEN o.state in (1, 2)THEN 1 ELSE 0 END), 0)          AS waitVisit,
                COALESCE(SUM(CASE WHEN o.state = 3 THEN 1 ELSE 0 END), 0)          AS completed
         FROM t_order o
                  left join sys_master_worker m on o.server_id = m.id
diff --git a/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/OrderMapper.xml b/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/OrderMapper.xml
index 7e8b784..3c66843 100644
--- a/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/OrderMapper.xml
+++ b/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/OrderMapper.xml
@@ -29,5 +29,34 @@
         <result column="type" property="type"/>
         <result column="longitude" property="longitude"/>
         <result column="latitude" property="latitude"/>
+        <result column="cover" property="cover"/>
     </resultMap>
+
+    <select id="orderList" resultMap="BaseResultMap">
+        select o.*, s.cover
+        from t_order o
+                 left join sys_recovery_serve s on o.serve_id = s.id
+        <where>
+            o.is_delete = 0
+              and s.is_delete = 0
+              and o.server_id = #{userId}
+            <if test="state == 1">
+                and o.state in (1, 2)
+            </if>
+            <if test="state == 2">
+                and o.state = 3
+            </if>
+            <choose>
+                <when test="state == 1">
+                    and o.state in (1, 2)
+                </when>
+                <when test="state == 2">
+                    and o.state = 3
+                </when>
+                <otherwise>
+                    and o.state in (1, 2, 3)
+                </otherwise>
+            </choose>
+        </where>
+    </select>
 </mapper>
diff --git a/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/SysServeCoordinateMapper.xml b/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/SysServeCoordinateMapper.xml
new file mode 100644
index 0000000..21a321b
--- /dev/null
+++ b/ruoyi-service/ruoyi-worker/src/main/resources/mapper/worker/SysServeCoordinateMapper.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.worker.mapper.SysServeCoordinateMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.worker.entity.SysServeCoordinate">
+        <id column="id" property="id" />
+        <result column="worker_id" property="workerId" />
+        <result column="order_id" property="orderId" />
+        <result column="coordinate" property="coordinate" />
+        <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" />
+    </resultMap>
+
+</mapper>

--
Gitblit v1.7.1