jiangping
2024-07-15 fc772ac629241b55a377ef8eb2c1e94b69bb3e53
提交
已添加15个文件
已删除1个文件
已修改23个文件
已重命名1个文件
1328 ■■■■ 文件已修改
admin/src/views/timer/components/OperaTimerWindow.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/timer/timer.vue 102 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/admin/src/main/java/com/doumee/api/business/CustomerUserController.java 90 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/admin/src/main/java/com/doumee/api/timer/QuartzController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/admin/src/main/java/com/doumee/timer/CustomerUserUpdateBiz.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/ZbomCRMService.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/ZbomSMSService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/ZbomZhongTaiService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java 203 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomSMSServiceImpl.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomZhongTaiServiceImpl.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/CrmCustomerSubmmitModel.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMBaseRequst.java 17 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/crm/CRMConstants.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerInfoRequest.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerListRequest.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmDaogouBindListRequest.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMBaseResponse.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMCustomerListResponse.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/crm/response/CRMDaogouBindListResponse.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTConstants.java 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTAreaInfoResponse.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBasePageResponse.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTBaseResponse.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogInfoResponse.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogTagTypeResponse.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCollectResponse.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentInfoResponse.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentListResponse.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTTagChildInfoResponse.java 31 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTTagInfoResponse.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTUserGetTokenResponse.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/Constants.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/utils/HttpsUtil.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/CustomerUserMapper.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/business/model/CustomerUser.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/dao/timer/scheduler/QuartzManage.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/CustomerUserService.java 99 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/InitService.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/CustomerUserServiceImpl.java 263 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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="请输入Bean名称" :maxlength="10" v-trim/>
        <el-input v-model="form.beanName" placeholder="请输入Bean名称"  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="请输入Cron表达式" :maxlength="10" v-trim/>
        <el-input v-model="form.cronExpres" placeholder="请输入Cron表达式"   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/>
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>
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));
    }
}
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);
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();
        }
    }
}
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 );
}
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;
/**
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);
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配置有误,appid:["+ 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("【CRM接口:"+name+"】================成功====\n"+res);
        }else{
            log.error("【CRM接口:"+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;
    }
}
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
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("【中台接口:"+name+"】================成功====\n"+res);
        }else{
            log.error("【中台接口:"+name+"】================失败====:\n"+ res);
server/service/src/main/java/com/doumee/biz/zbom/model/CrmCustomerSubmmitModel.java
ÎļþÒÑɾ³ý
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;
}
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";// ä»£å®¢ä¸‹å•(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)
    }
}
server/service/src/main/java/com/doumee/biz/zbom/model/crm/CrmCustomerInfoRequest.java
ÎļþÃû´Ó server/service/src/main/java/com/doumee/biz/zbom/model/CrmCustomerInfoModel.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;
}
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;
}
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时 ï¼ŒkeyWords éžå¿…填项目) " ,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时候必传 ï¼Œyyyy-MM-dd,当天创建的意向",required = true)
    private String creationDate;
}
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;
}
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    ;//地址详情
}
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
}
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在HEADER中的名字
    public static  String HEADER_TOKEN = "token";//token
    public static  String DEFAULT_PID = "1";//默认省市区pid=1表示取全中国
    /**
     * åˆ†ç±»code
     * ä¸€ç´šcode(志说装修 zb_deco äº§å“ product_intro èµ„讯product_info å…¨å±‹æ¡ˆä¾‹ whole_case)
     * è€³æœºç´šcode(志说装修: å…¨å±‹è®¾è®¡ 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  ="根据一级code获取下级分类信息";
        String TAG_LIST_NAME  ="根据分类code获取标签信息";
        String CONTENT_LIST_NAME  ="获取内容列表分页";
        String CONTENT_INFO_NAME  ="获取内容详情";
        String COLLECT_DO_NAME  ="内容收藏";
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"
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 {
    /**
     *  å½“前页
     */
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;
    /**
     * æç¤ºæ¶ˆæ¯
     */
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;
}
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 {
    /**
     * å­ç›®å½•
     */
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 {
    /**
     * æ”¶è—ç±»åž‹ï¼Œäº§å“ï¼Œæ¡ˆä¾‹ï¼Œå®žæ™¯ å¿…需
     */
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 {
    /**
     * ä½œè€…
     */
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 {
    /**
     * ä½œè€…
     */
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 {
    /**
     * æ ‡ç­¾å€¼CODE
     */
    private String labelValueCode;
    /**
     * æ ‡ç­¾å€¼ID
     */
    private String labelValueId;
    /**
     * æ ‡ç­¾å€¼NAME
     */
    private String labelValueName;
    /**
     * æ ‡ç­¾å€¼æŽ’序
     */
    private String labelValueSort;
}
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;
}
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 {
    /**
     *用户临时票据
     */
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";// ä»£å®¢ä¸‹å•(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";
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);
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> {
}
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 = "导购编码(关联users表)", example = "1")
    @ExcelColumn(name="导购编码(关联users表)")
    private Long userId;
    @ApiModelProperty(value = "导购IAM编码")
    @ExcelColumn(name="导购IAM编码")
    private String iamUserId;
    @ApiModelProperty(value = "用户编码(关联member表)", example = "1")
    @ExcelColumn(name="用户编码(关联member表)")
    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
}
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) ;
        }
    }
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;
/**
 * å®¢æˆ·å¯¼è´­å…³è”表Service定义
 * @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);
}
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(){
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;
/**
 * å®¢æˆ·å¯¼è´­å…³è”表Service实现
 * @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;
            }
        }
    }
}