From 33caf2bb79bb3c561916c91ae386ec772411e2e8 Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期一, 11 五月 2026 18:21:50 +0800
Subject: [PATCH] 代码生成

---
 server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java                   |   18 
 server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java   |   17 
 server/web/src/main/java/com/doumee/api/web/PaymentCallback.java                            |    9 
 server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java    |    5 
 server/web/src/main/java/com/doumee/api/web/ConfigApi.java                                  |   23 +
 server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java                       |   17 
 server/services/src/main/java/com/doumee/dao/dto/ShopLoginDTO.java                          |    4 
 server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java                    |    6 
 server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java                       |    8 
 server/services/src/main/java/com/doumee/dao/dto/DriverActiveOrderDTO.java                  |    3 
 server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java                 |    6 
 server/services/src/main/java/com/doumee/core/constants/Constants.java                      |   40 +
 server/web/src/main/java/com/doumee/api/web/MemberApi.java                                  |   10 
 server/admin/src/main/java/com/doumee/api/business/PricingRuleController.java               |   58 --
 server/services/src/main/java/com/doumee/dao/dto/RevenueShareItemDTO.java                   |    2 
 server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java |    2 
 server/services/src/main/java/com/doumee/service/business/MemberService.java                |    3 
 server/services/src/main/java/com/doumee/dao/vo/RevenueShareVO.java                         |    2 
 server/services/src/main/java/com/doumee/service/business/OrdersService.java                |   17 
 server/admin/src/main/resources/application.yml                                             |    2 
 server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java  |   14 
 server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java     |  556 +++++++++++++++++-------
 server/services/src/main/resources/application-dev.yml                                      |    4 
 server/web/src/main/java/com/doumee/api/web/AccountApi.java                                 |    5 
 server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java        |    4 
 server/services/src/main/java/com/doumee/dao/vo/ShopDetailVO.java                           |   18 
 server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java                            |    3 
 server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java                        |    3 
 server/services/src/main/java/com/doumee/dao/dto/RevenueShareSaveDTO.java                   |    2 
 server/services/src/main/java/com/doumee/dao/dto/ShopUpdateDTO.java                         |   12 
 server/services/db/db_change.sql                                                            |   37 +
 server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java                           |    2 
 server/services/src/main/java/com/doumee/dao/business/model/Orders.java                     |   10 
 server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java       |   72 +++
 server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java                          |    9 
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java       |  289 +++++++++++-
 server/web/src/main/resources/application.yml                                               |    2 
 server/services/src/main/java/com/doumee/dao/business/model/Member.java                     |    3 
 38 files changed, 999 insertions(+), 298 deletions(-)

diff --git a/server/admin/src/main/java/com/doumee/api/business/PricingRuleController.java b/server/admin/src/main/java/com/doumee/api/business/PricingRuleController.java
index d4e5950..14db44a 100644
--- a/server/admin/src/main/java/com/doumee/api/business/PricingRuleController.java
+++ b/server/admin/src/main/java/com/doumee/api/business/PricingRuleController.java
@@ -42,64 +42,6 @@
     @Autowired
     private PricingRuleService pricingRuleService;
 
-    /*@PreventRepeat
-    @ApiOperation("鏂板缓")
-    @PostMapping("/create")
-    @RequiresPermissions("business:pricingRule:create")
-    public ApiResponse create(@RequestBody PricingRule pricingRule) {
-        return ApiResponse.success(pricingRuleService.create(pricingRule));
-    }
-
-    @ApiOperation("鏍规嵁ID鍒犻櫎")
-    @GetMapping("/delete/{id}")
-    @RequiresPermissions("business:pricingRule:delete")
-    public ApiResponse deleteById(@PathVariable Integer id) {
-        pricingRuleService.deleteById(id);
-        return ApiResponse.success(null);
-    }
-
-    @ApiOperation("鎵归噺鍒犻櫎")
-    @GetMapping("/delete/batch")
-    @RequiresPermissions("business:pricingRule:delete")
-    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
-        String[] idArray = ids.split(",");
-        List<Integer> idList = new ArrayList<>();
-        for (String id : idArray) {
-            idList.add(Integer.valueOf(id));
-        }
-        pricingRuleService.deleteByIdInBatch(idList);
-        return ApiResponse.success(null);
-    }
-
-    @ApiOperation("鏍规嵁ID淇敼")
-    @PostMapping("/updateById")
-    @RequiresPermissions("business:pricingRule:update")
-    public ApiResponse updateById(@RequestBody PricingRule pricingRule) {
-        pricingRuleService.updateById(pricingRule);
-        return ApiResponse.success(null);
-    }
-
-    @ApiOperation("鍒嗛〉鏌ヨ")
-    @PostMapping("/page")
-    @RequiresPermissions("business:pricingRule:query")
-    public ApiResponse<PageData<PricingRule>> findPage(@RequestBody PageWrap<PricingRule> pageWrap) {
-        return ApiResponse.success(pricingRuleService.findPage(pageWrap));
-    }
-
-    @ApiOperation("瀵煎嚭Excel")
-    @PostMapping("/exportExcel")
-    @RequiresPermissions("business:pricingRule:exportExcel")
-    public void exportExcel(@RequestBody PageWrap<PricingRule> pageWrap, HttpServletResponse response) {
-        List<PricingRule> pricingRuleList = pricingRuleService.findPage(pageWrap).getRecords();
-        ExcelExporter.build(PricingRule.class).export(pricingRuleList, "璁′环瑙勫垯閰嶇疆", response);
-    }
-
-    @ApiOperation("鏍规嵁ID鏌ヨ")
-    @GetMapping("/{id}")
-    @RequiresPermissions("business:pricingRule:query")
-    public ApiResponse findById(@PathVariable Integer id) {
-        return ApiResponse.success(pricingRuleService.findById(id));
-    }*/
 
     @PreventRepeat
     @ApiOperation("鎵归噺淇濆瓨灏卞湴瀛樺彇瑙勫垯")
diff --git a/server/admin/src/main/resources/application.yml b/server/admin/src/main/resources/application.yml
index 2966e7d..a67904a 100644
--- a/server/admin/src/main/resources/application.yml
+++ b/server/admin/src/main/resources/application.yml
@@ -12,7 +12,7 @@
 
 spring:
   profiles:
-    active: pro
+    active: dev
   # JSON杩斿洖閰嶇疆
   jackson:
     # 榛樿鏃跺尯
diff --git a/server/services/db/db_change.sql b/server/services/db/db_change.sql
index 37d5d8a..e9ce016 100644
--- a/server/services/db/db_change.sql
+++ b/server/services/db/db_change.sql
@@ -5,6 +5,43 @@
 
 
 -- ============================================================
+-- 2026/05/11 鍙告満鐗堟湰绫诲瀷瀛楁
+-- ============================================================
+ALTER TABLE `driver_info` ADD COLUMN `VERSION_TYPE` INT DEFAULT 0 COMMENT '鍙告満鐗堟湰绫诲瀷锛�0=姝e紡鐗堟湰锛�1=鍙樻洿鐗堟湰';
+ALTER TABLE `driver_info` ADD COLUMN `RELATION_DRIVER_ID` INT DEFAULT NULL COMMENT '鍏宠仈姝e紡鐗堟湰鍙告満涓婚敭锛堝彉鏇寸増鏈娇鐢級';
+
+
+-- ============================================================
+-- 2026/05/09 闂ㄥ簵鏀剁泭姣斾緥閰嶇疆瀛楁
+-- ============================================================
+ALTER TABLE `shop_info` ADD COLUMN `REVENUE_SHARE_CONFIG` TEXT COMMENT '鏀剁泭姣斾緥閰嶇疆(JSON): remoteCompanyDeposit/remotePersonalDeposit/remoteCompanyTake/remotePersonalTake/localCompanyDeposit/localPersonalDeposit';
+
+ALTER TABLE `member` ADD COLUMN `LOGIN_SHOP_ID` INT COMMENT '宸茬櫥褰曠殑闂ㄥ簵涓婚敭';
+
+ALTER TABLE `shop_info` ADD COLUMN `VERSION_TYPE` INT DEFAULT 0 COMMENT '闂ㄥ簵鐗堟湰绫诲瀷锛�0=姝e紡鐗堟湰锛�1=鍙樻洿鐗堟湰';
+ALTER TABLE `shop_info` ADD COLUMN `RELATION_SHOP_ID` INT COMMENT '鍏宠仈姝e紡鐗堟湰闂ㄥ簵涓婚敭锛堝彉鏇寸増鏈娇鐢級';
+
+
+-- ============================================================
+-- 2026/05/07 鎿嶄綔鍗婂緞鏍¢獙閰嶇疆
+-- ============================================================
+INSERT INTO `system_dict_data` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES ((SELECT `id` FROM `system_dict` WHERE `code` = 'OPERATION_CONFIG'), '500', 'OPERATION_RADIUS', '鍏佽鎿嶄綔鍗婂緞(m)', 0, 0, 1, NOW(), 0);
+
+
+-- ============================================================
+-- 2026/05/07 鍗冲皢鍒拌揪鍙栦欢鏃堕棿閫氱煡鐩稿叧鍙樻洿
+-- ============================================================
+-- 璁㈠崟琛ㄥ鍔犲彇浠堕�氱煡鐘舵�佸瓧娈�
+ALTER TABLE `orders` ADD COLUMN `PICK_UP_NOTIFY_STATUS` INT DEFAULT 0 COMMENT '鍙栦欢鏃堕棿鍗冲皢鍒拌揪閫氱煡鐘舵�侊細0=鏈�氱煡锛�1=宸查�氱煡';
+
+-- 杩愯惀閰嶇疆锛氬嵆灏嗗埌杈惧彇浠舵椂闂存彁鍓嶉�氱煡(鍒嗛挓)
+INSERT INTO `system_dict_data` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES ((SELECT `id` FROM `system_dict` WHERE `code` = 'OPERATION_CONFIG'), '30', 'ARRIVAL_PICK_UP_TIME', '鍗冲皢鍒拌揪鍙栦欢鏃堕棿鎻愬墠閫氱煡(鍒嗛挓)', 0, 0, 1, NOW(), 0);
+
+-- 瀹氭椂浠诲姟锛氬嵆灏嗗埌杈惧彇浠舵椂闂撮�氱煡锛堟瘡5鍒嗛挓鎵ц涓�娆★級
+INSERT INTO `system_job` (`JOB_NAME`, `HANDLER`, `CRON`, `WITH_LOG`, `WITH_ASYNC`, `STATUS`, `REMARK`, `CREATE_USER`, `CREATE_TIME`, `UPDATE_USER`, `UPDATE_TIME`, `DELETED`) VALUES ('鍗冲皢鍒拌揪鍙栦欢鏃堕棿閫氱煡', 'arrivalPickUpNotifyJob', '0 */5 * * * ?', 1, 0, 1, '鏌ヨ鍗冲皢鍒拌揪鍙栦欢鏃堕棿鐨勮鍗曪紝鍙戦�佺煭淇¢�氱煡浼氬憳', 1, NOW(), 1, NOW(), 0);
+
+
+-- ============================================================
 -- 2026/04/30 APP鐗堟湰鏂囦欢涓婁紶瀛楀吀閰嶇疆
 -- ============================================================
 INSERT INTO `system_dict_data` (`DICT_ID`, `CODE`, `LABEL`, `REMARK`, `SORT`, `DISABLED`, `CREATE_USER`, `CREATE_TIME`, `DELETED`) VALUES ((SELECT `id` FROM `system_dict` WHERE `code` = 'OSS'), '', 'APP_FILES', 'APP鐗堟湰鏂囦欢瀛樺偍璺緞', 0, 0, 1, NOW(), 0);
diff --git a/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java b/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java
index ccf75ec..c9a2cdd 100644
--- a/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java
+++ b/server/services/src/main/java/com/doumee/biz/system/impl/OperationConfigBizImpl.java
@@ -37,6 +37,8 @@
         dto.setNoGrabNotifyTime(getValue(Constants.OP_NO_GRAB_NOTIFY_TIME));
         dto.setNoGrabNotifyUsers(getValue(Constants.OP_NO_GRAB_NOTIFY_USERS));
         dto.setDefaultDeliveryRange(getValue(Constants.OP_DEFAULT_DELIVERY_RANGE));
+        dto.setArrivalPickUpTime(getValue(Constants.OP_ARRIVAL_PICK_UP_TIME));
+        dto.setOperationRadius(getValue(Constants.OP_OPERATION_RADIUS));
         return dto;
     }
 
@@ -55,6 +57,8 @@
         saveOrUpdate(Constants.OP_NO_GRAB_NOTIFY_TIME, "鏃犱汉鎶㈠崟閫氱煡鏃堕棿", dto.getNoGrabNotifyTime());
         saveOrUpdate(Constants.OP_NO_GRAB_NOTIFY_USERS, "鏃犱汉鎶㈠崟鐭俊閫氱煡浜哄憳", dto.getNoGrabNotifyUsers());
         saveOrUpdate(Constants.OP_DEFAULT_DELIVERY_RANGE, "榛樿閰嶉�佽寖鍥�", dto.getDefaultDeliveryRange());
