From 2116b5b5802c0de0f126f85cf2ac56a732639e82 Mon Sep 17 00:00:00 2001
From: xin <1099200748@qq.com>
Date: Wed, 02 Jul 2025 16:39:16 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master' into xin

---
 oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderIncomeDetailQueryCriteria.java     |   43 
 oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderReminderMapper.java               |   22 
 oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderRecordQueryCriteria.java      |   53 
 oying-system/src/main/java/com/oying/modules/rider/service/RiderIncomeDetailService.java              |   62 +
 oying-system/src/main/java/com/oying/modules/rider/domain/RiderIncomeDetail.java                      |   74 +
 oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderWalletInfoServiceImpl.java       |   97 +
 oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderOperationQueryCriteria.java   |   43 
 oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderOperation.java                    |   56 
 oying-system/src/main/java/com/oying/modules/pc/store/service/StoreCreateService.java                 |    3 
 oying-system/src/main/java/com/oying/modules/rider/rest/RiderIncomeDetailController.java              |   73 +
 oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderReminderQueryCriteria.java    |   50 
 oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderRecordServiceImpl.java      |   90 +
 oying-system/src/main/java/com/oying/modules/rider/service/RiderWalletInfoService.java                |   66 +
 oying-system/src/main/java/com/oying/modules/rider/domain/RiderSourceInfoHttp.java                    |   25 
 oying-system/src/main/java/com/oying/modules/rider/domain/RiderWithdrawalRecord.java                  |   79 +
 oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderRecordService.java               |   59 
 oying-system/src/main/java/com/oying/modules/pc/store/mapper/StoreMapper.java                         |    7 
 oying-system/src/main/java/com/oying/modules/rider/domain/RiderWalletInfo.java                        |   69 +
 oying-system/src/main/resources/mapper/rider/RiderOrderReminderMapper.xml                             |   71 +
 oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreMerchantController.java               |    3 
 oying-system/src/main/java/com/oying/modules/rider/utils/RiderSourceHttpUtils.java                    |  108 +
 oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderSellerController.java           |   64 
 oying-system/src/main/java/com/oying/modules/message/service/MessageOrderSellerService.java           |    7 
 oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderWithdrawalRecordQueryCriteria.java |   48 
 oying-system/src/main/java/com/oying/modules/rider/rest/RiderInfoController.java                      |   73 +
 oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderOperationMapper.java              |   22 
 oying-system/src/main/java/com/oying/modules/rider/service/RiderWithdrawalRecordService.java          |   59 
 oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderWalletInfoQueryCriteria.java       |   29 
 oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderReminderService.java             |   59 
 oying-system/src/main/resources/mapper/pc/category/PlatformCategoryMapper.xml                         |    4 
 oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreCustomerController.java               |    6 
 oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderOperationService.java            |   59 
 oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderWithdrawalRecordServiceImpl.java |   91 +
 oying-system/src/main/resources/mapper/rider/RiderOrderRecordMapper.xml                               |   87 +
 oying-system/src/main/java/com/oying/modules/message/mapper/MessageOrderSellerMapper.java             |    4 
 oying-common/src/main/java/com/oying/utils/DuplicateKeyExceptionUtil.java                             |   51 
 oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreController.java                       |    3 
 oying-system/src/main/java/com/oying/modules/rider/mapper/RiderWalletInfoMapper.java                  |   22 
 oying-system/src/main/java/com/oying/modules/rider/rest/RiderWalletInfoController.java                |   74 +
 oying-system/src/main/java/com/oying/modules/message/domain/dto/MessageOrderSellerDTO.java            |   18 
 oying-system/src/main/resources/mapper/rider/RiderIncomeDetailMapper.xml                              |   61 
 oying-system/src/main/java/com/oying/modules/pc/category/view/PlatformCategoryAdminView.java          |    2 
 oying-system/src/main/java/com/oying/modules/pc/store/service/StoreService.java                       |    9 
 oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderReminderController.java             |   73 +
 oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderInfoQueryCriteria.java             |   42 
 oying-system/src/main/java/com/oying/modules/rider/utils/Constants.java                               |   29 
 oying-system/src/main/resources/mapper/rider/RiderWithdrawalRecordMapper.xml                          |   72 +
 oying-system/src/main/resources/mapper/pc/store/StoreMapper.xml                                       |    4 
 oying-system/src/main/resources/mapper/rider/RiderWalletInfoMapper.xml                                |   47 
 oying-system/src/main/java/com/oying/modules/pc/product/rest/ProductController.java                   |   12 
 oying-system/src/main/resources/mapper/message/MessageOrderSellerMapper.xml                           |   20 
 oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreQueryCriteria.java              |   33 
 oying-system/src/main/java/com/oying/modules/rider/domain/RiderInfo.java                              |   74 +
 oying-system/src/main/java/com/oying/modules/rider/rest/RiderWithdrawalRecordController.java          |   73 +
 oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderSeller.java                   |   16 
 oying-common/src/main/java/com/oying/exception/handler/GlobalExceptionHandler.java                    |   16 
 oying-system/src/main/java/com/oying/modules/rider/domain/RiderSourceInfo.java                        |   43 
 oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderInfoServiceImpl.java             |  151 ++
 oying-system/src/main/resources/mapper/rider/RiderOrderOperationMapper.xml                            |   59 
 oying-system/src/main/java/com/oying/modules/rider/service/RiderInfoService.java                      |   72 +
 oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderIncomeDetailServiceImpl.java     |   89 +
 oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreServiceImpl.java              |   22 
 oying-system/src/main/java/com/oying/modules/rider/mapper/RiderWithdrawalRecordMapper.java            |   22 
 oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderReminder.java                     |   65 +
 oying-system/src/main/java/com/oying/modules/rider/mapper/RiderInfoMapper.java                        |   22 
 oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderOperationServiceImpl.java   |   84 +
 oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderReminderServiceImpl.java    |   87 +
 oying-common/src/main/java/com/oying/config/webConfig/ConfigurerAdapter.java                          |    1 
 oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreCreateServiceImpl.java        |    5 
 oying-system/src/main/resources/mapper/rider/RiderInfoMapper.xml                                      |   57 
 oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderRecordMapper.java                 |   22 
 oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.java  |   18 
 oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderRecord.java                       |   99 +
 oying-system/src/main/java/com/oying/modules/rider/mapper/RiderIncomeDetailMapper.java                |   22 
 oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderRecordController.java               |   73 +
 oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderOperationController.java            |   73 +
 oying-system/src/main/java/com/oying/modules/rider/rest/WxRiderController.java                        |   91 +
 77 files changed, 3,626 insertions(+), 67 deletions(-)

diff --git a/oying-common/src/main/java/com/oying/config/webConfig/ConfigurerAdapter.java b/oying-common/src/main/java/com/oying/config/webConfig/ConfigurerAdapter.java
index b8b60b1..358584b 100644
--- a/oying-common/src/main/java/com/oying/config/webConfig/ConfigurerAdapter.java
+++ b/oying-common/src/main/java/com/oying/config/webConfig/ConfigurerAdapter.java
@@ -70,6 +70,7 @@
         config.setDateFormat("yyyy-MM-dd HH:mm:ss");
         // 开启引用检测,枚举支持
         config.setWriterFeatures(
+                JSONWriter.Feature.WriteLongAsString,
                 JSONWriter.Feature.WriteEnumUsingToString,
                 JSONWriter.Feature.ReferenceDetection
         );
diff --git a/oying-common/src/main/java/com/oying/exception/handler/GlobalExceptionHandler.java b/oying-common/src/main/java/com/oying/exception/handler/GlobalExceptionHandler.java
index 1c92ae1..f33a0bb 100644
--- a/oying-common/src/main/java/com/oying/exception/handler/GlobalExceptionHandler.java
+++ b/oying-common/src/main/java/com/oying/exception/handler/GlobalExceptionHandler.java
@@ -1,10 +1,12 @@
 package com.oying.exception.handler;
 
+import com.oying.exception.BadRequestException;
 import com.oying.exception.EntityExistException;
 import com.oying.exception.EntityNotFoundException;
-import lombok.extern.slf4j.Slf4j;
-import com.oying.exception.BadRequestException;
+import com.oying.utils.DuplicateKeyExceptionUtil;
 import com.oying.utils.ThrowableUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.DuplicateKeyException;
 import org.springframework.http.ResponseEntity;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.validation.FieldError;
