jiangping
2024-07-18 64a6a81753abfc712b1ab384de0f7afb87f4fb23
提交
已修改9个文件
185 ■■■■■ 文件已修改
admin/src/api/business/customerLog.js 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaShopWindow.vue 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/customerLog.vue 50 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/admin/src/main/java/com/doumee/api/business/CustomerLogController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/CustomerLogService.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/CustomerLogServiceImpl.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/customerLog.js
@@ -24,6 +24,12 @@
export function updateById (data) {
  return request.post('/business/customerLog/updateById', data)
}
export function reSubmit (data) {
  return request.post('/business/customerLog/reSubmit', data)
}
export function reSubmitAll (data) {
  return request.post('/business/customerLog/reSubmitAll', data)
}
// 删除
export function deleteById (id) {
admin/src/components/business/OperaShopWindow.vue
@@ -167,9 +167,12 @@
        .then(res => {
          this.provinces = res
        })
      if(this.form.provinceCode){
        this.selectProvince(this.form.provinceCode,true)
      }
    },
    // 选择省份
    selectProvince (val) {
    selectProvince (val,isInit) {
      this.provinces.forEach(item => {
        if (item.id == val) {
          this.form.provinceName = item.name
@@ -177,29 +180,35 @@
      })
      this.cities = []
      this.areas = []
      this.form.cityName = ''
      this.form.areaCode = ''
      this.form.cityCode = ''
      this.form.areaName = ''
      if(!isInit){
        this.form.cityName = ''
        this.form.areaCode = ''
        this.form.cityCode = ''
        this.form.areaName = ''
      }
      if(!val || val ==''){
        return
      }
      this.api.areaList({ pid: val })
        .then(res => {
          this.cities = res
          this.selectCity(this.form.cityId)
          if(isInit){
            this.selectCity(this.form.cityCode,isInit)
          }
        })
    },
    // 选择城市
    selectCity (val) {
    selectCity (val,isInit) {
      this.cities.forEach(item => {
        if (item.id == val) {
          this.form.cityName = item.name
        }
      })
      this.areas = []
      this.form.areaCode = ''
      this.form.areaName = ''
      if(!isInit){
        this.form.areaCode = ''
        this.form.areaName = ''
      }
      if(!val || val ==''){
        return
      }
admin/src/views/business/customerLog.vue
@@ -42,25 +42,27 @@
    </el-form>
    <!-- 表格和分页 -->
    <template v-slot:table-wrap>
<!--  <ul class="toolbar" v-permissions="['business:customerlog:create', 'business:customerlog:delete']">
        <li><el-button type="primary" @click="$refs.operaCustomerLogWindow.open('新建客户留资记录信息表')" icon="el-icon-plus" v-permissions="['business:customerlog:create']">新建</el-button></li>
        <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:customerlog:delete']">删除</el-button></li>
      </ul>-->
      <ul class="toolbar" v-permissions="['business:customerlog:create', 'business:customerlog:delete']">
        <li><el-button type="primary" @click="reSubmitAll(0)" icon="el-icon-plus" v-permissions="['business:customerlog:update']">提交全部【未提交】数据</el-button></li>
        <li><el-button type="primary" @click="reSubmitAll(2)" icon="el-icon-plus" v-permissions="['business:customerlog:update']">重新提交【失败】数据</el-button></li>
      </ul>
      <el-table
        v-loading="isWorking.search"
        :data="tableData.list"
        stripe
        @selection-change="handleSelectionChange"
      >
        <el-table-column type="selection" width="55"></el-table-column>
        <el-table-column prop="createDate" label="创建时间" min-width="120px"></el-table-column>
        <el-table-column prop="type" label="提交类型" min-width="100px">
        <el-table-column  prop="index"  width="55"><template slot-scope="scope">{{scope.$index+1}}</template></el-table-column>
        <el-table-column prop="type" label="提交类型" fixed min-width="100px">
          <template slot-scope="{row}">
              <span v-if="row.type ==0">测试装修风格</span>
              <span v-if="row.type ==1">0元定制</span>
              <span v-if="row.type ==2">装修计算器</span>
          </template>
        </el-table-column>
        <el-table-column prop="phone" label="手机号" fixed min-width="100px"></el-table-column>
        <el-table-column prop="name" label="姓名" fixed min-width="100px"></el-table-column>
        <el-table-column prop="createDate" label="创建时间"  min-width="120px"></el-table-column>
        <el-table-column prop="orderDate" label="预约量房时间" min-width="120px"></el-table-column>
        <el-table-column prop="plaDate" label="计划装修开始时间" min-width="120px">
          <template slot-scope="{row}">
@@ -119,7 +121,6 @@
        <el-table-column prop="styleInfo" label="风格" min-width="100px"></el-table-column>
        <el-table-column prop="provinceName" label="省份名称" min-width="100px"></el-table-column>
        <el-table-column prop="cityName" label="城市名称" min-width="100px"></el-table-column>
        <el-table-column prop="phone" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="budget" label="装修预算(元)" min-width="100px"></el-table-column>
        <el-table-column prop="crmStatus" label="crm提交状态" min-width="100px">
          <template slot-scope="{row}">
@@ -133,12 +134,13 @@
        <el-table-column
          v-if="containPermissions(['business:customerlog:update', 'business:customerlog:delete'])"
          label="操作"
          min-width="120"
          min-width="150"
          fixed="right"
          align="center"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.operaCustomerLogWindow.open('编辑客户留资记录信息表', row)" icon="el-icon-edit" v-permissions="['business:customerlog:update']">编辑</el-button>
            <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:customerlog:update']" v-if="row.crmStatus !=1">重新提交crm</el-button>
            <!-- <el-button type="text" @click="$refs.operaCustomerLogWindow.open('编辑客户留资记录信息表', row)" icon="el-icon-edit" v-permissions="['business:customerlog:update']">编辑</el-button>-->
            <el-button type="text" @click="reSubmit(row)" icon="el-icon-edit" v-permissions="['business:customerlog:update']" v-if="row.crmStatus !=1">重新提交crm</el-button>
          </template>
        </el-table-column>
      </el-table>
@@ -165,6 +167,7 @@
  components: { TableLayout, Pagination, OperaCustomerLogWindow },
  data () {
    return {
      running: false,
      // 搜索
      searchForm: {
        queryEndDate: '',
@@ -188,6 +191,31 @@
  },
  methods: {
    // 查询数据
    reSubmit (row) {
      this.api.reSubmit({ id: row.id })
        .then(res => {
          this.handlePageChange()
        })
        .finally(() => {
        })
    },
    reSubmitAll (status) {
      this.$dialog.actionConfirm('确认进行该操作吗??')
        .then(() => {
          this.running = true
          this.api.reSubmitAll({ crmStatus: status })
            .then(res => {
              this.handlePageChange()
            })
            .finally(() => {
            })
            .catch(e => {
            })
            .finally(() => {
              this.running = false
            })
        })
    }
  }
}
</script>
server/admin/src/main/java/com/doumee/api/business/CustomerLogController.java
@@ -66,6 +66,20 @@
        customerLogService.updateById(customerLog);
        return ApiResponse.success(null);
    }
    @ApiOperation("根据ID重新提交crm")
    @PostMapping("/reSubmit")
    @RequiresPermissions("business:customerlog:update")
    public ApiResponse reSubmit(@RequestBody CustomerLog customerLog) {
        customerLogService.reSubmit(customerLog);
        return ApiResponse.success(null);
    }
    @ApiOperation("根据crm状态批量提交至crm")
    @PostMapping("/reSubmitAll")
    @RequiresPermissions("business:customerlog:update")
    public ApiResponse reSubmitAll(@RequestBody CustomerLog customerLog) {
        customerLogService.reSubmitAll(customerLog);
        return ApiResponse.success(null);
    }
    @ApiOperation("分页查询")
    @PostMapping("/page")
server/service/src/main/java/com/doumee/biz/zbom/impl/ZbomCRMServiceImpl.java
@@ -54,6 +54,9 @@
    @Override
    @Async
    public void dealCustomerLogData(CustomerLog customerLog){
        if(StringUtils.isBlank(customerLog.getPhone())){
            return;
        }
        CrmCustomerInfoRequest entity = new CrmCustomerInfoRequest();
        entity.setId(customerLog.getId());
        entity.setName(customerLog.getName());
server/service/src/main/java/com/doumee/core/wx/wxPlat/WxPlatConfig.java
@@ -25,21 +25,9 @@
    @Autowired
    private SystemDictDataBiz systemDictDataBiz;
    @Bean
//    @Bean
    public WxMpConfigStorage wxMpConfigStorage() {
        WxMpDefaultConfigImpl configStorage = new WxMpDefaultConfigImpl();
        try {
            // 公众号appId
            configStorage.setAppId(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode());
            // 公众号appSecret
            configStorage.setSecret(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_SECRET).getCode());
            // 公众号Token
            configStorage.setToken(systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_ACCESS_TOKEN).getCode());
            // 公众号EncodingAESKey
//        configStorage.setAesKey();
        }catch (Exception e){
            log.error("读取微信小程序相关配置错误========"+e.getMessage());
        }
        return configStorage;
    }
server/service/src/main/java/com/doumee/service/business/CustomerLogService.java
@@ -54,7 +54,7 @@
     * @param customerLogs 实体集
     */
    void updateByIdInBatch(List<CustomerLog> customerLogs);
    void reSubmitAll(CustomerLog log);
    /**
     * 主键查询
     *
@@ -94,4 +94,6 @@
     * @return long
     */
    long count(CustomerLog customerLog);
    void reSubmit(CustomerLog customerLog);
}
server/service/src/main/java/com/doumee/service/business/impl/CustomerLogServiceImpl.java
@@ -1,5 +1,8 @@
package com.doumee.service.business.impl;
import com.doumee.biz.zbom.ZbomCRMService;
import com.doumee.core.constants.ResponseStatus;
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
@@ -29,6 +32,8 @@
    @Autowired
    private CustomerLogMapper customerLogMapper;
    @Autowired
    private ZbomCRMService zbomCRMService;
    @Override
    public Long create(CustomerLog customerLog) {
@@ -61,6 +66,37 @@
    }
    @Override
    public void reSubmit(CustomerLog customerLog){
        CustomerLog log = customerLogMapper.selectById(customerLog.getId());
        if(log ==null || Constants.equalsInteger(log.getIsdeleted(),Constants.ONE)){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        if(Constants.equalsInteger(log.getCrmStatus(),Constants.ONE)){
            //如果已经提交成功过
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该留资数据已提交,无需重新提交!");
        }
        zbomCRMService.dealCustomerLogData(log);
    }
    @Override
    public void reSubmitAll(CustomerLog log){
        List<CustomerLog> logList = customerLogMapper.selectList(new QueryWrapper<CustomerLog>()
                .lambda()
                .eq(CustomerLog::getIsdeleted,Constants.ZERO)
                .eq(log.getCrmStatus()!=null,CustomerLog::getCrmStatus,log.getCrmStatus())
                .ne(CustomerLog::getCrmStatus,Constants.ONE));
        if(logList ==null || logList.size() ==0){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,不存在待处理数据");
        }
        if(Constants.equalsInteger(log.getCrmStatus(),Constants.ONE)){
            //如果已经提交成功过
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,该留资数据已提交,无需重新提交!");
        }
        for(CustomerLog model :logList){
            zbomCRMService.dealCustomerLogData(model);
        }
    }
    @Override
    public void updateByIdInBatch(List<CustomerLog> customerLogs) {
        if (CollectionUtils.isEmpty(customerLogs)) {
            return;
server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -2,7 +2,10 @@
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import com.alibaba.fastjson.JSONObject;
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 com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.biz.zbom.ZbomZhongTaiService;
import com.doumee.biz.zbom.model.zhongtai.ZTBaseRequst;
@@ -18,47 +21,31 @@
import com.doumee.core.exception.BusinessException;
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.oss.FileModel;
import com.doumee.core.utils.*;
import com.doumee.core.utils.CodeVerifyUtils;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.Utils;
import com.doumee.core.wx.WxMiniConfig;
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.InterfaceLog;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Users;
import com.doumee.dao.system.model.SystemDictData;
import com.doumee.dao.web.reqeust.EditMemberRequest;
import com.doumee.dao.web.reqeust.WxPhoneRequest;
import com.doumee.dao.web.response.AccountResponse;
import com.doumee.dao.web.response.ZTBaseInfoResponse;
import com.doumee.service.business.CustomerService;
import com.doumee.service.business.MemberService;
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 com.hikvision.artemis.sdk.util.HttpUtils;
import me.chanjar.weixin.common.error.WxErrorException;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import org.apache.catalina.User;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.util.ThreadContext;
import org.apache.shiro.web.mgt.DefaultWebSecurityManager;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.util.*;
import java.util.Date;
import java.util.concurrent.TimeUnit;
import java.util.List;
import java.util.Objects;
/**
 * 用户信息表Service实现