+        saveOrUpdate(Constants.OP_ARRIVAL_PICK_UP_TIME, "鍗冲皢鍒拌揪鍙栦欢鏃堕棿閫氱煡", dto.getArrivalPickUpTime());
+//        saveOrUpdate(Constants.OP_OPERATION_RADIUS, "鍏佽鎿嶄綔鍗婂緞", dto.getOperationRadius());
     }
 
     private String getValue(String label) {
diff --git a/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java b/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
index 72097f8..e988f6c 100644
--- a/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
+++ b/server/services/src/main/java/com/doumee/config/jwt/JwtTokenUtil.java
@@ -85,6 +85,7 @@
     public static String generateTokenForRedis(Integer userId, Integer userType, String userInfo, RedisTemplate<String,Object> redisTemplate) {
         // 鍒犻櫎璇ョ敤鎴蜂箣鍓嶇櫥褰曠殑token
         String userTokenMappingKey = Constants.REDIS_TOKEN_KEY + "user_" + userType + "_" + userId;
+
         String oldToken = (String) redisTemplate.opsForValue().get(userTokenMappingKey);
         if (StringUtils.isNotBlank(oldToken)) {
             redisTemplate.delete(Constants.REDIS_TOKEN_KEY + oldToken);
@@ -98,6 +99,22 @@
     }
 
 
+    public static String generateShopTokenForRedis(Integer userId, String userInfo, RedisTemplate<String,Object> redisTemplate) {
+        // 鍒犻櫎璇ョ敤鎴蜂箣鍓嶇櫥褰曠殑token
+        String userTokenMappingKey = Constants.REDIS_TOKEN_KEY + "user_" + Constants.TWO + "_" + userId;
+        String oldToken = (String) redisTemplate.opsForValue().get(userTokenMappingKey);
+        if (StringUtils.isNotBlank(oldToken)) {
+            redisTemplate.delete(Constants.REDIS_TOKEN_KEY + oldToken);
+        }
+        // 鐢熸垚鏂皌oken
+        String tokenKey = Constants.TWO +""+ UUID.randomUUID() + "_" + userId;
+        redisTemplate.opsForValue().set(Constants.REDIS_TOKEN_KEY + tokenKey, userInfo, redisExpire, TimeUnit.DAYS);
+        // 璁板綍鐢ㄦ埛涓巘oken鐨勬槧灏勫叧绯�
+        redisTemplate.opsForValue().set(userTokenMappingKey, tokenKey, redisExpire, TimeUnit.DAYS);
+        return tokenKey;
+    }
+
+
     /**
      * 鍒锋柊浠ょ墝
      *
diff --git a/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java b/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
index 06c4084..3b9f99d 100644
--- a/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
+++ b/server/services/src/main/java/com/doumee/config/jwt/WebMvcConfig.java
@@ -162,16 +162,16 @@
                 throw new BusinessException(ResponseStatus.SHOP_BE_OVERDUE);
             }
             String openid = shop.getOpenid();
-            Integer shopId = getTokenId(token);
-            Integer isDeleted = dao.queryForObject(" select COALESCE(DELETED,0)  from shop_info where id  = ?", Integer.class, shopId);
+            Integer shopId = shop.getId();//getTokenId(token);
+            Integer isDeleted = dao.queryForObject(" select COALESCE(DELETED,0)  from shop_info where VERSION_TYPE = 0 and  id  = ?", Integer.class, shopId);
             if(isDeleted== Constants.ONE){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗘埛宸插垹闄�,璇疯仈绯荤鐞嗗憳");
             }
-            Integer isForbidden = dao.queryForObject(" select COALESCE(STATUS,0)  from shop_info where id  = ?", Integer.class, shopId);
+            Integer isForbidden = dao.queryForObject(" select COALESCE(STATUS,0)  from shop_info where VERSION_TYPE = 0 and id  = ?", Integer.class, shopId);
             if(isForbidden == Constants.ONE){
                 throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鍟嗘埛宸茬鐢�,璇疯仈绯荤鐞嗗憳");
             }
-            Integer count = dao.queryForObject("select count(1) from shop_info where id  = ?", Integer.class, shopId);
+            Integer count = dao.queryForObject("select count(1) from shop_info where VERSION_TYPE = 0 and  id  = ?", Integer.class, shopId);
             if (count != null && count > 0) {
                 request.setAttribute(JwtTokenUtil.SHOP_ID, shop.getId());
                 return true;
diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java
index 35a15b7..77059bc 100644
--- a/server/services/src/main/java/com/doumee/core/constants/Constants.java
+++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java
@@ -47,6 +47,8 @@
     public static final String FEE_STANDARDS ="FEE_STANDARDS" ;
     public static final String ABOUT_US ="ABOUT_US" ;
     public static final String SERVER_PHONE ="SERVER_PHONE" ;
+    public static final String ARRIVAL_PICK_UP_TIME ="ARRIVAL_PICK_UP_TIME" ;//鍗冲皢鍒拌揪鍙栦欢鏃堕棿閰嶇疆(鍒嗛挓)
+
     public static final String USER_AGREEMENT ="USER_AGREEMENT" ;
     public static final String PRIVACY_AGREEMENT ="PRIVACY_AGREEMENT" ;
 
@@ -104,6 +106,8 @@
     public static final String OP_NO_GRAB_NOTIFY_TIME = "NO_GRAB_NOTIFY_TIME";
     public static final String OP_NO_GRAB_NOTIFY_USERS = "NO_GRAB_NOTIFY_USERS";
     public static final String OP_DEFAULT_DELIVERY_RANGE = "DEFAULT_DELIVERY_RANGE";
+    public static final String OP_ARRIVAL_PICK_UP_TIME = "ARRIVAL_PICK_UP_TIME";
+    public static final String OP_OPERATION_RADIUS = "OPERATION_RADIUS";
 
     // 鑺儴浜戞墦鍗版満閰嶇疆
     public static final String XPYUN_CONFIG = "XPYUN_CONFIG";
@@ -393,7 +397,7 @@
         deposited(2, "宸插瘎瀛�"),
         accepted(3, "宸叉帴鍗�"),
         delivering(4, "娲鹃�佷腑"),
-        arrived(5, "宸插埌搴�/宸查�佽揪/寰呭彇浠�"),
+        arrived(5, "宸插埌搴�/宸查�佽揪"),
         overdue(6, "瀛樺湪閫炬湡"), //寮冪敤
         finished(7, "宸插畬鎴�"),
         cancelled(99, "宸插彇娑�")
@@ -611,27 +615,29 @@
     @Getter
     @AllArgsConstructor
     public enum SmsNotify {
-        PLATFORM_WAIT_GRAB("SMS_505865290", "骞冲彴绔�-寰呮姠鍗�", "鎮ㄥソ锛岃鍗曪細{orderNo}宸茶秴杩噞time}鍒嗛挓鏃犲徃鏈烘姠鍗曪紝璇峰敖蹇姞鎬ユ淳鍗曪紝閬垮厤瀹㈡埛杩囦箙绛夊緟銆�"),
-        SHOP_REFUNDING("SMS_505905263", "闂ㄥ簵绔�-閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}瀹㈡埛宸叉彁浜ら��娆剧敵璇凤紝璇峰敖蹇鐞嗐��"),
-        SHOP_WAIT_VERIFY("SMS_505915292", "闂ㄥ簵绔�-寰呮牳楠�", "鏂拌鏉庤鍗曪細{orderNo}瀹㈡埛宸叉敮浠橈紝璇峰敖蹇牳楠岀敤鎴风墿鍝佷俊鎭��"),
-        DRIVER_REFUNDING("SMS_505905264", "鍙告満绔�-閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛宸叉彁浜ら��娆剧敵璇凤紝璇ヨ鍗曚换鍔″凡鍙栨秷锛岃鍕垮墠寰�銆�"),
-        DRIVER_WAIT_PICKUP("SMS_505960277", "鍙告満绔�-寰呭彇浠�", "鎮ㄥ凡鎶㈠崟鎴愬姛锛岃鍗晎orderNo}锛岃鎸夋椂鍒皗address}鍙栦欢銆�"),
-        MEMBER_CANCELLED("SMS_505615328", "浼氬憳绔�-宸插彇娑�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸插彇娑堬紝鎰熻阿鎮ㄧ殑鏀寔锛屾杩庝笅娆″啀浼氥��"),
-        MEMBER_REFUNDED("SMS_505850299", "浼氬憳绔�-宸查��娆�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}閫�娆惧凡瀹屾垚锛岄噾棰漿money}鍏冨皢鍘熻矾閫�鍥烇紝璇锋敞鎰忔煡鏀躲��"),
-        MEMBER_ARRIVED("SMS_505645328", "浼氬憳绔�-宸查�佽揪", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸查�佸埌{address}锛岃鍙婃椂鍙栦欢锛屽彇浠剁爜锛歿code}銆�"),
-        MEMBER_DELIVERING("SMS_505715321", "浼氬憳绔�-閰嶉�佷腑", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸茬敱鍙告満{name}鍙栦欢锛屾杩愬線鐩殑鍦般��"),
-        VERIFY_CODE("SMS_333770877", "楠岃瘉鐮佺煭淇�", "鎮ㄧ殑楠岃瘉鐮佷负锛歿code}锛岃鍕挎硠闇蹭簬浠栦汉锛�"),
-        DRIVER_AUTH_REJECTED("SMS_505790115", "鍙告満绔�-鍙告満璁よ瘉琚嫆缁�", "灏婃暚鐨剓driver}锛屽緢閬楁喚锛屾偍鐨勫徃鏈鸿璇佹湭閫氳繃瀹℃牳銆傚師鍥狅細{reason}銆傛偍鍙慨鏀硅祫鏂欏悗閲嶆柊鎻愪氦銆�"),
-        DRIVER_AUTH_APPROVED("SMS_505885083", "鍙告満绔�-鍙告満璁よ瘉閫氳繃", "灏婃暚鐨剓driver}锛屾伃鍠滄偍宸查�氳繃骞冲彴鍙告満璁よ瘉瀹℃牳銆傛偍鍙櫥褰曞徃鏈虹APP寮�濮嬫帴鍗曪紝閰嶉�佽繃绋嬩腑璇锋敞鎰忓畨鍏紝绁濇偍鎺ュ崟椤哄埄锛�"),
-        DRIVER_URGENT_DISPATCH("SMS_505940293", "鍙告満绔�-鍔犳�ユ淳鍗�", "鎮ㄥソ锛屾偍鏈変竴涓柊鐨勮鏉庤鍗曪紙缂栧彿锛歿orderNo}锛夈�傝捣鐐癸細{address1}锛岀粓鐐癸細{address2}锛岄厤閫佽垂{money1}鍏冿紙鍚姞鎬ヨ垂{money2}鍏冿級銆傝灏藉揩纭璁㈠崟浠诲姟銆�"),
-        SHOP_AUTH_REJECTED("SMS_505925106", "闂ㄥ簵绔�-璧勬枡瀹℃牳琚嫆缁�", "寰堥仐鎲撅紝鎮ㄧ殑闂ㄥ簵\"{storeName}\"鏈�氳繃瀹℃牳锛屽師鍥狅細{reason}锛屾偍鍙慨鏀硅祫鏂欏悗閲嶆柊鎻愪氦銆�"),
-        SHOP_AUTH_APPROVED_DEPOSIT("SMS_505705111", "闂ㄥ簵绔�-瀹℃牳閫氳繃闇�缂寸撼鎶奸噾", "鎭枩鎮紒鎮ㄧ殑闂ㄥ簵\"{storeName}\"宸查�氳繃鍒濇瀹℃牳銆傝鏀粯鎶奸噾{money}鍏冧互瀹屾垚鍏ラ┗锛屾敮浠樺悗鍗冲彲鐧诲綍闂ㄥ簵鍚庡彴姝e紡鎺ュ崟銆�"),
-        SHOP_AUTH_SUCCESS("SMS_505915289", "闂ㄥ簵绔�-鎴愬姛鍏ラ┗閫氱煡", "鎭枩鎮紒鎮ㄧ殑闂ㄥ簵\"{storeName}\"宸查�氳繃骞冲彴瀹℃牳锛屾寮忓叆椹绘垚鍔熴�� 鎮ㄥ彲鐧诲綍鍟嗗鍚庡彴寮�濮嬫帴鍗曪紝璐﹀彿锛氭敞鍐屾墜鏈哄彿锛屽垵濮嬪瘑鐮侊細锛歿password}锛堝缓璁娆$櫥褰曞悗淇敼锛夈��"),
+        PLATFORM_WAIT_GRAB("SMS_505865290", "骞冲彴绔�-寰呮姠鍗�", "鎮ㄥソ锛岃鍗曪細{orderNo}宸茶秴杩噞time}鍒嗛挓鏃犲徃鏈烘姠鍗曪紝璇峰敖蹇姞鎬ユ淳鍗曪紝閬垮厤瀹㈡埛杩囦箙绛夊緟銆�", true),
+        SHOP_REFUNDING("SMS_505905263", "闂ㄥ簵绔�-閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}瀹㈡埛宸叉彁浜ら��娆剧敵璇凤紝璇峰敖蹇鐞嗐��", false),
+        SHOP_WAIT_VERIFY("SMS_505915292", "闂ㄥ簵绔�-寰呮牳楠�", "鏂拌鏉庤鍗曪細{orderNo}瀹㈡埛宸叉敮浠橈紝璇峰敖蹇牳楠岀敤鎴风墿鍝佷俊鎭��", false),
+        DRIVER_REFUNDING("SMS_505905264", "鍙告満绔�-閫�娆句腑", "琛屾潕璁㈠崟锛歿orderNo}鐢ㄦ埛宸叉彁浜ら��娆剧敵璇凤紝璇ヨ鍗曚换鍔″凡鍙栨秷锛岃鍕垮墠寰�銆�", true),
+        DRIVER_WAIT_PICKUP("SMS_505960277", "鍙告満绔�-寰呭彇浠�", "鎮ㄥ凡鎶㈠崟鎴愬姛锛岃鍗晎orderNo}锛岃鎸夋椂鍒皗address}鍙栦欢銆�", true),
+        MEMBER_CANCELLED("SMS_505615328", "浼氬憳绔�-宸插彇娑�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸插彇娑堬紝鎰熻阿鎮ㄧ殑鏀寔锛屾杩庝笅娆″啀浼氥��", true),
+        MEMBER_REFUNDED("SMS_505850299", "浼氬憳绔�-宸查��娆�", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}閫�娆惧凡瀹屾垚锛岄噾棰漿money}鍏冨皢鍘熻矾閫�鍥烇紝璇锋敞鎰忔煡鏀躲��", true),
+        MEMBER_ARRIVED("SMS_505645328", "浼氬憳绔�-宸查�佽揪", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸查�佸埌{address}锛岃鍙婃椂鍙栦欢锛屽彇浠剁爜锛歿code}銆�", true),
+        MEMBER_DELIVERING("SMS_505715321", "浼氬憳绔�-閰嶉�佷腑", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}宸茬敱鍙告満{name}鍙栦欢锛屾杩愬線鐩殑鍦般��", true),
+        VERIFY_CODE("SMS_333770877", "楠岃瘉鐮佺煭淇�", "鎮ㄧ殑楠岃瘉鐮佷负锛歿code}锛岃鍕挎硠闇蹭簬浠栦汉锛�", true),
+        DRIVER_AUTH_REJECTED("SMS_505790115", "鍙告満绔�-鍙告満璁よ瘉琚嫆缁�", "灏婃暚鐨剓driver}锛屽緢閬楁喚锛屾偍鐨勫徃鏈鸿璇佹湭閫氳繃瀹℃牳銆傚師鍥狅細{reason}銆傛偍鍙慨鏀硅祫鏂欏悗閲嶆柊鎻愪氦銆�", true),
+        DRIVER_AUTH_APPROVED("SMS_505885083", "鍙告満绔�-鍙告満璁よ瘉閫氳繃", "灏婃暚鐨剓driver}锛屾伃鍠滄偍宸查�氳繃骞冲彴鍙告満璁よ瘉瀹℃牳銆傛偍鍙櫥褰曞徃鏈虹APP寮�濮嬫帴鍗曪紝閰嶉�佽繃绋嬩腑璇锋敞鎰忓畨鍏紝绁濇偍鎺ュ崟椤哄埄锛�", true),
+        DRIVER_URGENT_DISPATCH("SMS_505940293", "鍙告満绔�-鍔犳�ユ淳鍗�", "鎮ㄥソ锛屾偍鏈変竴涓柊鐨勮鏉庤鍗曪紙缂栧彿锛歿orderNo}锛夈�傝捣鐐癸細{address1}锛岀粓鐐癸細{address2}锛岄厤閫佽垂{money1}鍏冿紙鍚姞鎬ヨ垂{money2}鍏冿級銆傝灏藉揩纭璁㈠崟浠诲姟銆�", true),
+        SHOP_AUTH_REJECTED("SMS_505925106", "闂ㄥ簵绔�-璧勬枡瀹℃牳琚嫆缁�", "寰堥仐鎲撅紝鎮ㄧ殑闂ㄥ簵\"{storeName}\"鏈�氳繃瀹℃牳锛屽師鍥狅細{reason}锛屾偍鍙慨鏀硅祫鏂欏悗閲嶆柊鎻愪氦銆�", true),
+        SHOP_AUTH_APPROVED_DEPOSIT("SMS_506135030", "闂ㄥ簵绔�-瀹℃牳閫氳繃闇�缂寸撼鎶奸噾", "鎭枩鎮紒鎮ㄧ殑闂ㄥ簵\"{storeName}\"宸查�氳繃鍒濇瀹℃牳銆傝鏀粯鎶奸噾{money}鍏冧互瀹屾垚鍏ラ┗锛屾敮浠樺悗鍗冲彲鐧诲綍闂ㄥ簵鍚庡彴姝e紡鎺ュ崟銆�", true),
+        SHOP_AUTH_SUCCESS("SMS_505885083", "闂ㄥ簵绔�-鎴愬姛鍏ラ┗閫氱煡", "鎭枩鎮紒鎮ㄧ殑闂ㄥ簵\"{storeName}\"宸查�氳繃骞冲彴瀹℃牳锛屾寮忓叆椹绘垚鍔熴�� 鎮ㄥ彲鐧诲綍鍟嗗鍚庡彴寮�濮嬫帴鍗曪紝璐﹀彿锛氭敞鍐屾墜鏈哄彿锛屽垵濮嬪瘑鐮侊細锛歿password}锛堝缓璁娆$櫥褰曞悗淇敼锛夈��", true),
+        MEMBER_TIME_OUT("SMS_506190182", "浼氬憳绔�-鍗冲皢瓒呮椂", "鎮ㄧ殑琛屾潕璁㈠崟锛歿orderNo}鍗冲皢鍒拌揪棰勮鍙栦欢鏃堕棿锛岃灏藉揩鍙栦欢锛岃秴鏃跺皢浜х敓閫炬湡璐圭敤锛岃鐭ユ倝銆�", true),
         ;
 
         private final String templateCode;
         private final String title;
         private final String content;
+        private final boolean enabled;
 
         public String format(String... params) {
             String result = this.content;
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
index c656970..abecd83 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/DriverInfo.java
@@ -240,4 +240,10 @@
     @ApiModelProperty(value = "鏋佸厜鎺ㄩ�佸埆鍚�")
     private String jpushAlias;
 
+    @ApiModelProperty(value = "鍙告満鐗堟湰绫诲瀷锛�0=姝e紡鐗堟湰锛�1=鍙樻洿鐗堟湰", example = "0")
+    private Integer versionType;
+
+    @ApiModelProperty(value = "鍏宠仈姝e紡鐗堟湰鍙告満涓婚敭锛堝彉鏇寸増鏈娇鐢級", example = "1")
+    private Integer relationDriverId;
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Member.java b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
index 8e11bf3..296eac4 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Member.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Member.java
@@ -128,6 +128,9 @@
     @ApiModelProperty(value = "鐢ㄦ埛绫诲瀷锛�0=浼氬憳鐢ㄦ埛锛�1=鍙告満锛�2=搴楅摵浜哄憳锛�(鍙告満涓庡簵閾哄潎鍜屼細鍛樿〃浣跨敤鍚屼富閿��)", example = "1")
     private Integer userType;
 
+    @ApiModelProperty(value = "宸茬櫥褰曠殑闂ㄥ簵涓婚敭", example = "1")
+    private Integer loginShopId;
+
     @ApiModelProperty(value = "涓氬姟鐘舵�侊細0=鏈璇侊紱1=璁よ瘉閫氳繃锛�2=璁よ瘉鏈�氳繃 锛�3=宸叉敮浠樻娂閲�", example = "1")
     private Integer businessStatus;
 
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
index eb14c99..ad38d6f 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
@@ -371,12 +371,12 @@
 
     @TableField(exist = false)
     @ApiModelProperty(value = "鍒涘缓寮�濮嬫椂闂�(鏌ヨ鐢�)", example = "2026-01-01 00:00:00")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createStartTime;
 
     @TableField(exist = false)
     @ApiModelProperty(value = "鍒涘缓缁撴潫鏃堕棿(鏌ヨ鐢�)", example = "2026-12-31 23:59:59")
-    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date createEndTime;
 
     @TableField(exist = false)
@@ -448,6 +448,12 @@
     private Integer shopId;
 
 
+    @ApiModelProperty(value = "搴楅摵璁㈠崟搴忓彿")
+    private Long autoNum;
+
+    @ApiModelProperty(value = "鍙栦欢鏃堕棿鍗冲皢鍒拌揪閫氱煡鐘舵�侊細0=鏈�氱煡锛�1=宸查�氱煡")
+    private Integer pickUpNotifyStatus;
+
     @ApiModelProperty(value = "搴忓彿")
     @TableField(exist = false)
     private Integer sortNum;
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java b/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
index b93c060..599ddb8 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/ShopInfo.java
@@ -189,6 +189,24 @@
     @ApiModelProperty(value = "鑺儴浜戞墦鍗版満SN缂栧彿")
     private String printerSn;
 
+    @ApiModelProperty(value = "鏀剁泭姣斾緥閰嶇疆(JSON)", notes = "{\n" +
+            "  \"localDeposit\": 5,\n" +
+            "  \"remoteDeposit\": 5,\n" +
+            "  \"remoteTake\": 5\n" +
+            "}")
+    private String revenueShareConfig;
+
+    @ApiModelProperty(value = "闂ㄥ簵鐗堟湰绫诲瀷锛�0=姝e紡鐗堟湰锛�1=鍙樻洿鐗堟湰", example = "0")
+    private Integer versionType;
+
+    @ApiModelProperty(value = "鍏宠仈姝e紡鐗堟湰闂ㄥ簵涓婚敭锛堝彉鏇寸増鏈娇鐢級", example = "1")
+    private Integer relationShopId;
+
+
+    @ApiModelProperty(value = "褰撳墠鐧诲綍鐨勪細鍛樹富閿�", hidden = true)
+    @TableField(exist = false)
+    private Integer memberId;
+
 
     // 闈炴寔涔呭寲锛氶檮浠跺垪琛�
     @TableField(exist = false)
diff --git a/server/services/src/main/java/com/doumee/dao/dto/DriverActiveOrderDTO.java b/server/services/src/main/java/com/doumee/dao/dto/DriverActiveOrderDTO.java
index 4b6bbe9..8c2ce57 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/DriverActiveOrderDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/DriverActiveOrderDTO.java
@@ -19,4 +19,7 @@
     @ApiModelProperty(value = "璁㈠崟鐘舵�侊細3=宸叉姠鍗曪紱4=娲鹃�佷腑", example = "3", required = true)
     private Integer status;
 
+    @ApiModelProperty(value = "鎼滅储鍏抽敭璇嶏紙鏀朵欢浜�/鏀朵欢浜虹數璇濇ā绯�/璁㈠崟鍙风簿鍑嗭級")
+    private String keyword;
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java b/server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java
index fafc9ad..8bd533b 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/MyOrderDTO.java
@@ -21,4 +21,7 @@
     @ApiModelProperty(value = "鍚堝苟鐘舵�侊紙鍙�夛紝涓嶄紶鏌ュ叏閮級: 0=寰呮敮浠� 1=寰呮牳楠� 2=寰呴厤閫� 3=寰呮敹璐� 4=宸插畬鎴� 5=閫�娆� 6浼氬憳棣栭〉 7闂ㄥ簵寰呭鐞嗚鍗�", example = "0")
     private Integer combinedStatus;
 
+    @ApiModelProperty(value = "鎼滅储鍏抽敭璇嶏紙鏀朵欢浜�/鏀朵欢浜虹數璇濇ā绯�/璁㈠崟鍙风簿鍑嗭級")
+    private String keyword;
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java b/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java
index 52d541d..a61acef 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/OperationConfigDTO.java
@@ -46,4 +46,10 @@
     @ApiModelProperty(value = "榛樿閰嶉�佽寖鍥�(km)", required = true)
     private String defaultDeliveryRange;
 
+    @ApiModelProperty(value = "鍗冲皢鍒拌揪鍙栦欢鏃堕棿鎻愬墠閫氱煡(鍒嗛挓)", required = true)
+    private String arrivalPickUpTime;
+
+    @ApiModelProperty(value = "鍏佽鎿嶄綔鍗婂緞(m)", required = true)
+    private String operationRadius;
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/dto/RevenueShareItemDTO.java b/server/services/src/main/java/com/doumee/dao/dto/RevenueShareItemDTO.java
index a06536b..d107fc0 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/RevenueShareItemDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/RevenueShareItemDTO.java
@@ -16,7 +16,7 @@
 @ApiModel("鍒嗘垚姣斾緥瑙勫垯椤�")
 public class RevenueShareItemDTO implements Serializable {
 
-    @ApiModelProperty(value = "绫诲瀷(0=浼佷笟瀵�, 1=涓汉瀵�, 2=浼佷笟鍙�, 3=涓汉鍙�, 4=閰嶉�佸憳)", required = true, example = "0")
+    @ApiModelProperty(value = "绫诲瀷(0=寮傚湴浼佷笟瀵�, 1=寮傚湴涓汉瀵�, 2=寮傚湴浼佷笟鍙�, 3=寮傚湴涓汉鍙�, 4=閰嶉�佸憳, 5=灏卞湴浼佷笟瀛�, 6=灏卞湴涓汉瀛�)", required = true, example = "0")
     @NotNull(message = "绫诲瀷涓嶈兘涓虹┖")
     private Integer fieldType;
 
diff --git a/server/services/src/main/java/com/doumee/dao/dto/RevenueShareSaveDTO.java b/server/services/src/main/java/com/doumee/dao/dto/RevenueShareSaveDTO.java
index b34bfb2..31b2f3b 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/RevenueShareSaveDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/RevenueShareSaveDTO.java
@@ -23,7 +23,7 @@
     @NotNull(message = "鍩庡競涓婚敭涓嶈兘涓虹┖")
     private Integer cityId;
 
-    @ApiModelProperty(value = "瑙勫垯鏄庣粏鍒楄〃(浼佷笟瀵�/涓汉瀵�/浼佷笟鍙�/涓汉鍙�/閰嶉�佸憳鍏�5鏉�)", required = true)
+    @ApiModelProperty(value = "瑙勫垯鏄庣粏鍒楄〃(寮傚湴浼佷笟瀵�/寮傚湴涓汉瀵�/寮傚湴浼佷笟鍙�/寮傚湴涓汉鍙�/閰嶉�佸憳/灏卞湴浼佷笟瀛�/灏卞湴涓汉瀛樺叡7鏉�)", required = true)
     @NotEmpty(message = "瑙勫垯鏄庣粏涓嶈兘涓虹┖")
     @Valid
     private List<RevenueShareItemDTO> items;
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java
index a3d8b58..d36e7fc 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopApplyDTO.java
@@ -111,4 +111,13 @@
     @ApiModelProperty(value = "鏀粯瀹濆疄鍚嶅鍚�", required = true)
     @NotBlank(message = "鏀粯瀹濆疄鍚嶅鍚嶄笉鑳戒负绌�")
     private String aliName;
+
+    @ApiModelProperty(value = "灏卞湴瀵勫瓨鍒嗘垚鍗犳瘮(%)", required = true, example = "5.5")
+    private Double localDeposit;
+
+    @ApiModelProperty(value = "寮傚湴瀛樹欢鍒嗘垚鍗犳瘮(%)", required = true, example = "5.5")
+    private Double remoteDeposit;
+
+    @ApiModelProperty(value = "寮傚湴鍙栦欢鍒嗘垚鍗犳瘮(%)", required = true, example = "5.5")
+    private Double remoteTake;
 }
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopLoginDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopLoginDTO.java
index 0692f05..833ef7b 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/ShopLoginDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopLoginDTO.java
@@ -8,8 +8,8 @@
 @ApiModel("闂ㄥ簵鐧诲綍璇锋眰瀵硅薄")
 public class ShopLoginDTO {
 
-    @ApiModelProperty(value = "openid")
-    private String openid;
+    @ApiModelProperty(value = "浼氬憳涓婚敭")
+    private Integer memberId;
 
     @ApiModelProperty(value = "鐧诲綍鎵嬫満鍙�")
     private String telephone;
diff --git a/server/services/src/main/java/com/doumee/dao/dto/ShopUpdateDTO.java b/server/services/src/main/java/com/doumee/dao/dto/ShopUpdateDTO.java
index 079e950..c373464 100644
--- a/server/services/src/main/java/com/doumee/dao/dto/ShopUpdateDTO.java
+++ b/server/services/src/main/java/com/doumee/dao/dto/ShopUpdateDTO.java
@@ -118,4 +118,16 @@
     @NotBlank(message = "鏀粯瀹濆疄鍚嶅鍚嶄笉鑳戒负绌�")
     private String aliName;
 
+    @ApiModelProperty(value = "灏卞湴瀵勫瓨鍒嗘垚鍗犳瘮(%)", required = true, example = "5.5")
+    @NotNull(message = "灏卞湴瀵勫瓨鍒嗘垚鍗犳瘮涓嶈兘涓虹┖")
+    private Double localDeposit;
+
+    @ApiModelProperty(value = "寮傚湴瀛樹欢鍒嗘垚鍗犳瘮(%)", required = true, example = "5.5")
+    @NotNull(message = "寮傚湴瀛樹欢鍒嗘垚鍗犳瘮涓嶈兘涓虹┖")
+    private Double remoteDeposit;
+
+    @ApiModelProperty(value = "寮傚湴鍙栦欢鍒嗘垚鍗犳瘮(%)", required = true, example = "5.5")
+    @NotNull(message = "寮傚湴鍙栦欢鍒嗘垚鍗犳瘮涓嶈兘涓虹┖")
+    private Double remoteTake;
+
 }
diff --git a/server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java b/server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java
index 0c6f6af..783e31e 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/PlatformAboutVO.java
@@ -61,4 +61,7 @@
 
     @ApiModelProperty(value = "绂佸瘎鐗╁搧")
     private String prohibitedItems;
+
+    @ApiModelProperty(value = "鏈嶅姟鐢佃瘽")
+    private String serverPhone;
 }
diff --git a/server/services/src/main/java/com/doumee/dao/vo/RevenueShareVO.java b/server/services/src/main/java/com/doumee/dao/vo/RevenueShareVO.java
index e97a584..f15b618 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/RevenueShareVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/RevenueShareVO.java
@@ -21,7 +21,7 @@
     @ApiModelProperty(value = "鍩庡競涓婚敭")
     private Integer cityId;
 
-    @ApiModelProperty(value = "绫诲瀷(0=浼佷笟瀵�, 1=涓汉瀵�, 2=浼佷笟鍙�, 3=涓汉鍙�, 4=閰嶉�佸憳)")
+    @ApiModelProperty(value = "绫诲瀷(0=寮傚湴浼佷笟瀵�, 1=寮傚湴涓汉瀵�, 2=寮傚湴浼佷笟鍙�, 3=寮傚湴涓汉鍙�, 4=閰嶉�佸憳, 5=灏卞湴浼佷笟瀛�, 6=灏卞湴涓汉瀛�)")
     private Integer fieldType;
 
     @ApiModelProperty(value = "绫诲瀷鍚嶇О")
diff --git a/server/services/src/main/java/com/doumee/dao/vo/ShopDetailVO.java b/server/services/src/main/java/com/doumee/dao/vo/ShopDetailVO.java
index 12f7721..f67e6d0 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/ShopDetailVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/ShopDetailVO.java
@@ -127,6 +127,9 @@
     @ApiModelProperty(value = "闂ㄥ簵璇勫垎")
     private BigDecimal score;
 
+    @ApiModelProperty(value = "閰嶉�佽窛绂�")
+    private BigDecimal deliveryRange;
+
     @ApiModelProperty(value = "鍒涘缓鏃堕棿")
     private Date createTime;
 
@@ -172,4 +175,19 @@
 
     @ApiModelProperty(value = "闂ㄥ簵澶村儚锛堝叏璺緞锛�")
     private String shopAvatar;
+
+    @ApiModelProperty(value = "灏卞湴瀵勫瓨鍒嗘垚鍗犳瘮(%)", example = "5.5")
+    private Double localDeposit;
+
+    @ApiModelProperty(value = "寮傚湴瀛樹欢鍒嗘垚鍗犳瘮(%)", example = "5.5")
+    private Double remoteDeposit;
+
+    @ApiModelProperty(value = "寮傚湴鍙栦欢鍒嗘垚鍗犳瘮(%)", example = "5.5")
+    private Double remoteTake;
+
+    @ApiModelProperty(value = "闂ㄥ簵鐗堟湰绫诲瀷锛�0=姝e紡鐗堟湰锛�1=鍙樻洿鐗堟湰", example = "0")
+    private Integer versionType;
+
+    @ApiModelProperty(value = "鍏宠仈姝e紡鐗堟湰闂ㄥ簵涓婚敭")
+    private Integer relationShopId;
 }
diff --git a/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java b/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
index 63ff222..d6cdc3c 100644
--- a/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
+++ b/server/services/src/main/java/com/doumee/dao/vo/UserCenterVO.java
@@ -45,7 +45,7 @@
     @ApiModelProperty(value = "鎴戞敞鍐岀殑闂ㄥ簵涓婚敭锛堥棬搴楃敤鎴锋椂杩斿洖锛�")
     private Integer shopId;
 
-    @ApiModelProperty(value = "鎴戞敞鍐岀殑闂ㄥ簵瀹℃牳鐘舵�侊紙闂ㄥ簵鐢ㄦ埛鏃惰繑鍥烇級: 0=寰呭鏍� 1=宸查�氳繃 2=宸查┏鍥� 3=宸茬即绾充繚璇侀噾")
+    @ApiModelProperty(value = "鎴戞敞鍐岀殑闂ㄥ簵瀹℃牳鐘舵��: 0=寰呭鎵� 1=宸查�氳繃 2=宸查┏鍥� 3=宸叉敮浠樻娂閲� 4=鍙樻洿涓� 5=鍙樻洿鏈�氳繃")
     private Integer shopAuditStatus;
 
     @ApiModelProperty(value = "鎴戝綋鍓嶇粦瀹氱殑闂ㄥ簵")
diff --git a/server/services/src/main/java/com/doumee/service/business/MemberService.java b/server/services/src/main/java/com/doumee/service/business/MemberService.java
index 5c45c70..9d57477 100644
--- a/server/services/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/services/src/main/java/com/doumee/service/business/MemberService.java
@@ -14,6 +14,7 @@
 import com.doumee.dao.dto.UpdMobileRequest;
 import com.doumee.dao.dto.WxPhoneRequest;
 import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.vo.MemberContactVO;
 import com.doumee.dao.vo.MemberDetailVO;
 import com.doumee.dao.vo.MemberListVO;
 import com.doumee.dao.vo.PlatformAboutVO;
@@ -153,6 +154,8 @@
 
     void logOff(String token,Integer memberId);
 
+    MemberContactVO getContactInfo(Integer memberId);
+
 
     /**
      * 楠岃瘉鎵嬫満鍙�
diff --git a/server/services/src/main/java/com/doumee/service/business/OrdersService.java b/server/services/src/main/java/com/doumee/service/business/OrdersService.java
index d990ee3..faf1a71 100644
--- a/server/services/src/main/java/com/doumee/service/business/OrdersService.java
+++ b/server/services/src/main/java/com/doumee/service/business/OrdersService.java
@@ -431,4 +431,21 @@
      */
     void printOrderLabel(Integer orderId, Integer shopId);
 
+    /**
+     * 鍗冲皢鍒拌揪鍙栦欢鏃堕棿閫氱煡
+     * @return 閫氱煡鏁伴噺
+     */
+    int notifyArrivalPickUp();
+
+    /**
+     * 鏍¢獙鎿嶄綔鍗婂緞
+     * @param orderId     璁㈠崟涓婚敭
+     * @param userId      鎿嶄綔鐢ㄦ埛涓婚敭
+     * @param userType    鐢ㄦ埛绫诲瀷锛�0=闂ㄥ簵锛�1=鍙告満
+     * @param lng         鎿嶄綔浜虹粡搴�
+     * @param lat         鎿嶄綔浜虹含搴�
+     * @return true=鍦ㄥ厑璁告搷浣滆寖鍥村唴锛沠alse=瓒呭嚭鍏佽鎿嶄綔鑼冨洿
+     */
+    Boolean checkOperationRadius(Integer orderId, Integer userId, Integer userType, Double lng, Double lat);
+
 }
\ No newline at end of file
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
index 3ef3ae7..8c8d14b 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/DriverInfoServiceImpl.java
@@ -300,7 +300,9 @@
         String code = RandomStringUtils.randomNumeric(6);
         // 鍙戦�佺煭淇�
         String templateParam = "{\"code\":\"" + code + "\"}";
-        AliSmsService.sendSms(telephone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam);
+        if (Constants.SmsNotify.VERIFY_CODE.isEnabled()) {
+            AliSmsService.sendSms(telephone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam);
+        }
         // 淇濆瓨鐭俊璁板綍
         Smsrecord smsrecord = new Smsrecord();
         smsrecord.setDeleted(Constants.ZERO);
@@ -406,6 +408,7 @@
             driverInfo.setMemberId(member.getId());
             driverInfo.setStatus(Constants.ZERO);
             driverInfo.setAuditStatus(99);
+            driverInfo.setVersionType(Constants.ZERO);
             driverInfo.setJpushAlias(org.springframework.util.DigestUtils.md5DigestAsHex(telephone.getBytes()));
             driverInfoMapper.insert(driverInfo);
         }