@@ -89,6 +91,16 @@
     }
 
     /**
+     * 处理 DuplicateKeyException
+     */
+    @ExceptionHandler(value = DuplicateKeyException.class)
+    public ResponseEntity<ApiError> handleDuplicateKeyException(DuplicateKeyException e) {
+        // 打印堆栈信息
+        log.error(ThrowableUtil.getStackTrace(e));
+        return buildResponseEntity(ApiError.error(BAD_REQUEST.value(), DuplicateKeyExceptionUtil.getDisplayMessage(e)));
+    }
+
+    /**
      * 统一返回
      */
     private ResponseEntity<ApiError> buildResponseEntity(ApiError apiError) {
diff --git a/oying-common/src/main/java/com/oying/utils/DuplicateKeyExceptionUtil.java b/oying-common/src/main/java/com/oying/utils/DuplicateKeyExceptionUtil.java
new file mode 100644
index 0000000..6132e97
--- /dev/null
+++ b/oying-common/src/main/java/com/oying/utils/DuplicateKeyExceptionUtil.java
@@ -0,0 +1,51 @@
+package com.oying.utils;
+
+import cn.hutool.core.map.MapUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.dao.DuplicateKeyException;
+
+import java.sql.SQLException;
+import java.util.Map;
+import java.util.Optional;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+@Slf4j
+public class DuplicateKeyExceptionUtil {
+
+    public static final Map<String, String> INDEX_MAPPING = MapUtil.ofEntries(
+            MapUtil.entry("pc_store.uk_store_name", "店铺名称")
+    );
+
+    /**
+     * 获取错误消息
+     */
+    public static String getDisplayMessage(DuplicateKeyException e) {
+        try {
+            String indexName = findMySQLDuplicateKey(e);
+            String fieldDisplayName = INDEX_MAPPING.getOrDefault(indexName, indexName);
+            return Optional.ofNullable(fieldDisplayName).map(o -> o + "已存在").orElse(e.getMessage());
+        } catch (Exception ex) {
+            log.error("解析'DuplicateKeyException'消息失败", ex);
+            return e.getMessage();
+        }
+    }
+
+    /**
+     * 提取索引名称
+     */
+    public static String findMySQLDuplicateKey(DuplicateKeyException e) {
+        if (e.getCause() instanceof SQLException) {
+            SQLException sqlEx = (SQLException) e.getCause();
+            if (sqlEx.getErrorCode() == 1062) { // MySQL duplicate key error code
+                String errorMsg = sqlEx.getMessage();
+                // 使用正则提取索引名
+                Matcher matcher = Pattern.compile("for key '(.+?)'").matcher(errorMsg);
+                if (matcher.find()) {
+                    return matcher.group(1);
+                }
+            }
+        }
+        return null;
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderSeller.java b/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderSeller.java
index f6b81ae..763f274 100644
--- a/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderSeller.java
+++ b/oying-system/src/main/java/com/oying/modules/message/domain/MessageOrderSeller.java
@@ -26,22 +26,30 @@
     @ApiModelProperty(value = "id")
     private Integer id;
 
-    @NotNull
+
     @ApiModelProperty(value = "orderId")
     private Integer orderId;
 
-    @NotBlank
+
+    @ApiModelProperty(value = "storeId")
+    private Integer storeId;
+
+
     @ApiModelProperty(value = "messageType")
     private String messageType;
 
-    @NotBlank
+
     @ApiModelProperty(value = "messageContent")
     private String messageContent;
 
-    @NotBlank
+
     @ApiModelProperty(value = "link")
     private String link;
 
+
+    @ApiModelProperty(value = "flag")
+    private Integer flag=0;
+
 //    @ApiModelProperty(value = "createTime")
 //    private Timestamp createTime;
 
diff --git a/oying-system/src/main/java/com/oying/modules/message/domain/dto/MessageOrderSellerDTO.java b/oying-system/src/main/java/com/oying/modules/message/domain/dto/MessageOrderSellerDTO.java
new file mode 100644
index 0000000..f33e962
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/message/domain/dto/MessageOrderSellerDTO.java
@@ -0,0 +1,18 @@
+package com.oying.modules.message.domain.dto;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+public class MessageOrderSellerDTO {
+
+    private Integer orderId;
+
+    private String messageType;
+
+    private String messageContent;
+
+}
diff --git a/oying-system/src/main/java/com/oying/modules/message/mapper/MessageOrderSellerMapper.java b/oying-system/src/main/java/com/oying/modules/message/mapper/MessageOrderSellerMapper.java
index be1783a..2fd121f 100644
--- a/oying-system/src/main/java/com/oying/modules/message/mapper/MessageOrderSellerMapper.java
+++ b/oying-system/src/main/java/com/oying/modules/message/mapper/MessageOrderSellerMapper.java
@@ -19,4 +19,8 @@
     IPage<MessageOrderSeller> findAll(@Param("criteria") MessageOrderSellerQueryCriteria criteria, Page<Object> page);
 
     List<MessageOrderSeller> findAll(@Param("criteria") MessageOrderSellerQueryCriteria criteria);
+
+    List<MessageOrderSeller> findByStoreId(String storeId);
+
+    Boolean updateMessageOrderSellerRead(Integer orderId);
 }
diff --git a/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderSellerController.java b/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderSellerController.java
index 80456f1..6fcf7d7 100644
--- a/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderSellerController.java
+++ b/oying-system/src/main/java/com/oying/modules/message/rest/MessageOrderSellerController.java
@@ -1,8 +1,10 @@
 package com.oying.modules.message.rest;
 
+import cn.hutool.core.bean.BeanUtil;
 import com.oying.annotation.Log;
 import com.oying.modules.message.domain.MessageOrderSeller;
 import com.oying.modules.message.domain.MessageOrderSeller;
+import com.oying.modules.message.domain.dto.MessageOrderSellerDTO;
 import com.oying.modules.message.service.MessageOrderSellerService;
 import com.oying.modules.message.domain.dto.MessageOrderSellerQueryCriteria;
 import com.oying.utils.R;
@@ -74,16 +76,62 @@
 //        return new ResponseEntity<>(HttpStatus.OK);
 //    }
 
-    //订单状态变化通知
-    @GetMapping("/status/{order_id}")
-    @ApiOperation("查询一条订单状态变化通知")
-    public R<String> getMessageOrderSeller(@PathVariable Integer order_id) {
-        MessageOrderSeller messageOrderSeller = messageOrderSellerService.findByOrderId(order_id);
-        String message = messageOrderSeller.getMessageType();
+//    //订单状态变化通知
+//    @GetMapping("/status/{order_id}")
+//    @ApiOperation("查询一条订单状态变化通知")
+//    public R<String> getMessageOrderSeller(@PathVariable Integer order_id) {
+//        MessageOrderSeller messageOrderSeller = messageOrderSellerService.findByOrderId(order_id);
+//        String message = messageOrderSeller.getMessageType();
+//
+////        return new ResponseEntity<>(message, HttpStatus.OK);
+//        return R.success(message);
+//    }
+    //根据store_id 返回list订单状态变化通知
+    @GetMapping("/status/store/{store_id}")
+    @ApiOperation("根据store_id 返回list订单状态变化通知")
+    public R<List<MessageOrderSellerDTO>> getMessageOrderSeller(@PathVariable String store_id) {
+         List<MessageOrderSeller> messageOrderSeller = messageOrderSellerService.findByStoreId(store_id);
+         //转换为MessageOrderSellerDTO huto tools
+        List<MessageOrderSellerDTO> dtoList = BeanUtil.copyToList(messageOrderSeller, MessageOrderSellerDTO.class);
+        //判断store_id存在
+        if (messageOrderSeller == null) {
+            return R.fail("store_id不存在");
+        }else{return R.success(dtoList);}
 
-//        return new ResponseEntity<>(message, HttpStatus.OK);
-        return R.success(message);
     }
+    //让前端标记已读
+    @PostMapping("/read/{order_id}")
+    @ApiOperation("让前端标记已读 按条")
+    public R<String> getMessageOrderSellerRead(@PathVariable Integer order_id) {
+             if(messageOrderSellerService.updateMessageOrderSellerRead(order_id)){
+                 return R.success("已读");
+             }else{
+                 return R.fail("id不存在");
+             }
+
+
+    }
+
+    //让后端队友更新我的表
+    @PostMapping("/update/seller")
+    @ApiOperation("让后端队友更新消息表")
+    public R<String> updateMessageOrderSeller(@RequestBody MessageOrderSeller resources) {
+        //插入一条数据
+        if(messageOrderSellerService.saveOrUpdate(resources))
+            return R.success("更新成功");
+        return R.fail("更新失败");
+//        if(messageOrderSellerService.updateById(resources)){
+//            return R.success("更新成功");
+//        }else{
+//            return R.fail("更新失败");
+//        }
+    }
+
+
+
+
+
+
     //订单送达通知
     @GetMapping("/deliver/{order_id}")
     @ApiOperation("查询一条订单送达通知")
diff --git a/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderSellerService.java b/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderSellerService.java
index 29d672b..c4e5361 100644
--- a/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderSellerService.java
+++ b/oying-system/src/main/java/com/oying/modules/message/service/MessageOrderSellerService.java
@@ -1,9 +1,8 @@
 package com.oying.modules.message.service;
 
-import com.oying.modules.message.domain.MessageOrderBuyer;
 import com.oying.modules.message.domain.MessageOrderSeller;
 import com.oying.modules.message.domain.dto.MessageOrderSellerQueryCriteria;
-import java.util.Map;
+
 import java.util.List;
 import java.io.IOException;
 import javax.servlet.http.HttpServletResponse;
@@ -59,4 +58,8 @@
     */
     void download(List<MessageOrderSeller> all, HttpServletResponse response) throws IOException;
     public MessageOrderSeller findByOrderId(Integer orderId) ;
+
+    List<MessageOrderSeller> findByStoreId(String storeId);
+
+    boolean updateMessageOrderSellerRead(Integer orderId);
 }
diff --git a/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.java b/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.java
index 1668632..25d8344 100644
--- a/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/message/service/impl/MessageOrderSellerServiceImpl.java
@@ -1,7 +1,6 @@
 package com.oying.modules.message.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.oying.modules.message.domain.MessageOrderBuyer;
 import com.oying.modules.message.domain.MessageOrderSeller;
 import com.oying.utils.FileUtil;
 import lombok.RequiredArgsConstructor;
@@ -13,12 +12,11 @@
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import com.oying.utils.PageUtil;
-import java.util.List;
-import java.util.Map;
+
+import java.util.*;
 import java.io.IOException;
 import javax.servlet.http.HttpServletResponse;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
+
 import com.oying.utils.PageResult;
 
 /**
@@ -81,4 +79,14 @@
     public MessageOrderSeller findByOrderId(Integer orderId) {
         return baseMapper.selectOne(new QueryWrapper<MessageOrderSeller>().eq("order_id", orderId));
     }
+
+    @Override
+    public List<MessageOrderSeller> findByStoreId(String storeId) {
+        return messageOrderSellerMapper.findByStoreId(storeId);
+    }
+
+    @Override
+    public boolean updateMessageOrderSellerRead(Integer orderId) {
+        return messageOrderSellerMapper.updateMessageOrderSellerRead(orderId);
+    }
 }
diff --git a/oying-system/src/main/java/com/oying/modules/pc/category/view/PlatformCategoryAdminView.java b/oying-system/src/main/java/com/oying/modules/pc/category/view/PlatformCategoryAdminView.java
index be1d942..9c61307 100644
--- a/oying-system/src/main/java/com/oying/modules/pc/category/view/PlatformCategoryAdminView.java
+++ b/oying-system/src/main/java/com/oying/modules/pc/category/view/PlatformCategoryAdminView.java
@@ -14,6 +14,8 @@
 
     private Integer sortWeight;
 
+    private Long iconId;
+
     private String iconUrl;
 
     private Integer active;
diff --git a/oying-system/src/main/java/com/oying/modules/pc/product/rest/ProductController.java b/oying-system/src/main/java/com/oying/modules/pc/product/rest/ProductController.java
index 035c778..149958d 100644
--- a/oying-system/src/main/java/com/oying/modules/pc/product/rest/ProductController.java
+++ b/oying-system/src/main/java/com/oying/modules/pc/product/rest/ProductController.java
@@ -11,11 +11,13 @@
 import com.oying.modules.pc.product.service.ProductImageService;
 import com.oying.modules.pc.product.service.ProductLabelService;
 import com.oying.modules.pc.product.service.ProductService;
+import com.oying.utils.PageResult;
 import com.oying.utils.R;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiParam;
 import lombok.RequiredArgsConstructor;
+import org.springframework.http.HttpStatus;
 import org.springframework.http.ResponseEntity;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -65,7 +67,13 @@
     // @PreAuthorize("@el.check('product:list')")
     public ResponseEntity<?> getProductsByPage(ProductQueryCriteria criteria) {
         Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
-        return ResponseEntity.ok(R.success(productService.queryAll(criteria, page)));
+        PageResult<Product> pageResult = productService.queryAll(criteria, page);
+        pageResult.getContent().forEach(product -> {
+            Long productId = product.getProductId();
+            product.setImages(productImageService.queryImagesByProductId(productId));
+            product.setLabels(productLabelService.queryLabelsByProductId(productId));
+        });
+        return ResponseEntity.ok(R.success(pageResult));
     }
 
     @GetMapping(value = "/{productId}}")
@@ -112,7 +120,7 @@
     //@PreAuthorize("@el.check('merchant:product:add')")
     public ResponseEntity<?> createProduct(@Validated @RequestBody ProductMerchantCreateRequest request) {
         productAdminService.create(request);
-        return ResponseEntity.noContent().build();
+        return ResponseEntity.status(HttpStatus.CREATED).build();
     }
 
     @PutMapping
diff --git a/oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreQueryCriteria.java
index ad86796..f2791d4 100644
--- a/oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreQueryCriteria.java
+++ b/oying-system/src/main/java/com/oying/modules/pc/store/domain/dto/StoreQueryCriteria.java
@@ -1,8 +1,7 @@
 package com.oying.modules.pc.store.domain.dto;
 
-import com.oying.utils.StringUtils;
-import lombok.Data;
 import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
 import org.springframework.util.DigestUtils;
 
 import java.io.Serializable;
@@ -18,13 +17,13 @@
     @ApiModelProperty(value = "商户ID", example = "1")
     private Long merchantId;
 
-    private String storeName;
-
-    private Integer status;
-
     private Long storeId;
 
     private Long platformCategoryId;
+
+    private String storeName;
+
+    private Integer status;
 
     private String blurry;
 
@@ -44,19 +43,15 @@
 
     public String buildConditionCacheKey() {
         StringJoiner baseKeyJoiner = new StringJoiner("|");
-        if (platformCategoryId != null) {
-            baseKeyJoiner.add("platformCategoryId=" + platformCategoryId);
-        }
-        if (StringUtils.isNotEmpty(blurry)) {
-            baseKeyJoiner.add("blurry=" + blurry);
-        }
-        if (longitude != null && latitude != null) {
-            baseKeyJoiner.add("longitude=" + longitude);
-            baseKeyJoiner.add("latitude=" + latitude);
-        }
-        if (StringUtils.isNotEmpty(blurry)) {
-            baseKeyJoiner.add("radius=" + radius);
-        }
+        baseKeyJoiner.add("merchantId=" + merchantId);
+        baseKeyJoiner.add("storeId=" + storeId);
+        baseKeyJoiner.add("platformCategoryId=" + platformCategoryId);
+        baseKeyJoiner.add("storeName=" + storeName);
+        baseKeyJoiner.add("status=" + status);
+        baseKeyJoiner.add("blurry=" + blurry);
+        baseKeyJoiner.add("longitude=" + longitude);
+        baseKeyJoiner.add("latitude=" + latitude);
+        baseKeyJoiner.add("radius=" + radius);
         // 使用MD5或SHA缩短键长度
         return "store:search:page:" + DigestUtils.md5DigestAsHex(baseKeyJoiner.toString().getBytes());
     }
diff --git a/oying-system/src/main/java/com/oying/modules/pc/store/mapper/StoreMapper.java b/oying-system/src/main/java/com/oying/modules/pc/store/mapper/StoreMapper.java
index b535f17..ae21034 100644
--- a/oying-system/src/main/java/com/oying/modules/pc/store/mapper/StoreMapper.java
+++ b/oying-system/src/main/java/com/oying/modules/pc/store/mapper/StoreMapper.java
@@ -3,11 +3,10 @@
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
-import com.oying.modules.pc.store.domain.Store;
 import com.oying.modules.pc.search.domain.dto.NearbyStoreQueryCriteria;
-import com.oying.modules.pc.store.domain.dto.StoreCustomerQueryCriteria;
-import com.oying.modules.pc.store.domain.dto.StoreQueryCriteria;
 import com.oying.modules.pc.search.domain.dto.StoreSearchDto;
+import com.oying.modules.pc.store.domain.Store;
+import com.oying.modules.pc.store.domain.dto.StoreQueryCriteria;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
@@ -22,7 +21,7 @@
 @Mapper
 public interface StoreMapper extends BaseMapper<Store> {
 
-    List<Store> selectStoreList(@Param("criteria") StoreQueryCriteria criteria, Page<Store> page);
+    IPage<Store> selectStoreList(@Param("criteria") StoreQueryCriteria criteria, Page<Store> page);
 
     List<Store> selectStoreList(@Param("criteria") StoreQueryCriteria criteria);
 
diff --git a/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreController.java b/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreController.java
index a81be6f..552f567 100644
--- a/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreController.java
+++ b/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreController.java
@@ -57,8 +57,7 @@
     @PostMapping
     @ApiOperation("创建店铺")
     public ResponseEntity<?> create(@RequestBody StoreCreateRequest request) {
-        storeService.create(request);
-        return ResponseEntity.status(HttpStatus.CREATED).build();
+        return ResponseEntity.status(HttpStatus.CREATED).body(R.success(storeService.create(request)));
     }
 
     @PostMapping(value = "/{storeId}")
diff --git a/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreCustomerController.java b/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreCustomerController.java
index 3a12592..59900e0 100644
--- a/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreCustomerController.java
+++ b/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreCustomerController.java
@@ -46,11 +46,9 @@
     @GetMapping(value = "/page")
     @ApiOperation("查询店铺")
     public ResponseEntity<?> getStoresByPage(StoreQueryCriteria criteria) {
+        criteria.setLimit(1000);
         PageResult<Store> pagedStores = storeQueryService.findPagedStores(criteria);
-        List<Store> stores = pagedStores.getContent();
-        for (Store store : stores) {
-            store.setProducts(this.getProductsByStoreId(store.getStoreId()));
-        }
+        pagedStores.getContent().forEach(store -> store.setProducts(this.getProductsByStoreId(store.getStoreId())));
         return ResponseEntity.ok(R.success(pagedStores));
     }
 
diff --git a/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreMerchantController.java b/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreMerchantController.java
index d1852b3..1c19479 100644
--- a/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreMerchantController.java
+++ b/oying-system/src/main/java/com/oying/modules/pc/store/rest/StoreMerchantController.java
@@ -93,8 +93,7 @@
     @ApiOperation("创建店铺")
     //@PreAuthorize("@el.check('merchant:store:create')")
     public ResponseEntity<?> create(@RequestBody StoreCreateRequest request) {
-        storeCreateService.create(request);
-        return ResponseEntity.status(HttpStatus.CREATED).build();
+        return ResponseEntity.status(HttpStatus.CREATED).body(storeCreateService.create(request));
     }
 
     /**
diff --git a/oying-system/src/main/java/com/oying/modules/pc/store/service/StoreCreateService.java b/oying-system/src/main/java/com/oying/modules/pc/store/service/StoreCreateService.java
index 7644c48..80ad44d 100644
--- a/oying-system/src/main/java/com/oying/modules/pc/store/service/StoreCreateService.java
+++ b/oying-system/src/main/java/com/oying/modules/pc/store/service/StoreCreateService.java
@@ -1,7 +1,8 @@
 package com.oying.modules.pc.store.service;
 
+import com.oying.modules.pc.store.domain.Store;
 import com.oying.modules.pc.store.domain.dto.StoreCreateRequest;
 
 public interface StoreCreateService {
-    void create(StoreCreateRequest request);
+    Store create(StoreCreateRequest request);
 }
diff --git a/oying-system/src/main/java/com/oying/modules/pc/store/service/StoreService.java b/oying-system/src/main/java/com/oying/modules/pc/store/service/StoreService.java
index d56cbfc..f1c3e56 100644
--- a/oying-system/src/main/java/com/oying/modules/pc/store/service/StoreService.java
+++ b/oying-system/src/main/java/com/oying/modules/pc/store/service/StoreService.java
@@ -2,8 +2,9 @@
 
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.oying.modules.pc.store.domain.Store;
-import com.oying.modules.pc.store.domain.StoreCategory;
-import com.oying.modules.pc.store.domain.dto.*;
+import com.oying.modules.pc.store.domain.dto.StoreCreateRequest;
+import com.oying.modules.pc.store.domain.dto.StoreQueryCriteria;
+import com.oying.modules.pc.store.domain.dto.StoreUpdateRequest;
 import com.oying.utils.PageResult;
 
 import java.math.BigDecimal;
@@ -26,7 +27,7 @@
 
     List<Store> queryUserStores(Long userId);
 
-    boolean create(StoreCreateRequest request);
+    Store create(StoreCreateRequest request);
 
     boolean update(StoreUpdateRequest request);
 
@@ -55,4 +56,6 @@
     boolean updateStatus(Long storeId, Integer status, Long version);
 
     boolean existsByIdAndMerchantId(Long storeId, Long merchantId);
+
+    boolean existsStoreName(String storeName);
 }
diff --git a/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreCreateServiceImpl.java b/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreCreateServiceImpl.java
index 9ed3aa1..a2f9b79 100644
--- a/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreCreateServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreCreateServiceImpl.java
@@ -1,5 +1,6 @@
 package com.oying.modules.pc.store.service.impl;
 
+import com.oying.modules.pc.store.domain.Store;
 import com.oying.modules.pc.store.domain.dto.StoreCreateRequest;
 import com.oying.modules.pc.store.service.StoreCreateService;
 import com.oying.modules.pc.store.service.StoreService;
@@ -16,7 +17,7 @@
     private final StoreService storeService;
 
     @Transactional(rollbackFor = Exception.class)
-    public void create(StoreCreateRequest request) {
-        storeService.create(request);
+    public Store create(StoreCreateRequest request) {
+        return storeService.create(request);
     }
 }
diff --git a/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreServiceImpl.java b/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreServiceImpl.java
index f7fbfb4..8531306 100644
--- a/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreServiceImpl.java
+++ b/oying-system/src/main/java/com/oying/modules/pc/store/service/impl/StoreServiceImpl.java
@@ -7,7 +7,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import com.oying.exception.EntityExistException;
+import com.oying.exception.BadRequestException;
 import com.oying.exception.EntityNotFoundException;
 import com.oying.modules.pc.common.ValueUpdate;
 import com.oying.modules.pc.store.converter.StoreAssembler;
@@ -27,6 +27,7 @@
 import com.oying.utils.PageResult;
 import com.oying.utils.PageUtil;
 import com.oying.utils.SecurityUtils;
+import com.oying.utils.StringUtils;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
@@ -79,12 +80,17 @@
 
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public boolean create(StoreCreateRequest request) {
+    public Store create(StoreCreateRequest request) {
+        // 检查店铺名称是否存在
+        if (this.existsStoreName(request.getStoreName())) {
+            throw new BadRequestException("店铺名称已存在");
+        }
+        // 创建店铺
         Store store = StoreAssembler.to(request);
         storeMapper.insert(store);
         this.processQualificationCreate(store, request.getQualificationList());
         this.bindUser(store.getStoreId());
-        return true;
+        return store;
     }
 
     @Override
@@ -198,6 +204,16 @@
     }
 
     @Override
+    public boolean existsStoreName(String storeName) {
+        if (StringUtils.isEmpty(storeName)) {
+            return true;
+        }
+        LambdaQueryWrapper<Store> wrapper = new LambdaQueryWrapper<Store>()
+                .eq(Store::getStoreName, storeName);
+        return storeMapper.selectCount(wrapper) > 0;
+    }
+
+    @Override
     public boolean existsByIdAndMerchantId(Long storeId, Long merchantId) {
         if (storeId == null || merchantId == null) {
             return false;
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/RiderIncomeDetail.java b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderIncomeDetail.java
new file mode 100644
index 0000000..a3fd5e5
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderIncomeDetail.java
@@ -0,0 +1,74 @@
+package com.oying.modules.rider.domain;
+
+import com.oying.base.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.sql.Timestamp;
+import java.math.BigDecimal;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author pxb
+* @date 2025-06-18
+**/
+@Getter
+@Setter
+@TableName("qs_rider_income_detail")
+public class RiderIncomeDetail extends BaseEntity implements Serializable {
+
+    @TableId(value = "income_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "收入明细id")
+    private Long incomeId;
+
+    @ApiModelProperty(value = "骑手id")
+    private Long riderId;
+
+    @ApiModelProperty(value = "骑手名字")
+    private String riderName;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String riderPhone;
+
+    @ApiModelProperty(value = "订单id")
+    private Long orderId;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNum;
+
+    @ApiModelProperty(value = "收入金额")
+    private BigDecimal incomeAmount;
+
+    @ApiModelProperty(value = "收入类型:1-配送费,2-奖励,3-补贴")
+    private String incomeType;
+
+    @ApiModelProperty(value = "收入日期(YYYY-MM-dd)方便统计")
+    private String incomeDate;
+
+    @ApiModelProperty(value = "收入月份YYYY-MM")
+    private String incomeMonth;
+
+    @ApiModelProperty(value = "订单状态:1-待取货,2-配送中,3-已完成,4-已取消")
+    private String orderStatus;
+
+    @ApiModelProperty(value = "起始地址")
+    private String startAddress;
+
+    @ApiModelProperty(value = "到达终点地址")
+    private String endAddress;
+
+    @ApiModelProperty(value = "送达完成时间")
+    private Timestamp deliveryTime;
+
+    public void copy(RiderIncomeDetail source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+
+    public static final String COL_RIDER_ID = "rider_id";
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/RiderInfo.java b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderInfo.java
new file mode 100644
index 0000000..741c170
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderInfo.java
@@ -0,0 +1,74 @@
+package com.oying.modules.rider.domain;
+
+import com.oying.base.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.sql.Timestamp;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author pxb
+* @date 2025-07-01
+**/
+@Getter
+@Setter
+@TableName("qs_rider_info")
+public class RiderInfo extends BaseEntity implements Serializable {
+
+    @TableId(value = "info_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "id")
+    private Long infoId;
+
+    @ApiModelProperty(value = "骑手id")
+    private Long riderId;
+
+    @ApiModelProperty(value = "数据来源id")
+    private String sourceId;
+
+    @ApiModelProperty(value = "电话")
+    private String phone;
+
+    @ApiModelProperty(value = "乙方姓名")
+    private String cardName;
+
+    @ApiModelProperty(value = "证件号")
+    private String cardNum;
+
+    @ApiModelProperty(value = "数据来源编号")
+    private String sourceNum;
+
+    @ApiModelProperty(value = "状态 0不生效,1生效 其他平台是否满足接单的条件")
+    private String enabled;
+
+    @ApiModelProperty(value = "数据来源平台(LY,等)")
+    private String sourcePlatform;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+
+    public void copy(RiderInfo source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+
+    /**
+     * 数据库字段常量
+     */
+    public static final String COL_RIDER_ID = "rider_id";
+    public static final String COL_SOURCE_ID = "source_id";
+    public static final String COL_PHONE = "phone";
+    public static final String COL_CARD_NAME = "card_name";
+    public static final String COL_CARD_NUM = "card_num";
+    public static final String COL_SOURCE_NUM = "source_num";
+    public static final String COL_ENABLED = "enabled";
+    public static final String COL_SOURCE_PLATFORM = "source_platform";
+    public static final String COL_ADDRESS = "address";
+    public static final String COL_INFO_ID = "info_id";
+
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderOperation.java b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderOperation.java
new file mode 100644
index 0000000..e244e95
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderOperation.java
@@ -0,0 +1,56 @@
+package com.oying.modules.rider.domain;
+
+import com.oying.base.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.sql.Timestamp;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author pxb
+* @date 2025-06-18
+**/
+@Getter
+@Setter
+@TableName("qs_rider_order_operation")
+public class RiderOrderOperation extends BaseEntity implements Serializable {
+
+    @TableId(value = "operation_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "操作ID")
+    private Long operationId;
+
+    @ApiModelProperty(value = "订单ID")
+    private Long orderId;
+
+    @ApiModelProperty(value = "订单编号")
+    private Long orderNum;
+
+    @ApiModelProperty(value = "骑手ID")
+    private Long riderId;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String riderPhone;
+
+    @ApiModelProperty(value = "骑手手姓名")
+    private String riderName;
+
+    @ApiModelProperty(value = "操作类型:1-接单,2-取货,3-送达,0-取消接单")
+    private String operationType;
+
+    @ApiModelProperty(value = "操作原因")
+    private String operationReason;
+
+    @ApiModelProperty(value = "操作时间")
+    private String operationTime;
+
+    public void copy(RiderOrderOperation source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderRecord.java b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderRecord.java
new file mode 100644
index 0000000..310b0a4
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderRecord.java
@@ -0,0 +1,99 @@
+package com.oying.modules.rider.domain;
+
+import com.oying.base.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.sql.Timestamp;
+import java.math.BigDecimal;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author pxb
+* @date 2025-07-01
+**/
+@Getter
+@Setter
+@TableName("qs_rider_order_record")
+public class RiderOrderRecord extends BaseEntity implements Serializable {
+
+    @TableId(value = "record_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "骑手订单记录")
+    private Long recordId;
+
+    @ApiModelProperty(value = "订单id")
+    private Long orderId;
+
+    @ApiModelProperty(value = "订单编号")
+    private String orderNum;
+
+    @ApiModelProperty(value = "商家ID")
+    private Long merchantId;
+
+    @ApiModelProperty(value = "商家名称")
+    private String merchantName;
+
+    @ApiModelProperty(value = "商家地址")
+    private String merchantAddress;
+
+    @ApiModelProperty(value = "收货地址")
+    private String receiverAddress;
+
+    @ApiModelProperty(value = "订单状态: 1-待取货 2-配送中 3-已完成 4-商家取消 5-骑手取消 6-客户取消 7-系统取消")
+    private String orderStatus;
+
+    @ApiModelProperty(value = "接单时间")
+    private Timestamp acceptTime;
+
+    @ApiModelProperty(value = "接单编号")
+    private String acceptNum;
+
+    @ApiModelProperty(value = "完成/取消时间")
+    private Timestamp finishTime;
+
+    @ApiModelProperty(value = "配送时长(秒)")
+    private Long deliveryDuration;
+
+    @ApiModelProperty(value = "是否超时:1-是 0-否")
+    private String isOvertime;
+
+    @ApiModelProperty(value = "订单来源: 1-平台派单 2-骑手抢单 3-商家直派 4-其他")
+    private String orderSource;
+
+    @ApiModelProperty(value = "订单收入配送费")
+    private BigDecimal orderIncome;
+
+    @ApiModelProperty(value = "骑手姓名")
+    private String riderName;
+
+    @ApiModelProperty(value = "手机号")
+    private String phone;
+
+    @ApiModelProperty(value = "骑手id")
+    private Long riderId;
+
+    @ApiModelProperty(value = "用户经度")
+    private String userLongitude;
+
+    @ApiModelProperty(value = "用户纬度")
+    private String userLatitude;
+
+    @ApiModelProperty(value = "商家经度")
+    private String merchantLongitude;
+
+    @ApiModelProperty(value = "商家纬度")
+    private String merchantLatitude;
+    
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    public void copy(RiderOrderRecord source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderReminder.java b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderReminder.java
new file mode 100644
index 0000000..8e48f45
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderOrderReminder.java
@@ -0,0 +1,65 @@
+package com.oying.modules.rider.domain;
+
+import com.oying.base.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.sql.Timestamp;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author pxb
+* @date 2025-06-18
+**/
+@Getter
+@Setter
+@TableName("qs_rider_order_reminder")
+public class RiderOrderReminder extends BaseEntity implements Serializable {
+
+    @TableId(value = "reminder_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "订单提醒记录id")
+    private Long reminderId;
+
+    @ApiModelProperty(value = "骑手id")
+    private Long riderId;
+
+    @ApiModelProperty(value = "骑手名字")
+    private String riderName;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String riderPhone;
+
+    @ApiModelProperty(value = "订单Id")
+    private Long orderId;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNum;
+
+    @ApiModelProperty(value = "规则id")
+    private Long ruleId;
+
+    @ApiModelProperty(value = "规则内容")
+    private String ruleContent;
+
+    @ApiModelProperty(value = "规则类型。。。")
+    private String ruleType;
+
+    @ApiModelProperty(value = "提醒时间")
+    private Timestamp reminderTime;
+
+    @ApiModelProperty(value = "是否已发送:0-否,1-是")
+    private String isSent;
+
+    @ApiModelProperty(value = "发送时间")
+    private Timestamp sendTime;
+
+    public void copy(RiderOrderReminder source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/RiderSourceInfo.java b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderSourceInfo.java
new file mode 100644
index 0000000..9e0c1b9
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderSourceInfo.java
@@ -0,0 +1,43 @@
+package com.oying.modules.rider.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+* @description /
+* @author pxb
+* @date 2025-07-01
+**/
+@Getter
+@Setter
+public class RiderSourceInfo implements Serializable {
+
+    @ApiModelProperty(value = "数据来源id")
+    private String sourceId;
+
+    @ApiModelProperty(value = "电话")
+    private String phone;
+
+    @ApiModelProperty(value = "乙方姓名")
+    private String cardName;
+
+    @ApiModelProperty(value = "证件号")
+    private String cardNum;
+
+    @ApiModelProperty(value = "数据来源编号")
+    private String sourceNum;
+
+    @ApiModelProperty(value = "状态0不生效,1生效 其他平台的条件是否满足")
+    private String enabled;
+
+    @ApiModelProperty(value = "数据来源平台(LY,等)")
+    private String sourcePlatform;
+
+    @ApiModelProperty(value = "地址")
+    private String address;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/RiderSourceInfoHttp.java b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderSourceInfoHttp.java
new file mode 100644
index 0000000..21d47c9
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderSourceInfoHttp.java
@@ -0,0 +1,25 @@
+package com.oying.modules.rider.domain;
+
+import lombok.Getter;
+import lombok.Setter;
+
+import java.io.Serializable;
+
+/**
+* @description /
+* @author pxb
+* @date 2025-07-01
+**/
+@Getter
+@Setter
+public class RiderSourceInfoHttp implements Serializable {
+
+    private String success;
+
+    private String code;
+
+    private String message;
+
+    private RiderSourceInfo data;
+
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/RiderWalletInfo.java b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderWalletInfo.java
new file mode 100644
index 0000000..29af9e4
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderWalletInfo.java
@@ -0,0 +1,69 @@
+package com.oying.modules.rider.domain;
+
+import com.oying.base.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.sql.Timestamp;
+import java.math.BigDecimal;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author pxb
+* @date 2025-06-18
+**/
+@Getter
+@Setter
+@TableName("qs_rider_wallet_info")
+public class RiderWalletInfo extends BaseEntity implements Serializable {
+
+    @TableId(value = "wallet_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "收入总额ID")
+    private Long walletId;
+
+    @ApiModelProperty(value = "骑手id")
+    private Long riderId;
+
+    @ApiModelProperty(value = "总金额")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "可用余额")
+    private BigDecimal availableBalance;
+
+    @ApiModelProperty(value = "购电总金额")
+    private BigDecimal purchasingElectricityAmount;
+
+    @ApiModelProperty(value = "累计提现")
+    private BigDecimal withdrawTotal;
+
+    @ApiModelProperty(value = "累计收入")
+    private BigDecimal incomeTotal;
+
+    @ApiModelProperty(value = "冻结金额")
+    private BigDecimal frozenAmount;
+
+    @ApiModelProperty(value = "完成总单数")
+    private Integer runTotal;
+
+    @ApiModelProperty(value = "提现总次数")
+    private Integer cashWithdrawalTotal;
+
+    @ApiModelProperty(value = "购电总次数")
+    private Integer purchasingElectricityTotal;
+
+    @ApiModelProperty(value = "钱包状态(0冻结,1正常)")
+    private String status;
+
+
+    public void copy(RiderWalletInfo source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+
+    public static final String COL_RIDER_ID = "rider_id";
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/RiderWithdrawalRecord.java b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderWithdrawalRecord.java
new file mode 100644
index 0000000..f91dd14
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/RiderWithdrawalRecord.java
@@ -0,0 +1,79 @@
+package com.oying.modules.rider.domain;
+
+import com.oying.base.BaseEntity;
+import lombok.Getter;
+import lombok.Setter;
+import cn.hutool.core.bean.BeanUtil;
+import io.swagger.annotations.ApiModelProperty;
+import cn.hutool.core.bean.copier.CopyOptions;
+import java.sql.Timestamp;
+import java.math.BigDecimal;
+import java.io.Serializable;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+
+/**
+* @description /
+* @author pxb
+* @date 2025-06-18
+**/
+@Getter
+@Setter
+@TableName("qs_rider_withdrawal_record")
+public class RiderWithdrawalRecord extends BaseEntity implements Serializable {
+
+    @TableId(value = "record_id", type = IdType.AUTO)
+    @ApiModelProperty(value = "体现记录ID")
+    private Long recordId;
+
+    @ApiModelProperty(value = "骑手id")
+    private Long riderId;
+
+    @ApiModelProperty(value = "骑手名字")
+    private String riderName;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String riderPhone;
+
+    @ApiModelProperty(value = "提现前总金额")
+    private BigDecimal amount;
+
+    @ApiModelProperty(value = "本次提现金额")
+    private BigDecimal withdrawalAmount;
+
+    @ApiModelProperty(value = "剩余总金额")
+    private BigDecimal nowAmount;
+
+    @ApiModelProperty(value = "手续费")
+    private BigDecimal fee;
+
+    @ApiModelProperty(value = "实际到账金额")
+    private BigDecimal actualAmount;
+
+    @ApiModelProperty(value = "状态:1-处理中,2-已完成,3-已拒绝")
+    private String status;
+
+    @ApiModelProperty(value = "银行账号")
+    private String bankAccount;
+
+    @ApiModelProperty(value = "开户行")
+    private String bankName;
+
+    @ApiModelProperty(value = "申请时间")
+    private Timestamp applyTime;
+
+    @ApiModelProperty(value = "处理时间")
+    private Timestamp processTime;
+
+    @ApiModelProperty(value = "处理人")
+    private String operator;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+
+    public void copy(RiderWithdrawalRecord source){
+        BeanUtil.copyProperties(source,this, CopyOptions.create().setIgnoreNullValue(true));
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderIncomeDetailQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderIncomeDetailQueryCriteria.java
new file mode 100644
index 0000000..a259522
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderIncomeDetailQueryCriteria.java
@@ -0,0 +1,43 @@
+package com.oying.modules.rider.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@Data
+public class RiderIncomeDetailQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "骑手名字")
+    private String riderName;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String riderPhone;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNum;
+
+    @ApiModelProperty(value = "收入类型:1-配送费,2-奖励,3-补贴")
+    private String incomeType;
+
+    @ApiModelProperty(value = "收入日期(YYYY-MM-dd)方便统计")
+    private String incomeDate;
+
+    @ApiModelProperty(value = "收入月份YYYY-MM")
+    private String incomeMonth;
+
+    @ApiModelProperty(value = "订单状态:1-待取货,2-配送中,3-已完成,4-已取消")
+    private String orderStatus;
+
+    private List<Timestamp> createTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderInfoQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderInfoQueryCriteria.java
new file mode 100644
index 0000000..3680fad
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderInfoQueryCriteria.java
@@ -0,0 +1,42 @@
+package com.oying.modules.rider.domain.dto;
+
+import lombok.Data;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author pxb
+* @date 2025-07-01
+**/
+@Data
+public class RiderInfoQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "骑手id")
+    private Long riderId;
+
+    @ApiModelProperty(value = "数据来源id")
+    private String sourceId;
+
+    @ApiModelProperty(value = "电话")
+    private String phone;
+
+    @ApiModelProperty(value = "乙方姓名")
+    private String cardName;
+
+    @ApiModelProperty(value = "证件号")
+    private String cardNum;
+
+    @ApiModelProperty(value = "数据来源编号")
+    private String sourceNum;
+
+    @ApiModelProperty(value = "状态0不生效,1生效 其他平台的条件是否满足")
+    private String enabled;
+
+    @ApiModelProperty(value = "数据来源平台(LY,等)")
+    private String sourcePlatform;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderOperationQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderOperationQueryCriteria.java
new file mode 100644
index 0000000..036a7bc
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderOperationQueryCriteria.java
@@ -0,0 +1,43 @@
+package com.oying.modules.rider.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@Data
+public class RiderOrderOperationQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "订单ID")
+    private Long orderId;
+
+    @ApiModelProperty(value = "订单编号")
+    private Long orderNum;
+
+    @ApiModelProperty(value = "骑手ID")
+    private Long riderId;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String riderPhone;
+
+    @ApiModelProperty(value = "骑手手姓名")
+    private String riderName;
+
+    @ApiModelProperty(value = "操作类型:1-接单,2-取货,3-送达,0-取消接单")
+    private String operationType;
+
+    @ApiModelProperty(value = "操作原因")
+    private String operationReason;
+    private List<String> operationTime;
+    private List<Timestamp> createTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderRecordQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderRecordQueryCriteria.java
new file mode 100644
index 0000000..4ef50fc
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderRecordQueryCriteria.java
@@ -0,0 +1,53 @@
+package com.oying.modules.rider.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author pxb
+* @date 2025-07-01
+**/
+@Data
+public class RiderOrderRecordQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "订单id")
+    private Long orderId;
+
+    @ApiModelProperty(value = "骑手id")
+    private Long riderId;
+
+    @ApiModelProperty(value = "用户id")
+    private Long userId;
+
+    @ApiModelProperty(value = "订单编号")
+    private String orderNum;
+
+    @ApiModelProperty(value = "商家ID")
+    private Long merchantId;
+
+    @ApiModelProperty(value = "商家名称")
+    private String merchantName;
+
+    @ApiModelProperty(value = "商家地址")
+    private String merchantAddress;
+
+    @ApiModelProperty(value = "收货地址")
+    private String receiverAddress;
+
+    @ApiModelProperty(value = "订单状态: 1-待取货 2-配送中 3-已完成 4-商家取消 5-骑手取消 6-客户取消 7-系统取消")
+    private String orderStatus;
+
+    @ApiModelProperty(value = "是否超时:1-是 0-否")
+    private String isOvertime;
+    private List<Timestamp> acceptTime;
+    private List<Timestamp> finishTime;
+    private List<Timestamp> createTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderReminderQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderReminderQueryCriteria.java
new file mode 100644
index 0000000..967a64b
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderOrderReminderQueryCriteria.java
@@ -0,0 +1,50 @@
+package com.oying.modules.rider.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@Data
+public class RiderOrderReminderQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "骑手id")
+    private Long riderId;
+
+    @ApiModelProperty(value = "骑手名字")
+    private String riderName;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String riderPhone;
+
+    @ApiModelProperty(value = "订单Id")
+    private Long orderId;
+
+    @ApiModelProperty(value = "订单号")
+    private String orderNum;
+
+    @ApiModelProperty(value = "规则id")
+    private Long ruleId;
+
+    @ApiModelProperty(value = "规则内容")
+    private String ruleContent;
+
+    @ApiModelProperty(value = "规则类型。。。")
+    private String ruleType;
+
+    @ApiModelProperty(value = "是否已发送:0-否,1-是")
+    private String isSent;
+    private List<Timestamp> reminderTime;
+    private List<Timestamp> sendTime;
+    private List<Timestamp> createTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderWalletInfoQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderWalletInfoQueryCriteria.java
new file mode 100644
index 0000000..477fdb3
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderWalletInfoQueryCriteria.java
@@ -0,0 +1,29 @@
+package com.oying.modules.rider.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.math.BigDecimal;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@Data
+public class RiderWalletInfoQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "骑手id")
+    private Long riderId;
+
+    @ApiModelProperty(value = "钱包状态(0冻结,1正常)")
+    private String status;
+    private List<BigDecimal> amount;
+    private List<Timestamp> createTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderWithdrawalRecordQueryCriteria.java b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderWithdrawalRecordQueryCriteria.java
new file mode 100644
index 0000000..4691114
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/domain/dto/RiderWithdrawalRecordQueryCriteria.java
@@ -0,0 +1,48 @@
+package com.oying.modules.rider.domain.dto;
+
+import lombok.Data;
+import java.sql.Timestamp;
+import java.util.List;
+import io.swagger.annotations.ApiModelProperty;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@Data
+public class RiderWithdrawalRecordQueryCriteria{
+
+    @ApiModelProperty(value = "页码", example = "1")
+    private Integer page = 1;
+
+    @ApiModelProperty(value = "每页数据量", example = "10")
+    private Integer size = 10;
+
+    @ApiModelProperty(value = "骑手id")
+    private Long riderId;
+
+    @ApiModelProperty(value = "骑手名字")
+    private String riderName;
+
+    @ApiModelProperty(value = "骑手手机号")
+    private String riderPhone;
+
+    @ApiModelProperty(value = "状态:1-处理中,2-已完成,3-已拒绝")
+    private String status;
+
+    @ApiModelProperty(value = "银行账号")
+    private String bankAccount;
+
+    @ApiModelProperty(value = "开户行")
+    private String bankName;
+
+    @ApiModelProperty(value = "处理人")
+    private String operator;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    private List<Timestamp> applyTime;
+    private List<Timestamp> processTime;
+    private List<Timestamp> createTime;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderIncomeDetailMapper.java b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderIncomeDetailMapper.java
new file mode 100644
index 0000000..af215f6
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderIncomeDetailMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.rider.mapper;
+
+import com.oying.modules.rider.domain.RiderIncomeDetail;
+import com.oying.modules.rider.domain.dto.RiderIncomeDetailQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@Mapper
+public interface RiderIncomeDetailMapper extends BaseMapper<RiderIncomeDetail> {
+
+    IPage<RiderIncomeDetail> findAll(@Param("criteria") RiderIncomeDetailQueryCriteria criteria, Page<Object> page);
+
+    List<RiderIncomeDetail> findAll(@Param("criteria") RiderIncomeDetailQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderInfoMapper.java b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderInfoMapper.java
new file mode 100644
index 0000000..b63c73b
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderInfoMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.rider.mapper;
+
+import com.oying.modules.rider.domain.RiderInfo;
+import com.oying.modules.rider.domain.dto.RiderInfoQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author pxb
+* @date 2025-07-01
+**/
+@Mapper
+public interface RiderInfoMapper extends BaseMapper<RiderInfo> {
+
+    IPage<RiderInfo> findAll(@Param("criteria") RiderInfoQueryCriteria criteria, Page<Object> page);
+
+    List<RiderInfo> findAll(@Param("criteria") RiderInfoQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderOperationMapper.java b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderOperationMapper.java
new file mode 100644
index 0000000..2480bd4
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderOperationMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.rider.mapper;
+
+import com.oying.modules.rider.domain.RiderOrderOperation;
+import com.oying.modules.rider.domain.dto.RiderOrderOperationQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@Mapper
+public interface RiderOrderOperationMapper extends BaseMapper<RiderOrderOperation> {
+
+    IPage<RiderOrderOperation> findAll(@Param("criteria") RiderOrderOperationQueryCriteria criteria, Page<Object> page);
+
+    List<RiderOrderOperation> findAll(@Param("criteria") RiderOrderOperationQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderRecordMapper.java b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderRecordMapper.java
new file mode 100644
index 0000000..c24ed5f
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderRecordMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.rider.mapper;
+
+import com.oying.modules.rider.domain.RiderOrderRecord;
+import com.oying.modules.rider.domain.dto.RiderOrderRecordQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author pxb
+* @date 2025-07-01
+**/
+@Mapper
+public interface RiderOrderRecordMapper extends BaseMapper<RiderOrderRecord> {
+
+    IPage<RiderOrderRecord> findAll(@Param("criteria") RiderOrderRecordQueryCriteria criteria, Page<Object> page);
+
+    List<RiderOrderRecord> findAll(@Param("criteria") RiderOrderRecordQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderReminderMapper.java b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderReminderMapper.java
new file mode 100644
index 0000000..94f184e
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderOrderReminderMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.rider.mapper;
+
+import com.oying.modules.rider.domain.RiderOrderReminder;
+import com.oying.modules.rider.domain.dto.RiderOrderReminderQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@Mapper
+public interface RiderOrderReminderMapper extends BaseMapper<RiderOrderReminder> {
+
+    IPage<RiderOrderReminder> findAll(@Param("criteria") RiderOrderReminderQueryCriteria criteria, Page<Object> page);
+
+    List<RiderOrderReminder> findAll(@Param("criteria") RiderOrderReminderQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderWalletInfoMapper.java b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderWalletInfoMapper.java
new file mode 100644
index 0000000..0d7b824
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderWalletInfoMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.rider.mapper;
+
+import com.oying.modules.rider.domain.RiderWalletInfo;
+import com.oying.modules.rider.domain.dto.RiderWalletInfoQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@Mapper
+public interface RiderWalletInfoMapper extends BaseMapper<RiderWalletInfo> {
+
+    IPage<RiderWalletInfo> findAll(@Param("criteria") RiderWalletInfoQueryCriteria criteria, Page<Object> page);
+
+    List<RiderWalletInfo> findAll(@Param("criteria") RiderWalletInfoQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderWithdrawalRecordMapper.java b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderWithdrawalRecordMapper.java
new file mode 100644
index 0000000..509eb80
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/mapper/RiderWithdrawalRecordMapper.java
@@ -0,0 +1,22 @@
+package com.oying.modules.rider.mapper;
+
+import com.oying.modules.rider.domain.RiderWithdrawalRecord;
+import com.oying.modules.rider.domain.dto.RiderWithdrawalRecordQueryCriteria;
+import java.util.List;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Mapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@Mapper
+public interface RiderWithdrawalRecordMapper extends BaseMapper<RiderWithdrawalRecord> {
+
+    IPage<RiderWithdrawalRecord> findAll(@Param("criteria") RiderWithdrawalRecordQueryCriteria criteria, Page<Object> page);
+
+    List<RiderWithdrawalRecord> findAll(@Param("criteria") RiderWithdrawalRecordQueryCriteria criteria);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/rest/RiderIncomeDetailController.java b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderIncomeDetailController.java
new file mode 100644
index 0000000..06079cf
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderIncomeDetailController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.rider.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.rider.domain.dto.RiderIncomeDetailQueryCriteria;
+import com.oying.modules.rider.service.RiderIncomeDetailService;
+import com.oying.modules.rider.domain.RiderIncomeDetail;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "骑手收入明细")
+@RequestMapping("/api/rider/riderIncomeDetail")
+public class RiderIncomeDetailController {
+
+    private final RiderIncomeDetailService riderIncomeDetailService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('riderIncomeDetail:list')")
+    public void exportRiderIncomeDetail(HttpServletResponse response, RiderIncomeDetailQueryCriteria criteria) throws IOException {
+        riderIncomeDetailService.download(riderIncomeDetailService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询骑手收入明细")
+    @PreAuthorize("@el.check('riderIncomeDetail:list')")
+    public ResponseEntity<PageResult<RiderIncomeDetail>> queryRiderIncomeDetail(RiderIncomeDetailQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(riderIncomeDetailService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增骑手收入明细")
+    @ApiOperation("新增骑手收入明细")
+    @PreAuthorize("@el.check('riderIncomeDetail:add')")
+    public ResponseEntity<Object> createRiderIncomeDetail(@Validated @RequestBody RiderIncomeDetail resources){
+        riderIncomeDetailService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改骑手收入明细")
+    @ApiOperation("修改骑手收入明细")
+    @PreAuthorize("@el.check('riderIncomeDetail:edit')")
+    public ResponseEntity<Object> updateRiderIncomeDetail(@Validated @RequestBody RiderIncomeDetail resources){
+        riderIncomeDetailService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除骑手收入明细")
+    @ApiOperation("删除骑手收入明细")
+    @PreAuthorize("@el.check('riderIncomeDetail:del')")
+    public ResponseEntity<Object> deleteRiderIncomeDetail(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        riderIncomeDetailService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/rest/RiderInfoController.java b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderInfoController.java
new file mode 100644
index 0000000..94898a7
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderInfoController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.rider.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.rider.domain.RiderInfo;
+import com.oying.modules.rider.service.RiderInfoService;
+import com.oying.modules.rider.domain.dto.RiderInfoQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author pxb
+* @date 2025-07-01
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "三方骑手数据信息")
+@RequestMapping("/api/rider/riderInfo")
+public class RiderInfoController {
+
+    private final RiderInfoService riderInfoService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('riderInfo:list')")
+    public void exportRiderInfo(HttpServletResponse response, RiderInfoQueryCriteria criteria) throws IOException {
+        riderInfoService.download(riderInfoService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询三方骑手数据信息")
+    @PreAuthorize("@el.check('riderInfo:list')")
+    public ResponseEntity<PageResult<RiderInfo>> queryRiderInfo(RiderInfoQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(riderInfoService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增三方骑手数据信息")
+    @ApiOperation("新增三方骑手数据信息")
+    @PreAuthorize("@el.check('riderInfo:add')")
+    public ResponseEntity<Object> createRiderInfo(@Validated @RequestBody RiderInfo resources){
+        riderInfoService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改三方骑手数据信息")
+    @ApiOperation("修改三方骑手数据信息")
+    @PreAuthorize("@el.check('riderInfo:edit')")
+    public ResponseEntity<Object> updateRiderInfo(@Validated @RequestBody RiderInfo resources){
+        riderInfoService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除三方骑手数据信息")
+    @ApiOperation("删除三方骑手数据信息")
+    @PreAuthorize("@el.check('riderInfo:del')")
+    public ResponseEntity<Object> deleteRiderInfo(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        riderInfoService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderOperationController.java b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderOperationController.java
new file mode 100644
index 0000000..78280e8
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderOperationController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.rider.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.rider.domain.RiderOrderOperation;
+import com.oying.modules.rider.service.RiderOrderOperationService;
+import com.oying.modules.rider.domain.dto.RiderOrderOperationQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "骑手订单操作日志")
+@RequestMapping("/api/rider/riderOrderOperation")
+public class RiderOrderOperationController {
+
+    private final RiderOrderOperationService riderOrderOperationService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('riderOrderOperation:list')")
+    public void exportRiderOrderOperation(HttpServletResponse response, RiderOrderOperationQueryCriteria criteria) throws IOException {
+        riderOrderOperationService.download(riderOrderOperationService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询骑手订单操作日志")
+    @PreAuthorize("@el.check('riderOrderOperation:list')")
+    public ResponseEntity<PageResult<RiderOrderOperation>> queryRiderOrderOperation(RiderOrderOperationQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(riderOrderOperationService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增骑手订单操作日志")
+    @ApiOperation("新增骑手订单操作日志")
+    @PreAuthorize("@el.check('riderOrderOperation:add')")
+    public ResponseEntity<Object> createRiderOrderOperation(@Validated @RequestBody RiderOrderOperation resources){
+        riderOrderOperationService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改骑手订单操作日志")
+    @ApiOperation("修改骑手订单操作日志")
+    @PreAuthorize("@el.check('riderOrderOperation:edit')")
+    public ResponseEntity<Object> updateRiderOrderOperation(@Validated @RequestBody RiderOrderOperation resources){
+        riderOrderOperationService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除骑手订单操作日志")
+    @ApiOperation("删除骑手订单操作日志")
+    @PreAuthorize("@el.check('riderOrderOperation:del')")
+    public ResponseEntity<Object> deleteRiderOrderOperation(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        riderOrderOperationService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderRecordController.java b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderRecordController.java
new file mode 100644
index 0000000..5547a24
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderRecordController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.rider.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.rider.domain.RiderOrderRecord;
+import com.oying.modules.rider.service.RiderOrderRecordService;
+import com.oying.modules.rider.domain.dto.RiderOrderRecordQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author pxb
+* @date 2025-07-01
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "骑手订单信息")
+@RequestMapping("/api/rider/riderOrderRecord")
+public class RiderOrderRecordController {
+
+    private final RiderOrderRecordService riderOrderRecordService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('riderOrderRecord:list')")
+    public void exportRiderOrderRecord(HttpServletResponse response, RiderOrderRecordQueryCriteria criteria) throws IOException {
+        riderOrderRecordService.download(riderOrderRecordService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询骑手订单信息")
+    @PreAuthorize("@el.check('riderOrderRecord:list')")
+    public ResponseEntity<PageResult<RiderOrderRecord>> queryRiderOrderRecord(RiderOrderRecordQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(riderOrderRecordService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增骑手订单信息")
+    @ApiOperation("新增骑手订单信息")
+    @PreAuthorize("@el.check('riderOrderRecord:add')")
+    public ResponseEntity<Object> createRiderOrderRecord(@Validated @RequestBody RiderOrderRecord resources){
+        riderOrderRecordService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("新增骑手订单信息")
+    @ApiOperation("新增骑手订单信息")
+    @PreAuthorize("@el.check('riderOrderRecord:edit')")
+    public ResponseEntity<Object> updateRiderOrderRecord(@Validated @RequestBody RiderOrderRecord resources){
+        riderOrderRecordService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("新增骑手订单信息")
+    @ApiOperation("新增骑手订单信息")
+    @PreAuthorize("@el.check('riderOrderRecord:del')")
+    public ResponseEntity<Object> deleteRiderOrderRecord(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        riderOrderRecordService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderReminderController.java b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderReminderController.java
new file mode 100644
index 0000000..bb14a54
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderOrderReminderController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.rider.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.rider.domain.RiderOrderReminder;
+import com.oying.modules.rider.service.RiderOrderReminderService;
+import com.oying.modules.rider.domain.dto.RiderOrderReminderQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "骑手消息提示记录")
+@RequestMapping("/api/rider/riderOrderReminder")
+public class RiderOrderReminderController {
+
+    private final RiderOrderReminderService riderOrderReminderService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('riderOrderReminder:list')")
+    public void exportRiderOrderReminder(HttpServletResponse response, RiderOrderReminderQueryCriteria criteria) throws IOException {
+        riderOrderReminderService.download(riderOrderReminderService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询骑手消息提示记录")
+    @PreAuthorize("@el.check('riderOrderReminder:list')")
+    public ResponseEntity<PageResult<RiderOrderReminder>> queryRiderOrderReminder(RiderOrderReminderQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(riderOrderReminderService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增骑手消息提示记录")
+    @ApiOperation("新增骑手消息提示记录")
+    @PreAuthorize("@el.check('riderOrderReminder:add')")
+    public ResponseEntity<Object> createRiderOrderReminder(@Validated @RequestBody RiderOrderReminder resources){
+        riderOrderReminderService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改骑手消息提示记录")
+    @ApiOperation("修改骑手消息提示记录")
+    @PreAuthorize("@el.check('riderOrderReminder:edit')")
+    public ResponseEntity<Object> updateRiderOrderReminder(@Validated @RequestBody RiderOrderReminder resources){
+        riderOrderReminderService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除骑手消息提示记录")
+    @ApiOperation("删除骑手消息提示记录")
+    @PreAuthorize("@el.check('riderOrderReminder:del')")
+    public ResponseEntity<Object> deleteRiderOrderReminder(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        riderOrderReminderService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/rest/RiderWalletInfoController.java b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderWalletInfoController.java
new file mode 100644
index 0000000..f5a31f9
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderWalletInfoController.java
@@ -0,0 +1,74 @@
+package com.oying.modules.rider.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.rider.domain.RiderWalletInfo;
+import com.oying.modules.rider.service.RiderWalletInfoService;
+import com.oying.modules.rider.domain.dto.RiderWalletInfoQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "骑手钱包详情")
+@RequestMapping("/api/rider/riderWalletInfo")
+public class RiderWalletInfoController {
+
+    private final RiderWalletInfoService riderWalletInfoService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('riderWalletInfo:list')")
+    public void exportRiderWalletInfo(HttpServletResponse response, RiderWalletInfoQueryCriteria criteria) throws IOException {
+        riderWalletInfoService.download(riderWalletInfoService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询骑手钱包详情")
+    @PreAuthorize("@el.check('riderWalletInfo:list')")
+    public ResponseEntity<PageResult<RiderWalletInfo>> queryRiderWalletInfo(RiderWalletInfoQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(riderWalletInfoService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增骑手钱包详情")
+    @ApiOperation("新增骑手钱包详情")
+    @PreAuthorize("@el.check('riderWalletInfo:add')")
+    public ResponseEntity<Object> createRiderWalletInfo(@Validated @RequestBody RiderWalletInfo resources){
+        riderWalletInfoService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改骑手钱包详情")
+    @ApiOperation("修改骑手钱包详情")
+    @PreAuthorize("@el.check('riderWalletInfo:edit')")
+    public ResponseEntity<Object> updateRiderWalletInfo(@Validated @RequestBody RiderWalletInfo resources){
+        riderWalletInfoService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除骑手钱包详情")
+    @ApiOperation("删除骑手钱包详情")
+    @PreAuthorize("@el.check('riderWalletInfo:del')")
+    public ResponseEntity<Object> deleteRiderWalletInfo(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        riderWalletInfoService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/rest/RiderWithdrawalRecordController.java b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderWithdrawalRecordController.java
new file mode 100644
index 0000000..849d729
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/rest/RiderWithdrawalRecordController.java
@@ -0,0 +1,73 @@
+package com.oying.modules.rider.rest;
+
+import com.oying.annotation.Log;
+import com.oying.modules.rider.domain.RiderWithdrawalRecord;
+import com.oying.modules.rider.service.RiderWithdrawalRecordService;
+import com.oying.modules.rider.domain.dto.RiderWithdrawalRecordQueryCriteria;
+import lombok.RequiredArgsConstructor;
+import java.util.List;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import io.swagger.annotations.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.utils.PageResult;
+
+/**
+* @author pxb
+* @date 2025-06-18
+**/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "骑手提现记录")
+@RequestMapping("/api/rider/riderWithdrawalRecord")
+public class RiderWithdrawalRecordController {
+
+    private final RiderWithdrawalRecordService riderWithdrawalRecordService;
+
+    @ApiOperation("导出数据")
+    @GetMapping(value = "/download")
+    @PreAuthorize("@el.check('riderWithdrawalRecord:list')")
+    public void exportRiderWithdrawalRecord(HttpServletResponse response, RiderWithdrawalRecordQueryCriteria criteria) throws IOException {
+        riderWithdrawalRecordService.download(riderWithdrawalRecordService.queryAll(criteria), response);
+    }
+
+    @GetMapping
+    @ApiOperation("查询骑手提现记录")
+    @PreAuthorize("@el.check('riderWithdrawalRecord:list')")
+    public ResponseEntity<PageResult<RiderWithdrawalRecord>> queryRiderWithdrawalRecord(RiderWithdrawalRecordQueryCriteria criteria){
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        return new ResponseEntity<>(riderWithdrawalRecordService.queryAll(criteria,page),HttpStatus.OK);
+    }
+
+    @PostMapping
+    @Log("新增骑手提现记录")
+    @ApiOperation("新增骑手提现记录")
+    @PreAuthorize("@el.check('riderWithdrawalRecord:add')")
+    public ResponseEntity<Object> createRiderWithdrawalRecord(@Validated @RequestBody RiderWithdrawalRecord resources){
+        riderWithdrawalRecordService.create(resources);
+        return new ResponseEntity<>(HttpStatus.CREATED);
+    }
+
+    @PutMapping
+    @Log("修改骑手提现记录")
+    @ApiOperation("修改骑手提现记录")
+    @PreAuthorize("@el.check('riderWithdrawalRecord:edit')")
+    public ResponseEntity<Object> updateRiderWithdrawalRecord(@Validated @RequestBody RiderWithdrawalRecord resources){
+        riderWithdrawalRecordService.update(resources);
+        return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+    }
+
+    @DeleteMapping
+    @Log("删除骑手提现记录")
+    @ApiOperation("删除骑手提现记录")
+    @PreAuthorize("@el.check('riderWithdrawalRecord:del')")
+    public ResponseEntity<Object> deleteRiderWithdrawalRecord(@ApiParam(value = "传ID数组[]") @RequestBody List<Long> ids) {
+        riderWithdrawalRecordService.deleteAll(ids);
+        return new ResponseEntity<>(HttpStatus.OK);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/rest/WxRiderController.java b/oying-system/src/main/java/com/oying/modules/rider/rest/WxRiderController.java
new file mode 100644
index 0000000..5d81a0c
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/rest/WxRiderController.java
@@ -0,0 +1,91 @@
+package com.oying.modules.rider.rest;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.oying.modules.rider.domain.*;
+import com.oying.modules.rider.domain.dto.RiderIncomeDetailQueryCriteria;
+import com.oying.modules.rider.domain.dto.RiderOrderRecordQueryCriteria;
+import com.oying.modules.rider.domain.dto.RiderWithdrawalRecordQueryCriteria;
+import com.oying.modules.rider.service.*;
+import com.oying.utils.PageResult;
+import com.oying.utils.R;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.RequiredArgsConstructor;
+import org.springframework.http.ResponseEntity;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.*;
+
+
+/**
+ * @author pxb
+ * @date 2025-06-18
+ **/
+@RestController
+@RequiredArgsConstructor
+@Api(tags = "骑手微信小程序接口")
+@RequestMapping("/api/wx/rider")
+public class WxRiderController {
+
+    private final RiderIncomeDetailService riderIncomeDetailService;
+
+    private final RiderWalletInfoService riderWalletInfoService;
+
+    private final RiderWithdrawalRecordService riderWithdrawalRecordService;
+
+    private final RiderInfoService riderInfoService;
+
+    private final RiderOrderRecordService riderOrderRecordService;
+
+
+    @GetMapping("getRiderSourceInfo/{riderId}")
+    @ApiOperation("查询第三方数据骑手信息")
+    @PreAuthorize("@el.check('riderInfo:list')")
+    public ResponseEntity<?> getRiderSourceInfo(@PathVariable String riderId) {
+        RiderInfo riderInfo = riderInfoService.getRiderSourceInfo(riderId);
+        return ResponseEntity.ok(R.success(riderInfo));
+    }
+
+    @GetMapping("syncRiderSourceInfo/{sourcePlatform}")
+    @ApiOperation("同步查询第三方骑手信息 LY")
+    @PreAuthorize("@el.check('riderInfo:edit')")
+    public ResponseEntity<?> syncRiderSourceInfo(@PathVariable String sourcePlatform) {
+        riderInfoService.syncRiderSourceInfo(sourcePlatform);
+        return ResponseEntity.ok(R.success());
+    }
+
+    @GetMapping("getRiderWalletInfo/{riderId}")
+    @ApiOperation("查询骑手钱包信息")
+    @PreAuthorize("@el.check('riderWalletInfo:list')")
+    public ResponseEntity<?> getRiderWalletInfo(@PathVariable String riderId) {
+        RiderWalletInfo riderWalletInfo = riderWalletInfoService.getRiderWalletInfo(riderId);
+        return ResponseEntity.ok(R.success(riderWalletInfo));
+    }
+
+    @GetMapping("getRiderIncomeDetail")
+    @ApiOperation("查询骑手订单收入明细分页")
+    @PreAuthorize("@el.check('riderIncomeDetail:list')")
+    public ResponseEntity<?> getRiderIncomeDetail(RiderIncomeDetailQueryCriteria criteria) {
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        PageResult<RiderIncomeDetail> riderIncomeDetails = riderIncomeDetailService.queryAll(criteria, page);
+        return ResponseEntity.ok(R.success(riderIncomeDetails));
+    }
+
+    @GetMapping("getRiderWithdrawalRecord")
+    @ApiOperation("查询骑手提现记录分页")
+    @PreAuthorize("@el.check('riderWithdrawalRecord:list')")
+    public ResponseEntity<?> getRiderWithdrawalRecord(RiderWithdrawalRecordQueryCriteria criteria) {
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        PageResult<RiderWithdrawalRecord> riderIncomeDetails = riderWithdrawalRecordService.queryAll(criteria, page);
+        return ResponseEntity.ok(R.success(riderIncomeDetails));
+    }
+
+    @GetMapping("getRiderOrderRecord")
+    @ApiOperation("查询骑手订单记录分页")
+    @PreAuthorize("@el.check('riderOrderRecord:list')")
+    public ResponseEntity<?> getRiderOrderRecord(RiderOrderRecordQueryCriteria criteria) {
+        Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
+        PageResult<RiderOrderRecord> riderOrderRecordPageResult = riderOrderRecordService.queryAll(criteria, page);
+        return ResponseEntity.ok(R.success(riderOrderRecordPageResult));
+    }
+
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/RiderIncomeDetailService.java b/oying-system/src/main/java/com/oying/modules/rider/service/RiderIncomeDetailService.java
new file mode 100644
index 0000000..9bf3e10
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/RiderIncomeDetailService.java
@@ -0,0 +1,62 @@
+package com.oying.modules.rider.service;
+
+import com.oying.modules.rider.domain.dto.RiderIncomeDetailQueryCriteria;
+import com.oying.modules.rider.domain.RiderIncomeDetail;
+
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author pxb
+* @date 2025-06-18
+**/
+public interface RiderIncomeDetailService extends IService<RiderIncomeDetail> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<RiderIncomeDetail> queryAll(RiderIncomeDetailQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<RiderIncomeDetailDto>
+    */
+    List<RiderIncomeDetail> queryAll(RiderIncomeDetailQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(RiderIncomeDetail resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(RiderIncomeDetail resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<RiderIncomeDetail> all, HttpServletResponse response) throws IOException;
+
+
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/RiderInfoService.java b/oying-system/src/main/java/com/oying/modules/rider/service/RiderInfoService.java
new file mode 100644
index 0000000..e4d1e96
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/RiderInfoService.java
@@ -0,0 +1,72 @@
+package com.oying.modules.rider.service;
+
+import com.oying.modules.rider.domain.RiderInfo;
+import com.oying.modules.rider.domain.dto.RiderInfoQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author pxb
+* @date 2025-07-01
+**/
+public interface RiderInfoService extends IService<RiderInfo> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<RiderInfo> queryAll(RiderInfoQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<RiderInfoDto>
+    */
+    List<RiderInfo> queryAll(RiderInfoQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(RiderInfo resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(RiderInfo resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<RiderInfo> all, HttpServletResponse response) throws IOException;
+
+    /**
+     * 同步其他平台的骑手信息
+     * @param sourcePlatform /
+     */
+    void syncRiderSourceInfo(String sourcePlatform);
+
+    /**
+     * 查询其他平台的骑手信息
+     * @return RiderInfo
+     * @param riderId /
+     */
+    RiderInfo getRiderSourceInfo(String riderId);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderOperationService.java b/oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderOperationService.java
new file mode 100644
index 0000000..b3e9c27
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderOperationService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.rider.service;
+
+import com.oying.modules.rider.domain.RiderOrderOperation;
+import com.oying.modules.rider.domain.dto.RiderOrderOperationQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author pxb
+* @date 2025-06-18
+**/
+public interface RiderOrderOperationService extends IService<RiderOrderOperation> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<RiderOrderOperation> queryAll(RiderOrderOperationQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<RiderOrderOperationDto>
+    */
+    List<RiderOrderOperation> queryAll(RiderOrderOperationQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(RiderOrderOperation resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(RiderOrderOperation resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<RiderOrderOperation> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderRecordService.java b/oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderRecordService.java
new file mode 100644
index 0000000..bb45f54
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderRecordService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.rider.service;
+
+import com.oying.modules.rider.domain.RiderOrderRecord;
+import com.oying.modules.rider.domain.dto.RiderOrderRecordQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author pxb
+* @date 2025-07-01
+**/
+public interface RiderOrderRecordService extends IService<RiderOrderRecord> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<RiderOrderRecord> queryAll(RiderOrderRecordQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<RiderOrderRecordDto>
+    */
+    List<RiderOrderRecord> queryAll(RiderOrderRecordQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(RiderOrderRecord resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(RiderOrderRecord resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<RiderOrderRecord> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderReminderService.java b/oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderReminderService.java
new file mode 100644
index 0000000..039167a
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/RiderOrderReminderService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.rider.service;
+
+import com.oying.modules.rider.domain.RiderOrderReminder;
+import com.oying.modules.rider.domain.dto.RiderOrderReminderQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author pxb
+* @date 2025-06-18
+**/
+public interface RiderOrderReminderService extends IService<RiderOrderReminder> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<RiderOrderReminder> queryAll(RiderOrderReminderQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<RiderOrderReminderDto>
+    */
+    List<RiderOrderReminder> queryAll(RiderOrderReminderQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(RiderOrderReminder resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(RiderOrderReminder resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<RiderOrderReminder> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/RiderWalletInfoService.java b/oying-system/src/main/java/com/oying/modules/rider/service/RiderWalletInfoService.java
new file mode 100644
index 0000000..38e7248
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/RiderWalletInfoService.java
@@ -0,0 +1,66 @@
+package com.oying.modules.rider.service;
+
+import com.oying.modules.rider.domain.RiderWalletInfo;
+import com.oying.modules.rider.domain.dto.RiderWalletInfoQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author pxb
+* @date 2025-06-18
+**/
+public interface RiderWalletInfoService extends IService<RiderWalletInfo> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<RiderWalletInfo> queryAll(RiderWalletInfoQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<RiderWalletInfoDto>
+    */
+    List<RiderWalletInfo> queryAll(RiderWalletInfoQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(RiderWalletInfo resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(RiderWalletInfo resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<RiderWalletInfo> all, HttpServletResponse response) throws IOException;
+
+    /**
+     * 根据骑手ID查询钱包信息
+     * @param riderId 条件
+     * @return RiderWalletInfo
+     */
+    RiderWalletInfo getRiderWalletInfo(String riderId);
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/RiderWithdrawalRecordService.java b/oying-system/src/main/java/com/oying/modules/rider/service/RiderWithdrawalRecordService.java
new file mode 100644
index 0000000..dd7595c
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/RiderWithdrawalRecordService.java
@@ -0,0 +1,59 @@
+package com.oying.modules.rider.service;
+
+import com.oying.modules.rider.domain.RiderWithdrawalRecord;
+import com.oying.modules.rider.domain.dto.RiderWithdrawalRecordQueryCriteria;
+import java.util.List;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务接口
+* @author pxb
+* @date 2025-06-18
+**/
+public interface RiderWithdrawalRecordService extends IService<RiderWithdrawalRecord> {
+
+    /**
+    * 查询数据分页
+    * @param criteria 条件
+    * @param page 分页参数
+    * @return PageResult
+    */
+    PageResult<RiderWithdrawalRecord> queryAll(RiderWithdrawalRecordQueryCriteria criteria, Page<Object> page);
+
+    /**
+    * 查询所有数据不分页
+    * @param criteria 条件参数
+    * @return List<RiderWithdrawalRecordDto>
+    */
+    List<RiderWithdrawalRecord> queryAll(RiderWithdrawalRecordQueryCriteria criteria);
+
+    /**
+    * 创建
+    * @param resources /
+    */
+    void create(RiderWithdrawalRecord resources);
+
+    /**
+    * 编辑
+    * @param resources /
+    */
+    void update(RiderWithdrawalRecord resources);
+
+    /**
+    * 多选删除
+    * @param ids /
+    */
+    void deleteAll(List<Long> ids);
+
+    /**
+    * 导出数据
+    * @param all 待导出的数据
+    * @param response /
+    * @throws IOException /
+    */
+    void download(List<RiderWithdrawalRecord> all, HttpServletResponse response) throws IOException;
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderIncomeDetailServiceImpl.java b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderIncomeDetailServiceImpl.java
new file mode 100644
index 0000000..5da95c2
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderIncomeDetailServiceImpl.java
@@ -0,0 +1,89 @@
+package com.oying.modules.rider.service.impl;
+
+import com.oying.modules.rider.domain.RiderIncomeDetail;
+import com.oying.modules.rider.domain.dto.RiderIncomeDetailQueryCriteria;
+import com.oying.modules.rider.mapper.RiderIncomeDetailMapper;
+import com.oying.modules.rider.service.RiderIncomeDetailService;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+
+import com.oying.utils.PageResult;
+
+/**
+ * @author pxb
+ * @description 服务实现
+ * @date 2025-06-18
+ **/
+@Service
+@RequiredArgsConstructor
+public class RiderIncomeDetailServiceImpl extends ServiceImpl<RiderIncomeDetailMapper, RiderIncomeDetail> implements RiderIncomeDetailService {
+
+    private final RiderIncomeDetailMapper riderIncomeDetailMapper;
+
+    @Override
+    public PageResult<RiderIncomeDetail> queryAll(RiderIncomeDetailQueryCriteria criteria, Page<Object> page) {
+        return PageUtil.toPage(riderIncomeDetailMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<RiderIncomeDetail> queryAll(RiderIncomeDetailQueryCriteria criteria) {
+        return riderIncomeDetailMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(RiderIncomeDetail resources) {
+        riderIncomeDetailMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(RiderIncomeDetail resources) {
+        RiderIncomeDetail riderIncomeDetail = getById(resources.getIncomeId());
+        riderIncomeDetail.copy(resources);
+        riderIncomeDetailMapper.updateById(riderIncomeDetail);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        riderIncomeDetailMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<RiderIncomeDetail> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (RiderIncomeDetail riderIncomeDetail : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("骑手id", riderIncomeDetail.getRiderId());
+            map.put("骑手名字", riderIncomeDetail.getRiderName());
+            map.put("骑手手机号", riderIncomeDetail.getRiderPhone());
+            map.put("订单id", riderIncomeDetail.getOrderId());
+            map.put("订单号", riderIncomeDetail.getOrderNum());
+            map.put("收入金额", riderIncomeDetail.getIncomeAmount());
+            map.put("收入类型:1-配送费,2-奖励,3-补贴", riderIncomeDetail.getIncomeType());
+            map.put("收入日期(YYYY-MM-dd)方便统计", riderIncomeDetail.getIncomeDate());
+            map.put("收入月份YYYY-MM", riderIncomeDetail.getIncomeMonth());
+            map.put("订单状态:1-待取货,2-配送中,3-已完成,4-已取消", riderIncomeDetail.getOrderStatus());
+            map.put("创建人", riderIncomeDetail.getCreateBy());
+            map.put("创建时间", riderIncomeDetail.getCreateTime());
+            map.put("修改者", riderIncomeDetail.getUpdateBy());
+            map.put("修改时间", riderIncomeDetail.getUpdateTime());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderInfoServiceImpl.java b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderInfoServiceImpl.java
new file mode 100644
index 0000000..74eedd1
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderInfoServiceImpl.java
@@ -0,0 +1,151 @@
+package com.oying.modules.rider.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.oying.exception.BadRequestException;
+import com.oying.modules.rider.domain.RiderInfo;
+import com.oying.modules.rider.domain.RiderSourceInfo;
+import com.oying.modules.rider.domain.RiderSourceInfoHttp;
+import com.oying.modules.rider.utils.Constants;
+import com.oying.modules.rider.utils.RiderSourceHttpUtils;
+import com.oying.utils.FileUtil;
+import com.oying.utils.SecurityUtils;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.rider.service.RiderInfoService;
+import com.oying.modules.rider.domain.dto.RiderInfoQueryCriteria;
+import com.oying.modules.rider.mapper.RiderInfoMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+
+import java.util.*;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+
+import com.oying.utils.PageResult;
+
+/**
+ * @author pxb
+ * @description 服务实现
+ * @date 2025-07-01
+ **/
+@Service
+@RequiredArgsConstructor
+public class RiderInfoServiceImpl extends ServiceImpl<RiderInfoMapper, RiderInfo> implements RiderInfoService {
+
+    private final RiderInfoMapper riderInfoMapper;
+
+    @Override
+    public PageResult<RiderInfo> queryAll(RiderInfoQueryCriteria criteria, Page<Object> page) {
+        return PageUtil.toPage(riderInfoMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<RiderInfo> queryAll(RiderInfoQueryCriteria criteria) {
+        return riderInfoMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(RiderInfo resources) {
+        riderInfoMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(RiderInfo resources) {
+        RiderInfo riderInfo = getById(resources.getInfoId());
+        riderInfo.copy(resources);
+        riderInfoMapper.updateById(riderInfo);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        riderInfoMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<RiderInfo> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (RiderInfo riderInfo : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("骑手id", riderInfo.getRiderId());
+            map.put("数据来源id", riderInfo.getSourceId());
+            map.put("电话", riderInfo.getPhone());
+            map.put("乙方姓名", riderInfo.getCardName());
+            map.put("证件号", riderInfo.getCardNum());
+            map.put("数据来源编号", riderInfo.getSourceNum());
+            map.put("状态0不生效,1生效 其他平台的条件是否满足", riderInfo.getEnabled());
+            map.put("数据来源平台(LY,等)", riderInfo.getSourcePlatform());
+            map.put("地址", riderInfo.getAddress());
+            map.put("创建者", riderInfo.getCreateBy());
+            map.put("更新者", riderInfo.getUpdateBy());
+            map.put("创建日期", riderInfo.getCreateTime());
+            map.put("更新时间", riderInfo.getUpdateTime());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+
+    @Override
+    public void syncRiderSourceInfo(String sourcePlatform) {
+        Long riderId = SecurityUtils.getCurrentUserId();
+        // 查询其他平台的数据
+        RiderSourceInfoHttp riderSourceInfoHttp = RiderSourceHttpUtils.getRiderSourceInfoHttp(SecurityUtils.getCurrentUsername(), sourcePlatform);
+        // 请求成功
+        if (riderSourceInfoHttp.getCode().equals(Constants.HTTP_CODE_SUCCESS)) {
+            // 获取骑手信息等于空
+            if (null != riderSourceInfoHttp.getData()) {
+                RiderSourceInfo infoHttpData = riderSourceInfoHttp.getData();
+                // 检查是否存在该平台的骑手信息
+                QueryWrapper<RiderInfo> riderInfoQueryWrapper = new QueryWrapper<>();
+                riderInfoQueryWrapper.eq(RiderInfo.COL_RIDER_ID, riderId);
+                RiderInfo riderInfo = riderInfoMapper.selectOne(riderInfoQueryWrapper);
+                // 如果存在该平台的骑手信息
+                if (null == riderInfo) {
+                    // 如果不存在,则创建新的骑手三方信息
+                    RiderInfo newRiderInfo = new RiderInfo();
+                    BeanUtil.copyProperties(infoHttpData, newRiderInfo);
+                    newRiderInfo.setRiderId(riderId);
+                    newRiderInfo.setSourcePlatform(sourcePlatform);
+                    create(newRiderInfo);
+                } else {
+                    // 是否相同平台
+                    if (sourcePlatform.equals(riderInfo.getSourcePlatform())) {
+                        // 如果存在,接单状态不同 更新接单状态
+                        if (!infoHttpData.getEnabled().equals(riderInfo.getEnabled())) {
+                            riderInfo.setEnabled(infoHttpData.getEnabled());
+                            // 更新骑手信息
+                            updateById(riderInfo);
+                        }
+                    } else {
+                        // 骑手平台信息变更
+                        RiderInfo newRiderInfo = new RiderInfo();
+                        BeanUtil.copyProperties(infoHttpData, newRiderInfo);
+                        newRiderInfo.setRiderId(riderId);
+                        newRiderInfo.setSourcePlatform(sourcePlatform);
+                        updateById(newRiderInfo);
+                        // 添加变更记录...
+                    }
+                }
+            } else {
+                // 获取骑手三方数据为空,抛出异常
+                throw new BadRequestException("获取骑手三方数据为空");
+            }
+        } else {
+            // 获取骑手三方数据失败,抛出异常
+            throw new BadRequestException("获取骑手三方数据失败");
+        }
+    }
+
+    @Override
+    public RiderInfo getRiderSourceInfo(String riderId) {
+        QueryWrapper<RiderInfo> riderInfoQueryWrapper = new QueryWrapper<>();
+        riderInfoQueryWrapper.eq(RiderInfo.COL_RIDER_ID, riderId);
+        return riderInfoMapper.selectOne(riderInfoQueryWrapper);
+    }
+
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderOperationServiceImpl.java b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderOperationServiceImpl.java
new file mode 100644
index 0000000..114a925
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderOperationServiceImpl.java
@@ -0,0 +1,84 @@
+package com.oying.modules.rider.service.impl;
+
+import com.oying.modules.rider.domain.RiderOrderOperation;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.rider.service.RiderOrderOperationService;
+import com.oying.modules.rider.domain.dto.RiderOrderOperationQueryCriteria;
+import com.oying.modules.rider.mapper.RiderOrderOperationMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author pxb
+* @date 2025-06-18
+**/
+@Service
+@RequiredArgsConstructor
+public class RiderOrderOperationServiceImpl extends ServiceImpl<RiderOrderOperationMapper, RiderOrderOperation> implements RiderOrderOperationService {
+
+    private final RiderOrderOperationMapper riderOrderOperationMapper;
+
+    @Override
+    public PageResult<RiderOrderOperation> queryAll(RiderOrderOperationQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(riderOrderOperationMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<RiderOrderOperation> queryAll(RiderOrderOperationQueryCriteria criteria){
+        return riderOrderOperationMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(RiderOrderOperation resources) {
+        riderOrderOperationMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(RiderOrderOperation resources) {
+        RiderOrderOperation riderOrderOperation = getById(resources.getOperationId());
+        riderOrderOperation.copy(resources);
+        riderOrderOperationMapper.updateById(riderOrderOperation);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        riderOrderOperationMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<RiderOrderOperation> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (RiderOrderOperation riderOrderOperation : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("订单ID", riderOrderOperation.getOrderId());
+            map.put("订单编号", riderOrderOperation.getOrderNum());
+            map.put("骑手ID", riderOrderOperation.getRiderId());
+            map.put("骑手手机号", riderOrderOperation.getRiderPhone());
+            map.put("骑手手姓名", riderOrderOperation.getRiderName());
+            map.put("操作类型:1-接单,2-取货,3-送达,0-取消接单", riderOrderOperation.getOperationType());
+            map.put("操作原因", riderOrderOperation.getOperationReason());
+            map.put("操作时间", riderOrderOperation.getOperationTime());
+            map.put("创建人", riderOrderOperation.getCreateBy());
+            map.put("创建时间", riderOrderOperation.getCreateTime());
+            map.put("修改者", riderOrderOperation.getUpdateBy());
+            map.put("修改时间", riderOrderOperation.getUpdateTime());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderRecordServiceImpl.java b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderRecordServiceImpl.java
new file mode 100644
index 0000000..d1b9785
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderRecordServiceImpl.java
@@ -0,0 +1,90 @@
+package com.oying.modules.rider.service.impl;
+
+import com.oying.modules.rider.domain.RiderOrderRecord;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.rider.service.RiderOrderRecordService;
+import com.oying.modules.rider.domain.dto.RiderOrderRecordQueryCriteria;
+import com.oying.modules.rider.mapper.RiderOrderRecordMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author pxb
+* @date 2025-07-01
+**/
+@Service
+@RequiredArgsConstructor
+public class RiderOrderRecordServiceImpl extends ServiceImpl<RiderOrderRecordMapper, RiderOrderRecord> implements RiderOrderRecordService {
+
+    private final RiderOrderRecordMapper riderOrderRecordMapper;
+
+    @Override
+    public PageResult<RiderOrderRecord> queryAll(RiderOrderRecordQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(riderOrderRecordMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<RiderOrderRecord> queryAll(RiderOrderRecordQueryCriteria criteria){
+        return riderOrderRecordMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(RiderOrderRecord resources) {
+        riderOrderRecordMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(RiderOrderRecord resources) {
+        RiderOrderRecord riderOrderRecord = getById(resources.getRecordId());
+        riderOrderRecord.copy(resources);
+        riderOrderRecordMapper.updateById(riderOrderRecord);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        riderOrderRecordMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<RiderOrderRecord> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (RiderOrderRecord riderOrderRecord : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("订单id", riderOrderRecord.getOrderId());
+            map.put("订单编号", riderOrderRecord.getOrderNum());
+            map.put("商家ID", riderOrderRecord.getMerchantId());
+            map.put("商家名称", riderOrderRecord.getMerchantName());
+            map.put("商家地址", riderOrderRecord.getMerchantAddress());
+            map.put("收货地址", riderOrderRecord.getReceiverAddress());
+            map.put("订单状态: 1-待取货 2-配送中 3-已完成 4-商家取消 5-骑手取消 6-客户取消 7-系统取消", riderOrderRecord.getOrderStatus());
+            map.put("接单时间", riderOrderRecord.getAcceptTime());
+            map.put("接单编号", riderOrderRecord.getAcceptNum());
+            map.put("完成/取消时间", riderOrderRecord.getFinishTime());
+            map.put("配送时长(秒)", riderOrderRecord.getDeliveryDuration());
+            map.put("是否超时:1-是 0-否", riderOrderRecord.getIsOvertime());
+            map.put("订单来源: 1-平台派单 2-骑手抢单 3-商家直派 4-其他", riderOrderRecord.getOrderSource());
+            map.put("订单收入配送费", riderOrderRecord.getOrderIncome());
+            map.put("创建人", riderOrderRecord.getCreateBy());
+            map.put("创建时间", riderOrderRecord.getCreateTime());
+            map.put("修改人", riderOrderRecord.getUpdateBy());
+            map.put("修改时间", riderOrderRecord.getUpdateTime());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderReminderServiceImpl.java b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderReminderServiceImpl.java
new file mode 100644
index 0000000..0cf6510
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderOrderReminderServiceImpl.java
@@ -0,0 +1,87 @@
+package com.oying.modules.rider.service.impl;
+
+import com.oying.modules.rider.domain.RiderOrderReminder;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.rider.service.RiderOrderReminderService;
+import com.oying.modules.rider.domain.dto.RiderOrderReminderQueryCriteria;
+import com.oying.modules.rider.mapper.RiderOrderReminderMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author pxb
+* @date 2025-06-18
+**/
+@Service
+@RequiredArgsConstructor
+public class RiderOrderReminderServiceImpl extends ServiceImpl<RiderOrderReminderMapper, RiderOrderReminder> implements RiderOrderReminderService {
+
+    private final RiderOrderReminderMapper riderOrderReminderMapper;
+
+    @Override
+    public PageResult<RiderOrderReminder> queryAll(RiderOrderReminderQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(riderOrderReminderMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<RiderOrderReminder> queryAll(RiderOrderReminderQueryCriteria criteria){
+        return riderOrderReminderMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(RiderOrderReminder resources) {
+        riderOrderReminderMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(RiderOrderReminder resources) {
+        RiderOrderReminder riderOrderReminder = getById(resources.getReminderId());
+        riderOrderReminder.copy(resources);
+        riderOrderReminderMapper.updateById(riderOrderReminder);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        riderOrderReminderMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<RiderOrderReminder> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (RiderOrderReminder riderOrderReminder : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("骑手id", riderOrderReminder.getRiderId());
+            map.put("骑手名字", riderOrderReminder.getRiderName());
+            map.put("骑手手机号", riderOrderReminder.getRiderPhone());
+            map.put("订单Id", riderOrderReminder.getOrderId());
+            map.put("订单号", riderOrderReminder.getOrderNum());
+            map.put("规则id", riderOrderReminder.getRuleId());
+            map.put("规则内容", riderOrderReminder.getRuleContent());
+            map.put("规则类型。。。", riderOrderReminder.getRuleType());
+            map.put("提醒时间", riderOrderReminder.getReminderTime());
+            map.put("是否已发送:0-否,1-是", riderOrderReminder.getIsSent());
+            map.put("发送时间", riderOrderReminder.getSendTime());
+            map.put("创建人", riderOrderReminder.getCreateBy());
+            map.put("创建时间", riderOrderReminder.getCreateTime());
+            map.put("修改者", riderOrderReminder.getUpdateBy());
+            map.put("修改时间", riderOrderReminder.getUpdateTime());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderWalletInfoServiceImpl.java b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderWalletInfoServiceImpl.java
new file mode 100644
index 0000000..e651a2d
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderWalletInfoServiceImpl.java
@@ -0,0 +1,97 @@
+package com.oying.modules.rider.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.oying.modules.rider.domain.RiderWalletInfo;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.rider.service.RiderWalletInfoService;
+import com.oying.modules.rider.domain.dto.RiderWalletInfoQueryCriteria;
+import com.oying.modules.rider.mapper.RiderWalletInfoMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+
+import com.oying.utils.PageResult;
+
+/**
+ * @author pxb
+ * @description 服务实现
+ * @date 2025-06-18
+ **/
+@Service
+@RequiredArgsConstructor
+public class RiderWalletInfoServiceImpl extends ServiceImpl<RiderWalletInfoMapper, RiderWalletInfo> implements RiderWalletInfoService {
+
+    private final RiderWalletInfoMapper riderWalletInfoMapper;
+
+    @Override
+    public PageResult<RiderWalletInfo> queryAll(RiderWalletInfoQueryCriteria criteria, Page<Object> page) {
+        return PageUtil.toPage(riderWalletInfoMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<RiderWalletInfo> queryAll(RiderWalletInfoQueryCriteria criteria) {
+        return riderWalletInfoMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(RiderWalletInfo resources) {
+        riderWalletInfoMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(RiderWalletInfo resources) {
+        RiderWalletInfo riderWalletInfo = getById(resources.getWalletId());
+        riderWalletInfo.copy(resources);
+        riderWalletInfoMapper.updateById(riderWalletInfo);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        riderWalletInfoMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<RiderWalletInfo> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (RiderWalletInfo riderWalletInfo : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("骑手id", riderWalletInfo.getRiderId());
+            map.put("总金额", riderWalletInfo.getAmount());
+            map.put("可用余额", riderWalletInfo.getAvailableBalance());
+            map.put("购电总金额", riderWalletInfo.getPurchasingElectricityAmount());
+            map.put("累计提现", riderWalletInfo.getWithdrawTotal());
+            map.put("累计收入", riderWalletInfo.getIncomeTotal());
+            map.put("冻结金额", riderWalletInfo.getFrozenAmount());
+            map.put("完成总单数", riderWalletInfo.getRunTotal());
+            map.put("提现总次数", riderWalletInfo.getCashWithdrawalTotal());
+            map.put("购电总次数", riderWalletInfo.getPurchasingElectricityTotal());
+            map.put("钱包状态(0冻结,1正常)", riderWalletInfo.getStatus());
+            map.put("创建人", riderWalletInfo.getCreateBy());
+            map.put("创建时间", riderWalletInfo.getCreateTime());
+            map.put("修改人", riderWalletInfo.getUpdateBy());
+            map.put("修改时间", riderWalletInfo.getUpdateTime());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+
+    @Override
+    public RiderWalletInfo getRiderWalletInfo(String riderId) {
+        QueryWrapper<RiderWalletInfo> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(RiderWalletInfo.COL_RIDER_ID, riderId);
+        return riderWalletInfoMapper.selectOne(queryWrapper);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderWithdrawalRecordServiceImpl.java b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderWithdrawalRecordServiceImpl.java
new file mode 100644
index 0000000..5c3ff2a
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/service/impl/RiderWithdrawalRecordServiceImpl.java
@@ -0,0 +1,91 @@
+package com.oying.modules.rider.service.impl;
+
+import com.oying.modules.rider.domain.RiderWithdrawalRecord;
+import com.oying.utils.FileUtil;
+import lombok.RequiredArgsConstructor;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.oying.modules.rider.service.RiderWithdrawalRecordService;
+import com.oying.modules.rider.domain.dto.RiderWithdrawalRecordQueryCriteria;
+import com.oying.modules.rider.mapper.RiderWithdrawalRecordMapper;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import com.oying.utils.PageUtil;
+import java.util.List;
+import java.util.Map;
+import java.io.IOException;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.LinkedHashMap;
+import com.oying.utils.PageResult;
+
+/**
+* @description 服务实现
+* @author pxb
+* @date 2025-06-18
+**/
+@Service
+@RequiredArgsConstructor
+public class RiderWithdrawalRecordServiceImpl extends ServiceImpl<RiderWithdrawalRecordMapper, RiderWithdrawalRecord> implements RiderWithdrawalRecordService {
+
+    private final RiderWithdrawalRecordMapper riderWithdrawalRecordMapper;
+
+    @Override
+    public PageResult<RiderWithdrawalRecord> queryAll(RiderWithdrawalRecordQueryCriteria criteria, Page<Object> page){
+        return PageUtil.toPage(riderWithdrawalRecordMapper.findAll(criteria, page));
+    }
+
+    @Override
+    public List<RiderWithdrawalRecord> queryAll(RiderWithdrawalRecordQueryCriteria criteria){
+        return riderWithdrawalRecordMapper.findAll(criteria);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void create(RiderWithdrawalRecord resources) {
+        riderWithdrawalRecordMapper.insert(resources);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void update(RiderWithdrawalRecord resources) {
+        RiderWithdrawalRecord riderWithdrawalRecord = getById(resources.getRecordId());
+        riderWithdrawalRecord.copy(resources);
+        riderWithdrawalRecordMapper.updateById(riderWithdrawalRecord);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteAll(List<Long> ids) {
+        riderWithdrawalRecordMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void download(List<RiderWithdrawalRecord> all, HttpServletResponse response) throws IOException {
+        List<Map<String, Object>> list = new ArrayList<>();
+        for (RiderWithdrawalRecord riderWithdrawalRecord : all) {
+            Map<String, Object> map = new LinkedHashMap<>();
+            map.put("骑手id", riderWithdrawalRecord.getRiderId());
+            map.put("骑手名字", riderWithdrawalRecord.getRiderName());
+            map.put("骑手手机号", riderWithdrawalRecord.getRiderPhone());
+            map.put("提现前总金额", riderWithdrawalRecord.getAmount());
+            map.put("本次提现金额", riderWithdrawalRecord.getWithdrawalAmount());
+            map.put("剩余总金额", riderWithdrawalRecord.getNowAmount());
+            map.put("手续费", riderWithdrawalRecord.getFee());
+            map.put("实际到账金额", riderWithdrawalRecord.getActualAmount());
+            map.put("状态:1-处理中,2-已完成,3-已拒绝", riderWithdrawalRecord.getStatus());
+            map.put("银行账号", riderWithdrawalRecord.getBankAccount());
+            map.put("开户行", riderWithdrawalRecord.getBankName());
+            map.put("申请时间", riderWithdrawalRecord.getApplyTime());
+            map.put("处理时间", riderWithdrawalRecord.getProcessTime());
+            map.put("处理人", riderWithdrawalRecord.getOperator());
+            map.put("备注", riderWithdrawalRecord.getRemark());
+            map.put("创建人", riderWithdrawalRecord.getCreateBy());
+            map.put("创建时间", riderWithdrawalRecord.getCreateTime());
+            map.put("修改人", riderWithdrawalRecord.getUpdateBy());
+            map.put("修改时间", riderWithdrawalRecord.getUpdateTime());
+            list.add(map);
+        }
+        FileUtil.downloadExcel(list, response);
+    }
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/utils/Constants.java b/oying-system/src/main/java/com/oying/modules/rider/utils/Constants.java
new file mode 100644
index 0000000..21c3053
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/utils/Constants.java
@@ -0,0 +1,29 @@
+package com.oying.modules.rider.utils;
+
+/**
+ * TODO
+ *
+ * @author pxb
+ * @version 1.0
+ * @date 2021/3/16 12:47
+ */
+public interface Constants {
+
+
+    /**
+     * EXCEL文件格式
+     */
+    String EXCEL_SUFFIX_XLSX = ".xlsx";
+    String EXCEL_SUFFIX_XLS = ".xls";
+
+    /**
+     * HTTP请求成功状态码
+     */
+    String HTTP_CODE_SUCCESS = "200";
+
+    /**
+     * 状态 0不生效,1生效 其他平台是否满足接单的条件
+     */
+    String SOURCE_ENABLED_ON = "0";
+    String SOURCE_ENABLED_DFF = "1";
+}
diff --git a/oying-system/src/main/java/com/oying/modules/rider/utils/RiderSourceHttpUtils.java b/oying-system/src/main/java/com/oying/modules/rider/utils/RiderSourceHttpUtils.java
new file mode 100644
index 0000000..3e777aa
--- /dev/null
+++ b/oying-system/src/main/java/com/oying/modules/rider/utils/RiderSourceHttpUtils.java
@@ -0,0 +1,108 @@
+package com.oying.modules.rider.utils;
+
+import cn.hutool.core.io.IoUtil;
+import cn.hutool.http.Header;
+import cn.hutool.http.HttpRequest;
+import cn.hutool.http.HttpResponse;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.oying.modules.rider.domain.RiderSourceInfoHttp;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.HashMap;
+
+
+/**
+ * TODO
+ * 骑手信息查询
+ *
+ * @author pxb
+ * @version 1.0
+ */
+public class RiderSourceHttpUtils {
+
+    private static final Logger log = LoggerFactory.getLogger(RiderSourceHttpUtils.class);
+    // private static final String URL = "http://1.14.71.182:5000/";
+    // private static final String URL = "http://192.168.18.111:5000/";
+
+
+    /**
+     * 功能描述: <HTTp请求>
+     *
+     * @param: paramMap 请求参数
+     * @return: java.lang.Object
+     * @author: pxb
+     */
+    public static String httpPostRequest(HashMap<String, Object> paramMap, String url) {
+        String jsonParam = JSON.toJSONString(paramMap);
+        HttpResponse response = null;
+        try {
+            response = HttpRequest.post(url)
+                    // 头信息,多个头信息多次调用此方法即可
+                    .header(Header.USER_AGENT, "*")
+                    .header(Header.CONTENT_TYPE, "application/json;charset=utf-8")
+                    // .form(paramMap)//表单内容
+                    // 超时,毫秒
+                    .timeout(30000)
+                    .body(jsonParam)
+                    .execute();
+            return response.body();
+        } catch (Exception e) {
+            RiderSourceInfoHttp riderSourceInfoHttp = new RiderSourceInfoHttp();
+            riderSourceInfoHttp.setCode("500");
+            riderSourceInfoHttp.setMessage(paramMap.get("phone") + "手机号请求异常:" + url);
+            riderSourceInfoHttp.setSuccess("false");
+            return JSON.toJSONString(riderSourceInfoHttp);
+        } finally {
+            IoUtil.close(response);
+        }
+    }
+
+    /**
+     * 功能描述: <获取第三方骑手数据信息>
+     *
+     * @param: [phone, sourcePlatform] 手机号,来源平台
+     * @return: riderSourceInfoHttp
+     * @author: pxb
+     */
+    public static RiderSourceInfoHttp getRiderSourceInfoHttp(String phone, String sourcePlatform) {
+        HashMap<String, Object> paramMap = new HashMap<>(2);
+        paramMap.put("phone", phone);
+        paramMap.put("produceType", sourcePlatform);
+        String url = "";
+        // 转化成对象
+        RiderSourceInfoHttp riderSourceInfoHttp = new RiderSourceInfoHttp();
+        try {
+            String result = httpPostRequest(paramMap, url);
+            // 转换数据
+            riderSourceInfoHttp = riderConvertUtils(result);
+        } catch (Exception e) {
+            riderSourceInfoHttp.setCode("500");
+            riderSourceInfoHttp.setMessage("获取数据失败");
+            riderSourceInfoHttp.setSuccess("false");
+            return riderSourceInfoHttp;
+        }
+        return riderSourceInfoHttp;
+    }
+
+    /**
+     * 功能描述: <转换第三方骑手数据信息>
+     *
+     * @param: []
+     * @return: java.lang.Object
+     * @author: pxb
+     */
+    public static RiderSourceInfoHttp riderConvertUtils(String result) {
+        RiderSourceInfoHttp riderSourceInfoHttp = new RiderSourceInfoHttp();
+        try {
+            riderSourceInfoHttp = JSONObject.parseObject(result, RiderSourceInfoHttp.class);
+            return riderSourceInfoHttp;
+        } catch (Exception e) {
+            riderSourceInfoHttp.setCode("500");
+            riderSourceInfoHttp.setMessage("转化数据失败");
+            riderSourceInfoHttp.setSuccess("false");
+            return riderSourceInfoHttp;
+        }
+    }
+}
diff --git a/oying-system/src/main/resources/mapper/message/MessageOrderSellerMapper.xml b/oying-system/src/main/resources/mapper/message/MessageOrderSellerMapper.xml
index 759100b..5bccf2c 100644
--- a/oying-system/src/main/resources/mapper/message/MessageOrderSellerMapper.xml
+++ b/oying-system/src/main/resources/mapper/message/MessageOrderSellerMapper.xml
@@ -4,6 +4,7 @@
     <resultMap id="BaseResultMap" type="com.oying.modules.message.domain.MessageOrderSeller">
         <id column="id" property="id"/>
         <result column="order_id" property="orderId"/>
+        <result column="store_id" property="storeId"/>
         <result column="message_type" property="messageType"/>
         <result column="message_content" property="messageContent"/>
         <result column="link" property="link"/>
@@ -11,11 +12,13 @@
         <result column="update_time" property="updateTime"/>
         <result column="create_by" property="createBy"/>
         <result column="update_by" property="updateBy"/>
+        <result column="flag" property="flag"/>
     </resultMap>
 
     <sql id="Base_Column_List">
-        id, order_id, message_type, message_content, link, create_time, update_time, create_by, update_by
+        id, order_id,store_id, message_type, message_content, link, create_time, update_time, create_by, update_by,flag
     </sql>
+
 
     <select id="findAll" resultMap="BaseResultMap">
         select
@@ -25,4 +28,19 @@
         </where>
         order by id desc
     </select>
+
+    <select id="findByStoreId" resultType="com.oying.modules.message.domain.MessageOrderSeller"
+            parameterType="java.lang.String">
+#     根据store_id(不是主键)返回 list
+        select
+        <include refid="Base_Column_List"/>
+        from message_order_seller
+        where store_id = #{storeId} and flag = 0
+        order by id desc
+    </select>
+    <update id="updateMessageOrderSellerRead" parameterType="java.lang.Integer">
+        update message_order_seller
+        set flag = 1
+        where order_id = #{orderId}
+    </update>
 </mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/pc/category/PlatformCategoryMapper.xml b/oying-system/src/main/resources/mapper/pc/category/PlatformCategoryMapper.xml
index 86b2d88..7202dfe 100644
--- a/oying-system/src/main/resources/mapper/pc/category/PlatformCategoryMapper.xml
+++ b/oying-system/src/main/resources/mapper/pc/category/PlatformCategoryMapper.xml
@@ -8,7 +8,7 @@
         <result column="level" property="level"/>
         <result column="sort_weight" property="sortWeight"/>
         <result column="icon_id" property="iconId"/>
-        <result column="icon_url" property="iconId"/>
+        <result column="icon_url" property="iconUrl"/>
         <result column="status" property="status"/>
         <result column="active" property="active"/>
         <result column="create_by" property="createBy"/>
@@ -18,7 +18,7 @@
     </resultMap>
 
     <sql id="Base_Column_List">
-        category_id, parent_id, name, level, sort_weight, icon_id, status, active, create_by, create_time, update_by, update_time
+        category_id, parent_id, name, level, sort_weight, icon_id, icon_url, status, active, create_by, create_time, update_by, update_time
     </sql>
 
     <select id="findAll" resultMap="BaseResultMap">
diff --git a/oying-system/src/main/resources/mapper/pc/store/StoreMapper.xml b/oying-system/src/main/resources/mapper/pc/store/StoreMapper.xml
index 25f5a00..ac3cb3d 100644
--- a/oying-system/src/main/resources/mapper/pc/store/StoreMapper.xml
+++ b/oying-system/src/main/resources/mapper/pc/store/StoreMapper.xml
@@ -135,7 +135,9 @@
                 AND s.platform_category_id = #{criteria.platformCategoryId}
             </if>
         </where>
-        LIMIT 1000
+        <if test="criteria.limit != null">
+            limit #{criteria.limit}
+        </if>
     </select>
 
     <select id="queryUserStores" parameterType="java.lang.Long" resultMap="StoreResult">
diff --git a/oying-system/src/main/resources/mapper/rider/RiderIncomeDetailMapper.xml b/oying-system/src/main/resources/mapper/rider/RiderIncomeDetailMapper.xml
new file mode 100644
index 0000000..1b05e74
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/rider/RiderIncomeDetailMapper.xml
@@ -0,0 +1,61 @@
+<?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.oying.modules.rider.mapper.RiderIncomeDetailMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.rider.domain.RiderIncomeDetail">
+        <id column="income_id" property="incomeId"/>
+        <result column="rider_id" property="riderId"/>
+        <result column="rider_name" property="riderName"/>
+        <result column="rider_phone" property="riderPhone"/>
+        <result column="order_id" property="orderId"/>
+        <result column="order_num" property="orderNum"/>
+        <result column="income_amount" property="incomeAmount"/>
+        <result column="income_type" property="incomeType"/>
+        <result column="income_date" property="incomeDate"/>
+        <result column="income_month" property="incomeMonth"/>
+        <result column="order_status" property="orderStatus"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="start_address" property="startAddress"/>
+        <result column="end_address" property="endAddress"/>
+        <result column="delivery_time" property="deliveryTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        income_id, rider_id, rider_name, rider_phone, order_id, order_num, income_amount, income_type, income_date, income_month, order_status, create_by, create_time, update_by, update_time, start_address, end_address, delivery_time
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from qs_rider_income_detail
+        <where>
+            <if test="criteria.riderName != null">
+                and rider_name = #{criteria.riderName}
+            </if>
+            <if test="criteria.riderPhone != null">
+                and rider_phone = #{criteria.riderPhone}
+            </if>
+            <if test="criteria.orderNum != null">
+                and order_num = #{criteria.orderNum}
+            </if>
+            <if test="criteria.incomeType != null">
+                and income_type = #{criteria.incomeType}
+            </if>
+            <if test="criteria.incomeDate != null">
+                and income_date = #{criteria.incomeDate}
+            </if>
+            <if test="criteria.incomeMonth != null">
+                and income_month = #{criteria.incomeMonth}
+            </if>
+            <if test="criteria.orderStatus != null">
+                and order_status = #{criteria.orderStatus}
+            </if>
+            <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+                AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+            </if>
+        </where>
+        order by create_time desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/rider/RiderInfoMapper.xml b/oying-system/src/main/resources/mapper/rider/RiderInfoMapper.xml
new file mode 100644
index 0000000..0f69658
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/rider/RiderInfoMapper.xml
@@ -0,0 +1,57 @@
+<?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.oying.modules.rider.mapper.RiderInfoMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.rider.domain.RiderInfo">
+        <id column="info_id" property="infoId"/>
+        <result column="rider_id" property="riderId"/>
+        <result column="source_id" property="sourceId"/>
+        <result column="phone" property="phone"/>
+        <result column="card_name" property="cardName"/>
+        <result column="card_num" property="cardNum"/>
+        <result column="source_num" property="sourceNum"/>
+        <result column="enabled" property="enabled"/>
+        <result column="source_platform" property="sourcePlatform"/>
+        <result column="address" property="address"/>
+        <result column="create_by" property="createBy"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        info_id, rider_id, source_id, phone, card_name, card_num, source_num, enabled, source_platform, address, create_by, update_by, create_time, update_time
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from qs_rider_info
+        <where>
+            <if test="criteria.riderId != null">
+                and rider_id = #{criteria.riderId}
+            </if>
+            <if test="criteria.sourceId != null">
+                and source_id = #{criteria.sourceId}
+            </if>
+            <if test="criteria.phone != null">
+                and phone = #{criteria.phone}
+            </if>
+            <if test="criteria.cardName != null">
+                and card_name like concat('%',#{criteria.cardName},'%')
+            </if>
+            <if test="criteria.cardNum != null">
+                and card_num = #{criteria.cardNum}
+            </if>
+            <if test="criteria.sourceNum != null">
+                and source_num = #{criteria.sourceNum}
+            </if>
+            <if test="criteria.enabled != null">
+                and enabled = #{criteria.enabled}
+            </if>
+            <if test="criteria.sourcePlatform != null">
+                and source_platform = #{criteria.sourcePlatform}
+            </if>
+        </where>
+        order by info_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/rider/RiderOrderOperationMapper.xml b/oying-system/src/main/resources/mapper/rider/RiderOrderOperationMapper.xml
new file mode 100644
index 0000000..2dd63c0
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/rider/RiderOrderOperationMapper.xml
@@ -0,0 +1,59 @@
+<?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.oying.modules.rider.mapper.RiderOrderOperationMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.rider.domain.RiderOrderOperation">
+        <id column="operation_id" property="operationId"/>
+        <result column="order_id" property="orderId"/>
+        <result column="order_num" property="orderNum"/>
+        <result column="rider_id" property="riderId"/>
+        <result column="rider_phone" property="riderPhone"/>
+        <result column="rider_name" property="riderName"/>
+        <result column="operation_type" property="operationType"/>
+        <result column="operation_reason" property="operationReason"/>
+        <result column="operation_time" property="operationTime"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        operation_id, order_id, order_num, rider_id, rider_phone, rider_name, operation_type, operation_reason, operation_time, create_by, create_time, update_by, update_time
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from qs_rider_order_operation
+        <where>
+            <if test="criteria.orderId != null">
+                and order_id = #{criteria.orderId}
+            </if>
+            <if test="criteria.orderNum != null">
+                and order_num = #{criteria.orderNum}
+            </if>
+            <if test="criteria.riderId != null">
+                and rider_id = #{criteria.riderId}
+            </if>
+            <if test="criteria.riderPhone != null">
+                and rider_phone = #{criteria.riderPhone}
+            </if>
+            <if test="criteria.riderName != null">
+                and rider_name = #{criteria.riderName}
+            </if>
+            <if test="criteria.operationType != null">
+                and operation_type = #{criteria.operationType}
+            </if>
+            <if test="criteria.operationReason != null">
+                and operation_reason like concat('%',#{criteria.operationReason},'%')
+            </if>
+            <if test="criteria.operationTime != null and criteria.operationTime.size() > 0">
+                AND operation_time BETWEEN #{criteria.operationTime[0]} AND #{criteria.operationTime[1]}
+            </if>
+            <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+                AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+            </if>
+        </where>
+        order by operation_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/rider/RiderOrderRecordMapper.xml b/oying-system/src/main/resources/mapper/rider/RiderOrderRecordMapper.xml
new file mode 100644
index 0000000..5549df0
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/rider/RiderOrderRecordMapper.xml
@@ -0,0 +1,87 @@
+<?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.oying.modules.rider.mapper.RiderOrderRecordMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.rider.domain.RiderOrderRecord">
+        <id column="record_id" property="recordId"/>
+        <result column="order_id" property="orderId"/>
+        <result column="order_num" property="orderNum"/>
+        <result column="merchant_id" property="merchantId"/>
+        <result column="merchant_name" property="merchantName"/>
+        <result column="merchant_address" property="merchantAddress"/>
+        <result column="receiver_address" property="receiverAddress"/>
+        <result column="order_status" property="orderStatus"/>
+        <result column="accept_time" property="acceptTime"/>
+        <result column="accept_num" property="acceptNum"/>
+        <result column="finish_time" property="finishTime"/>
+        <result column="delivery_duration" property="deliveryDuration"/>
+        <result column="is_overtime" property="isOvertime"/>
+        <result column="order_source" property="orderSource"/>
+        <result column="order_income" property="orderIncome"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+        <result column="rider_id" property="riderId"/>
+        <result column="phone" property="phone"/>
+        <result column="rider_name" property="riderName"/>
+        <result column="user_longitude" property="userLongitude"/>
+        <result column="user_latitude" property="userLatitude"/>
+        <result column="merchant_longitude" property="merchantLongitude"/>
+        <result column="merchant_latitude" property="merchantLatitude"/>
+        <result column="user_id" property="userId"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        record_id, order_id, order_num, merchant_id, merchant_name, merchant_address,
+        receiver_address, order_status, accept_time, accept_num, finish_time, delivery_duration,
+        is_overtime, order_source, order_income, create_by, create_time, update_by, update_time,
+        rider_id, phone, rider_name, user_id, user_longitude, user_latitude, merchant_longitude, merchant_latitude
+    </sql>
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from qs_rider_order_record
+        <where>
+            <if test="criteria.riderId != null">
+                and rider_id = #{criteria.riderId}
+            </if>
+            <if test="criteria.userId != null">
+                and user_id = #{criteria.userId}
+            </if>
+            <if test="criteria.orderId != null">
+                and order_id = #{criteria.orderId}
+            </if>
+            <if test="criteria.orderNum != null">
+                and order_num = #{criteria.orderNum}
+            </if>
+            <if test="criteria.merchantId != null">
+                and merchant_id = #{criteria.merchantId}
+            </if>
+            <if test="criteria.merchantName != null">
+                and merchant_name like concat('%',#{criteria.merchantName},'%')
+            </if>
+            <if test="criteria.merchantAddress != null">
+                and merchant_address like concat('%',#{criteria.merchantAddress},'%')
+            </if>
+            <if test="criteria.receiverAddress != null">
+                and receiver_address like concat('%',#{criteria.receiverAddress},'%')
+            </if>
+            <if test="criteria.orderStatus != null">
+                and order_status = #{criteria.orderStatus}
+            </if>
+            <if test="criteria.isOvertime != null">
+                and is_overtime = #{criteria.isOvertime}
+            </if>
+            <if test="criteria.acceptTime != null and criteria.acceptTime.size() > 0">
+                AND accept_time BETWEEN #{criteria.acceptTime[0]} AND #{criteria.acceptTime[1]}
+            </if>
+            <if test="criteria.finishTime != null and criteria.finishTime.size() > 0">
+                AND finish_time BETWEEN #{criteria.finishTime[0]} AND #{criteria.finishTime[1]}
+            </if>
+            <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+                AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+            </if>
+        </where>
+        order by create_time desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/rider/RiderOrderReminderMapper.xml b/oying-system/src/main/resources/mapper/rider/RiderOrderReminderMapper.xml
new file mode 100644
index 0000000..48e4d9c
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/rider/RiderOrderReminderMapper.xml
@@ -0,0 +1,71 @@
+<?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.oying.modules.rider.mapper.RiderOrderReminderMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.rider.domain.RiderOrderReminder">
+        <id column="reminder_id" property="reminderId"/>
+        <result column="rider_id" property="riderId"/>
+        <result column="rider_name" property="riderName"/>
+        <result column="rider_phone" property="riderPhone"/>
+        <result column="order_id" property="orderId"/>
+        <result column="order_num" property="orderNum"/>
+        <result column="rule_id" property="ruleId"/>
+        <result column="rule_content" property="ruleContent"/>
+        <result column="rule_type" property="ruleType"/>
+        <result column="reminder_time" property="reminderTime"/>
+        <result column="is_sent" property="isSent"/>
+        <result column="send_time" property="sendTime"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        reminder_id, rider_id, rider_name, rider_phone, order_id, order_num, rule_id, rule_content, rule_type, reminder_time, is_sent, send_time, create_by, create_time, update_by, update_time
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from qs_rider_order_reminder
+        <where>
+            <if test="criteria.riderId != null">
+                and rider_id = #{criteria.riderId}
+            </if>
+            <if test="criteria.riderName != null">
+                and rider_name = #{criteria.riderName}
+            </if>
+            <if test="criteria.riderPhone != null">
+                and rider_phone = #{criteria.riderPhone}
+            </if>
+            <if test="criteria.orderId != null">
+                and order_id = #{criteria.orderId}
+            </if>
+            <if test="criteria.orderNum != null">
+                and order_num = #{criteria.orderNum}
+            </if>
+            <if test="criteria.ruleId != null">
+                and rule_id = #{criteria.ruleId}
+            </if>
+            <if test="criteria.ruleContent != null">
+                and rule_content like concat('%',#{criteria.ruleContent},'%')
+            </if>
+            <if test="criteria.ruleType != null">
+                and rule_type = #{criteria.ruleType}
+            </if>
+            <if test="criteria.isSent != null">
+                and is_sent = #{criteria.isSent}
+            </if>
+            <if test="criteria.reminderTime != null and criteria.reminderTime.size() > 0">
+                AND reminder_time BETWEEN #{criteria.reminderTime[0]} AND #{criteria.reminderTime[1]}
+            </if>
+            <if test="criteria.sendTime != null and criteria.sendTime.size() > 0">
+                AND send_time BETWEEN #{criteria.sendTime[0]} AND #{criteria.sendTime[1]}
+            </if>
+            <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+                AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+            </if>
+        </where>
+        order by reminder_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/rider/RiderWalletInfoMapper.xml b/oying-system/src/main/resources/mapper/rider/RiderWalletInfoMapper.xml
new file mode 100644
index 0000000..04cdd53
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/rider/RiderWalletInfoMapper.xml
@@ -0,0 +1,47 @@
+<?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.oying.modules.rider.mapper.RiderWalletInfoMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.rider.domain.RiderWalletInfo">
+        <id column="wallet_id" property="walletId"/>
+        <result column="rider_id" property="riderId"/>
+        <result column="amount" property="amount"/>
+        <result column="available_balance" property="availableBalance"/>
+        <result column="purchasing_electricity_amount" property="purchasingElectricityAmount"/>
+        <result column="withdraw_total" property="withdrawTotal"/>
+        <result column="income_total" property="incomeTotal"/>
+        <result column="frozen_amount" property="frozenAmount"/>
+        <result column="run_total" property="runTotal"/>
+        <result column="cash_withdrawal_total" property="cashWithdrawalTotal"/>
+        <result column="purchasing_electricity_total" property="purchasingElectricityTotal"/>
+        <result column="status" property="status"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        wallet_id, rider_id, amount, available_balance, purchasing_electricity_amount, withdraw_total, income_total, frozen_amount, run_total, cash_withdrawal_total, purchasing_electricity_total, status, create_by, create_time, update_by, update_time
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from qs_rider_wallet_info
+        <where>
+            <if test="criteria.riderId != null">
+                and rider_id = #{criteria.riderId}
+            </if>
+            <if test="criteria.status != null">
+                and status = #{criteria.status}
+            </if>
+            <if test="criteria.amount != null and criteria.amount.size() > 0">
+                AND amount BETWEEN #{criteria.amount[0]} AND #{criteria.amount[1]}
+            </if>
+            <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+                AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+            </if>
+        </where>
+        order by wallet_id desc
+    </select>
+</mapper>
\ No newline at end of file
diff --git a/oying-system/src/main/resources/mapper/rider/RiderWithdrawalRecordMapper.xml b/oying-system/src/main/resources/mapper/rider/RiderWithdrawalRecordMapper.xml
new file mode 100644
index 0000000..c23a732
--- /dev/null
+++ b/oying-system/src/main/resources/mapper/rider/RiderWithdrawalRecordMapper.xml
@@ -0,0 +1,72 @@
+<?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.oying.modules.rider.mapper.RiderWithdrawalRecordMapper">
+    <resultMap id="BaseResultMap" type="com.oying.modules.rider.domain.RiderWithdrawalRecord">
+        <id column="record_id" property="recordId"/>
+        <result column="rider_id" property="riderId"/>
+        <result column="rider_name" property="riderName"/>
+        <result column="rider_phone" property="riderPhone"/>
+        <result column="amount" property="amount"/>
+        <result column="withdrawal_amount" property="withdrawalAmount"/>
+        <result column="now_amount" property="nowAmount"/>
+        <result column="fee" property="fee"/>
+        <result column="actual_amount" property="actualAmount"/>
+        <result column="status" property="status"/>
+        <result column="bank_account" property="bankAccount"/>
+        <result column="bank_name" property="bankName"/>
+        <result column="apply_time" property="applyTime"/>
+        <result column="process_time" property="processTime"/>
+        <result column="operator" property="operator"/>
+        <result column="remark" property="remark"/>
+        <result column="create_by" property="createBy"/>
+        <result column="create_time" property="createTime"/>
+        <result column="update_by" property="updateBy"/>
+        <result column="update_time" property="updateTime"/>
+    </resultMap>
+
+    <sql id="Base_Column_List">
+        record_id, rider_id, rider_name, rider_phone, amount, withdrawal_amount, now_amount, fee, actual_amount, status, bank_account, bank_name, apply_time, process_time, operator, remark, create_by, create_time, update_by, update_time
+    </sql>
+
+    <select id="findAll" resultMap="BaseResultMap">
+        select
+        <include refid="Base_Column_List"/>
+        from qs_rider_withdrawal_record
+        <where>
+            <if test="criteria.riderId != null">
+                and rider_id = #{criteria.riderId}
+            </if>
+            <if test="criteria.riderName != null">
+                and rider_name = #{criteria.riderName}
+            </if>
+            <if test="criteria.riderPhone != null">
+                and rider_phone = #{criteria.riderPhone}
+            </if>
+            <if test="criteria.status != null">
+                and status = #{criteria.status}
+            </if>
+            <if test="criteria.bankAccount != null">
+                and bank_account = #{criteria.bankAccount}
+            </if>
+            <if test="criteria.bankName != null">
+                and bank_name like concat('%',#{criteria.bankName},'%')
+            </if>
+            <if test="criteria.operator != null">
+                and operator = #{criteria.operator}
+            </if>
+            <if test="criteria.remark != null">
+                and remark like concat('%',#{criteria.remark},'%')
+            </if>
+            <if test="criteria.applyTime != null and criteria.applyTime.size() > 0">
+                AND apply_time BETWEEN #{criteria.applyTime[0]} AND #{criteria.applyTime[1]}
+            </if>
+            <if test="criteria.processTime != null and criteria.processTime.size() > 0">
+                AND process_time BETWEEN #{criteria.processTime[0]} AND #{criteria.processTime[1]}
+            </if>
+            <if test="criteria.createTime != null and criteria.createTime.size() > 0">
+                AND create_time BETWEEN #{criteria.createTime[0]} AND #{criteria.createTime[1]}
+            </if>
+        </where>
+        order by record_id desc
+    </select>
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.3