From fc772ac629241b55a377ef8eb2c1e94b69bb3e53 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期一, 15 七月 2024 12:09:51 +0800
Subject: [PATCH] 提交

---
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCollectResponse.java        |    4 
 server/service/src/main/java/com/doumee/service/business/impl/CustomerUserServiceImpl.java             |  263 +++++++++++
 server/admin/src/main/java/com/doumee/api/timer/QuartzController.java                                  |    2 
 server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerListRequest.java                 |   22 
 server/service/src/main/java/com/doumee/biz/zbom/ZbomCRMService.java                                   |   16 
 server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomZhongTaiServiceImpl.java                     |   22 
 server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmDaogouBindListRequest.java               |   24 +
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTTagInfoResponse.java        |   36 +
 admin/src/views/timer/components/OperaTimerWindow.vue                                                  |    8 
 server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerInfoRequest.java                 |   10 
 server/admin/src/main/java/com/doumee/timer/CustomerUserUpdateBiz.java                                 |   39 +
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTUserGetTokenResponse.java   |    4 
 server/service/src/main/java/com/doumee/service/business/CustomerUserService.java                      |   99 ++++
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentInfoResponse.java    |    3 
 server/service/src/main/java/com/doumee/biz/zbom/ZbomZhongTaiService.java                              |    1 
 server/service/src/main/java/com/doumee/core/utils/Constants.java                                      |   17 
 server/service/src/main/java/com/doumee/service/business/InitService.java                              |    1 
 server/service/src/main/java/com/doumee/biz/zbom/ZbomSMSService.java                                   |    1 
 server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMCustomerListResponse.java       |   23 +
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBasePageResponse.java       |    3 
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTTagChildInfoResponse.java   |   31 +
 server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomSMSServiceImpl.java                          |   11 
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentListResponse.java    |    4 
 server/admin/src/main/java/com/doumee/api/business/CustomerUserController.java                         |   90 +++
 server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMDaogouBindListResponse.java     |   24 +
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBaseResponse.java           |    6 
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogTagTypeResponse.java |    3 
 server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMBaseRequst.java                          |   17 
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTConstants.java                       |   22 
 server/service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java                          |    4 
 server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMBaseResponse.java               |   24 +
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTAreaInfoResponse.java       |    3 
 admin/src/views/timer/timer.vue                                                                        |  102 ++--
 /dev/null                                                                                              |   19 
 server/service/src/main/java/com/doumee/dao/business/CustomerUserMapper.java                           |   13 
 server/service/src/main/java/com/doumee/dao/business/model/CustomerUser.java                           |   99 ++++
 server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogInfoResponse.java    |    7 
 server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java                          |  203 +++++---
 server/service/src/main/java/com/doumee/core/utils/HttpsUtil.java                                      |    7 
 server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMConstants.java                           |   41 +
 40 files changed, 1,128 insertions(+), 200 deletions(-)

diff --git a/admin/src/views/timer/components/OperaTimerWindow.vue b/admin/src/views/timer/components/OperaTimerWindow.vue
index f3e8b6d..f710051 100644
--- a/admin/src/views/timer/components/OperaTimerWindow.vue
+++ b/admin/src/views/timer/components/OperaTimerWindow.vue
@@ -8,16 +8,16 @@
   >
     <el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix="锛�">
       <el-form-item label="Bean鍚嶇О" prop="beanName">
-        <el-input v-model="form.beanName" placeholder="璇疯緭鍏ean鍚嶇О" :maxlength="10" v-trim/>
+        <el-input v-model="form.beanName" placeholder="璇疯緭鍏ean鍚嶇О"  v-trim/>
       </el-form-item>
       <el-form-item label="妯″潡鍚嶇О" prop="module">
-        <el-input v-model="form.module" placeholder="璇疯緭鍏ユā鍧楀悕绉�" :maxlength="10" v-trim/>
+        <el-input v-model="form.module" placeholder="璇疯緭鍏ユā鍧楀悕绉�"   v-trim/>
       </el-form-item>
       <el-form-item label="Cron琛ㄨ揪寮�" prop="cronExpres">
-        <el-input v-model="form.cronExpres" placeholder="璇疯緭鍏ron琛ㄨ揪寮�" :maxlength="10" v-trim/>
+        <el-input v-model="form.cronExpres" placeholder="璇疯緭鍏ron琛ㄨ揪寮�"   v-trim/>
       </el-form-item>
       <el-form-item label="澶囨敞" prop="remark">
-        <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" :maxlength="10" v-trim/>
+        <el-input v-model="form.remark" placeholder="璇疯緭鍏ュ娉�" v-trim/>
       </el-form-item>
       <el-form-item label="鎵ц鍙傛暟" prop="params">
         <el-input v-model="form.params" type="textarea" placeholder="璇疯緭鍏ユ墽琛屽弬鏁�" v-trim/>
diff --git a/admin/src/views/timer/timer.vue b/admin/src/views/timer/timer.vue
index 912f85c..91e4b1e 100644
--- a/admin/src/views/timer/timer.vue
+++ b/admin/src/views/timer/timer.vue
@@ -70,7 +70,7 @@
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
 import OperaTimerWindow from '@/views/timer/components/OperaTimerWindow'
-import {runOnceById} from "@/api/timer/timer";
+import {pauseById, resumeById, runOnceById} from '@/api/timer/timer'
 export default {
   name: 'Devices',
   extends: BaseTable,
@@ -83,13 +83,13 @@
         beanName: '',
         module: ''
       },
-      pausing:false,
-      running:false,
-      resuming:false,
+      pausing: false,
+      running: false,
+      resuming: false,
       room: []
     }
   },
-  provide() {
+  provide () {
     return {
       room: () => this.room
     }
@@ -107,61 +107,61 @@
     pauseById (row) {
       this.__checkApi()
       this.$dialog.actionConfirm('纭鏆傚仠璇ヤ换鍔″悧?')
-          .then(() => {
-            this.pausing = true
-            this.api.paustById(row.id)
-                .then(() => {
-                  this.$message.info('鏆傚仠鎴愬姛')
-                  this.search()
-                })
-                .catch(e => {
-                  // this.$tip.apiFailed(e)
-                })
-                .finally(() => {
-                  this.pausing = false
-                })
-          })
-          .catch(() => {})
+        .then(() => {
+          this.pausing = true
+          this.api.pauseById(row.id)
+            .then(() => {
+              this.$message.info('鏆傚仠鎴愬姛')
+              this.search()
+            })
+            .catch(e => {
+              // this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.pausing = false
+            })
+        })
+        .catch(() => {})
     },
     resumeById (row) {
       this.__checkApi()
       this.$dialog.actionConfirm('纭鎭㈠璇ヤ换鍔″悧?')
-          .then(() => {
-            this.resuming = true
-            this.api.resumeById(row.id)
-                .then(() => {
-                  this.$message.info('鎭㈠鎴愬姛')
-                  this.search()
-                })
-                .catch(e => {
-                  // this.$tip.apiFailed(e)
-                })
-                .finally(() => {
-                  this.resuming = false
-                })
-          })
-          .catch(() => {})
+        .then(() => {
+          this.resuming = true
+          this.api.resumeById(row.id)
+            .then(() => {
+              this.$message.info('鎭㈠鎴愬姛')
+              this.search()
+            })
+            .catch(e => {
+              // this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.resuming = false
+            })
+        })
+        .catch(() => {})
     },
     runById (row) {
       this.__checkApi()
       this.$dialog.actionConfirm('纭鎵ц涓�娆¤浠诲姟鍚�?')
-          .then(() => {
-            this.running = true
-            this.api.runOnceById(row.id)
-                .then(() => {
-                  this.$message.info('鎵ц鎴愬姛')
-                  this.search()
-                })
-                .catch(e => {
-                  // this.$tip.apiFailed(e)
-                })
-                .finally(() => {
-                  this.running = false
-                })
-          })
-          .catch(() => {})
+        .then(() => {
+          this.running = true
+          this.api.runOnceById(row.id)
+            .then(() => {
+              this.$message.info('鎵ц鎴愬姛')
+              this.search()
+            })
+            .catch(e => {
+              // this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.running = false
+            })
+        })
+        .catch(() => {})
     }
-  },
+  }
 }
 
 </script>