@@ -1143,6 +1146,13 @@
                 .eq(Objects.nonNull(dto.getStatus()),Orders::getStatus, dto.getStatus())
                 .eq(Orders::getDeleted, Constants.ZERO)
                 .orderByAsc(Orders::getAcceptTime);
+        // 鍏抽敭璇嶆悳绱細鏀朵欢浜�/鏀朵欢浜虹數璇濇ā绯娿�佽鍗曞彿绮惧噯
+        if (StringUtils.isNotBlank(dto.getKeyword())) {
+            String kw = dto.getKeyword().trim();
+            wrapper.and(w -> w.like(Orders::getTakeUser, kw)
+                    .or().like(Orders::getTakePhone, kw)
+                    .or().eq(Orders::getCode, kw));
+        }
 
         List<Orders> ordersList = ordersMapper.selectJoinList(Orders.class, wrapper);
 
@@ -1876,6 +1886,9 @@
         if (StringUtils.isBlank(phone)) {
             return;
         }
+        if (!smsNotify.isEnabled()) {
+            return;
+        }
         String content = smsNotify.format(paramPairs);
         try {
             JSONObject templateParam = new JSONObject();
@@ -1996,7 +2009,7 @@
                 .select("s1.name", Orders::getDepositShopName)
                 .select("s1.address", Orders::getDepositShopAddress)
                 .select("s2.name", Orders::getTakeShopName)
-                .select("s2.address", Orders::getDepositShopAddress)
+                .select("s2.address", Orders::getTakeShopAddress)
                 .select("s1.link_phone as takeShopLinkPhone")
                 .select("s2.link_phone as takeShopLinkPhone")
                 .select("c2.other_field as c2OtherField")
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 1d4bd15..d7fe3f3 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -25,6 +25,7 @@
 import com.doumee.dao.dto.UpdMobileRequest;
 import com.doumee.dao.dto.WxPhoneRequest;
 import com.doumee.dao.vo.AccountResponse;
+import com.doumee.dao.vo.MemberContactVO;
 import com.doumee.dao.vo.MemberDetailVO;
 import com.doumee.dao.vo.MemberListVO;
 import com.doumee.dao.vo.PlatformAboutVO;
@@ -353,13 +354,40 @@
      * 闂ㄥ簵鐢ㄦ埛韬唤鏃讹紝濉厖闂ㄥ簵瀹℃牳鐘舵��
      */
     private void fillShopInfo(UserCenterVO userCenterVO, Member member) {
-        ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+        // 鏌ヨ姝e紡鐗堟湰闂ㄥ簵
+        ShopInfo official = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
                 .eq(ShopInfo::getRegionMemberId, member.getId())
+                .eq(ShopInfo::getVersionType, Constants.ZERO)
                 .eq(ShopInfo::getDeleted, Constants.ZERO)
                 .last("limit 1"));
-        if (shopInfo != null) {
-            userCenterVO.setShopId(shopInfo.getId());
-            userCenterVO.setShopAuditStatus(shopInfo.getAuditStatus());
+        if (official != null) {
+            userCenterVO.setShopId(official.getId());
+            if (Constants.equalsInteger(official.getAuditStatus(), Constants.THREE)) {
+                // 姝e紡鐗堟湰宸叉敮浠樻娂閲戯紝鏌ヨ鏈�鏂板彉鏇寸増鏈姸鎬�
+                ShopInfo changeVersion = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
+                        .eq(ShopInfo::getRelationShopId, official.getId())
+                        .eq(ShopInfo::getVersionType, Constants.ONE)
+                        .eq(ShopInfo::getDeleted, Constants.ZERO)
+                        .orderByDesc(ShopInfo::getCreateTime)
+                        .last("limit 1"));
+                if (changeVersion != null) {
+                    if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.THREE)) {
+                        userCenterVO.setShopAuditStatus(Constants.THREE);
+                    } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.ZERO)) {
+                        userCenterVO.setShopAuditStatus(4); // 鍙樻洿涓�
+                    } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.TWO)) {
+                        userCenterVO.setShopAuditStatus(5); // 鍙樻洿鏈�氳繃
+                    } else {
+                        userCenterVO.setShopAuditStatus(Constants.THREE);
+                    }
+                } else {
+                    // 鏃犲彉鏇寸増鏈紝淇濇寔姝e紡鐗堟湰鐘舵��
+                    userCenterVO.setShopAuditStatus(Constants.THREE);
+                }
+            } else {
+                // 姝e紡鐗堟湰鏈敮浠樻娂閲戯紝鐩存帴杩斿洖褰撳墠鐘舵��
+                userCenterVO.setShopAuditStatus(official.getAuditStatus());
+            }
         }
         // 鏍规嵁openid鏌ヨ褰撳墠缁戝畾鐨勯棬搴�
         if (StringUtils.isNotBlank(member.getOpenid())) {
@@ -458,6 +486,7 @@
         vo.setDriverPrivacyPolicy(getDictValue(Constants.DRIVER_PRIVACY_POLICY));
         vo.setPriceDescription(getDictValue(Constants.PRICE_DESCRIPTION));
         vo.setProhibitedItems(getDictValue(Constants.PROHIBITED_ITEMS));
+        vo.setServerPhone(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.SERVER_PHONE).getCode()));
         return vo;
     }
 
@@ -473,8 +502,14 @@
     public void logOut(String token,Integer userId,Integer userType){
         if(Constants.equalsInteger(userType,Constants.ZERO)){
             memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" openid = null ").eq(Member::getId,userId));
-        }else if(Constants.equalsInteger(userType,Constants.TWO)){
-            shopInfoMapper.update(new UpdateWrapper<ShopInfo>().lambda().setSql(" openid = null ").eq(ShopInfo::getId,userId));
+        }else if (Constants.equalsInteger(userType,Constants.TWO)){
+            try {
+                Integer lastIndex = token.lastIndexOf("_")+1;
+                Integer tokenId = Integer.valueOf(token.substring(lastIndex));
+                memberMapper.update(new UpdateWrapper<Member>().lambda().setSql(" LOGIN_SHOP_ID = null ").eq(Member::getId,tokenId));
+            }catch (Exception e){
+
+            }
         }
         jwtTokenUtil.logout(token);
     }
@@ -493,6 +528,31 @@
         redisTemplate.delete(token);
     }
 
+    @Override
+    public MemberContactVO getContactInfo(Integer memberId) {
+        MemberContactVO vo = new MemberContactVO();
+        // 浼樺厛浠庡巻鍙茶鍗曞彇鏀朵欢浜轰俊鎭�
+        Orders lastOrder = ordersMapper.selectOne(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getMemberId, memberId)
+                .eq(Orders::getDeleted, Constants.ZERO)
+                .isNotNull(Orders::getTakeUser)
+                .ne(Orders::getTakeUser, "")
+                .orderByDesc(Orders::getId)
+                .last("limit 1"));
+        if (lastOrder != null && StringUtils.isNotBlank(lastOrder.getTakeUser())) {
+            vo.setName(lastOrder.getTakeUser());
+            vo.setPhone(lastOrder.getTakePhone());
+            return vo;
+        }
+        // 鍙栫敤鎴蜂俊鎭�
+        Member member = memberMapper.selectById(memberId);
+        if (member != null) {
+            vo.setName(member.getName() != null ? member.getName() : "");
+            vo.setPhone(member.getTelephone() != null ? member.getTelephone() : "");
+        }
+        return vo;
+    }
+
 
     /***************绠$悊绔細鍛樺垪琛ㄦ帴鍙�*************/
 
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java
index de00b2b..e751eea 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersRefundServiceImpl.java
@@ -173,7 +173,7 @@
                 wrapper.ge(OrdersRefund::getCreateTime, model.getCreateStartTime());
             }
             if (model.getCreateEndTime() != null) {
-                wrapper.le(OrdersRefund::getCreateTime, model.getCreateEndTime());
+                wrapper.le(OrdersRefund::getCreateTime, Utils.Date.getEnd(model.getCreateEndTime()));
             }
         }
 
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
index e5e9a24..13217de 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -21,6 +21,7 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.core.utils.DateUtil;
+import com.doumee.core.utils.GeoUtils;
 import com.doumee.core.utils.ID;
 import com.doumee.core.utils.geocode.MapUtil;
 import com.doumee.core.utils.Utils;
@@ -237,7 +238,7 @@
         queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getTakeShopName()),  "s2.name",  pageWrap.getModel().getTakeShopName());
         queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getGoodsInfo()), Orders::getGoodsInfo, pageWrap.getModel().getGoodsInfo());
         queryWrapper.ge(pageWrap.getModel().getCreateStartTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateStartTime());
-        queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, pageWrap.getModel().getCreateEndTime());
+        queryWrapper.le(pageWrap.getModel().getCreateEndTime() != null, Orders::getCreateTime, Utils.Date.getEnd(pageWrap.getModel().getCreateEndTime()));
         queryWrapper.eq(pageWrap.getModel().getDepositShopId() != null, Orders::getDepositShopId, pageWrap.getModel().getDepositShopId());
         queryWrapper.eq(pageWrap.getModel().getType() != null, Orders::getType, pageWrap.getModel().getType());
         queryWrapper.eq(pageWrap.getModel().getStatus() != null, Orders::getStatus, pageWrap.getModel().getStatus());
@@ -254,6 +255,9 @@
             if (o.getStatus() != null) {
                 Constants.OrderStatus os = Constants.OrderStatus.getByKey(o.getStatus());
                 o.setStatusDesc(os != null ? os.getValue() : "");
+            }
+            if(Constants.equalsInteger(o.getIsUrgent(),Constants.ZERO)){
+                o.setUrgentAmount(Constants.ZERO.longValue());
             }
         }
         return pageData;
@@ -504,6 +508,7 @@
         // 3. 閫愰」璁$畻杩愯垂锛氳捣姝ヤ环 + 瓒呭嚭閮ㄥ垎闃舵浠�
         List<ItemPriceVO> itemList = new ArrayList<>();
         long itemPriceTotal = 0L;
+        long maxExtraFeeTotal = 0L; // 鏈�澶ц秴鍑鸿窛绂昏垂鐢紙鍗曚环脳鏁伴噺锛�
 
         for (OrderItemDTO item : dto.getItems()) {
             PricingRule rule = ruleMap.get(String.valueOf(item.getCategoryId()));
@@ -519,13 +524,15 @@
             long extraPricePerUnit = Long.parseLong(rule.getFieldE());
 
             // 闃舵璁′环锛氳窛绂� 鈮� 璧锋璺濈鍙栬捣姝ヤ环锛岃秴鍑烘寜 ceil(瓒呭嚭璺濈/鍗曚綅) 脳 鍗曚环绱姞
+            long extraFee = 0L;
             long unitPrice;
             if (distanceKm.compareTo(startDistance) <= 0) {
                 unitPrice = startPrice;
             } else {
                 BigDecimal extraKm = distanceKm.subtract(startDistance);
                 BigDecimal extraCount = extraKm.divide(extraDistanceUnit, 0, RoundingMode.CEILING);
-                unitPrice = startPrice + extraCount.longValue() * extraPricePerUnit;
+                extraFee = extraCount.longValue() * extraPricePerUnit;
+                unitPrice = startPrice + extraFee;
             }
 
             long subtotal = unitPrice * item.getQuantity();
@@ -548,8 +555,17 @@
             vo.setExtraPrice(extraPricePerUnit);
             itemList.add(vo);
 
-            itemPriceTotal += subtotal;
+            // 鎵�鏈夌墿鍝佺殑璧锋浠访楁暟閲� 绱姞
+            itemPriceTotal += startPrice * item.getQuantity();
+            // 璁板綍鏈�澶х殑瓒呭嚭璺濈璐圭敤
+            long extraFeeTotal = extraFee * item.getQuantity();
+            if (extraFeeTotal > maxExtraFeeTotal) {
+                maxExtraFeeTotal = extraFeeTotal;
+            }
         }
+
+        // 澶氱墿鍝佹椂鍙姞鏈�澶х殑瓒呭嚭璺濈璐圭敤
+        itemPriceTotal += maxExtraFeeTotal;
 
         // 4. 淇濅环璐圭敤锛氭姤浠烽噾棰� 脳 淇濅环璐圭巼(瀛楀吀 INSURANCE_RATE)锛屽厓鈫掑垎锛堜繚浠烽噾棰�>0鏃惰璐癸級
         long insuranceFeeFen = 0L;
@@ -1432,20 +1448,31 @@
             return;
         }
         Integer cityId = Integer.valueOf(orders.getCityId());
+        boolean isRemote = Constants.equalsInteger(orders.getType(), Constants.ONE);
+        boolean isCompany = Constants.equalsInteger(depositShop.getCompanyType(), Constants.ONE);
 
-        // 鍙告満鍗犳瘮锛歠ieldA=4锛堥厤閫佸憳锛�
+        // 鍙告満鍗犳瘮锛歠ieldA=4锛堥厤閫佸憳锛夛紝濮嬬粓浠庡煄甯傞厤缃彇
         BigDecimal driverRata = getRevenueShareRata(cityId, Constants.FOUR);
-        // 瀵勪欢闂ㄥ簵鍗犳瘮锛歠ieldA=0(浼佷笟瀵�)/1(涓汉瀵�)
-        int depositFieldA = Constants.equalsInteger(depositShop.getCompanyType(), Constants.ONE) ? Constants.ZERO : Constants.ONE;
-        BigDecimal depositShopRata = getRevenueShareRata(cityId, depositFieldA);
-        // 鍙栦欢闂ㄥ簵鍗犳瘮锛氭棤鍙栦欢闂ㄥ簵鏃舵瘮渚嬩负0
-        BigDecimal takeShopRata = BigDecimal.ZERO;
-        if (takeShop != null) {
-            int takeFieldA = Constants.equalsInteger(takeShop.getCompanyType(), Constants.ONE) ? Constants.TWO : Constants.THREE;
-            takeShopRata = getRevenueShareRata(cityId, takeFieldA);
+
+        // 瀛樹欢闂ㄥ簵鍗犳瘮
+        BigDecimal depositShopRata;
+        if (isRemote) {
+            int fallbackFieldA = isCompany ? Constants.ZERO : Constants.ONE;
+            depositShopRata = getShopRevenueShare(depositShop, "remoteDeposit", cityId, fallbackFieldA);
+        } else {
+            int fallbackFieldA = isCompany ? Constants.FIVE : Constants.SIX;
+            depositShopRata = getShopRevenueShare(depositShop, "localDeposit", cityId, fallbackFieldA);
         }
 
-        // 璁$畻钖叕锛堝垎锛夛細totalAmount 涓哄垎锛宺ata 涓烘瘮渚嬪�硷紙濡� 0.15 琛ㄧず 15%锛�
+        // 鍙栦欢闂ㄥ簵鍗犳瘮
+        BigDecimal takeShopRata = BigDecimal.ZERO;
+        if (isRemote && takeShop != null) {
+            boolean takeIsCompany = Constants.equalsInteger(takeShop.getCompanyType(), Constants.ONE);
+            int fallbackFieldA = takeIsCompany ? Constants.TWO : Constants.THREE;
+            takeShopRata = getShopRevenueShare(takeShop, "remoteTake", cityId, fallbackFieldA);
+        }
+
+        // 璁$畻钖叕锛堝垎锛�
         long driverFee = new BigDecimal(totalAmount).multiply(driverRata).longValue();
         long depositShopFee = new BigDecimal(totalAmount).multiply(depositShopRata).longValue();
         long takeShopFee = new BigDecimal(totalAmount).multiply(takeShopRata).longValue();
@@ -1462,7 +1489,7 @@
      * 浠� pricing_rule 琛ㄨ幏鍙栧垎鎴愭瘮渚嬶紙type=4锛�
      *
      * @param cityId   鍩庡競涓婚敭
-     * @param fieldA   绫诲瀷锛�0=浼佷笟瀵�, 1=涓汉瀵�, 2=浼佷笟鍙�, 3=涓汉鍙�, 4=閰嶉�佸憳
+     * @param fieldA   绫诲瀷锛�0=寮傚湴浼佷笟瀵�, 1=寮傚湴涓汉瀵�, 2=寮傚湴浼佷笟鍙�, 3=寮傚湴涓汉鍙�, 4=閰嶉�佸憳, 5=灏卞湴浼佷笟瀛�, 6=灏卞湴涓汉瀛�
      * @return 鍒嗘垚姣斾緥锛堝 0.15 琛ㄧず 15%锛�
      */
     private BigDecimal getRevenueShareRata(Integer cityId, int fieldA) {
@@ -1473,10 +1500,35 @@
                 .eq(PricingRule::getFieldA, String.valueOf(fieldA))
                 .last("limit 1"));
         if (rule != null && StringUtils.isNotBlank(rule.getFieldB())) {
-            // fieldB 瀛樺偍鐨勬槸鐧惧垎姣旀暣鏁帮紙濡�15琛ㄧず15%锛夛紝杞崲涓哄皬鏁版瘮渚嬶紙0.15锛�
+            // fieldB 瀛樺偍鐨勬槸鐧惧垎姣旀暟瀛楋紙濡�15琛ㄧず15%锛夛紝杞崲涓哄皬鏁版瘮渚嬶紙0.15锛�
             return new BigDecimal(rule.getFieldB()).divide(new BigDecimal("100"), 4, BigDecimal.ROUND_HALF_UP);
         }
         return BigDecimal.ZERO;
+    }
+
+    /**
+     * 鑾峰彇闂ㄥ簵鏀剁泭鍗犳瘮锛氫紭鍏堜粠闂ㄥ簵 revenueShareConfig 鍙栵紝鏃犲垯鍏滃簳鍩庡競 pricing_rule
+     *
+     * @param shop           闂ㄥ簵淇℃伅
+     * @param jsonKey        revenueShareConfig 涓殑閿悕
+     * @param cityId         鍩庡競涓婚敭锛堝厹搴曠敤锛�
+     * @param fallbackFieldA 鍏滃簳 pricing_rule fieldA 鍊�
+     * @return 鍒嗘垚姣斾緥
+     */
+    private BigDecimal getShopRevenueShare(ShopInfo shop, String jsonKey, Integer cityId, int fallbackFieldA) {
+        if (shop != null && StringUtils.isNotBlank(shop.getRevenueShareConfig())) {
+            try {
+                JSONObject config = JSONObject.parseObject(shop.getRevenueShareConfig());
+                if (config != null && config.containsKey(jsonKey)) {
+                    Double value = config.getDouble(jsonKey);
+                    if (value != null) {
+                        return new BigDecimal(value).divide(new BigDecimal("100"), 4, BigDecimal.ROUND_HALF_UP);
+                    }
+                }
+            } catch (Exception ignored) {
+            }
+        }
+        return getRevenueShareRata(cityId, fallbackFieldA);
     }
 
     @Override