diff --git a/server/admin/src/main/java/com/doumee/api/business/CustomerUserController.java b/server/admin/src/main/java/com/doumee/api/business/CustomerUserController.java
new file mode 100644
index 0000000..e380b16
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/api/business/CustomerUserController.java
@@ -0,0 +1,90 @@
+package com.doumee.api.business;
+
+import com.doumee.api.BaseController;
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.model.PageData;
+import com.doumee.dao.business.model.CustomerUser;
+import com.doumee.service.business.CustomerUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;    
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/07/15 10:21
+ */
+@Api(tags = "瀹㈡埛瀵艰喘鍏宠仈琛�")
+@RestController
+@RequestMapping("/business/customerUser")
+public class CustomerUserController extends BaseController {
+
+    @Autowired
+    private CustomerUserService customerUserService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:customeruser:create")
+    public ApiResponse create(@RequestBody CustomerUser customerUser) {
+        return ApiResponse.success(customerUserService.create(customerUser));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:customeruser:delete")
+    public ApiResponse deleteById(@PathVariable Long id) {
+        customerUserService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:customeruser:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        String [] idArray = ids.split(",");
+        List<Long> idList = new ArrayList<>();
+        for (String id : idArray) {
+            idList.add(Long.valueOf(id));
+        }
+        customerUserService.deleteByIdInBatch(idList);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:customeruser:update")
+    public ApiResponse updateById(@RequestBody CustomerUser customerUser) {
+        customerUserService.updateById(customerUser);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:customeruser:query")
+    public ApiResponse<PageData<CustomerUser>> findPage (@RequestBody PageWrap<CustomerUser> pageWrap) {
+        return ApiResponse.success(customerUserService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:customeruser:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<CustomerUser> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(CustomerUser.class).export(customerUserService.findPage(pageWrap).getRecords(), "瀹㈡埛瀵艰喘鍏宠仈琛�", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:customeruser:query")
+    public ApiResponse findById(@PathVariable Long id) {
+        return ApiResponse.success(customerUserService.findById(id));
+    }
+}
diff --git a/server/admin/src/main/java/com/doumee/api/timer/QuartzController.java b/server/admin/src/main/java/com/doumee/api/timer/QuartzController.java
index 220def6..3524a93 100644
--- a/server/admin/src/main/java/com/doumee/api/timer/QuartzController.java
+++ b/server/admin/src/main/java/com/doumee/api/timer/QuartzController.java
@@ -54,7 +54,7 @@
     }
 
     @ApiOperation( "鎵ц涓�娆�")
-    @GetMapping("RequiresPermissions")
+    @GetMapping("/runOnce/{id}")
     @RequiresPermissions("business:quartz:update")
     public ApiResponse runOnce(@PathVariable("id") Integer id) {
         quartzJobService.runOnce(id) ; return ApiResponse.success(null);
diff --git a/server/admin/src/main/java/com/doumee/timer/CustomerUserUpdateBiz.java b/server/admin/src/main/java/com/doumee/timer/CustomerUserUpdateBiz.java
new file mode 100644
index 0000000..d22869e
--- /dev/null
+++ b/server/admin/src/main/java/com/doumee/timer/CustomerUserUpdateBiz.java
@@ -0,0 +1,39 @@
+package com.doumee.timer;
+
+import com.doumee.core.utils.DateUtil;
+import com.doumee.service.business.CustomerUserService;
+import com.doumee.service.business.InitService;
+import org.apache.commons.lang3.StringUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.lang.reflect.Method;
+
+/**
+ * @author 瀹氭椂鑾峰彇蹇楅偊瀹㈡埛缁戝畾瀵艰喘闆嗗悎鏁版嵁
+ * @since 2023-07-26 11:44
+ */
+@Component("customerBindDaogou")
+public class CustomerUserUpdateBiz implements JobService {
+    private static final Logger log = LoggerFactory.getLogger(CustomerUserUpdateBiz.class);
+
+    @Autowired
+    CustomerUserService customerUserService;
+    @Override
+    public void run(String params,String module) {
+        Method method = null;
+        try {
+            if(StringUtils.equals(module,"syncYesterday")){
+                String date = DateUtil.getYesterday();
+                customerUserService.syncYesterday(date);
+            }else{
+                log.info("\n ======== 瀹氭椂浠诲姟宸叉墽琛岋細zbomRedisResut.========"+module);
+            }
+        } catch (Exception e) {
+           e.printStackTrace();
+        }
+    }
+
+}
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/ZbomCRMService.java b/server/service/src/main/java/com/doumee/biz/zbom/ZbomCRMService.java
index 5d02b44..6140b41 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/ZbomCRMService.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/ZbomCRMService.java
@@ -1,8 +1,12 @@
 package com.doumee.biz.zbom;
 
-import com.doumee.biz.zbom.model.CrmCustomerSubmmitModel;
-import com.doumee.biz.zbom.model.IamUpateShopModel;
-import com.doumee.biz.zbom.model.IamUpateUserModel;
+import com.doumee.biz.zbom.model.crm.CRMConstants;
+import com.doumee.biz.zbom.model.crm.CrmCustomerInfoRequest;
+import com.doumee.biz.zbom.model.crm.CrmCustomerListRequest;
+import com.doumee.biz.zbom.model.crm.CrmDaogouBindListRequest;
+import com.doumee.biz.zbom.model.crm.response.CRMBaseResponse;
+import com.doumee.biz.zbom.model.crm.response.CRMCustomerListResponse;
+import com.doumee.biz.zbom.model.crm.response.CRMDaogouBindListResponse;
 import com.doumee.dao.business.model.CustomerLog;
 import org.springframework.stereotype.Service;
 
@@ -16,7 +20,9 @@
 @Service
 public interface ZbomCRMService {
 
-    void dealCustomerLogData(CustomerLog customerLog);
+    int dealCustomerLogData(CustomerLog customerLog);
+    String zbomEncode(String str);
 
-    int postDataToCrm(CrmCustomerSubmmitModel entity );
+    CRMBaseResponse<List<CRMCustomerListResponse>> getCustomerList(CrmCustomerListRequest entity );
+    CRMBaseResponse<List<CRMDaogouBindListResponse>> getDaogouBindList(CrmDaogouBindListRequest entity );
 }
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/ZbomSMSService.java b/server/service/src/main/java/com/doumee/biz/zbom/ZbomSMSService.java
index 906ae4e..9c9cf66 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/ZbomSMSService.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/ZbomSMSService.java
@@ -1,6 +1,5 @@
 package com.doumee.biz.zbom;
 
-import com.doumee.biz.zbom.model.CrmCustomerSubmmitModel;
 import org.springframework.stereotype.Service;
 
 /**
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/ZbomZhongTaiService.java b/server/service/src/main/java/com/doumee/biz/zbom/ZbomZhongTaiService.java
index f3ac168..7bd5f98 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/ZbomZhongTaiService.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/ZbomZhongTaiService.java
@@ -21,6 +21,7 @@
     ZTUserGetTokenResponse userUpdateInfo(ZTUserInfoUpdateRequest param);
     boolean userLogout(ZTBaseRequst param);
     List<ZTCatalogInfoResponse> getCatalogList(ZTCatalogListRequest param);
+    List<ZTTagInfoResponse> getTagList(ZTCatalogListRequest param);
     ZTBasePageResponse<ZTContentListResponse> pageContentList(ZTContentListRequest param);
    ZTContentInfoResponse getContentInfo(ZTContentInfoRequest param);
    boolean collectDo(ZTActionDoRequest param);
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java
index f6d1d27..c360fb8 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java
@@ -1,10 +1,18 @@
 package com.doumee.biz.zbom.impl;
 
 import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.doumee.biz.zbom.ZbomCRMService;
-import com.doumee.biz.zbom.model.CrmCustomerInfoModel;
-import com.doumee.biz.zbom.model.CrmCustomerSubmmitModel;
+import com.doumee.biz.zbom.model.crm.CRMConstants;
+import com.doumee.biz.zbom.model.crm.CrmCustomerInfoRequest;
+import com.doumee.biz.zbom.model.crm.CrmCustomerListRequest;
+import com.doumee.biz.zbom.model.crm.CrmDaogouBindListRequest;
+import com.doumee.biz.zbom.model.crm.response.CRMBaseResponse;
+import com.doumee.biz.zbom.model.crm.response.CRMCustomerListResponse;
+import com.doumee.biz.zbom.model.crm.response.CRMDaogouBindListResponse;
+import com.doumee.biz.zbom.model.zhongtai.ZTConstants;
+import com.doumee.biz.zbom.model.zhongtai.response.ZTBaseResponse;
 import com.doumee.core.utils.Constants;
 import com.doumee.core.utils.DateUtil;
 import com.doumee.core.utils.HttpsUtil;
@@ -12,6 +20,7 @@
 import com.doumee.dao.business.CustomerLogMapper;
 import com.doumee.dao.business.model.CrmInterfaceLog;
 import com.doumee.dao.business.model.CustomerLog;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +28,12 @@
 import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLEncoder;
 import java.util.*;
 
 /**
@@ -27,6 +42,7 @@
  * @date 2023/11/30 15:33
  */
 @Service
+@Slf4j
 public class ZbomCRMServiceImpl implements ZbomCRMService {
 
     @Autowired
@@ -38,93 +54,109 @@
     private RedisTemplate<String, Object> redisTemplate;
 
 
-    @Override
-    @Async
-    public void dealCustomerLogData(CustomerLog customerLog){
-        CrmCustomerSubmmitModel entity = new CrmCustomerSubmmitModel();
-        List<CrmCustomerInfoModel> cusInfo = new ArrayList();
-        CrmCustomerInfoModel crmCustomerInfoModel = new CrmCustomerInfoModel();
-        crmCustomerInfoModel.setId(customerLog.getId());
-        crmCustomerInfoModel.setName(customerLog.getName());
-        crmCustomerInfoModel.setPhone(customerLog.getPhone());
-        crmCustomerInfoModel.setAreaname(customerLog.getAreaName());
-        crmCustomerInfoModel.setAreacode(customerLog.getAreaCode());
-        crmCustomerInfoModel.setOpenid(customerLog.getOpenid());
-        crmCustomerInfoModel.setSource(Constants.CrmSources.SOURCE_ZBJX);
-        crmCustomerInfoModel.setChannel(crmCustomerInfoModel.getSource()+"00");
-        crmCustomerInfoModel.setDate(DateUtil.dateToString(customerLog.getCreateDate(),"yyyy/MM/dd HH:mm"));
-        cusInfo.add(crmCustomerInfoModel);
-        entity.setCusInfo(cusInfo);
-        this.postDataToCrm(entity);
-
-    }
-
-
 
     /**
      * 蹇楅偊瀹㈡埛淇℃伅鎻愪氦鎺ュ彛
-     * @param entity
+     * @param customerLog
      * @return
      */
     @Override
-    public int postDataToCrm(CrmCustomerSubmmitModel entity )  {
-        // TODO Auto-generated method stub
-        int status = 2;
-        if(entity==null || entity.getCusInfo()==null || entity.getCusInfo().size() ==0){
-            return status;
-        }
-        String type = "postCusData";
-        String appid = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_KEY);
-        String urlStr =  (String)redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_URL) ;
-        long _t = System.currentTimeMillis();
-        String crmInfo="鎻愪氦澶辫触";
-        if (StringUtils.isNotBlank(appid)||StringUtils.isNotBlank(urlStr)) {
-            String param = JSONObject.toJSONString(entity);
-            String result = null;
-            int success =1;
-            String url = urlStr;
-            try {
-                String token = DigestUtils.md5Hex(type + _t + appid);
-                  url = urlStr + "?type=" + type + "&_t=" + _t + "&token=" + token;// 鎻愪氦CRM鍦板潃
-                  result = HttpsUtil.postJson(url,param);
-                if (StringUtils.isNotBlank(result)) {
-                    JSONObject r = JSONObject.parseObject(result.replace("(", "").replace(")", ""));
-                    if (r != null && (StringUtils.equalsIgnoreCase(r.getString("code"), "1")
-                            || StringUtils.equalsIgnoreCase(r.getString("code"), "2"))) {
-                          status = 1;
-                          crmInfo="鎻愪氦鎴愬姛";
-                        success =0;
-                    }else{
-                        status = 2;
-                        crmInfo="鎻愪氦澶辫触["+ result+"]";
-                    }
-                }
-            }catch (Exception e){
-                e.printStackTrace();
-                crmInfo+= e.getMessage();
-            }finally {
-                saveInterfaceLog(url,"蹇楅偊CRM瀹㈡埛鐣欒祫淇℃伅鎻愪氦",param,success,result);
-            }
+    @Async
+    public int dealCustomerLogData(CustomerLog customerLog){
+        CrmCustomerInfoRequest entity = new CrmCustomerInfoRequest();
+        entity.setId(customerLog.getId());
+        entity.setName(customerLog.getName());
+        entity.setPhone(zbomEncode(customerLog.getPhone()));
+        entity.setAreaname(customerLog.getAreaName());
+        entity.setAreacode(customerLog.getAreaCode());
+        entity.setOpenid(customerLog.getOpenid());
+        entity.setSource(CRMConstants.CRM_SOURCE.SOURCE_ZBJX);
+        entity.setChannel(CRMConstants.CRM_SOURCE.SOURCE_ZBJX+"00");
+        entity.setDate(DateUtil.dateToString(customerLog.getCreateDate(),"yyyy/MM/dd HH:mm"));
+        int status ;
+        String crmInfo;
+        String param = JSONObject.toJSONString(entity);
+        CRMBaseResponse result = sendHttpRequest(CRMConstants.IntegerUrl.POST_CUS_DATA_URL,CRMConstants.IntegerName.POST_CUS_DATA_NAME,param);
+        if (result != null && (StringUtils.equalsIgnoreCase(result.getCode(), CRMConstants.CODE_SUCCESS))) {
+            status = 1;
+            crmInfo="鎻愪氦鎴愬姛";
         }else{
             status = 2;
-            crmInfo="鎻愪氦澶辫触crm閰嶇疆鏈夎锛宎ppid:["+ appid+"]"+"url:["+ urlStr+"]";
+            crmInfo="鎻愪氦澶辫触["+ result!=null?result.getMsg():"鎺ュ彛璇锋眰澶辫触锛�"+"]";
         }
-        List<Long> idList = new ArrayList<>();
-        for(CrmCustomerInfoModel info : entity.getCusInfo()){
-            idList.add(info.getId());
-        }
-        // 濡傛灉鎻愪氦鎴愬姛
-        CustomerLog d = new CustomerLog();
-        d.setId(entity.getCusInfo().get(0).getId());
-        d.setCrmStatus(Constants.ONE);
         customerLogMapper.update(null,new UpdateWrapper<CustomerLog>().lambda()
-                .in(CustomerLog::getId,idList)
+                .eq(CustomerLog::getId,entity.getId())
                 .set(CustomerLog::getCrmStatus,Constants.ONE )
                 .set(CustomerLog::getCrmInfo,crmInfo )
                 .set(CustomerLog::getCrmDate,new Date() ));// 鏇存柊鐘舵��
         return status;// 榛樿澶辫触
     }
+    /**
+     * 鑾峰彇瀵艰喘缁戝畾鍒楄〃
+     * @param entity
+     * @return
+     */
+    @Override
+    public  CRMBaseResponse<List<CRMDaogouBindListResponse>> getDaogouBindList(CrmDaogouBindListRequest entity ){
+        int status ;
+        String crmInfo;
+        String param = JSONObject.toJSONString(entity);
+        CRMBaseResponse<List<CRMDaogouBindListResponse>> result = sendHttpRequest(CRMConstants.IntegerUrl.DAOGOU_BIND_LIST_URL,CRMConstants.IntegerName.DAOGOU_BIND_LIST_NAME,param);
+        return result;// 榛樿澶辫触
+    }
 
+    /**
+     * 鑾峰彇瀹㈡埛鍒楄〃
+     * @param entity
+     * @return
+     */
+    @Override
+    public CRMBaseResponse<List<CRMCustomerListResponse>> getCustomerList(CrmCustomerListRequest entity ){
+        int status ;
+        String crmInfo;
+        String param = JSONObject.toJSONString(entity);
+        CRMBaseResponse<List<CRMCustomerListResponse>> result = sendHttpRequest(CRMConstants.IntegerUrl.CUS_BEFORE_PAGE_LIST_URL,CRMConstants.IntegerName.CUS_BEFORE_PAGE_LIST_NAME,param);
+        return result;// 榛樿澶辫触
+    }
+
+    public   <T> CRMBaseResponse<T> sendHttpRequest(String interfaceUrl,  String name,  String param){
+        log.info("銆�"+name+"銆�================寮�濮�===="+ JSONObject.toJSONString(param));
+        String appKey = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_KEY);
+        String url = redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_CRM_API_URL) + interfaceUrl ;
+        long _t = System.currentTimeMillis();
+        if (StringUtils.isNotBlank(appKey)||StringUtils.isNotBlank(url)) {
+            String res = null;
+            int success = 0;
+            try {
+                url += "?timestamp=" + _t + "&sign=" + DigestUtils.md5Hex( _t + appKey);
+                Map<String,String> headers = new HashMap<>();
+                String index = (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_ZHONGTAI_API_URL);
+                res = HttpsUtil.postJson(url,param);
+                TypeReference typeReference =
+                        new TypeReference<CRMBaseResponse<T>>(){};
+                CRMBaseResponse<T>  result = JSONObject.parseObject(res, typeReference.getType());
+                logResult(result,name);
+                if(StringUtils.equals(result.getCode(),CRMConstants.CODE_SUCCESS)){
+                    return  result;
+                }else{
+                    success =1;
+                }
+            }catch (Exception e){
+                success = 1;
+                log.error("銆�"+name+"銆�================澶辫触===="+ JSONObject.toJSONString(param));
+            }finally {
+                saveInterfaceLog(url,name,param,success,res);
+            }
+        }
+        return  null;
+    }
+    private static void logResult(CRMBaseResponse res,String name) {
+        if(StringUtils.equals(res.getCode(), CRMConstants.CODE_SUCCESS)){
+            log.info("銆怌RM鎺ュ彛锛�"+name+"銆�================鎴愬姛====\n"+res);
+        }else{
+            log.error("銆怌RM鎺ュ彛锛�"+name+"銆�================澶辫触====锛歕n"+ res);
+        }
+    }
     public  void  saveInterfaceLog(String url,String name,String  param,Integer success,String respone){
             if(crmInterfaceLogMapper ==null){
                 return;
@@ -142,4 +174,29 @@
             log.setRepose(respone);
             crmInterfaceLogMapper.insert(log);
     }
+
+    /**
+     * 蹇楅偊瀛楃涓插姞瀵�
+     * @param str
+     * @return
+     */
+
+    @Override
+    public   String zbomEncode(String str)  {
+        StringBuffer sb = new StringBuffer();
+        String result = null;
+        try {
+            // 鍒涘缓StringBuffer瀵硅薄鐢ㄦ潵鎿嶄綔瀛楃涓�
+            String  urlStr =  (String) redisTemplate.opsForValue().get(Constants.RedisKeys.ZBOM_ENCODE_URL);
+            sb = new StringBuffer(
+                    urlStr + "?code=" + URLEncoder.encode(str, "UTF-8") + "&type=0&numstr=wy?");
+            result = HttpsUtil.sendGet(sb.toString());
+
+        }catch (Exception e){
+            e.printStackTrace();
+        }finally {
+            saveInterfaceLog(sb.toString(),"蹇楅偊瀛楃涓插姞瀵嗘帴鍙�",str, result==null?1:0,result );
+        }
+        return  result;
+    }
 }
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomSMSServiceImpl.java b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomSMSServiceImpl.java
index dbe6b43..61cf379 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomSMSServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomSMSServiceImpl.java
@@ -1,17 +1,10 @@
 package com.doumee.biz.zbom.impl;
 
-import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
-import com.doumee.biz.zbom.ZbomCRMService;
 import com.doumee.biz.zbom.ZbomSMSService;
-import com.doumee.biz.zbom.model.CrmCustomerInfoModel;
-import com.doumee.biz.zbom.model.CrmCustomerSubmmitModel;
 import com.doumee.core.utils.Constants;
-import com.doumee.core.utils.HttpsUtil;
 import com.doumee.dao.business.CrmInterfaceLogMapper;
 import com.doumee.dao.business.CustomerLogMapper;
 import com.doumee.dao.business.model.CrmInterfaceLog;
-import com.doumee.dao.business.model.CustomerLog;
 import org.apache.commons.codec.digest.DigestUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -23,16 +16,14 @@
 import java.net.HttpURLConnection;
 import java.net.URL;
 import java.net.URLEncoder;
-import java.util.ArrayList;
 import java.util.Date;
-import java.util.List;
 
 /**
  * 蹇楅偊CRM瀹㈡埛淇℃伅鎻愪氦鎺ュ彛
  * @author 姹熻箘韫�
  * @date 2023/11/30 15:33
  */
-//@Service
+@Service
 public class ZbomSMSServiceImpl implements ZbomSMSService  {
 
     @Autowired
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomZhongTaiServiceImpl.java b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomZhongTaiServiceImpl.java
index 663aa5c..12f9fc8 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomZhongTaiServiceImpl.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomZhongTaiServiceImpl.java
@@ -113,6 +113,24 @@
         }
         return null;
     }
+    /**
+     * 鑾峰彇鍒嗙被鍜屽垎绫讳笅鐨勬爣绛�
+     * @param param
+     * @return
+     */
+    @Override
+    public      List<ZTTagInfoResponse> getTagList(ZTCatalogListRequest param){
+        ZTBaseResponse<List<ZTTagInfoResponse>> result = sendHttpRequest(
+                ZTConstants.IntegerUrl.TAG_LIST_URL,
+                ZTConstants.IntegerName.TAG_LIST_NAME,
+                param.getToken(),
+                param.getUserType(),
+                JSONObject.toJSONString(param ));
+        if(result!=null){
+            return result.getData();
+        }
+        return null;
+    }
 
     /**
      * 鑾峰彇鍐呭鍒楄〃鍒嗛〉
@@ -298,7 +316,7 @@
                     new TypeReference<ZTBaseResponse<T>>(){};
             ZTBaseResponse<T>  result = JSONObject.parseObject(res, typeReference.getType());
             logResult(result,name);
-            if(StringUtils.equals(result.getCode(),ZTConstants.CODE_SUCCESS)){
+            if(Constants.equalsInteger(result.getCode(),ZTConstants.CODE_SUCCESS)){
                 return  result;
             }else{
                 success =1;
@@ -329,7 +347,7 @@
         interfaceLogMapper.insert(log);
     }
     private static void logResult(ZTBaseResponse res,String name) {
-        if(StringUtils.equals(res.getCode(), ZTConstants.CODE_SUCCESS)){
+        if(Constants.equalsInteger(res.getCode(),ZTConstants.CODE_SUCCESS)){
             log.info("銆愪腑鍙版帴鍙o細"+name+"銆�================鎴愬姛====\n"+res);
         }else{
             log.error("銆愪腑鍙版帴鍙o細"+name+"銆�================澶辫触====锛歕n"+ res);
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/CrmCustomerSubmmitModel.java b/server/service/src/main/java/com/doumee/biz/zbom/model/CrmCustomerSubmmitModel.java
deleted file mode 100644
index b2af4d4..0000000
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/CrmCustomerSubmmitModel.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package com.doumee.biz.zbom.model;
-
-import com.fasterxml.jackson.annotation.JsonProperty;
-import com.google.gson.annotations.SerializedName;
-import io.swagger.annotations.ApiModel;
-import io.swagger.annotations.ApiModelProperty;
-import lombok.Data;
-
-import java.io.Serializable;
-import java.util.List;
-
-@Data
-@ApiModel("蹇楅偊CRM瀹㈡埛鐣欒祫鎻愪氦鍙傛暟")
-public class CrmCustomerSubmmitModel implements Serializable {
-    @ApiModelProperty(value = "瀹㈡埛淇℃伅")
-    @JsonProperty("cus_info")
-    @SerializedName("cus_info")
-    private List<CrmCustomerInfoModel> cusInfo;
-}
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMBaseRequst.java b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMBaseRequst.java
new file mode 100644
index 0000000..e8c057b
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMBaseRequst.java
@@ -0,0 +1,17 @@
+package com.doumee.biz.zbom.model.crm;
+
+import lombok.Data;
+
+
+/**
+ *  crm璇锋眰鍏叡鍙傛暟
+ */
+@Data
+public class CRMBaseRequst {
+    /**
+     * 鐖剁骇缂栫爜
+     */
+    private Integer timestamp;
+    private String sign;
+
+}
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMConstants.java b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMConstants.java
new file mode 100644
index 0000000..7fc96fc
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMConstants.java
@@ -0,0 +1,41 @@
+package com.doumee.biz.zbom.model.crm;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.google.gson.annotations.SerializedName;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+public class CRMConstants {
+
+    public static final CharSequence CODE_SUCCESS = "1";
+    public interface IntegerUrl{
+        String POST_CUS_DATA_URL ="/api/public/zbom/postCusData";
+        String CUS_BEFORE_PAGE_LIST_URL ="api/public/mini/program/cusOrBeforeList";
+        String DAOGOU_BIND_LIST_URL ="api/public/mini/program/list";
+
+    }
+    public interface IntegerName{
+        String POST_CUS_DATA_NAME ="鐣欒祫鏁版嵁鎻愪氦";
+        String CUS_BEFORE_PAGE_LIST_NAME  ="鏌ヨ绠$悊瀹㈡埛/娼滃鍒楄〃";
+        String DAOGOU_BIND_LIST_NAME  ="鏌ヨ瀹㈡埛瀵艰喘";
+    }
+    
+    public  interface CRM_SOURCE{
+       String SOURCE_DKXD = "DKXD";// 浠e涓嬪崟(DKXD)
+       String SOURCE_LYSJ = "LYSJ";// 闆跺厓璁捐(LYSJ)
+       String SOURCE_ZBSJSQ = "ZBSJSQ";// 蹇楅偊璁捐鐢宠(ZBSJSQ)
+       String SOURCE_ZBDXFX = "ZBDXFX";// 蹇楅偊鐭俊鍒嗕韩(ZBDXFX)
+       String SOURCE_ZBLLJL = "ZBLLJL";// 蹇楅偊娴忚璁板綍鍒嗕韩(ZBLLJL)
+       String SOURCE_ZBWDSC = "ZBWDSC";// 蹇楅偊鎴戠殑鏀惰棌鍒嗕韩(ZBWDSC)
+       String SOURCE_ZBLYSJ = "ZBLYSJ";// 蹇楅偊闆跺厓璁捐(ZBLYSJ)
+       String SOURCE_ZBLDX = "ZBLDX";// 蹇楅偊鑰佸甫鏂�(ZBLDX)
+       String SOURCE_ZBFGCS = "ZBFGCS";// 蹇楅偊椋庢牸娴嬭瘯(ZBFGCS)
+       String SOURCE_ZBJX = "DSLX22";// 蹇楅偊瀹堕��(ZBJX)
+    }
+
+
+}
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/CrmCustomerInfoModel.java b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerInfoRequest.java
similarity index 81%
rename from server/service/src/main/java/com/doumee/biz/zbom/model/CrmCustomerInfoModel.java
rename to server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerInfoRequest.java
index 956be0c..c5a374e 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/CrmCustomerInfoModel.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerInfoRequest.java
@@ -1,4 +1,4 @@
-package com.doumee.biz.zbom.model;
+package com.doumee.biz.zbom.model.crm;
 
 import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
@@ -7,8 +7,8 @@
 import java.io.Serializable;
 
 @Data
-@ApiModel("蹇楅偊CRM瀹㈡埛鐣欒祫鎻愪氦鏄庣粏鍙傛暟")
-public class CrmCustomerInfoModel implements Serializable {
+@ApiModel("蹇楅偊CRM瀹㈡埛鐣欒祫鎻愪氦鍙傛暟")
+public   class CrmCustomerInfoRequest extends CRMBaseRequst implements Serializable {
     @ApiModelProperty(value = "浜哄憳缂栫爜")
     private Long id;
     @ApiModelProperty(value = "濮撳悕")
@@ -39,4 +39,6 @@
     private String openid;
     @ApiModelProperty(value = "缁堢淇℃伅")
     private String terminal;
-}
+    @ApiModelProperty(value = "鏉ユ簮绫诲瀷  3绗笁鏂瑰钩鍙�  12 灏忕▼搴�)")
+    private String lyType;
+}
\ No newline at end of file
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerListRequest.java b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerListRequest.java
new file mode 100644
index 0000000..0e76ad3
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerListRequest.java
@@ -0,0 +1,22 @@
+package com.doumee.biz.zbom.model.crm;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel("鏌ヨ绠$悊瀹㈡埛/娼滃鍒楄〃璇锋眰鍙傛暟")
+public   class CrmCustomerListRequest extends CRMBaseRequst implements Serializable {
+    @ApiModelProperty(value = "鐢ㄦ埛鍚�",required = true)
+    private String userName;
+    @ApiModelProperty(value = "绫诲瀷 绠$悊瀹㈡埛:0 娼滃鍒楄〃锛�1" ,required = true)
+    private String flag;
+    @ApiModelProperty(value = "鍒嗛〉澶у皬 锛堥粯璁わ細10锛� 10")
+    private int pageSize;
+    @ApiModelProperty(value = "鍒嗛〉椤电爜  锛堥粯璁わ細1锛�")
+    private int page;
+    @ApiModelProperty(value = "瀹㈡埛鍚嶇О,瀹㈡埛鎵嬫満鍙风爜 ,鍦板潃")
+    private String keyWords;
+}
\ No newline at end of file
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmDaogouBindListRequest.java b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmDaogouBindListRequest.java
new file mode 100644
index 0000000..76e357f
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmDaogouBindListRequest.java
@@ -0,0 +1,24 @@
+package com.doumee.biz.zbom.model.crm;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel("鏌ヨ绠$悊瀹㈡埛/娼滃鍒楄〃璇锋眰鍙傛暟")
+public   class CrmDaogouBindListRequest extends CRMBaseRequst implements Serializable {
+    @ApiModelProperty(value = "鐢ㄦ埛鍚�",required = true)
+    private String userName;
+    @ApiModelProperty(value = "鏄惁瀹氭椂  1:鏄�  0鍚︼紙褰撲负1鏃� 锛宬eyWords 闈炲繀濉」鐩級 " ,required = true)
+    private String timing;
+    @ApiModelProperty(value = "鍒嗛〉澶у皬 锛堥粯璁わ細10锛� 10")
+    private int pageSize;
+    @ApiModelProperty(value = "鍒嗛〉椤电爜  锛堥粯璁わ細1锛�")
+    private int page;
+    @ApiModelProperty(value = "瀹㈡埛鍚嶇О,瀹㈡埛鎵嬫満鍙风爜 ,鍦板潃",required = true)
+    private String keyWords;
+    @ApiModelProperty(value = "timing 鏄�1鏃跺�欏繀浼� 锛寉yyy-MM-dd,褰撳ぉ鍒涘缓鐨勬剰鍚�",required = true)
+    private String creationDate;
+}
\ No newline at end of file
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMBaseResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMBaseResponse.java
new file mode 100644
index 0000000..5d93183
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMBaseResponse.java
@@ -0,0 +1,24 @@
+package com.doumee.biz.zbom.model.crm.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class CRMBaseResponse<T> implements Serializable {
+
+    /**
+     * 娑堟伅鐮�,200:鎴愬姛;鍏朵粬code:澶辫触
+     */
+    private String code;
+    /**
+     * 鎻愮ず娑堟伅
+     */
+    private String msg;
+    private  int total;
+    /**
+     *  鏁版嵁
+     */
+    private T data;
+
+}
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMCustomerListResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMCustomerListResponse.java
new file mode 100644
index 0000000..a9d4c8b
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMCustomerListResponse.java
@@ -0,0 +1,23 @@
+package com.doumee.biz.zbom.model.crm.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+ * 鏌ヨ绠$悊瀹㈡埛/娼滃鍒楄〃杩斿洖
+ */
+@Data
+public class CRMCustomerListResponse implements Serializable {
+    private String  dgName	;//瀵艰喘鍚嶇О
+    private String   dgPhone	;//瀵艰喘鎵嬫満鍙风爜
+    private String  orgName	;//缁勭粐鍚嶇О
+    private String  useName;//	鐢ㄦ埛鐧诲綍璐﹀彿
+    private String  userId	;//鐢ㄦ埛id涓婚敭
+    private String  productCodeName;//	浜у搧鍚嶇О
+    private String customerPhone;//	瀹㈡埛濮撳悕
+    private String customerName;//	瀹㈡埛鎵嬫満鍙�
+    private String  address	;//鍦板潃璇︽儏
+
+}
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMDaogouBindListResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMDaogouBindListResponse.java
new file mode 100644
index 0000000..e0222ab
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMDaogouBindListResponse.java
@@ -0,0 +1,24 @@
+package com.doumee.biz.zbom.model.crm.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+
+/**
+ * 鏌ュ鎴峰璐� 杩斿洖
+ */
+@Data
+public class CRMDaogouBindListResponse implements Serializable {
+    private String  dgName	;//瀵艰喘鍚嶇О
+    private String   dgPhone	;//瀵艰喘鎵嬫満鍙风爜
+    private String  orgName	;//缁勭粐鍚嶇О
+    private String  useName;//	鐢ㄦ埛鐧诲綍璐﹀彿
+    private String  userId	;//鐢ㄦ埛id涓婚敭
+    private String  productCodeName;//	浜у搧鍚嶇О
+    private String customerPhone;//	瀹㈡埛濮撳悕
+    private String customerName;//	瀹㈡埛鎵嬫満鍙�
+    private String  address	;//鍦板潃璇︽儏
+    private String  creationDate	;//鏃堕棿 yyyy-MM-dd
+
+}
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTConstants.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTConstants.java
index 6c76b7e..ace2b3b 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTConstants.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTConstants.java
@@ -4,15 +4,32 @@
 
     public static  String PLATFORM_MP_WX = "mp-weixin";//灏忕▼搴忓钩鍙�
     public static  String PLATFORM_WEBPAD = "web-pad";//PAD绔�
-    public static  String CODE_SUCCESS = "200";//鎺ュ彛鎴愬姛杩斿洖鐮�
+    public static  Integer CODE_SUCCESS = 200;//鎺ュ彛鎴愬姛杩斿洖鐮�
     public static  String HEADER_USERTYPE = "userType";//userType鍦℉EADER涓殑鍚嶅瓧
     public static  String HEADER_TOKEN = "token";//token
     public static  String DEFAULT_PID = "1";//榛樿鐪佸競鍖簆id=1琛ㄧず鍙栧叏涓浗
+
+    /**
+     * 鍒嗙被code
+     * 涓�绱歝ode锛堝織璇磋淇� zb_deco 浜у搧 product_intro 璧勮product_info 鍏ㄥ眿妗堜緥 whole_case锛�
+     * 鑰虫満绱歝ode锛堝織璇磋淇細 鍏ㄥ眿璁捐 zb_deco_qwsj 鍘ㄦ埧璁捐 zb_deco_cfsj 鏀剁撼璁捐 zb_deco_snsj 瀹剁殑iD zb_deco_jdid锛�
+     */
+    public interface CatalogCode{
+        String ZHISHUO_ZHUANGXIU ="zb_deco";
+        String CHANPING ="product_intro";
+        String ZIXUN ="product_info";
+        String QW_CASE ="whole_case";
+        String QW_SHEJI ="zb_deco_qwsj";
+        String CHUFANGSHEJI ="zb_deco_cfsj";
+        String SHOUNASHEJI ="zb_deco_snsj";
+        String JIADE_ID ="zb_deco_jdid";
+    }
     public interface IntegerUrl{
         String USER_UPDATE_URL ="customer/api/sync";
         String USER_GET_TOKEN_URL ="/customer/api/login";
         String USER_LOGOUT_URL ="/customer/api/disable";
         String CATALOG_LIST_URL ="/content/api/catalog";
+        String TAG_LIST_URL ="/content/api/tag";
         String CONTENT_LIST_URL ="/content/api/page";
         String CONTENT_INFO_URL ="/content/api/detail/";
         String COLLECT_DO_URL ="/content/api/collect";
@@ -27,7 +44,8 @@
         String USER_UPDATE_NAME ="鐢ㄦ埛淇℃伅鍚屾";
         String USER_GET_TOKEN_NAME  ="鐢ㄦ埛鐧婚檰";
         String USER_LOGOUT_NAME  ="娉ㄩ攢鐢ㄦ埛";
-        String CATALOG_LIST_NAME  ="鑾峰彇鍒嗙被鍜屽垎绫讳笅鐨勬爣绛�";
+        String CATALOG_LIST_NAME  ="鏍规嵁涓�绾ode鑾峰彇涓嬬骇鍒嗙被淇℃伅";
+        String TAG_LIST_NAME  ="鏍规嵁鍒嗙被code鑾峰彇鏍囩淇℃伅";
         String CONTENT_LIST_NAME  ="鑾峰彇鍐呭鍒楄〃鍒嗛〉";
         String CONTENT_INFO_NAME  ="鑾峰彇鍐呭璇︽儏";
         String COLLECT_DO_NAME  ="鍐呭鏀惰棌";
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTAreaInfoResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTAreaInfoResponse.java
index 52c1541..00838af 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTAreaInfoResponse.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTAreaInfoResponse.java
@@ -2,6 +2,7 @@
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.Map;
 
 
@@ -9,7 +10,7 @@
  * 鐪佸競鍖鸿鎯呰繑鍥�
  */
 @Data
-public class ZTAreaInfoResponse {
+public class ZTAreaInfoResponse implements Serializable {
     /**
      * id":鈥�11000000000鏃�"
      * pid":"1"
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBasePageResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBasePageResponse.java
index 441512c..fedcead 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBasePageResponse.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBasePageResponse.java
@@ -2,10 +2,11 @@
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 
 @Data
-public class ZTBasePageResponse<T> {
+public class ZTBasePageResponse<T> implements Serializable {
     /**
      *  褰撳墠椤�
      */
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBaseResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBaseResponse.java
index 10a6620..c3a3956 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBaseResponse.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBaseResponse.java
@@ -2,8 +2,10 @@
 
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
-public class ZTBaseResponse<T> {
+public class ZTBaseResponse<T> implements Serializable {
     /**
      *鏄惁鎴愬姛,true:鎴愬姛;false:澶辫触
      */
@@ -11,7 +13,7 @@
     /**
      * 娑堟伅鐮�,200:鎴愬姛;鍏朵粬code:澶辫触
      */
-    private String code;
+    private Integer code;
     /**
      * 鎻愮ず娑堟伅
      */
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogInfoResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogInfoResponse.java
index 0755f2d..e7b9d60 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogInfoResponse.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogInfoResponse.java
@@ -2,6 +2,7 @@
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 
 
@@ -9,7 +10,7 @@
  * 鐢ㄦ埛閫�鍑�
  */
 @Data
-public class ZTCatalogInfoResponse {
+public class ZTCatalogInfoResponse implements Serializable {
     /**
      * 鐩綍鍞竴缂栫爜
      */
@@ -41,11 +42,11 @@
     /**
      * 鐩綍鎺掑簭
      */
-    private String sort;
+    private Integer sort;
 
     /**
      * 瀛愮洰褰�
      */
-    private List<ZTCatalogInfoResponse> childCatalog;
+//    private List<ZTCatalogInfoResponse> childCatalog;
 
 }
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogTagTypeResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogTagTypeResponse.java
index 03c8568..461cbab 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogTagTypeResponse.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogTagTypeResponse.java
@@ -2,6 +2,7 @@
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.List;
 
 
@@ -9,7 +10,7 @@
  * 鐢ㄦ埛閫�鍑�
  */
 @Data
-public class ZTCatalogTagTypeResponse {
+public class ZTCatalogTagTypeResponse implements Serializable {
     /**
      * 瀛愮洰褰�
      */
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCollectResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCollectResponse.java
index f15c7ec..b18f4c2 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCollectResponse.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCollectResponse.java
@@ -2,12 +2,14 @@
 
 import lombok.Data;
 
+import java.io.Serializable;
+
 
 /**
  * 鐢ㄦ埛閫�鍑�
  */
 @Data
-public class ZTCollectResponse {
+public class ZTCollectResponse implements Serializable {
     /**
      * 鏀惰棌绫诲瀷锛屼骇鍝侊紝妗堜緥锛屽疄鏅� 蹇呴渶
      */
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentInfoResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentInfoResponse.java
index 504177b..cc2cf79 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentInfoResponse.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentInfoResponse.java
@@ -2,6 +2,7 @@
 
 import lombok.Data;
 
+import java.io.Serializable;
 import java.util.Map;
 
 
@@ -9,7 +10,7 @@
  * 鍐呭璇︽儏杩斿洖
  */
 @Data
-public class ZTContentInfoResponse {
+public class ZTContentInfoResponse  implements Serializable {
     /**
      * 浣滆��
      */
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentListResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentListResponse.java
index e783704..611d162 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentListResponse.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentListResponse.java
@@ -2,12 +2,14 @@
 
 import lombok.Data;
 
+import java.io.Serializable;
+
 
 /**
  * 鍐呭鍒嗛〉鍒楄〃杩斿洖鍐呭
  */
 @Data
-public class ZTContentListResponse {
+public class ZTContentListResponse implements Serializable {
     /**
      * 浣滆��
      */
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTTagChildInfoResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTTagChildInfoResponse.java
new file mode 100644
index 0000000..91bb89e
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTTagChildInfoResponse.java
@@ -0,0 +1,31 @@
+package com.doumee.biz.zbom.model.zhongtai.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+ *
+ */
+@Data
+public class ZTTagChildInfoResponse implements Serializable {
+    /**
+     * 鏍囩鍊糃ODE
+     */
+    private String labelValueCode;
+    /**
+     * 鏍囩鍊糏D
+     */
+    private String labelValueId;
+    /**
+     * 鏍囩鍊糔AME
+     */
+    private String labelValueName;
+    /**
+     * 鏍囩鍊兼帓搴�
+     */
+    private String labelValueSort;
+
+}
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTTagInfoResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTTagInfoResponse.java
new file mode 100644
index 0000000..dedebe8
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTTagInfoResponse.java
@@ -0,0 +1,36 @@
+package com.doumee.biz.zbom.model.zhongtai.response;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+
+/**
+ * 鐢ㄦ埛閫�鍑�
+ */
+@Data
+public class ZTTagInfoResponse implements Serializable {
+    /**
+     * 鏍囩CODE
+     */
+    private String labelCode;
+    /**
+     * 鏍囩ID
+     */
+    private String labelId;
+    /**
+     * 鏍囩NAME
+     */
+    private String labelName;
+    /**
+     * 鏍囩鎺掑簭
+     */
+    private String labelSort;
+
+    /**
+     * 瀛愮洰褰�
+     */
+    private List<ZTTagChildInfoResponse> valueVos;
+
+}
diff --git a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTUserGetTokenResponse.java b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTUserGetTokenResponse.java
index 4eae486..7c622c8 100644
--- a/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTUserGetTokenResponse.java
+++ b/server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTUserGetTokenResponse.java
@@ -2,8 +2,10 @@
 
 import lombok.Data;
 
+import java.io.Serializable;
+
 @Data
-public class ZTUserGetTokenResponse {
+public class ZTUserGetTokenResponse implements Serializable {
     /**
      *鐢ㄦ埛涓存椂绁ㄦ嵁
      */
diff --git a/server/service/src/main/java/com/doumee/core/utils/Constants.java b/server/service/src/main/java/com/doumee/core/utils/Constants.java
index 7a19d73..f9eebca 100644
--- a/server/service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -326,6 +326,7 @@
     public static final String WX_PLATFORM = "WX_PLATFORM";
     public static final String ZBOM_ZHONGTAI_API_URL = "ZBOM_ZHONGTAI_API_URL";
     public static final String WX_PLATFORM_ACCESS_TOKEN = "WX_PLATFORM_ACCESS_TOKEN";
+    public static final String ZBOM_ENCODE_URL = "ZBOM_ENCODE_URL";
     public static final String WX_PLATFORM_APPID = "WX_PLATFORM_APPID";
     public static final String WX_PLATFORM_SECRET = "WX_PLATFORM_SECRET";
     public static final String WX_PLATFORM_AUDIT_VISIT = "WX_PLATFORM_AUDIT_VISIT";
@@ -345,21 +346,6 @@
     public static final String WX_SECRET_PERSONNEL = "WX_SECRET_PERSONNEL";
 
 
-    public interface CrmSources{
-
-
-       String SOURCE_DKXD = "DKXD";// 浠e涓嬪崟(DKXD)
-       String SOURCE_LYSJ = "LYSJ";// 闆跺厓璁捐(LYSJ)
-       String SOURCE_ZBSJSQ = "ZBSJSQ";// 蹇楅偊璁捐鐢宠(ZBSJSQ)
-       String SOURCE_ZBDXFX = "ZBDXFX";// 蹇楅偊鐭俊鍒嗕韩(ZBDXFX)
-       String SOURCE_ZBLLJL = "ZBLLJL";// 蹇楅偊娴忚璁板綍鍒嗕韩(ZBLLJL)
-       String SOURCE_ZBWDSC = "ZBWDSC";// 蹇楅偊鎴戠殑鏀惰棌鍒嗕韩(ZBWDSC)
-       String SOURCE_ZBLYSJ = "ZBLYSJ";// 蹇楅偊闆跺厓璁捐(ZBLYSJ)
-       String SOURCE_ZBLDX = "ZBLDX";// 蹇楅偊鑰佸甫鏂�(ZBLDX)
-       String SOURCE_ZBFGCS = "ZBFGCS";// 蹇楅偊椋庢牸娴嬭瘯(ZBFGCS)
-       String SOURCE_ZBJX = "DSLX22";// 蹇楅偊瀹堕��(ZBJX)
-    }
-
     public interface RedisKeys {
        String IMPORTING_MEMBER ="IMPORTING_MEMBER";
        String IMPORTING_SHOP ="IMPORTING_SHOP";
@@ -367,6 +353,7 @@
        String IAM_APPID ="IAM_APPID";
        String ZBOM_CRM_API_KEY ="ZBOM_CRM_API_KEY";
        String ZBOM_CRM_API_URL ="ZBOM_CRM_API_URL";
+       String ZBOM_ENCODE_URL ="ZBOM_ENCODE_URL";
        String ZBOM_SMS_API_KEY ="ZBOM_SMS_API_KEY";
        String ZBOM_ZHONGTAI_API_URL ="ZBOM_ZHONGTAI_API_URL";
        String ZBOM_SMS_API_URL ="ZBOM_SMS_API_URL";
diff --git a/server/service/src/main/java/com/doumee/core/utils/HttpsUtil.java b/server/service/src/main/java/com/doumee/core/utils/HttpsUtil.java
index 46015fb..2d2d4f2 100644
--- a/server/service/src/main/java/com/doumee/core/utils/HttpsUtil.java
+++ b/server/service/src/main/java/com/doumee/core/utils/HttpsUtil.java
@@ -22,6 +22,13 @@
     public static String post(String url, String data, String contentType, boolean ignoreSSL) {
         return connection(url, "POST", data, contentType, ignoreSSL,null);
     }
+    public static String sendGet(String url) {
+        if(url.startsWith("https://")){
+            return connection(url, "GET", "", "text/plain; charset=utf-8", true,null);
+        }else{
+            return connectionHttp(url, "GET", "", "text/plain; charset=utf-8",null);
+        }
+    }
     public static String postJson(String url, String data) {
         if(url.startsWith("https://")){
             return connection(url, "POST", data, "application/json", true,null);
diff --git a/server/service/src/main/java/com/doumee/dao/business/CustomerUserMapper.java b/server/service/src/main/java/com/doumee/dao/business/CustomerUserMapper.java
new file mode 100644
index 0000000..1b8830f
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/CustomerUserMapper.java
@@ -0,0 +1,13 @@
+package com.doumee.dao.business;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.doumee.dao.business.model.CustomerUser;
+import com.github.yulichang.base.mapper.MPJJoinMapper;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2024/07/15 10:21
+ */
+public interface CustomerUserMapper extends MPJJoinMapper<CustomerUser> {
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/business/model/CustomerUser.java b/server/service/src/main/java/com/doumee/dao/business/model/CustomerUser.java
new file mode 100644
index 0000000..d8d0286
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/dao/business/model/CustomerUser.java
@@ -0,0 +1,99 @@
+package com.doumee.dao.business.model;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+
+/**
+ * 瀹㈡埛瀵艰喘鍏宠仈琛�
+ * @author 姹熻箘韫�
+ * @date 2024/07/15 10:21
+ */
+@Data
+@ApiModel("瀹㈡埛瀵艰喘鍏宠仈琛�")
+@TableName("`customer_user`")
+public class CustomerUser {
+
+    @TableId(type = IdType.AUTO)
+    @ApiModelProperty(value = "缂栫爜", example = "1")
+    @ExcelColumn(name="缂栫爜")
+    private Long id;
+
+    @ApiModelProperty(value = "鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�", example = "1")
+    @ExcelColumn(name="鏄惁宸插垹闄� 0鏈垹闄� 1宸插垹闄�")
+    private Integer isdeleted;
+
+    @ApiModelProperty(value = "鍒涘缓鏃堕棿")
+    @ExcelColumn(name="鍒涘缓鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date createDate;
+
+    @ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
+    @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+    private Integer creator;
+
+    @ApiModelProperty(value = "缂栬緫鏃堕棿")
+    @ExcelColumn(name="缂栬緫鏃堕棿")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private Date editDate;
+
+    @ApiModelProperty(value = "缂栬緫浜轰唬鐮�", example = "1")
+    @ExcelColumn(name="缂栬緫浜轰唬鐮�")
+    private Integer editor;
+
+    @ApiModelProperty(value = "瀹㈡埛鎵嬫満鍙�")
+    @ExcelColumn(name="瀹㈡埛鎵嬫満鍙�")
+    private String customerPhone;
+    @ApiModelProperty(value = "瀹㈡埛濮撳悕")
+    @ExcelColumn(name="瀹㈡埛濮撳悕")
+    private String customerName;
+    @ApiModelProperty(value = "瀵艰喘鎵嬫満鍙�")
+    @ExcelColumn(name="瀵艰喘鎵嬫満鍙�")
+    private String phone;
+
+    @ApiModelProperty(value = "澶囨敞")
+    @ExcelColumn(name="澶囨敞")
+    private String info;
+
+    @ApiModelProperty(value = "瀵艰喘缂栫爜锛堝叧鑱攗sers琛級", example = "1")
+    @ExcelColumn(name="瀵艰喘缂栫爜锛堝叧鑱攗sers琛級")
+    private Long userId;
+
+    @ApiModelProperty(value = "瀵艰喘IAM缂栫爜")
+    @ExcelColumn(name="瀵艰喘IAM缂栫爜")
+    private String iamUserId;
+
+    @ApiModelProperty(value = "鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級", example = "1")
+    @ExcelColumn(name="鐢ㄦ埛缂栫爜锛堝叧鑱攎ember琛級")
+    private Long memberId;
+
+    @ApiModelProperty(value = "瀵艰喘濮撳悕")
+    @ExcelColumn(name="瀵艰喘濮撳悕")
+    private String name;
+
+    @ApiModelProperty(value = "瀵艰喘缁勭粐鍚嶇О")
+    @ExcelColumn(name="瀵艰喘缁勭粐鍚嶇О")
+    private String orgName;
+
+    @ApiModelProperty(value = "瀵艰喘鐧婚檰璐﹀彿")
+    @ExcelColumn(name="瀵艰喘鐧婚檰璐﹀彿")
+    private String username;
+
+    @ApiModelProperty(value = "浜у搧鍚嶇О")
+    @ExcelColumn(name="浜у搧鍚嶇О")
+    private String productCodeName;
+
+    @ApiModelProperty(value = "鍦板潃璇︽儏")
+    @ExcelColumn(name="鍦板潃璇︽儏")
+    private String addr;
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    @ExcelColumn(name="鍒涘缓鏃ユ湡")
+    private String  creationDate	;//鏃堕棿 yyyy-MM-dd
+
+}
diff --git a/server/service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java b/server/service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java
index e0191a9..53331b5 100644
--- a/server/service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java
+++ b/server/service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java
@@ -1,5 +1,7 @@
 package com.doumee.dao.timer.scheduler;
 
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
 import com.doumee.dao.timer.entity.JobState;
 import com.doumee.dao.timer.entity.QuartzJob;
 import org.quartz.*;
@@ -142,7 +144,7 @@
                 this.scheduler.pauseJob(getJobKey(quartzJob.getId()));
             }
         } catch (SchedulerException e){
-            throw new RuntimeException("pauseJob Fail",e) ;
+            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"pauseJob Fail",e) ;
         }
     }
 
diff --git a/server/service/src/main/java/com/doumee/service/business/CustomerUserService.java b/server/service/src/main/java/com/doumee/service/business/CustomerUserService.java
new file mode 100644
index 0000000..d3b2aca
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/service/business/CustomerUserService.java
@@ -0,0 +1,99 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.CustomerUser;
+import java.util.List;
+
+/**
+ * 瀹㈡埛瀵艰喘鍏宠仈琛⊿ervice瀹氫箟
+ * @author 姹熻箘韫�
+ * @date 2024/07/15 10:21
+ */
+public interface CustomerUserService {
+
+    /**
+     * 鍒涘缓
+     * 
+     * @param customerUser 瀹炰綋瀵硅薄
+     * @return Long
+     */
+    Long create(CustomerUser customerUser);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Long id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param customerUser 瀹炰綋瀵硅薄
+     */
+    void delete(CustomerUser customerUser);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Long> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param customerUser 瀹炰綋瀵硅薄
+     */
+    void updateById(CustomerUser customerUser);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param customerUsers 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<CustomerUser> customerUsers);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return CustomerUser
+     */
+    CustomerUser findById(Long id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param customerUser 瀹炰綋瀵硅薄
+     * @return CustomerUser
+     */
+    CustomerUser findOne(CustomerUser customerUser);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param customerUser 瀹炰綋瀵硅薄
+     * @return List<CustomerUser>
+     */
+    List<CustomerUser> findList(CustomerUser customerUser);
+  
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<CustomerUser>
+     */
+    PageData<CustomerUser> findPage(PageWrap<CustomerUser> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param customerUser 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(CustomerUser customerUser);
+
+    void syncYesterday(String date);
+}
diff --git a/server/service/src/main/java/com/doumee/service/business/InitService.java b/server/service/src/main/java/com/doumee/service/business/InitService.java
index d05de5d..4028db6 100644
--- a/server/service/src/main/java/com/doumee/service/business/InitService.java
+++ b/server/service/src/main/java/com/doumee/service/business/InitService.java
@@ -40,6 +40,7 @@
         redisTemplate.opsForValue().set(Constants.RedisKeys.ZBOM_SMS_API_URL,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_SMS_API_URL).getCode());
         redisTemplate.opsForValue().set(Constants.RedisKeys.ZBOM_SMS_API_KEY,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_SMS_API_KEY).getCode());
         redisTemplate.opsForValue().set(Constants.RedisKeys.ZBOM_ZHONGTAI_API_URL,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_ZHONGTAI_API_URL).getCode());
+        redisTemplate.opsForValue().set(Constants.RedisKeys.ZBOM_ENCODE_URL,systemDictDataBiz.queryByCode(Constants.ZBOM,Constants.ZBOM_ENCODE_URL).getCode());
     }
     @PostConstruct
     public void cacheShopTree(){
diff --git a/server/service/src/main/java/com/doumee/service/business/impl/CustomerUserServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/CustomerUserServiceImpl.java
new file mode 100644
index 0000000..e4288db
--- /dev/null
+++ b/server/service/src/main/java/com/doumee/service/business/impl/CustomerUserServiceImpl.java
@@ -0,0 +1,263 @@
+package com.doumee.service.business.impl;
+
+import com.doumee.biz.zbom.ZbomCRMService;
+import com.doumee.biz.zbom.model.crm.CRMConstants;
+import com.doumee.biz.zbom.model.crm.CrmDaogouBindListRequest;
+import com.doumee.biz.zbom.model.crm.response.CRMBaseResponse;
+import com.doumee.biz.zbom.model.crm.response.CRMDaogouBindListResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.Utils;
+import com.doumee.dao.business.CustomerUserMapper;
+import com.doumee.dao.business.MemberMapper;
+import com.doumee.dao.business.UsersMapper;
+import com.doumee.dao.business.model.CustomerUser;
+import com.doumee.dao.business.model.Member;
+import com.doumee.dao.business.model.Users;
+import com.doumee.service.business.CustomerUserService;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 瀹㈡埛瀵艰喘鍏宠仈琛⊿ervice瀹炵幇
+ * @author 姹熻箘韫�
+ * @date 2024/07/15 10:21
+ */
+@Service
+public class CustomerUserServiceImpl implements CustomerUserService {
+
+    @Autowired
+    private CustomerUserMapper customerUserMapper;
+    @Autowired
+    private MemberMapper memberMapper;
+    @Autowired
+    private UsersMapper usersMapper;
+    @Autowired
+    private ZbomCRMService zbomCRMService;
+
+    @Override
+    public Long create(CustomerUser customerUser) {
+        customerUserMapper.insert(customerUser);
+        return customerUser.getId();
+    }
+
+    @Override
+    public void deleteById(Long id) {
+        customerUserMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(CustomerUser customerUser) {
+        UpdateWrapper<CustomerUser> deleteWrapper = new UpdateWrapper<>(customerUser);
+        customerUserMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        customerUserMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(CustomerUser customerUser) {
+        customerUserMapper.updateById(customerUser);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<CustomerUser> customerUsers) {
+        if (CollectionUtils.isEmpty(customerUsers)) {
+            return;
+        }
+        for (CustomerUser customerUser: customerUsers) {
+            this.updateById(customerUser);
+        }
+    }
+
+    @Override
+    public CustomerUser findById(Long id) {
+        return customerUserMapper.selectById(id);
+    }
+
+    @Override
+    public CustomerUser findOne(CustomerUser customerUser) {
+        QueryWrapper<CustomerUser> wrapper = new QueryWrapper<>(customerUser);
+        return customerUserMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<CustomerUser> findList(CustomerUser customerUser) {
+        QueryWrapper<CustomerUser> wrapper = new QueryWrapper<>(customerUser);
+        return customerUserMapper.selectList(wrapper);
+    }
+  
+    @Override
+    public PageData<CustomerUser> findPage(PageWrap<CustomerUser> pageWrap) {
+        IPage<CustomerUser> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<CustomerUser> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getId, pageWrap.getModel().getId());
+        }
+        if (pageWrap.getModel().getIsdeleted() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        }
+        if (pageWrap.getModel().getCreateDate() != null) {
+            queryWrapper.lambda().ge(CustomerUser::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(CustomerUser::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        if (pageWrap.getModel().getCreator() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getCreator, pageWrap.getModel().getCreator());
+        }
+        if (pageWrap.getModel().getEditDate() != null) {
+            queryWrapper.lambda().ge(CustomerUser::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(CustomerUser::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        if (pageWrap.getModel().getEditor() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getEditor, pageWrap.getModel().getEditor());
+        }
+        if (pageWrap.getModel().getPhone() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getPhone, pageWrap.getModel().getPhone());
+        }
+        if (pageWrap.getModel().getInfo() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getInfo, pageWrap.getModel().getInfo());
+        }
+        if (pageWrap.getModel().getUserId() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getUserId, pageWrap.getModel().getUserId());
+        }
+        if (pageWrap.getModel().getIamUserId() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getIamUserId, pageWrap.getModel().getIamUserId());
+        }
+        if (pageWrap.getModel().getMemberId() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getMemberId, pageWrap.getModel().getMemberId());
+        }
+        if (pageWrap.getModel().getName() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getName, pageWrap.getModel().getName());
+        }
+        if (pageWrap.getModel().getOrgName() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getOrgName, pageWrap.getModel().getOrgName());
+        }
+        if (pageWrap.getModel().getUsername() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getUsername, pageWrap.getModel().getUsername());
+        }
+        if (pageWrap.getModel().getProductCodeName() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getProductCodeName, pageWrap.getModel().getProductCodeName());
+        }
+        if (pageWrap.getModel().getAddr() != null) {
+            queryWrapper.lambda().eq(CustomerUser::getAddr, pageWrap.getModel().getAddr());
+        }
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(customerUserMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(CustomerUser customerUser) {
+        QueryWrapper<CustomerUser> wrapper = new QueryWrapper<>(customerUser);
+        return customerUserMapper.selectCount(wrapper);
+    }
+    @Override
+    @Transactional
+    public void syncYesterday(String date) {
+        CrmDaogouBindListRequest request = new CrmDaogouBindListRequest();
+        request.setPage(0);
+        request.setPageSize(100);
+        request.setTiming(Constants.ONE+"");
+        request.setCreationDate(date);
+        boolean hasMore = true;
+        int currentNum = 0;
+        Date cdate = new Date();
+        while (hasMore){
+            try {
+                request.setPage(request.getPage()+1);
+                currentNum += currentNum;
+                CRMBaseResponse<List<CRMDaogouBindListResponse>> response = zbomCRMService.getDaogouBindList(request);
+                if(response==null
+                        || !StringUtils.equals(response.getCode(), CRMConstants.CODE_SUCCESS)
+                        || response.getData() ==null
+                        || response.getData().size() ==0){
+                    hasMore = false;
+                }
+                if(currentNum >= response.getTotal()){
+                    hasMore = false;
+                }
+                dealSyncDataBiz(cdate,response.getData());
+            }catch (Exception e){
+               hasMore = false;
+            }
+        }
+    }
+
+    private void dealSyncDataBiz(Date date,List<CRMDaogouBindListResponse> list) {
+        List<CustomerUser> addList = new ArrayList<>();
+        for(CRMDaogouBindListResponse data : list){
+            if(StringUtils.isBlank(data.getCustomerPhone())){
+                continue;
+            }
+            Member member = memberMapper.selectOne(new QueryWrapper<Member>().lambda()
+                    .eq(Member::getPhone,data.getCustomerPhone() )
+                    .eq(Member::getIsdeleted,Constants.ZERO)
+                    .last("limit 1" ));
+            Users user = usersMapper.selectOne(new QueryWrapper<Users>().lambda()
+                    .eq(Users::getIamId,data.getUserId() )
+                    .last("limit 1" ));
+            if(member == null){
+                continue;
+            }
+            /**
+             * 鍒犻櫎鑰佸緱鏁版嵁
+             */
+            customerUserMapper.update(null,new UpdateWrapper<CustomerUser>().lambda()
+                    .eq(CustomerUser::getPhone,data.getDgPhone() )
+                    .eq(CustomerUser::getUsername,data.getUseName() )
+                    .eq(CustomerUser::getIsdeleted,Constants.ZERO)
+                    .set(CustomerUser::getIsdeleted,Constants.ONE)
+            );
+            CustomerUser model = new CustomerUser();
+            model.setCreateDate(date);
+            model.setIsdeleted(Constants.ZERO);
+            model.setEditDate(date);
+            model.setName(data.getDgName());
+            model.setPhone(data.getDgPhone());
+            model.setOrgName(data.getOrgName());
+            model.setCustomerName(data.getCustomerName());
+            model.setCustomerPhone(data.getCustomerPhone());
+            model.setUsername(data.getUseName());
+            model.setIamUserId(data.getUserId());
+            model.setUserId(user== null?null:user.getId());
+            model.setCreationDate(data.getCreationDate());
+            addList.add(model);
+        }
+        if(addList .size() >0){
+            int temp = 0;
+            while(temp < addList.size()){
+                int index;
+                if(temp + 500 <= addList.size()){
+                    index = temp+500;
+                }else{
+                    index = addList.size();
+                }
+                customerUserMapper.insert(addList.subList(temp,index));
+                temp = index;
+            }
+        }
+    }
+}

--
Gitblit v1.9.3