@@ -1516,6 +1568,13 @@
                 .eq(status != null, Orders::getStatus, status)
                 .in(statusList != null, Orders::getStatus, statusList)
                 .orderByDesc(Orders::getCreateTime);
+        // 鍏抽敭璇嶆悳绱細鏀朵欢浜�/鏀朵欢浜虹數璇濇ā绯娿�佽鍗曞彿绮惧噯
+        if (model != null && StringUtils.isNotBlank(model.getKeyword())) {
+            String kw = model.getKeyword().trim();
+            wrapper.and(w -> w.like(Orders::getTakeUser, kw)
+                    .or().like(Orders::getTakePhone, kw)
+                    .or().eq(Orders::getCode, kw));
+        }
 
         IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
         List<MyOrderVO> voList = new ArrayList<>();
@@ -1665,8 +1724,20 @@
         }
 
         wrapper.eq(status != null, Orders::getStatus, status)
-                .in(statusList != null && !Constants.equalsInteger(combinedStatus, Constants.SEVEN), Orders::getStatus, statusList)
-                .orderByDesc(Orders::getId);
+                .in(statusList != null && !Constants.equalsInteger(combinedStatus, Constants.SEVEN), Orders::getStatus, statusList);
+        if(Objects.nonNull(model.getCombinedStatus())&&Constants.equalsInteger(model.getCombinedStatus(),Constants.OrderCombinedStatus.finished.getKey())){
+            wrapper.orderByDesc(Orders::getFinishTime);
+        }else{
+            wrapper.orderByDesc(Orders::getId);
+        }
+        // 鍏抽敭璇嶆悳绱細鏀朵欢浜�/鏀朵欢浜虹數璇濇ā绯娿�佽鍗曞彿绮惧噯
+        MyOrderDTO shopModel = pageWrap.getModel();
+        if (shopModel != null && StringUtils.isNotBlank(shopModel.getKeyword())) {
+            String kw = shopModel.getKeyword().trim();
+            wrapper.and(w -> w.like(Orders::getTakeUser, kw)
+                    .or().like(Orders::getTakePhone, kw)
+                    .or().eq(Orders::getCode, kw));
+        }
 
         IPage<Orders> orderPage = ordersMapper.selectJoinPage(p, Orders.class, wrapper);
         List<MyOrderVO> voList = new ArrayList<>();
@@ -2210,6 +2281,14 @@
         order.setWxExternalNo(wxTradeNo);
         order.setPayAmount(order.getTotalAmount());
         order.setUpdateTime(now);
+        // 璁$畻搴楅摵璁㈠崟搴忓彿锛氬綋鍓嶅瓨浠堕棬搴楀綋澶╁凡鏀粯璁㈠崟鏁� + 1
+        Date todayStart = DateUtil.getStartOfDay(now);
+        Long currentCount = ordersMapper.selectCount(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getDepositShopId, order.getDepositShopId())
+                .eq(Orders::getPayStatus, Constants.ONE)
+                .ge(Orders::getPayTime, todayStart)
+                .eq(Orders::getDeleted, Constants.ZERO));
+        order.setAutoNum(currentCount + 1);
         // 鐢熸垚浼氬憳鏍搁攢鐮�
         order.setMemberVerifyCode(generateVerifyCode());
         // 寮傚湴瀵勫瓨锛氳绠楅璁¢�佽揪鏃堕棿
@@ -2438,26 +2517,37 @@
         otherOrders.setUpdateTime(now);
         otherOrdersMapper.updateById(otherOrders);
 
-        // 4. 鏌ヨ闂ㄥ簵淇℃伅锛堥�氳繃娉ㄥ唽浼氬憳涓婚敭鍏宠仈锛�
+        // 4. 鏌ヨ鍙樻洿鐗堟湰闂ㄥ簵淇℃伅锛堥�氳繃娉ㄥ唽浼氬憳涓婚敭鍏宠仈锛�
         ShopInfo shopInfo = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
                 .eq(ShopInfo::getRegionMemberId, otherOrders.getMemberId())
                 .eq(ShopInfo::getDeleted, Constants.ZERO)
+                .eq(ShopInfo::getVersionType, Constants.ONE)
                 .last("limit 1"));
         if (shopInfo == null) {
-            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "闂ㄥ簵涓嶅瓨鍦�");
+            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "闂ㄥ簵鍙樻洿璁板綍涓嶅瓨鍦�");
         }
-        // 5. 鏇存柊闂ㄥ簵鐘舵�侊細宸叉敮浠樻娂閲�
-        shopInfo.setAuditStatus(Constants.THREE); // 3=宸叉敮浠樻娂閲�
+        // 5. 鏇存柊鍙樻洿鐗堟湰鏀粯鐘舵��
+        Member member = memberMapper.selectById(otherOrders.getMemberId());
+        shopInfo.setAuditStatus(Constants.THREE);
         shopInfo.setPayStatus(Constants.ONE);
         shopInfo.setPayTime(now);
         shopInfo.setWxExternalNo(wxTradeNo);
         shopInfo.setCode(otherOrders.getCode());
-        Member member = memberMapper.selectById(otherOrders.getMemberId());
         if (member != null) {
             shopInfo.setPayMemberOpenId(member.getOpenid());
         }
         shopInfo.setUpdateTime(now);
         shopInfoMapper.updateById(shopInfo);
+
+        // 6. 鍚屾鏇存柊姝e紡鐗堟湰鐘舵�佷负宸叉敮浠樻娂閲�
+        if (shopInfo.getRelationShopId() != null) {
+            ShopInfo officialShop = shopInfoMapper.selectById(shopInfo.getRelationShopId());
+            if (officialShop != null) {
+                officialShop.setAuditStatus(Constants.THREE);
+                officialShop.setUpdateTime(now);
+                shopInfoMapper.updateById(officialShop);
+            }
+        }
 
         // 鐭俊閫氱煡闂ㄥ簵锛氭垚鍔熷叆椹�
         String rawPassword = shopInfo.getTelephone() != null && shopInfo.getTelephone().length() >= 6
@@ -2804,6 +2894,10 @@
             }
             order.setMemberVerifyCode(generateVerifyCode());
             ordersMapper.updateById(order);
+            // 瀵勫瓨鏃跺浘鐗囧繀濉�
+            if (images == null || images.isEmpty()) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇蜂笂浼犲瘎瀛樺浘鐗�");
+            }
             // 淇濆瓨瀵勫瓨鍥剧墖锛坥bj_type=2 璁㈠崟瀵勫瓨鍥剧墖锛屾渶澶�3寮狅級
             saveVerifyImages(order.getId(), images, Constants.FileType.ORDER_DEPOSIT.getKey(), shopId);
             // 璁板綍璁㈠崟鏃ュ織
@@ -2841,6 +2935,12 @@
             order.setStatus(Constants.OrderStatus.finished.getStatus());
             order.setConfirmArriveTime(now);
             ordersMapper.updateById(order);
+            // 灏卞湴瀵勫瓨(type=0)鍙栦欢鏃跺浘鐗囦笉蹇呭~锛屽叾浠栫被鍨嬪彇浠跺繀濉�
+            if (!Constants.equalsInteger(order.getType(), Constants.ZERO)) {
+                if (images == null || images.isEmpty()) {
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璇蜂笂浼犲彇浠跺浘鐗�");
+                }
+            }
             // 璁㈠崟瀹屾垚锛岄噴鏀炬牳閿�鐮�
             String verifyCode = order.getMemberVerifyCode();
             if (StringUtils.isNotBlank(verifyCode)) {
@@ -3534,7 +3634,12 @@
             return "鍙告満宸插彇浠讹紝姝h繍寰�鐩殑鍦�";
         }
         if (Constants.equalsInteger(status, Constants.OrderStatus.arrived.getStatus())) {
-            return "琛屾潕宸查�佽揪鏈嶅姟鐐癸紝璇峰強鏃跺墠寰�鍙栦欢";
+            if(Constants.equalsInteger(order.getType(),Constants.ZERO)){
+                return "琛屾潕宸插瘎瀛橈紝璇峰嚟鍙栦欢鐮佸墠寰�鎸囧畾闂ㄥ簵鍙栦欢~";
+            }else{
+                return "琛屾潕宸查�佽揪鏈嶅姟鐐癸紝璇峰強鏃跺墠寰�鍙栦欢";
+            }
+
         }
         if (Constants.equalsInteger(status, Constants.OrderStatus.finished.getStatus())) {
             if (Constants.equalsInteger(order.getCommentStatus(), Constants.ONE)) {
@@ -4021,7 +4126,6 @@
                             "time", String.valueOf(noGrabMinutes));
                 }
                 // 鏍囪宸查�氱煡 + 璁板綍閫氱煡鏃堕棿
-                order.setPlatformSmsNotified(Constants.ONE);
                 order.setPlatformSmsNotifiedTime(now);
                 order.setUpdateTime(now);
                 ordersMapper.updateById(order);
@@ -4134,6 +4238,9 @@
         if (StringUtils.isBlank(phone)) {
             return;
         }
+        if (!smsNotify.isEnabled()) {
+            return;
+        }
         String content = smsNotify.format(paramPairs);
         try {
             JSONObject templateParam = new JSONObject();
@@ -4200,8 +4307,10 @@
             }
         }
 
-        //搴忓彿
-        String sort = Constants.formatIntegerNum(shopId)+"-"+orders.getId();
+        //搴忓彿锛氬晢閾篒D-鏃ユ湡-鑷闀垮簭鍙凤紙濡� 32-06-001锛�
+        String dateStr = new SimpleDateFormat("dd").format(orders.getPayTime() != null ? orders.getPayTime() : new Date());
+        String autoNumStr = String.format("%03d", orders.getAutoNum() != null ? orders.getAutoNum() : 0);
+        String sort = shopId + "-" + dateStr + "-" + autoNumStr;
 //        String content = printService.getPrintContent(shop.getName(), detailList, userInfo, orders.getCode(), orders.getRemark(),
         String content = printService.getPrintContent(shop.getName(), detailList, userInfo, orders.getCode(), sort,
                 orders.getTakeLocationRemark(),
@@ -4271,4 +4380,132 @@
         JPushUtil.sendByAliases(aliases, title, content, extras);
     }
 
+    @Override
+    public int notifyArrivalPickUp() {
+        String timeStr = operationConfigBiz.getConfig().getArrivalPickUpTime();
+        if (StringUtils.isBlank(timeStr)) {
+            return 0;
+        }
+        int minutes;
+        try {
+            minutes = Integer.parseInt(timeStr);
+        } catch (NumberFormatException e) {
+            log.warn("鍗冲皢鍒拌揪鍙栦欢鏃堕棿閰嶇疆寮傚父: {}", timeStr);
+            return 0;
+        }
+        if (minutes <= 0) {
+            return 0;
+        }
+        // 璁$畻鏃堕棿绐楀彛锛氬綋鍓嶆椂闂� + minutes 灏辨槸"鍗冲皢鍒拌揪"鐨勪复鐣岀偣
+        Date now = new Date();
+        Date threshold = new Date(now.getTime() + (long) minutes * 60 * 1000);
+        // 鏌ヨ锛歴tatus=5銆佹湭閫氱煡銆佸氨鍦板瘎瀛� or 寮傚湴(鏈夊彇浠堕棬搴�)銆侀璁″彇浠舵椂闂村湪 now~threshold 涔嬮棿
+        List<Orders> orders = ordersMapper.selectList(new QueryWrapper<Orders>().lambda()
+                .eq(Orders::getStatus, Constants.OrderStatus.arrived.getStatus())
+                .eq(Orders::getPayStatus, Constants.ONE)
+                .eq(Orders::getDeleted, Constants.ZERO)
+                .and(w -> w
+                        .eq(Orders::getType, Constants.ZERO)
+                        .or(w2 -> w2.eq(Orders::getType, Constants.ONE).isNotNull(Orders::getTakeShopId))
+                )
+                .ne(Orders::getPickUpNotifyStatus, Constants.ONE)
+                .isNotNull(Orders::getExpectedTakeTime)
+                .ge(Orders::getExpectedTakeTime, now)
+                .le(Orders::getExpectedTakeTime, threshold));
+        if (orders == null || orders.isEmpty()) {
+            return 0;
+        }
+        int count = 0;
+        for (Orders order : orders) {
+            Member member = memberMapper.selectById(order.getMemberId());
+            if (member != null && StringUtils.isNotBlank(member.getTelephone())) {
+                sendSmsNotify(member.getTelephone(), Constants.SmsNotify.MEMBER_TIME_OUT,
+                        "orderNo", order.getCode());
+            }
+            order.setPickUpNotifyStatus(Constants.ONE);
+            ordersMapper.updateById(order);
+            count++;
+        }
+        return count;
+    }
+
+    @Override
+    public Boolean checkOperationRadius(Integer orderId, Integer userId, Integer userType, Double lng, Double lat) {
+        String radiusStr = operationConfigBiz.getConfig().getOperationRadius();
+        if (StringUtils.isBlank(radiusStr)) {
+            return true;
+        }
+        double radiusM;
+        try {
+            radiusM = Double.parseDouble(radiusStr);
+        } catch (NumberFormatException e) {
+            return true;
+        }
+        if (radiusM <= 0) {
+            return true;
+        }
+        Orders order = ordersMapper.selectById(orderId);
+        if (order == null) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟涓嶅瓨鍦�");
+        }
+        BigDecimal targetLat;
+        BigDecimal targetLgt;
+        if (Constants.equalsInteger(userType, Constants.ZERO)) {
+            // 闂ㄥ簵鎿嶄綔
+            if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.waitDeposit.getStatus())) {
+                // status=1 闂ㄥ簵瀵勫瓨鏍搁獙
+                if (!Constants.equalsInteger(order.getDepositShopId(), userId)) {
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+                }
+                targetLat = order.getDepositLat();
+                targetLgt = order.getDepositLgt();
+            } else if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.arrived.getStatus())) {
+                // status=5 闂ㄥ簵瀹屾垚鏍搁攢
+                if (Constants.equalsInteger(order.getType(), Constants.ZERO)) {
+                    // 灏卞湴瀛樺彇 鈫� 瀵规瘮瀛樹欢闂ㄥ簵
+                    if (!Constants.equalsInteger(order.getDepositShopId(), userId)) {
+                        throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+                    }
+                    targetLat = order.getDepositLat();
+                    targetLgt = order.getDepositLgt();
+                } else {
+                    // 寮傚湴瀛樺彇 鈫� 瀵规瘮鍙栦欢闂ㄥ簵
+                    if (!Constants.equalsInteger(order.getTakeShopId(), userId)) {
+                        throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+                    }
+                    targetLat = order.getTakeLat();
+                    targetLgt = order.getTakeLgt();
+                }
+            } else {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟鐘舵�佷笉鍏佽姝ゆ搷浣�");
+            }
+        } else if (Constants.equalsInteger(userType, Constants.ONE)) {
+            // 鍙告満鎿嶄綔
+            if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.deposited.getStatus())) {
+                // status=2 鍙告満鍙栦欢
+                if (!Constants.equalsInteger(order.getAcceptDriver(), userId)) {
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+                }
+                targetLat = order.getDepositLat();
+                targetLgt = order.getDepositLgt();
+            } else if (Constants.equalsInteger(order.getStatus(), Constants.OrderStatus.delivering.getStatus())) {
+                // status=4 鍙告満閫佽揪
+                if (!Constants.equalsInteger(order.getAcceptDriver(), userId)) {
+                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈鎿嶄綔璇ヨ鍗�");
+                }
+                targetLat = order.getTakeLat();
+                targetLgt = order.getTakeLgt();
+            } else {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "璁㈠崟鐘舵�佷笉鍏佽姝ゆ搷浣�");
+            }
+        } else {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鐢ㄦ埛绫诲瀷涓嶅悎娉�");
+        }
+        if (targetLat == null || targetLgt == null) {
+            return true;
+        }
+        double distanceKm = GeoUtils.haversineDistance(lat, lng, targetLat.doubleValue(), targetLgt.doubleValue());
+        return distanceKm * 1000 <= radiusM;
+    }
+
 }
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java
index 88de2ea..da48d1e 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/PricingRuleServiceImpl.java
@@ -576,15 +576,15 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void batchSaveRevenueShare(RevenueShareSaveDTO request) {
-        // 鏍¢獙锛氬繀椤诲寘鍚� fieldType 0-4 鍚勪竴鏉�
+        // 鏍¢獙锛氬繀椤诲寘鍚� fieldType 0-6 鍚勪竴鏉�
         Set<Integer> fieldTypes = request.getItems().stream()
                 .map(RevenueShareItemDTO::getFieldType)
                 .collect(Collectors.toSet());
-        if (fieldTypes.size() != Constants.FIVE) {
+        if (fieldTypes.size() != Constants.SEVEN) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
-                    "蹇呴』鍖呭惈浼佷笟瀵�(0)銆佷釜浜哄瘎(1)銆佷紒涓氬彇(2)銆佷釜浜哄彇(3)銆侀厤閫佸憳(4)鍏�5鏉℃暟鎹�");
+                    "蹇呴』鍖呭惈寮傚湴浼佷笟瀵�(0)銆佸紓鍦颁釜浜哄瘎(1)銆佸紓鍦颁紒涓氬彇(2)銆佸紓鍦颁釜浜哄彇(3)銆侀厤閫佸憳(4)銆佸氨鍦颁紒涓氬瓨(5)銆佸氨鍦颁釜浜哄瓨(6)鍏�7鏉℃暟鎹�");
         }
-        for (int i = 0; i <= Constants.FOUR; i++) {
+        for (int i = 0; i <= Constants.SIX; i++) {
             if (!fieldTypes.contains(i)) {
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
                         "缂哄皯绫诲瀷" + i + "鐨勬暟鎹�");
@@ -634,10 +634,10 @@
         Map<String, PricingRule> existingMap = rules.stream()
                 .collect(Collectors.toMap(PricingRule::getFieldA, r -> r));
 
-        // 鍥哄畾杩斿洖5鏉★細浼佷笟瀵�(0)銆佷釜浜哄瘎(1)銆佷紒涓氬彇(2)銆佷釜浜哄彇(3)銆侀厤閫佸憳(4)
+        // 鍥哄畾杩斿洖7鏉★細寮傚湴浼佷笟瀵�(0)銆佸紓鍦颁釜浜哄瘎(1)銆佸紓鍦颁紒涓氬彇(2)銆佸紓鍦颁釜浜哄彇(3)銆侀厤閫佸憳(4)銆佸氨鍦颁紒涓氬瓨(5)銆佸氨鍦颁釜浜哄瓨(6)
         List<RevenueShareVO> result = new ArrayList<>();
-        String[] typeNames = {"浼佷笟瀵�", "涓汉瀵�", "浼佷笟鍙�", "涓汉鍙�", "閰嶉�佸憳"};
-        for (int i = 0; i <= Constants.FOUR; i++) {
+        String[] typeNames = {"寮傚湴浼佷笟瀵勪欢", "寮傚湴涓汉瀵勪欢", "寮傚湴浼佷笟鍙栦欢", "寮傚湴涓汉鍙栦欢", "閰嶉�佸憳", "灏卞湴浼佷笟瀛樹欢", "灏卞湴涓汉瀛樹欢"};
+        for (int i = 0; i <= Constants.SIX; i++) {
             RevenueShareVO vo = new RevenueShareVO();
             vo.setFieldType(i);
             vo.setFieldTypeName(typeNames[i]);
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
index 87cd2c6..149dd06 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/ShopInfoServiceImpl.java
@@ -258,10 +258,105 @@
     public void applyShop(ShopApplyDTO request) {
         Member member = memberMapper.selectById(request.getMemberId());
 
+        // 鏍规嵁绫诲瀷鏍¢獙闄勪欢
+        validateCompanyTypeFields(request);
 
-        // 2. 鏍规嵁绫诲瀷鏍¢獙闄勪欢
+        Date now = new Date();
+
+        // 鏌ヨ璇ヤ細鍛樻渶鏂扮殑鍙樻洿鐗堟湰璁板綍
+        QueryWrapper<ShopInfo> changeQw = new QueryWrapper<>();
+        changeQw.lambda()
+                .eq(ShopInfo::getRegionMemberId, member.getId())
+                .eq(ShopInfo::getVersionType, Constants.ONE)
+                .eq(ShopInfo::getDeleted, Constants.ZERO)
+                .orderByDesc(ShopInfo::getCreateTime)
+                .last("limit 1");
+        ShopInfo changeVersion = shopInfoMapper.selectOne(changeQw);
+
+        if (changeVersion == null) {
+            // 棣栨鐢宠锛氬垱寤烘寮忕増鏈� + 鍙樻洿鐗堟湰
+            checkTelephoneUnique(request.getTelephone(), null);
+
+            String rawPassword = generateDefaultPassword(request.getTelephone());
+            String salt = RandomStringUtils.randomAlphabetic(6);
+            String encryptedPassword = Utils.Secure.encryptPassword(rawPassword, salt);
+
+            // 姝e紡鐗堟湰
+            ShopInfo official = new ShopInfo();
+            applyFieldsFromRequest(official, request, member, encryptedPassword, salt, now);
+            official.setVersionType(Constants.ZERO);
+            official.setAuditStatus(Constants.ZERO);
+            official.setStatus(Constants.ZERO);
+            official.setDeleted(Constants.ZERO);
+            official.setCreateTime(now);
+            official.setUpdateTime(now);
+            official.setRegionMemberId(member.getId());
+            setDepositAmountFromPricingRule(official);
+            setDefaultDeliveryRange(official);
+            shopInfoMapper.insert(official);
+
+            // 淇濆瓨姝e紡鐗堟湰闄勪欢
+            saveShopAttachments(official.getId(), request, now);
+
+            // 鍒涘缓鍙樻洿鐗堟湰锛堟嫹璐濇寮忕増鏈暟鎹級
+            createChangeVersion(official, official.getId(), now);
+        } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.ONE)) {
+            // 瀹℃壒閫氳繃寰呮敮浠樻娂閲�
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "闂ㄥ簵宸插鎵归�氳繃锛岃瀹屾垚鎶奸噾鏀粯");
+        } else if (Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.THREE)) {
+            // 鏈�鏂板彉鏇寸増鏈凡鏀粯鎶奸噾(status=3)锛氱敓鎴愭柊鐨勫彉鏇寸増鏈�
+            Integer relationShopId = changeVersion.getRelationShopId();
+
+            // 鏍¢獙鎵嬫満鍙峰敮涓�鎬э紙鎺掗櫎姝e紡鐗堟湰鍜屽彉鏇寸増鏈級
+            checkTelephoneUnique(request.getTelephone(), relationShopId);
+
+            String rawPassword = generateDefaultPassword(request.getTelephone());
+            String salt = RandomStringUtils.randomAlphabetic(6);
+            String encryptedPassword = Utils.Secure.encryptPassword(rawPassword, salt);
+
+            ShopInfo newChange = new ShopInfo();
+            applyFieldsFromRequest(newChange, request, member, encryptedPassword, salt, now);
+            newChange.setVersionType(Constants.ONE);
+            newChange.setRelationShopId(relationShopId);
+            newChange.setAuditStatus(Constants.ZERO);
+            newChange.setStatus(Constants.ZERO);
+            newChange.setDeleted(Constants.ZERO);
+            newChange.setCreateTime(now);
+            newChange.setUpdateTime(now);
+            newChange.setRegionMemberId(member.getId());
+            setDepositAmountFromPricingRule(newChange);
+            shopInfoMapper.insert(newChange);
+
+            // 淇濆瓨鏂板彉鏇寸増鏈檮浠�
+            saveShopAttachments(newChange.getId(), request, now);
+        } else {
+            // 鏈�鏂板彉鏇寸増鏈� status=0(寰呭鎵�) 鎴� 2(琚┏鍥�)锛氱洿鎺ユ洿鏂�
+            Integer relationShopId = changeVersion.getRelationShopId();
+
+            // 鏍¢獙鎵嬫満鍙峰敮涓�鎬�
+            checkTelephoneUnique(request.getTelephone(), relationShopId);
+
+            String rawPassword = generateDefaultPassword(request.getTelephone());
+            String salt = RandomStringUtils.randomAlphabetic(6);
+            String encryptedPassword = Utils.Secure.encryptPassword(rawPassword, salt);
+
+            applyFieldsFromRequest(changeVersion, request, member, encryptedPassword, salt, now);
+            changeVersion.setAuditStatus(Constants.ZERO);
+            changeVersion.setAuditRemark(null);
+            changeVersion.setAuditTime(null);
+            changeVersion.setAuditUserId(null);
+            changeVersion.setUpdateTime(now);
+            setDepositAmountFromPricingRule(changeVersion);
+            shopInfoMapper.updateById(changeVersion);
+
+            // 鍒犻櫎鏃ч檮浠� + 淇濆瓨鏂伴檮浠�
+            deleteShopAttachments(changeVersion.getId());
+            saveShopAttachments(changeVersion.getId(), request, now);
+        }
+    }
+
+    private void validateCompanyTypeFields(ShopApplyDTO request) {
         if (Constants.equalsInteger(request.getCompanyType(), Constants.ZERO)) {
-            // 涓汉绫诲瀷锛氬繀椤讳笂浼犲姵鍔ㄥ悎鍚屽拰绀句繚璇佹槑
             if (CollectionUtils.isEmpty(request.getLaborContractImgs())) {
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "涓汉绫诲瀷蹇呴』涓婁紶鏈夋晥鍔冲姩鍚堝悓");
             }
@@ -269,7 +364,6 @@
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "涓汉绫诲瀷蹇呴』涓婁紶绀句繚缂寸撼璇佹槑");
             }
         } else if (Constants.equalsInteger(request.getCompanyType(), Constants.ONE)) {
-            // 浼佷笟绫诲瀷锛氬繀椤诲~鍐欐硶浜轰俊鎭拰钀ヤ笟鎵х収
             if (StringUtils.isBlank(request.getBusinessImg())) {
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浼佷笟绫诲瀷蹇呴』涓婁紶钀ヤ笟鎵х収");
             }
@@ -283,104 +377,43 @@
                 throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "浼佷笟绫诲瀷蹇呴』濉啓娉曚汉韬唤璇佸彿鐮�");
             }
         }
+    }
 
-        Date now = new Date();
-        String rawPassword = generateDefaultPassword(request.getTelephone());
-        String salt = RandomStringUtils.randomAlphabetic(6);
-        String encryptedPassword = Utils.Secure.encryptPassword(rawPassword, salt);
+    private void applyFieldsFromRequest(ShopInfo shop, ShopApplyDTO request, Member member,
+                                        String password, String salt, Date now) {
+        shop.setCompanyType(request.getCompanyType());
+        shop.setName(request.getName());
+        shop.setTelephone(request.getTelephone());
+        shop.setLinkName(request.getLinkName());
+        shop.setLinkPhone(request.getLinkPhone());
+        shop.setIdcard(request.getIdcard());
+        shop.setAreaId(request.getAreaId());
+        shop.setLongitude(request.getLongitude());
+        shop.setLatitude(request.getLatitude());
+        shop.setAddress(request.getAddress());
+        shop.setIdcardImg(request.getIdcardImg());
+        shop.setIdcardImgBack(request.getIdcardImgBack());
+        shop.setBusinessImg(request.getBusinessImg());
+        shop.setLegalPersonName(request.getLegalPersonName());
+        shop.setLegalPersonPhone(request.getLegalPersonPhone());
+        shop.setLegalPersonCard(request.getLegalPersonCard());
+        shop.setPassword(password);
+        shop.setSalt(salt);
+        shop.setAliAccount(request.getAliAccount());
+        shop.setAliName(request.getAliName());
+        shop.setRevenueShareConfig(buildRevenueShareConfig(request.getLocalDeposit(), request.getRemoteDeposit(), request.getRemoteTake()));
+        shop.setOpenid(member.getOpenid());
+    }
 
-        // 3. 鏌ヨ璇ヤ細鍛樻槸鍚﹀凡鏈夐棬搴楄褰�
-        QueryWrapper<ShopInfo> existQw = new QueryWrapper<>();
-        existQw.lambda()
-                .eq(ShopInfo::getRegionMemberId, member.getId())
-                .eq(ShopInfo::getDeleted, Constants.ZERO)
-                .last("limit 1");
-        ShopInfo existing = shopInfoMapper.selectOne(existQw);
+    private void saveShopAttachments(Integer shopId, ShopApplyDTO request, Date now) {
+        saveMultifileList(shopId, Constants.FileType.STORE_FRONT.getKey(), request.getStoreFrontImgs(), now);
+        saveMultifileList(shopId, Constants.FileType.STORE_INTERIOR.getKey(), request.getStoreInteriorImgs(), now);
+        saveMultifileList(shopId, Constants.FileType.OTHER_MATERIAL.getKey(), request.getOtherMaterialImgs(), now);
+        saveMultifileList(shopId, Constants.FileType.LABOR_CONTRACT.getKey(), request.getLaborContractImgs(), now);
+        saveMultifileList(shopId, Constants.FileType.SOCIAL_SECURITY.getKey(), request.getSocialSecurityImgs(), now);
+    }
 
-        Integer shopId;
-        if (existing != null) {
-            // 鏍¢獙鐘舵�侊細鍙湁寰呭鎵�(0)鍜岃椹冲洖(2)鍙慨鏀�
-            if (!Constants.equalsInteger(existing.getAuditStatus(), Constants.TWO)) {
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠闂ㄥ簵鐘舵�佷笉鍏佽淇敼");
-            }
-            // 鏍¢獙openid鍖归厤锛氬綋鍓嶇櫥褰曚細鍛樼殑openid蹇呴』涓庨棬搴楃殑openid涓�鑷�
-            if (existing.getOpenid() != null && !existing.getOpenid().equals(member.getOpenid())) {
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鏃犳潈闄愭搷浣滃綋鍓嶉棬搴椾俊鎭�");
-            }
-            // 鏍¢獙鎵嬫満鍙峰敮涓�鎬э紙鎺掗櫎鑷韩锛�
-            if (!request.getTelephone().equals(existing.getTelephone())) {
-                checkTelephoneUnique(request.getTelephone(), existing.getId());
-            }
-            // 鏇存柊
-            existing.setCompanyType(request.getCompanyType());
-            existing.setName(request.getName());
-            existing.setTelephone(request.getTelephone());
-            existing.setLinkName(request.getLinkName());
-            existing.setLinkPhone(request.getLinkPhone());
-            existing.setIdcard(request.getIdcard());
-            existing.setAreaId(request.getAreaId());
-            existing.setLongitude(request.getLongitude());
-            existing.setLatitude(request.getLatitude());
-            existing.setAddress(request.getAddress());
-            existing.setIdcardImg(request.getIdcardImg());
-            existing.setIdcardImgBack(request.getIdcardImgBack());
-            existing.setBusinessImg(request.getBusinessImg());
-            existing.setLegalPersonName(request.getLegalPersonName());
-            existing.setLegalPersonPhone(request.getLegalPersonPhone());
-            existing.setLegalPersonCard(request.getLegalPersonCard());
-            existing.setPassword(encryptedPassword);
-            existing.setSalt(salt);
-            existing.setAliAccount(request.getAliAccount());
-            existing.setAliName(request.getAliName());
-            existing.setUpdateTime(now);
-            existing.setAuditRemark(null);
-            existing.setAuditTime(null);
-            existing.setAuditUserId(null);
-            existing.setAuditStatus(Constants.ZERO);
-            // 璇诲彇鎶奸噾閲戦
-            setDepositAmountFromPricingRule(existing);
-            shopInfoMapper.updateById(existing);
-            shopId = existing.getId();
-        } else {
-            // 1. 鏍¢獙闂ㄥ簵鎵嬫満鍙峰敮涓�鎬э紙shop_info.telephone锛�
-            checkTelephoneUnique(request.getTelephone(), null);
-            // 鏂板缓
-            ShopInfo shopInfo = new ShopInfo();
-            shopInfo.setCompanyType(request.getCompanyType());
-            shopInfo.setName(request.getName());
-            shopInfo.setTelephone(request.getTelephone());
-            shopInfo.setLinkName(request.getLinkName());
-            shopInfo.setLinkPhone(request.getLinkPhone());
-            shopInfo.setIdcard(request.getIdcard());
-            shopInfo.setAreaId(request.getAreaId());
-            shopInfo.setLongitude(request.getLongitude());
-            shopInfo.setLatitude(request.getLatitude());
-            shopInfo.setAddress(request.getAddress());
-            shopInfo.setIdcardImg(request.getIdcardImg());
-            shopInfo.setIdcardImgBack(request.getIdcardImgBack());
-            shopInfo.setBusinessImg(request.getBusinessImg());
-            shopInfo.setLegalPersonName(request.getLegalPersonName());
-            shopInfo.setLegalPersonPhone(request.getLegalPersonPhone());
-            shopInfo.setLegalPersonCard(request.getLegalPersonCard());
-            shopInfo.setPassword(encryptedPassword);
-            shopInfo.setSalt(salt);
-            shopInfo.setAliAccount(request.getAliAccount());
-            shopInfo.setAliName(request.getAliName());
-            shopInfo.setAuditStatus(Constants.ZERO);
-            shopInfo.setStatus(Constants.ZERO);
-            shopInfo.setDeleted(Constants.ZERO);
-            shopInfo.setCreateTime(now);
-            shopInfo.setUpdateTime(now);
-            shopInfo.setRegionMemberId(member.getId());
-            // 璇诲彇鎶奸噾閲戦
-            setDepositAmountFromPricingRule(shopInfo);
-            // 璁剧疆榛樿閰嶉�佽寖鍥�
-            setDefaultDeliveryRange(shopInfo);
-            shopInfoMapper.insert(shopInfo);
-            shopId = shopInfo.getId();
-        }
-
-        // 4. 鍒犻櫎鏃ч檮浠惰褰�
+    private void deleteShopAttachments(Integer shopId) {
         multifileMapper.delete(new QueryWrapper<Multifile>().lambda()
                 .eq(Multifile::getObjId, shopId)
                 .in(Multifile::getObjType,
@@ -389,13 +422,6 @@
                         Constants.FileType.OTHER_MATERIAL.getKey(),
                         Constants.FileType.LABOR_CONTRACT.getKey(),
                         Constants.FileType.SOCIAL_SECURITY.getKey()));
-
-        // 5. 淇濆瓨鏂伴檮浠惰褰�
-        saveMultifileList(shopId, Constants.FileType.STORE_FRONT.getKey(), request.getStoreFrontImgs(), now);
-        saveMultifileList(shopId, Constants.FileType.STORE_INTERIOR.getKey(), request.getStoreInteriorImgs(), now);
-        saveMultifileList(shopId, Constants.FileType.OTHER_MATERIAL.getKey(), request.getOtherMaterialImgs(), now);
-        saveMultifileList(shopId, Constants.FileType.LABOR_CONTRACT.getKey(), request.getLaborContractImgs(), now);
-        saveMultifileList(shopId, Constants.FileType.SOCIAL_SECURITY.getKey(), request.getSocialSecurityImgs(), now);
     }
 
     @Override
@@ -409,12 +435,25 @@
 
     @Override
     public ShopDetailVO getMyShop(Integer memberId) {
+        // 鏌ヨ鏈�鏂扮殑鍙樻洿鐗堟湰
         QueryWrapper<ShopInfo> qw = new QueryWrapper<>();
         qw.lambda()
                 .eq(ShopInfo::getRegionMemberId, memberId)
+                .eq(ShopInfo::getVersionType, Constants.ONE)
                 .eq(ShopInfo::getDeleted, Constants.ZERO)
+                .orderByDesc(ShopInfo::getCreateTime)
                 .last("limit 1");
         ShopInfo shopInfo = shopInfoMapper.selectOne(qw);
+        if (shopInfo == null) {
+            // 鏃犲彉鏇寸増鏈垯鏌ユ寮忕増鏈�
+            QueryWrapper<ShopInfo> officialQw = new QueryWrapper<>();
+            officialQw.lambda()
+                    .eq(ShopInfo::getRegionMemberId, memberId)
+                    .eq(ShopInfo::getVersionType, Constants.ZERO)
+                    .eq(ShopInfo::getDeleted, Constants.ZERO)
+                    .last("limit 1");
+            shopInfo = shopInfoMapper.selectOne(officialQw);
+        }
         if (shopInfo == null) {
             return null;
         }
@@ -431,52 +470,153 @@
                 || (auditDTO.getAuditStatus() != 0 && auditDTO.getAuditStatus() != 1)) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀹℃壒鐘舵�佸弬鏁伴敊璇�");
         }
-        ShopInfo shopInfo = shopInfoMapper.selectById(auditDTO.getId());
-        if (shopInfo == null || Constants.equalsInteger(shopInfo.getDeleted(), Constants.ONE)) {
+        // 瀹℃壒鐨勬槸鍙樻洿鐗堟湰
+        ShopInfo changeVersion = shopInfoMapper.selectById(auditDTO.getId());
+        if (changeVersion == null || Constants.equalsInteger(changeVersion.getDeleted(), Constants.ONE)) {
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
-        if (!Constants.equalsInteger(shopInfo.getAuditStatus(), Constants.ZERO)) {
+        if (!Constants.equalsInteger(changeVersion.getAuditStatus(), Constants.ZERO)) {
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "褰撳墠鐘舵�佷笉鍏佽瀹℃壒");
         }
 
         Date now = new Date();
-        // auditDTO.auditStatus: 0=閫氳繃 鈫� auditStatus=1, 1=椹冲洖 鈫� auditStatus=2
+        // auditDTO.auditStatus: 0=閫氳繃 鈫� 1, 1=椹冲洖 鈫� 2
         Integer newAuditStatus = Constants.equalsInteger(auditDTO.getAuditStatus(), Constants.ZERO) ? Constants.ONE : Constants.TWO;
-        shopInfo.setAuditStatus(newAuditStatus);
-        shopInfo.setAuditTime(now);
-        shopInfo.setAuditRemark(auditDTO.getAuditRemark());
-        shopInfo.setAuditUserId(auditDTO.getAuditUser());
-        shopInfo.setUpdateTime(now);
-        // 瀹℃壒閫氳繃鏃讹紝鏍¢獙鍩庡競pricing_rule閰嶇疆锛岃鍙栨娂閲戦噾棰�
-        if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) {
-            // 1. 瑙f瀽闂ㄥ簵鎵�鍦ㄥ煄甯�
-            Areas area = areasBiz.resolveArea(shopInfo.getAreaId());
-            if (area == null || area.getParentId() == null) {
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "闂ㄥ簵鍖哄垝淇℃伅寮傚父锛屾棤娉曠‘瀹氭墍鍦ㄥ煄甯�");
-            }
-            Integer cityId = area.getParentId();
 
-            // 2. 鏍¢獙 pricing_rule 閰嶇疆锛堝煄甯傚紑閫氬湪鎶奸噾鏀粯瀹屾垚鍚庡鐞嗭級
-            Areas cityArea = areasService.findById(cityId, Constants.ONE);
-            if (cityArea == null) {
-                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍩庡競淇℃伅涓嶅瓨鍦�");
+        // 鏌ユ壘姝e紡鐗堟湰
+        Integer officialId = changeVersion.getRelationShopId();
+        ShopInfo official = officialId != null ? shopInfoMapper.selectById(officialId) : null;
+        boolean hasPaidOfficial = official != null
+                && Constants.equalsInteger(official.getAuditStatus(), Constants.THREE);
+
+        if (!hasPaidOfficial) {
+            // 鍦烘櫙1锛氫笉瀛樺湪auditStatus=3鐨勬寮忕増鏈紙棣栨瀹℃壒锛�
+            changeVersion.setAuditStatus(newAuditStatus);
+            changeVersion.setAuditTime(now);
+            changeVersion.setAuditRemark(auditDTO.getAuditRemark());
+            changeVersion.setAuditUserId(auditDTO.getAuditUser());
+            changeVersion.setUpdateTime(now);
+
+            if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) {
+                validateCityAndSetDeposit(changeVersion);
             }
-            if (!Constants.equalsInteger(cityArea.getStatus(), Constants.ONE)) {
-                List<String> errors = validateCityPricingRules(cityId);
-                if (!errors.isEmpty()) {
-                    throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
-                            "鍩庡競[" + cityArea.getName() + "]灏氭湭寮�閫氾紝瀹氫环瑙勫垯鏈厤缃畬鏁达細" + String.join("锛�", errors));
+            shopInfoMapper.updateById(changeVersion);
+
+            // 鍚屾鏇存柊姝e紡鐗堟湰瀹℃壒鐘舵��
+            if (official != null) {
+                official.setAuditStatus(newAuditStatus);
+                official.setAuditTime(now);
+                official.setAuditRemark(auditDTO.getAuditRemark());
+                official.setAuditUserId(auditDTO.getAuditUser());
+                official.setUpdateTime(now);
+                if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) {
+                    official.setDepositAmount(changeVersion.getDepositAmount());
                 }
+                shopInfoMapper.updateById(official);
             }
 
-            // 3. 浠嶱ricingRule璇诲彇鎶奸噾閲戦锛堝鎵规椂鏇存柊锛�
-            setDepositAmountFromPricingRule(shopInfo);
-        }
-        shopInfoMapper.updateById(shopInfo);
+            // 鐭俊閫氱煡
+            sendAuditSms(changeVersion, newAuditStatus, auditDTO.getAuditRemark());
+        } else {
+            // 鍦烘櫙2锛氬瓨鍦╝uditStatus=3鐨勬寮忕増鏈紙鍙樻洿瀹℃壒锛�
+            if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) {
+                // 瀹℃壒閫氳繃锛氬彉鏇寸増鏈洿鎺ユ爣璁癮uditStatus=3锛屽悓姝ユ暟鎹埌姝e紡鐗堟湰
+                changeVersion.setAuditStatus(Constants.THREE);
+                changeVersion.setAuditTime(now);
+                changeVersion.setAuditRemark(auditDTO.getAuditRemark());
+                changeVersion.setAuditUserId(auditDTO.getAuditUser());
+                changeVersion.setUpdateTime(now);
+                shopInfoMapper.updateById(changeVersion);
 
-        // 鐭俊閫氱煡
+                // 鍚屾鍙樻洿鐗堟湰鏁版嵁鍒版寮忕増鏈�
+                syncChangeToOfficial(changeVersion, official, now);
+            } else {
+                // 瀹℃壒椹冲洖锛氫粎鏍囪鍙樻洿鐗堟湰鐘舵��
+                changeVersion.setAuditStatus(Constants.TWO);
+                changeVersion.setAuditTime(now);
+                changeVersion.setAuditRemark(auditDTO.getAuditRemark());
+                changeVersion.setAuditUserId(auditDTO.getAuditUser());
+                changeVersion.setUpdateTime(now);
+                shopInfoMapper.updateById(changeVersion);
+            }
+        }
+    }
+
+    private void validateCityAndSetDeposit(ShopInfo shopInfo) {
+        Areas area = areasBiz.resolveArea(shopInfo.getAreaId());
+        if (area == null || area.getParentId() == null) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "闂ㄥ簵鍖哄垝淇℃伅寮傚父锛屾棤娉曠‘瀹氭墍鍦ㄥ煄甯�");
+        }
+        Integer cityId = area.getParentId();
+        Areas cityArea = areasService.findById(cityId, Constants.ONE);
+        if (cityArea == null) {
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鍩庡競淇℃伅涓嶅瓨鍦�");
+        }
+        if (!Constants.equalsInteger(cityArea.getStatus(), Constants.ONE)) {
+            List<String> errors = validateCityPricingRules(cityId);
+            if (!errors.isEmpty()) {
+                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),
+                        "鍩庡競[" + cityArea.getName() + "]灏氭湭寮�閫氾紝瀹氫环瑙勫垯鏈厤缃畬鏁达細" + String.join("锛�", errors));
+            }
+        }
+        setDepositAmountFromPricingRule(shopInfo);
+    }
+
+    private void syncChangeToOfficial(ShopInfo changeVersion, ShopInfo official, Date now) {
+        official.setCompanyType(changeVersion.getCompanyType());
+        official.setName(changeVersion.getName());
+        official.setTelephone(changeVersion.getTelephone());
+        official.setLinkName(changeVersion.getLinkName());
+        official.setLinkPhone(changeVersion.getLinkPhone());
+        official.setIdcard(changeVersion.getIdcard());
+        official.setAreaId(changeVersion.getAreaId());
+        official.setLongitude(changeVersion.getLongitude());
+        official.setLatitude(changeVersion.getLatitude());
+        official.setAddress(changeVersion.getAddress());
+        official.setIdcardImg(changeVersion.getIdcardImg());
+        official.setIdcardImgBack(changeVersion.getIdcardImgBack());
+        official.setBusinessImg(changeVersion.getBusinessImg());
+        official.setLegalPersonName(changeVersion.getLegalPersonName());
+        official.setLegalPersonPhone(changeVersion.getLegalPersonPhone());
+        official.setLegalPersonCard(changeVersion.getLegalPersonCard());
+        official.setPassword(changeVersion.getPassword());
+        official.setSalt(changeVersion.getSalt());
+        official.setAliAccount(changeVersion.getAliAccount());
+        official.setAliName(changeVersion.getAliName());
+        official.setRevenueShareConfig(changeVersion.getRevenueShareConfig());
+        official.setDepositAmount(changeVersion.getDepositAmount());
+        official.setUpdateTime(now);
+        shopInfoMapper.updateById(official);
+
+        // 鍚屾闄勪欢锛氬厛鍒犳寮忕増鏈棫闄勪欢锛屽啀浠庡彉鏇寸増鏈嫹璐�
+        deleteShopAttachments(official.getId());
+        List<Multifile> changeFiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId, changeVersion.getId())
+                .eq(Multifile::getIsdeleted, Constants.ZERO)
+                .in(Multifile::getObjType,
+                        Constants.FileType.STORE_FRONT.getKey(),
+                        Constants.FileType.STORE_INTERIOR.getKey(),
+                        Constants.FileType.OTHER_MATERIAL.getKey(),
+                        Constants.FileType.LABOR_CONTRACT.getKey(),
+                        Constants.FileType.SOCIAL_SECURITY.getKey()));
+        for (Multifile f : changeFiles) {
+            Multifile copy = new Multifile();
+            copy.setCreator(f.getCreator());
+            copy.setCreateDate(now);
+            copy.setIsdeleted(Constants.ZERO);
+            copy.setName(f.getName());
+            copy.setInfo(f.getInfo());
+            copy.setObjId(official.getId());
+            copy.setType(f.getType());
+            copy.setObjType(f.getObjType());
+            copy.setFileurl(f.getFileurl());
+            copy.setSortnum(f.getSortnum());
+            multifileMapper.insert(copy);
+        }
+    }
+
+    private void sendAuditSms(ShopInfo shopInfo, Integer newAuditStatus, String auditRemark) {
         if (Constants.equalsInteger(newAuditStatus, Constants.ONE)) {
-            // 瀹℃牳閫氳繃 鈫� 閫氱煡缂寸撼鎶奸噾
             String depositMoney = shopInfo.getDepositAmount() != null
                     ? new java.math.BigDecimal(shopInfo.getDepositAmount())
                         .divide(new java.math.BigDecimal(100), 2, java.math.RoundingMode.HALF_UP).toPlainString() : "0";
@@ -485,11 +625,10 @@
                     "storeName", shopInfo.getName(),
                     "money", depositMoney);
         } else if (Constants.equalsInteger(newAuditStatus, Constants.TWO)) {
-            // 瀹℃牳椹冲洖
             sendSmsNotify(shopInfo.getTelephone(),
                     Constants.SmsNotify.SHOP_AUTH_REJECTED,
                     "storeName", shopInfo.getName(),
-                    "reason", auditDTO.getAuditRemark() != null ? auditDTO.getAuditRemark() : "");
+                    "reason", auditRemark != null ? auditRemark : "");
         }
     }
 
@@ -590,6 +729,7 @@
         shopInfo.setLegalPersonCard(request.getLegalPersonCard());
         shopInfo.setAliAccount(request.getAliAccount());
         shopInfo.setAliName(request.getAliName());
+        shopInfo.setRevenueShareConfig(buildRevenueShareConfig(request.getLocalDeposit(), request.getRemoteDeposit(), request.getRemoteTake()));
         shopInfo.setUpdateTime(now);
         shopInfoMapper.updateById(shopInfo);
 
@@ -621,6 +761,81 @@
             throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎵嬫満鍙锋牸寮忓紓甯革紝鏃犳硶鐢熸垚榛樿瀵嗙爜");
         }
         return telephone.substring(telephone.length() - 6) + "@123456";
+    }
+
+    private String buildRevenueShareConfig(Double localDeposit, Double remoteDeposit, Double remoteTake) {
+        if (localDeposit == null && remoteDeposit == null && remoteTake == null) {
+            return null;
+        }
+        JSONObject config = new JSONObject();
+        if (localDeposit != null) {
+            config.put("localDeposit", localDeposit);
+        }
+        if (remoteDeposit != null) {
+            config.put("remoteDeposit", remoteDeposit);
+        }
+        if (remoteTake != null) {
+            config.put("remoteTake", remoteTake);
+        }
+        return config.toJSONString();
+    }
+
+    private void createChangeVersion(ShopInfo origin, Integer originShopId, Date now) {
+        ShopInfo changeShop = new ShopInfo();
+        changeShop.setCompanyType(origin.getCompanyType());
+        changeShop.setName(origin.getName());
+        changeShop.setTelephone(origin.getTelephone());
+        changeShop.setLinkName(origin.getLinkName());
+        changeShop.setLinkPhone(origin.getLinkPhone());
+        changeShop.setIdcard(origin.getIdcard());
+        changeShop.setAreaId(origin.getAreaId());
+        changeShop.setLongitude(origin.getLongitude());
+        changeShop.setLatitude(origin.getLatitude());
+        changeShop.setAddress(origin.getAddress());
+        changeShop.setIdcardImg(origin.getIdcardImg());
+        changeShop.setIdcardImgBack(origin.getIdcardImgBack());
+        changeShop.setBusinessImg(origin.getBusinessImg());
+        changeShop.setLegalPersonName(origin.getLegalPersonName());
+        changeShop.setLegalPersonPhone(origin.getLegalPersonPhone());
+        changeShop.setLegalPersonCard(origin.getLegalPersonCard());
+        changeShop.setAliAccount(origin.getAliAccount());
+        changeShop.setAliName(origin.getAliName());
+        changeShop.setDepositAmount(origin.getDepositAmount());
+        changeShop.setRevenueShareConfig(origin.getRevenueShareConfig());
+        changeShop.setVersionType(Constants.ONE);
+        changeShop.setRelationShopId(originShopId);
+        changeShop.setRegionMemberId(origin.getRegionMemberId());
+        changeShop.setOpenid(origin.getOpenid());
+        changeShop.setStatus(Constants.ZERO);
+        changeShop.setDeleted(Constants.ZERO);
+        changeShop.setCreateTime(now);
+        changeShop.setUpdateTime(now);
+        shopInfoMapper.insert(changeShop);
+
+        // 鎷疯礉闄勪欢鍒板彉鏇寸増鏈�
+        List<Multifile> originFiles = multifileMapper.selectList(new QueryWrapper<Multifile>().lambda()
+                .eq(Multifile::getObjId, originShopId)
+                .eq(Multifile::getIsdeleted, Constants.ZERO)
+                .in(Multifile::getObjType,
+                        Constants.FileType.STORE_FRONT.getKey(),
+                        Constants.FileType.STORE_INTERIOR.getKey(),
+                        Constants.FileType.OTHER_MATERIAL.getKey(),
+                        Constants.FileType.LABOR_CONTRACT.getKey(),
+                        Constants.FileType.SOCIAL_SECURITY.getKey()));
+        for (Multifile f : originFiles) {
+            Multifile copy = new Multifile();
+            copy.setCreator(f.getCreator());
+            copy.setCreateDate(now);
+            copy.setIsdeleted(Constants.ZERO);
+            copy.setName(f.getName());
+            copy.setInfo(f.getInfo());
+            copy.setObjId(changeShop.getId());
+            copy.setType(f.getType());
+            copy.setObjType(f.getObjType());
+            copy.setFileurl(f.getFileurl());
+            copy.setSortnum(f.getSortnum());
+            multifileMapper.insert(copy);
+        }
     }
 
     private void checkTelephoneUnique(String telephone, Integer excludeId) {
@@ -696,6 +911,21 @@
         vo.setAliAccount(shopInfo.getAliAccount());
         vo.setAliName(shopInfo.getAliName());
         vo.setDepositAmount(shopInfo.getDepositAmount());
+        vo.setDeliveryRange(shopInfo.getDeliveryArea());
+        vo.setVersionType(shopInfo.getVersionType());
+        vo.setRelationShopId(shopInfo.getRelationShopId());
+        // 瑙f瀽鏀剁泭姣斾緥閰嶇疆
+        if (StringUtils.isNotBlank(shopInfo.getRevenueShareConfig())) {
+            try {
+                JSONObject config = JSONObject.parseObject(shopInfo.getRevenueShareConfig());
+                if (config != null) {
+                    vo.setLocalDeposit(config.getDouble("localDeposit"));
+                    vo.setRemoteDeposit(config.getDouble("remoteDeposit"));
+                    vo.setRemoteTake(config.getDouble("remoteTake"));
+                }
+            } catch (Exception ignored) {
+            }
+        }
 
         // 鎷兼帴鍥剧墖鍓嶇紑
         String imgPrefix = "";
@@ -795,6 +1025,7 @@
         qw.lambda()
                 .eq(ShopInfo::getDeleted, Constants.ZERO)
                 .eq(ShopInfo::getStatus, Constants.ZERO)
+                .eq(ShopInfo::getVersionType, Constants.ZERO)
                 .eq(ShopInfo::getAuditStatus, Constants.THREE);
 
         // 闂ㄥ簵钀ヤ笟绫诲瀷绛涢��
@@ -869,7 +1100,7 @@
     @Override
     public ShopWebDetailVO getShopWebDetail(ShopDetailQueryDTO dto) {
         ShopInfo shop = shopInfoMapper.selectById(dto.getId());
-        if (Objects.isNull(shop) || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
+        if (Objects.isNull(shop) || Constants.equalsInteger(shop.getDeleted(), Constants.ONE) || Constants.equalsInteger(shop.getVersionType(), Constants.ONE)) {
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
 
@@ -1019,7 +1250,7 @@
     @Override
     public ShopCenterVO getShopCenterInfo(Integer shopId) {
         ShopInfo shop = shopInfoMapper.selectById(shopId);
-        if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE)) {
+        if (shop == null || Constants.equalsInteger(shop.getDeleted(), Constants.ONE) || Constants.equalsInteger(shop.getVersionType(), Constants.ONE)) {
             throw new BusinessException(ResponseStatus.DATA_EMPTY);
         }
         ShopCenterVO vo = new ShopCenterVO();
@@ -1173,6 +1404,7 @@
         }
         ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda().eq(ShopInfo::getTelephone, dto.getTelephone())
                 .eq(ShopInfo::getDeleted,Constants.ZERO)
+                .eq(ShopInfo::getVersionType,Constants.ZERO)
                 .last("limit 1")
         );
         if(shop==null){
@@ -1192,31 +1424,26 @@
         if(!pwd.equals(shop.getPassword())){
             throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT);
         }
-
-        // 鏇存柊褰撳墠鐧诲綍浼氬憳鐨刼penid鍒伴棬搴�
-        if(StringUtils.isNotBlank(dto.getOpenid())){
-            shopInfoMapper.update(null,new UpdateWrapper<ShopInfo>().lambda()
-                    .set(ShopInfo::getOpenid,dto.getOpenid())
-                    .eq(ShopInfo::getId,shop.getId())
-            );
-            // 娓呯┖鍏朵粬闂ㄥ簵鐨勫悓涓�openid锛屼繚璇佸敮涓�
-            shopInfoMapper.update(null,new UpdateWrapper<ShopInfo>().lambda()
-                    .set(ShopInfo::getOpenid,null)
-                    .eq(ShopInfo::getOpenid,dto.getOpenid())
-                    .ne(ShopInfo::getId,shop.getId())
-            );
-            shop.setOpenid(dto.getOpenid());
+        if(Objects.nonNull(dto.getMemberId())){
+            Member member = memberMapper.selectById(dto.getMemberId());
+            if(Objects.nonNull(member)){
+                memberMapper.update(new UpdateWrapper<Member>().lambda()
+                        .set(Member::getLoginShopId,shop.getId())
+                        .eq(Member::getId,member.getId())
+                );
+                shop.setMemberId(member.getId());
+            }else{
+                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浼氬憳淇℃伅寮傚父锛岃鑱旂郴绠$悊鍛�");
+            }
         }
-
         // 鍒涘缓token锛坓enerateTokenForRedis 宸茶嚜鍔ㄦ竻闄よ鐢ㄦ埛鏃oken锛屼繚璇佸敮涓�鏈夋晥锛�
-        String token = JwtTokenUtil.generateTokenForRedis(shop.getId(), Constants.TWO, JSONObject.toJSONString(shop), redisTemplate);
+        String token = JwtTokenUtil.generateShopTokenForRedis(shop.getMemberId(), JSONObject.toJSONString(shop), redisTemplate);
         // 鏋勫缓鍝嶅簲
         ShopLoginVO vo = new ShopLoginVO();
         vo.setToken(token);
         vo.setShopId(shop.getId());
         vo.setShopName(shop.getName());
         vo.setCompanyType(shop.getCompanyType());
-
         // 鎵�灞炲煄甯傚悕绉�
         Areas area = areasBiz.resolveArea(shop.getAreaId());
         if (area != null) {
@@ -1228,11 +1455,15 @@
     @Override
     public ShopLoginVO shopSilentLogin(Integer memberId) {
         Member member = memberMapper.selectById(memberId);
-        if(Objects.isNull(member)||StringUtils.isBlank(member.getOpenid())){
+        if(Objects.isNull(member)){
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "褰撳墠鐧诲綍浼氬憳韬唤寮傚父,璇疯仈绯荤鐞嗗憳!");
         }
+        if (Objects.isNull(member.getLoginShopId())) {
+            return null;
+        }
         ShopInfo shop = shopInfoMapper.selectOne(new QueryWrapper<ShopInfo>().lambda()
-                .eq(ShopInfo::getOpenid, member.getOpenid())
+                .eq(ShopInfo::getId, member.getLoginShopId())
+                .eq(ShopInfo::getVersionType,Constants.ZERO)
                 .eq(ShopInfo::getDeleted, Constants.ZERO)
                 .last("limit 1"));
         if (shop == null) {
@@ -1242,7 +1473,7 @@
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"闂ㄥ簵宸茬鐢紝璇疯仈绯荤鐞嗗憳");
         }
         // 鍒涘缓token锛坓enerateTokenForRedis 宸茶嚜鍔ㄦ竻闄よ鐢ㄦ埛鏃oken锛屼繚璇佸敮涓�鏈夋晥锛�
-        String token = JwtTokenUtil.generateTokenForRedis(shop.getId(), Constants.TWO, JSONObject.toJSONString(shop), redisTemplate);
+        String token = JwtTokenUtil.generateShopTokenForRedis(member.getId(), JSONObject.toJSONString(shop), redisTemplate);
 
         ShopLoginVO vo = new ShopLoginVO();
         vo.setToken(token);
@@ -1380,6 +1611,9 @@
         if (StringUtils.isBlank(phone)) {
             return;
         }
+        if (!smsNotify.isEnabled()) {
+            return;
+        }
         String content = smsNotify.format(paramPairs);
         try {
             JSONObject templateParam = new JSONObject();
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java
index 018e9df..6777ea0 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/SmsrecordServiceImpl.java
@@ -178,7 +178,10 @@
         String digits = Strings.randomNumeric(4);
         //鍙戦�侀獙璇佺爜
         String templateParam = "{\"code\":\"" + digits + "\"}";
-        String error = AliSmsService.sendSms(phone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam);
+        String error = null;
+        if (Constants.SmsNotify.VERIFY_CODE.isEnabled()) {
+            error = AliSmsService.sendSms(phone, Constants.SmsNotify.VERIFY_CODE.getTemplateCode(), templateParam);
+        }
         if (error != null) {
             throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "鐭俊鍙戦�佸け璐ワ紝璇风◢鍚庨噸璇�");
         }
diff --git a/server/services/src/main/resources/application-dev.yml b/server/services/src/main/resources/application-dev.yml
index d31d65f..8136219 100644
--- a/server/services/src/main/resources/application-dev.yml
+++ b/server/services/src/main/resources/application-dev.yml
@@ -95,8 +95,8 @@
     apiV3Key: NJTLJSTZYXZRGScaiwubuzichanbu666 #apiV3Key
     serialNumer: 25D19D18217F4588841E5CD1AA0D1533DE8AF84A #鍟嗘埛璇佷功搴忓垪鍙�
     privateKeyPath: pay/pro/wx/apiclient_key.pem
-    v3NotifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxPayV3Notify
-    v3RefundNotifyUrl: http://xiaopiqiu2.natapp1.cc/web/api/wxRefundV3Notify
+    v3NotifyUrl: https://test.doumee.cn/gtzxljc_web/web/api/wxPayV3Notify
+    v3RefundNotifyUrl: https://test.doumee.cn/gtzxljc_web/web/api/wxRefundV3Notify
 
 
 alipay:
diff --git a/server/web/src/main/java/com/doumee/api/web/AccountApi.java b/server/web/src/main/java/com/doumee/api/web/AccountApi.java
index 993e5ad..150f491 100644
--- a/server/web/src/main/java/com/doumee/api/web/AccountApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/AccountApi.java
@@ -65,9 +65,14 @@
     }
 
 
+    @LoginRequired
     @ApiOperation(value = "闂ㄥ簵璐﹀彿瀵嗙爜鐧诲綍", notes = "灏忕▼搴忕锛岄棬搴楃敤鎴烽�氳繃鎵嬫満鍙�+瀵嗙爜鐧诲綍")
     @PostMapping("/shopLogin")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true),
+    })
     public ApiResponse<ShopLoginVO> shopLogin(@RequestBody @Validated ShopLoginDTO dto) {
+        dto.setMemberId(getMemberId());
         return ApiResponse.success("鎿嶄綔鎴愬姛", shopInfoService.shopPasswordLogin(dto));
     }
 
diff --git a/server/web/src/main/java/com/doumee/api/web/ConfigApi.java b/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
index 85570ff..17d2ddd 100644
--- a/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/ConfigApi.java
@@ -19,6 +19,8 @@
 import com.doumee.dao.dto.AreasDto;
 import com.doumee.dao.dto.CalculateLocalPriceDTO;
 import com.doumee.dao.dto.CalculateRemotePriceDTO;
+import com.doumee.dao.dto.DriverCheckRadiusDTO;
+import com.doumee.dao.dto.ShopCheckRadiusDTO;
 import com.doumee.dao.dto.DirectionInfoDTO;
 import com.doumee.dao.dto.SameCityCheckDTO;
 import com.doumee.dao.vo.PriceCalculateVO;
@@ -299,5 +301,26 @@
         return ApiResponse.success("鏌ヨ鎴愬姛", appVersion);
     }
 
+    @LoginShopRequired
+    @ApiOperation(value = "闂ㄥ簵鏍¢獙鎿嶄綔鍗婂緞", notes = "鏍¢獙闂ㄥ簵鎿嶄綔浜哄綋鍓嶄綅缃槸鍚﹀湪鐩爣鐐瑰厑璁告搷浣滃崐寰勫唴")
+    @PostMapping("/checkShopOperationRadius")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<Boolean> checkShopOperationRadius(@RequestBody @Valid ShopCheckRadiusDTO dto) {
+        Boolean result = ordersService.checkOperationRadius(dto.getOrderId(), this.getShopId(), Constants.ZERO, dto.getLng(), dto.getLat());
+        return ApiResponse.success("鎿嶄綔鎴愬姛", result);
+    }
+
+    @LoginDriverRequired
+    @ApiOperation(value = "鍙告満鏍¢獙鎿嶄綔鍗婂緞", notes = "鏍¢獙鍙告満褰撳墠浣嶇疆鏄惁鍦ㄧ洰鏍囩偣鍏佽鎿嶄綔鍗婂緞鍐�")
+    @PostMapping("/checkDriverOperationRadius")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<Boolean> checkDriverOperationRadius(@RequestBody @Valid DriverCheckRadiusDTO dto) {
+        Boolean result = ordersService.checkOperationRadius(dto.getOrderId(), this.getDriverId(), Constants.ONE, dto.getLng(), dto.getLat());
+        return ApiResponse.success("鎿嶄綔鎴愬姛", result);
+    }
 
 }
diff --git a/server/web/src/main/java/com/doumee/api/web/MemberApi.java b/server/web/src/main/java/com/doumee/api/web/MemberApi.java
index b49cade..8ff3d4e 100644
--- a/server/web/src/main/java/com/doumee/api/web/MemberApi.java
+++ b/server/web/src/main/java/com/doumee/api/web/MemberApi.java
@@ -5,6 +5,7 @@
 import com.doumee.core.model.ApiResponse;
 import com.doumee.dao.business.model.Member;
 import com.doumee.dao.dto.UpdMobileRequest;
+import com.doumee.dao.vo.MemberContactVO;
 import com.doumee.dao.vo.UserCenterVO;
 import com.doumee.service.business.MemberService;
 import com.doumee.service.business.SmsrecordService;
@@ -111,6 +112,15 @@
         return ApiResponse.success("鎿嶄綔鎴愬姛");
     }
 
+    @LoginRequired
+    @ApiOperation("鑾峰彇鐢ㄦ埛鏀朵欢淇℃伅")
+    @GetMapping("/getContactInfo")
+    @ApiImplicitParams({
+            @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true)
+    })
+    public ApiResponse<MemberContactVO> getContactInfo() {
+        return ApiResponse.success("鏌ヨ鎴愬姛", memberService.getContactInfo(getMemberId()));
+    }
 
 
 }
diff --git a/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
index c26dbaa..9aaece4 100644
--- a/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
+++ b/server/web/src/main/java/com/doumee/api/web/PaymentCallback.java
@@ -231,9 +231,12 @@
                                     templateParam.put("orderNo", refundOrder.getCode());
                                     templateParam.put("money", String.valueOf(Constants.getFormatMoney(
                                             refundOrder.getRefundAmount() != null ? refundOrder.getRefundAmount() : 0L)));
-                                    String smsError = AliSmsService.sendSms(refundMember.getTelephone(),
-                                            Constants.SmsNotify.MEMBER_REFUNDED.getTemplateCode(),
-                                            templateParam.toJSONString());
+                                    String smsError = null;
+                                    if (Constants.SmsNotify.MEMBER_REFUNDED.isEnabled()) {
+                                        smsError = AliSmsService.sendSms(refundMember.getTelephone(),
+                                                Constants.SmsNotify.MEMBER_REFUNDED.getTemplateCode(),
+                                                templateParam.toJSONString());
+                                    }
                                     if (smsError == null) {
                                         log.info("閫�娆剧煭淇″彂閫佹垚鍔�: phone={}", refundMember.getTelephone());
                                     } else {
diff --git a/server/web/src/main/resources/application.yml b/server/web/src/main/resources/application.yml
index 54d0705..d4b2c60 100644
--- a/server/web/src/main/resources/application.yml
+++ b/server/web/src/main/resources/application.yml
@@ -12,7 +12,7 @@
 
 spring:
   profiles:
-    active: pro
+    active: dev
   # JSON杩斿洖閰嶇疆
   jackson:
     # 榛樿鏃跺尯

--
Gitblit v1.9.3