Browse Source

监管客户管理模块

master
dimengzhe 2 years ago
parent
commit
ec1e15f44c
  1. 1
      yxt_supervise/pom.xml
  2. 27
      yxt_supervise/supervise-crm/pom.xml
  3. 48
      yxt_supervise/supervise-crm/supervise-crm-api/pom.xml
  4. 22
      yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerFileDDto.java
  5. 144
      yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTemp.java
  6. 117
      yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempDto.java
  7. 86
      yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempFeign.java
  8. 51
      yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempFeignFallback.java
  9. 20
      yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempListQuery.java
  10. 22
      yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempListVo.java
  11. 53
      yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempQuery.java
  12. 32
      yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempToFin.java
  13. 109
      yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempUpdateDto.java
  14. 181
      yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempVo.java
  15. 99
      yxt_supervise/supervise-crm/supervise-crm-biz/pom.xml
  16. 23
      yxt_supervise/supervise-crm/supervise-crm-biz/src/main/java/com/yxt/supervise/crm/CrmApplication.java
  17. 47
      yxt_supervise/supervise-crm/supervise-crm-biz/src/main/java/com/yxt/supervise/crm/biz/crmcustomertemp/CrmCustomerTempMapper.java
  18. 33
      yxt_supervise/supervise-crm/supervise-crm-biz/src/main/java/com/yxt/supervise/crm/biz/crmcustomertemp/CrmCustomerTempMapper.xml
  19. 104
      yxt_supervise/supervise-crm/supervise-crm-biz/src/main/java/com/yxt/supervise/crm/biz/crmcustomertemp/CrmCustomerTempRest.java
  20. 330
      yxt_supervise/supervise-crm/supervise-crm-biz/src/main/java/com/yxt/supervise/crm/biz/crmcustomertemp/CrmCustomerTempService.java
  21. 31
      yxt_supervise/supervise-crm/supervise-crm-biz/src/main/resources/application-devv.yml
  22. 28
      yxt_supervise/supervise-crm/supervise-crm-biz/src/main/resources/application-pro.yml
  23. 30
      yxt_supervise/supervise-crm/supervise-crm-biz/src/main/resources/application-test.yml
  24. 46
      yxt_supervise/supervise-crm/supervise-crm-biz/src/main/resources/application.yml
  25. 50
      yxt_supervise/supervise-crm/supervise-crm-biz/src/main/resources/logback-spring.xml

1
yxt_supervise/pom.xml

@ -16,6 +16,7 @@
<module>supervise-system</module>
<module>yxt_adapter</module>
<module>supervise-rms</module>
<module>supervise-crm</module>
</modules>
<packaging>pom</packaging>

27
yxt_supervise/supervise-crm/pom.xml

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<artifactId>supervise-crm</artifactId>
<modules>
<module>supervise-crm-api</module>
<module>supervise-crm-biz</module>
</modules>
<groupId>com.yxt.supervise</groupId>
<version>0.0.1</version>
<packaging>pom</packaging>
<description>客户管理</description>
<parent>
<groupId>com.yxt.supervise</groupId>
<artifactId>yxt_supervise</artifactId>
<version>0.0.1</version>
<relativePath/>
</parent>
</project>

48
yxt_supervise/supervise-crm/supervise-crm-api/pom.xml

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.yxt.supervise</groupId>
<artifactId>supervise-crm</artifactId>
<version>0.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>supervise-crm-api</artifactId>
<groupId>com.yxt.supervise</groupId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.yxt</groupId>
<artifactId>yxt-common-core</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
<optional>true</optional>
</dependency>
</dependencies>
<distributionManagement>
<repository>
<id>nexus-releases</id>
<url>http://172.18.0.3:8081/repository/yxt-mvn-releases/</url>
</repository>
<snapshotRepository>
<id>nexus-snapshots</id>
<url>http://172.18.0.3:8081/repository/yxt-mvn-snapshot/</url>
</snapshotRepository>
</distributionManagement>
</project>

22
yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerFileDDto.java

@ -0,0 +1,22 @@
package com.yxt.supervise.crm.api.crmcustomertemp;
import com.yxt.common.core.dto.Dto;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
/**
* @Author dimengzhe
* @Date 2022/11/16 11:56
* @Description
*/
@Data
public class CrmCustomerFileDDto implements Dto {
private static final long serialVersionUID = -5399631895644837616L;
private String userSid;
private String customerSid;
private List<String> idImages = new ArrayList<>();
}

144
yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTemp.java

@ -0,0 +1,144 @@
package com.yxt.supervise.crm.api.crmcustomertemp;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yxt.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
@ApiModel(value = "潜在客户信息", description = "潜在客户信息")
@TableName("crm_customer_temp")
@Data
public class CrmCustomerTemp extends BaseEntity {
private static final long serialVersionUID = 1L;
@ApiModelProperty("客户编号(部门编码+客户类型(1位,0个人,1企业)+部门内部流水号(6位))")
private String customerNo;
@ApiModelProperty("客户类型(自然人/法人)")
private String customerType;
@ApiModelProperty("客户类型key")
private String customerTypeKey;
@ApiModelProperty("客户分类(个人:司机/个体老板/其他。企业:企业型客户/一级经销商/二级经销商/终端物流客户)")
private String customerClass;
@ApiModelProperty("客户分类key")
private String customerClassKey;
@ApiModelProperty("客户来源(公司资源/自主开发/交接客户/转介绍客户/集团内销)")
private String source;
@ApiModelProperty("客户来源key")
private String sourceKey;
@ApiModelProperty("客户级别(意向客户/准客户/成交客户/集团内销/黑名单客户)")
private String level;
@ApiModelProperty("客户级别key")
private String levelKey;
@ApiModelProperty("客户名称")
private String name;
@ApiModelProperty("证件类型key")
private String certificateTypeKey;
@ApiModelProperty("证件类型(个人为身份证/企业为营业执照)")
private String certificateType;
@ApiModelProperty("证件号码(个人为身份证号/企业为统一社会信用代码)")
private String IDNumber;
@ApiModelProperty("证件有效期")
private String endDate;
@ApiModelProperty("行政区划代码(省)")
private String address_province;
@ApiModelProperty("行政区划代码(市)")
private String address_city;
@ApiModelProperty("行政区划代码(县)")
private String address_county;
@ApiModelProperty("省")
private String province;
@ApiModelProperty("市")
private String city;
@ApiModelProperty("县")
private String county;
@ApiModelProperty("详细地址")
private String address;
@ApiModelProperty("邮编")
private String zipCode;
@ApiModelProperty("电子邮箱")
private String e_mail;
@ApiModelProperty("联系人")
private String contacts;
@ApiModelProperty("联系电话")
private String mobile;
@ApiModelProperty("紧急联系电话")
private String emergencyContact;
@ApiModelProperty("紧急联系电话")
private String emergencyMobile;
@ApiModelProperty("微信号码")
private String weixin;
@ApiModelProperty("业务人员sid")
private String staffSid;
@ApiModelProperty("创建组织sid")
private String createOrgSid;
@ApiModelProperty("性别")
private String sex;
@ApiModelProperty("性别key")
private String sexKey;
@ApiModelProperty("生日")
private String birthday;
@ApiModelProperty("所在公司名称")
private String companyName;
@ApiModelProperty("跟进状态key")
private String follow_state_key;
@ApiModelProperty("跟进状态")
private String follow_state;
@ApiModelProperty("是否开启提醒key(1开启,0不开启)")
private String isOnRemindkey;
@ApiModelProperty("是否开启提醒(1开启,0不开启)")
private String isOnRemind;
@ApiModelProperty("提醒日期")
private String remind_day;
@ApiModelProperty("提醒备注")
private String remind_remark;
@ApiModelProperty("客户头像")
private String customerPhoto;
@ApiModelProperty("见面方式key")
private String visitWayKey;
@ApiModelProperty("见面方式(到店/电话/拜访)")
private String visitWay;
}

117
yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempDto.java

@ -0,0 +1,117 @@
package com.yxt.supervise.crm.api.crmcustomertemp;
import com.yxt.common.core.dto.Dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.List;
@ApiModel(value = "潜在客户信息 数据传输对象", description = "潜在客户信息 数据传输对象")
@Data
public class CrmCustomerTempDto implements Dto {
private static final long serialVersionUID = 793474187074718535L;
@ApiModelProperty(value = "当前登录用户的sid")
private String userSid;
@ApiModelProperty(value = "客户类型(1个人/2企业)", required = true)
@NotBlank(message = "客户类型为必选项")
private String customerType;
@ApiModelProperty(value = "客户类型key", required = true)
@NotBlank(message = "客户类型为必选项")
private String customerTypeKey;
@ApiModelProperty(value = "见面方式key", required = true)
@NotBlank(message = "见面方式为必选项")
private String visitWayKey;
@ApiModelProperty(value = "见面方式(到店/电话/拜访)", required = true)
@NotBlank(message = "见面方式为必选项")
private String visitWay;
@ApiModelProperty(value = "客户名称", required = true)
@NotBlank(message = "客户名称为必填项")
private String name;
@ApiModelProperty("联系电话")
@NotBlank(message = "联系电话为必填项")
private String mobile;
@ApiModelProperty("微信号码")
private String weixin;
@ApiModelProperty("公司名称:个人客户时显示")
private String companyName;
@ApiModelProperty("行政区划代码(省)")
private String address_province;
@ApiModelProperty("行政区划代码(市)")
private String address_city;
@ApiModelProperty("行政区划代码(县)")
private String address_county;
@ApiModelProperty("客户地址:省")
private String province;
@ApiModelProperty("客户地址:市")
private String city;
@ApiModelProperty("客户地址:县")
private String county;
@ApiModelProperty("客户地址:详细地址")
private String address;
@ApiModelProperty("客户级别(意向客户/准客户/成交客户/集团内销/黑名单客户)")
private String level;
@ApiModelProperty("客户级别key")
private String levelKey;
@ApiModelProperty("是否开启提醒(1开启,0不开启)")
private String isOnRemindkey;
@ApiModelProperty("是否开启提醒(1开启,0不开启)")
private String isOnRemind;
@ApiModelProperty("提醒日期")
private String remind_day;
@ApiModelProperty("提醒备注")
private String remind_remark;
//更多信息
@ApiModelProperty("客户生日:个人客户时显示")
private String birthday;
@ApiModelProperty("性别:个人客户时显示")
private String sex;
@ApiModelProperty("性别key:个人客户时")
private String sexKey;
@ApiModelProperty("证件类型key")
private String certificateTypeKey;
@ApiModelProperty("证件类型(个人为身份证/企业为营业执照)")
private String certificateType;
@ApiModelProperty("证件号码(个人为身份证号/企业为统一社会信用代码)")
private String IDNumber;
@ApiModelProperty("证件有效期")
private String endDate;
@ApiModelProperty("电子邮箱")
private String e_mail;
@ApiModelProperty(value = "联系人")
private String contacts;
@ApiModelProperty("紧急联系人")
private String emergencyContact;
@ApiModelProperty("紧急联系电话")
private String emergencyMobile;
@ApiModelProperty("客户来源(公司资源/自主开发/交接客户/转介绍客户/集团内销)")
private String source;
@ApiModelProperty("客户来源key")
private String sourceKey;
@ApiModelProperty("客户分类(个人:司机/个体老板/其他。企业:企业型客户/一级经销商/二级经销商/终端物流客户)")
private String customerClass;
@ApiModelProperty("客户分类key")
private String customerClassKey;
@ApiModelProperty(value = "备注")
private String remarks;
@ApiModelProperty("业务人员sid")
private String staffSid;
}

86
yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempFeign.java

@ -0,0 +1,86 @@
package com.yxt.supervise.crm.api.crmcustomertemp;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* Project: supervise-crm(客户管理) <br/>
* File: CrmCustomerTempFeign.java <br/>
* Class: com.yxt.supervise.crm.api.crmcustomertemp.CrmCustomerTempFeign <br/>
* Description: 潜在客户信息. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2022-01-12 11:21:16 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Api(tags = "潜在客户信息")
@FeignClient(
contextId = "supervise-crm-CrmCustomerTemp",
name = "supervise-crm",
path = "v1/crmcustomertemp",
fallback = CrmCustomerTempFeignFallback.class)
public interface CrmCustomerTempFeign {
/**
* 潜在客户管理的分页查询
*
* @param pq
* @return
*/
@ApiOperation("根据条件分页查询数据的列表")
@PostMapping("/listPage")
public ResultBean<PagerVo<CrmCustomerTempVo>> listPage(@RequestBody PagerQuery<CrmCustomerTempQuery> pq);
/**
* pc端潜在客户新增保存
*
* @param dto 客户信息及运行信息数据传输对象
* @return
*/
@ApiOperation("新增保存")
@PostMapping("/save")
public ResultBean save(@Valid @RequestBody CrmCustomerTempDto dto);
/**
* pc端潜在客户编辑保存
*
* @param dto 数据传输对象
* @param sid 潜在客户sid
* @return
*/
@ApiOperation("修改保存")
@PostMapping("/update/{sid}")
public ResultBean update(@RequestBody CrmCustomerTempUpdateDto dto, @PathVariable("sid") String sid);
/**
* pc潜在客户的批量删除
*
* @param sid
* @return
*/
@ApiOperation("删除记录")
@DeleteMapping("/del")
public ResultBean del(@RequestBody String[] sid);
/**
* pc潜在客户的编辑回显
*
* @param sid
* @return
*/
@ApiOperation("获取一条记录")
@GetMapping("/fetchSid/{sid}")
public ResultBean<CrmCustomerTempVo> fetchSid(@PathVariable("sid") String sid);
}

51
yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempFeignFallback.java

@ -0,0 +1,51 @@
package com.yxt.supervise.crm.api.crmcustomertemp;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import org.springframework.stereotype.Component;
import java.util.List;
/**
* Project: supervise-crm(客户管理) <br/>
* File: CrmCustomerTempFeignFallback.java <br/>
* Class: com.yxt.supervise.crm.api.crmcustomertemp.CrmCustomerTempFeignFallback <br/>
* Description: 潜在客户信息. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2022-01-12 11:21:16 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Component
public class CrmCustomerTempFeignFallback implements CrmCustomerTempFeign {
@Override
public ResultBean<PagerVo<CrmCustomerTempVo>> listPage(PagerQuery<CrmCustomerTempQuery> pq) {
return null;
}
@Override
public ResultBean save(CrmCustomerTempDto dto) {
return null;
}
@Override
public ResultBean update(CrmCustomerTempUpdateDto dto, String sid) {
return null;
}
@Override
public ResultBean del(String[] sid) {
return null;
}
@Override
public ResultBean<CrmCustomerTempVo> fetchSid(String sid) {
return null;
}
}

20
yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempListQuery.java

@ -0,0 +1,20 @@
package com.yxt.supervise.crm.api.crmcustomertemp;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author dimengzhe
* @Date 2022/9/26 14:30
* @Description
*/
@Data
public class CrmCustomerTempListQuery implements Query {
private static final long serialVersionUID = -8235453055415557265L;
private String userSid;
private String staffSid;
@ApiModelProperty("组织机构全路径sid")
private String orgPath;
}

22
yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempListVo.java

@ -0,0 +1,22 @@
package com.yxt.supervise.crm.api.crmcustomertemp;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author dimengzhe
* @Date 2022/9/26 14:28
* @Description
*/
@Data
public class CrmCustomerTempListVo implements Vo {
private static final long serialVersionUID = 5338688085476236821L;
private String name;
private String sid;
private String mobile;
@ApiModelProperty("客户编码")
private String customerNo;
}

53
yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempQuery.java

@ -0,0 +1,53 @@
package com.yxt.supervise.crm.api.crmcustomertemp;
import com.yxt.common.core.query.Query;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
/**
* Project: supervise-crm(客户管理) <br/>
* File: CrmCustomerTempQuery.java <br/>
* Class: com.yxt.supervise.crm.api.crmcustomertemp.CrmCustomerTempQuery <br/>
* Description: 潜在客户信息 查询条件. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2022-01-12 11:21:16 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@ApiModel(value = "潜在客户信息 查询条件", description = "潜在客户信息 查询条件")
@Data
public class CrmCustomerTempQuery implements Query {
@ApiModelProperty("客户类型key(自然人/法人)")
private String customerTypeKey;
@ApiModelProperty("客户级别(意向客户/准客户/成交客户/集团内销/黑名单客户)")
private String levelKey;
@ApiModelProperty("客户名称")
private String name;
@ApiModelProperty("联系电话")
private String mobile;
@ApiModelProperty("提醒开始日期")
private String remindStartDay;
@ApiModelProperty("提醒结束日期")
private String remindEndDay;
@ApiModelProperty("业务员sid")
private String staffSid;
@ApiModelProperty("客户sid")
private List<String> customerSidList;
}

32
yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempToFin.java

@ -0,0 +1,32 @@
package com.yxt.supervise.crm.api.crmcustomertemp;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* Project: supervise-crm(客户管理) <br/>
* File: CrmCustomerTempVo.java <br/>
* Class: com.yxt.supervise.crm.api.crmcustomertemp.CrmCustomerTempVo <br/>
* Description: 潜在客户信息 视图数据对象. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2022-01-12 11:21:16 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Data
public class CrmCustomerTempToFin implements Vo {
@ApiModelProperty("潜在客户sid")
private String sid;
@ApiModelProperty("客户名称")
private String name;
@ApiModelProperty("车架号")
private String vinNo;
}

109
yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempUpdateDto.java

@ -0,0 +1,109 @@
package com.yxt.supervise.crm.api.crmcustomertemp;
import com.yxt.common.core.dto.Dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
/**
* @Author dimengzhe
* @Date 2022/7/12 14:04
* @Description
*/
@Data
public class CrmCustomerTempUpdateDto implements Dto {
private static final long serialVersionUID = -1744083007571476652L;
@ApiModelProperty(value = "当前登录用户的sid")
private String userSid;
@ApiModelProperty(value = "客户类型(个人/企业)", required = true)
@NotBlank(message = "客户类型为必选项")
private String customerType;
@ApiModelProperty(value = "客户类型key", required = true)
@NotBlank(message = "客户类型为必选项")
private String customerTypeKey;
@ApiModelProperty(value = "见面方式key", required = true)
@NotBlank(message = "见面方式为必选项")
private String visitWayKey;
@ApiModelProperty(value = "见面方式(到店/电话/拜访)", required = true)
@NotBlank(message = "见面方式为必选项")
private String visitWay;
@ApiModelProperty(value = "客户名称", required = true)
@NotBlank(message = "客户名称为必填项")
private String name;
@ApiModelProperty("联系电话")
@NotBlank(message = "联系电话为必填项")
@Pattern(regexp = "^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$", message = "手机号码格式不正确")
private String mobile;
@ApiModelProperty("微信号码")
private String weixin;
@ApiModelProperty("公司名称:个人客户时显示")
private String companyName;
@ApiModelProperty("行政区划代码(省)")
private String address_province;
@ApiModelProperty("行政区划代码(市)")
private String address_city;
@ApiModelProperty("行政区划代码(县)")
private String address_county;
@ApiModelProperty("客户地址:省")
private String province;
@ApiModelProperty("客户地址:市")
private String city;
@ApiModelProperty("客户地址:县")
private String county;
@ApiModelProperty("客户地址:详细地址")
private String address;
@ApiModelProperty("客户级别(意向客户/准客户/成交客户/集团内销/黑名单客户)")
private String level;
@ApiModelProperty("客户级别key")
private String levelKey;
//更多信息
@ApiModelProperty("客户生日:个人客户时显示")
private String birthday;
@ApiModelProperty("性别:个人客户时显示")
private String sex;
@ApiModelProperty("性别key:个人客户时")
private String sexKey;
@ApiModelProperty("证件类型key")
private String certificateTypeKey;
@ApiModelProperty("证件类型(个人为身份证/企业为营业执照)")
private String certificateType;
@ApiModelProperty("证件号码(个人为身份证号/企业为统一社会信用代码)")
private String IDNumber;
@ApiModelProperty("证件有效期")
private String endDate;
@ApiModelProperty("电子邮箱")
private String e_mail;
@ApiModelProperty(value = "联系人")
private String contacts;
@ApiModelProperty("紧急联系人")
private String emergencyContact;
@ApiModelProperty("紧急联系电话")
private String emergencyMobile;
@ApiModelProperty("客户来源(公司资源/自主开发/交接客户/转介绍客户/集团内销)")
private String source;
@ApiModelProperty("客户来源key")
private String sourceKey;
@ApiModelProperty("客户分类(个人:司机/个体老板/其他。企业:企业型客户/一级经销商/二级经销商/终端物流客户)")
private String customerClass;
@ApiModelProperty("客户分类key")
private String customerClassKey;
@ApiModelProperty(value = "备注")
private String remarks;
}

181
yxt_supervise/supervise-crm/supervise-crm-api/src/main/java/com/yxt/supervise/crm/api/crmcustomertemp/CrmCustomerTempVo.java

@ -0,0 +1,181 @@
package com.yxt.supervise.crm.api.crmcustomertemp;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.yxt.common.core.vo.Vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
/**
* Project: supervise-crm(客户管理) <br/>
* File: CrmCustomerTempVo.java <br/>
* Class: com.yxt.supervise.crm.api.crmcustomertemp.CrmCustomerTempVo <br/>
* Description: 潜在客户信息 视图数据对象. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2022-01-12 11:21:16 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@ApiModel(value = "潜在客户信息 视图数据对象", description = "潜在客户信息 视图数据对象")
@Data
public class CrmCustomerTempVo implements Vo {
@ApiModelProperty("潜在客户sid")
private String sid;
@ApiModelProperty("分公司名称")
private String createOrgName;
@ApiModelProperty("业务员名称")
private String staffName;
@ApiModelProperty("部门名称")
private String deptName;
@ApiModelProperty("创建人sid")
private String createBySid;
@ApiModelProperty("登记日期")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date createTime;
@ApiModelProperty("客户编号(部门编码+客户类型(1位,0个人,1企业)+部门内部流水号(6位))")
private String customerNo;
@ApiModelProperty("客户类型(自然人/法人)")
private String customerType;
@ApiModelProperty("客户类型key")
private String customerTypeKey;
@ApiModelProperty("客户分类(个人:司机/个体老板/其他。企业:企业型客户/一级经销商/二级经销商/终端物流客户)")
private String customerClass;
@ApiModelProperty("客户分类key")
private String customerClassKey;
@ApiModelProperty("客户来源(公司资源/自主开发/交接客户/转介绍客户/集团内销)")
private String source;
@ApiModelProperty("客户来源key")
private String sourceKey;
@ApiModelProperty("客户级别(意向客户/准客户/成交客户/集团内销/黑名单客户)")
private String level;
@ApiModelProperty("客户级别key")
private String levelKey;
@ApiModelProperty("客户名称")
private String name;
@ApiModelProperty("证件类型key")
private String certificateTypeKey;
@ApiModelProperty("证件类型(个人为身份证/企业为营业执照)")
private String certificateType;
@ApiModelProperty("证件号码(个人为身份证号/企业为统一社会信用代码)")
private String IDNumber;
@ApiModelProperty("证件有效期")
private String endDate;
@ApiModelProperty("行政区划代码(省)")
private String address_province;
@ApiModelProperty("行政区划代码(市)")
private String address_city;
@ApiModelProperty("行政区划代码(县)")
private String address_county;
@ApiModelProperty("省")
private String province;
@ApiModelProperty("市")
private String city;
@ApiModelProperty("县")
private String county;
@ApiModelProperty("客户地址")
private String address;
@ApiModelProperty("邮编")
private String zipCode;
@ApiModelProperty("电子邮箱")
private String e_mail;
@ApiModelProperty("联系人")
private String contacts;
@ApiModelProperty("联系电话")
private String mobile;
@ApiModelProperty("紧急联系电话")
private String emergencyContact;
@ApiModelProperty("紧急联系电话")
private String emergencyMobile;
@ApiModelProperty("微信号码")
private String weixin;
@ApiModelProperty("业务人员sid")
private String staffSid;
@ApiModelProperty("创建组织sid")
private String createOrgSid;
@ApiModelProperty("性别")
private String sex;
@ApiModelProperty("性别key")
private String sexKey;
@ApiModelProperty("客户生日")
private String birthday;
@ApiModelProperty("所在公司名称")
private String companyName;
@ApiModelProperty("跟进状态key")
private String follow_state_key;
@ApiModelProperty("跟进状态")
private String follow_state;
@ApiModelProperty("是否开启提醒key(1开启,0不开启)")
private String isOnRemindkey;
@ApiModelProperty("是否开启提醒(1开启,0不开启)")
private String isOnRemind;
@ApiModelProperty("提醒日期")
private String remind_day;
@ApiModelProperty("提醒备注")
private String remind_remark;
@ApiModelProperty("客户头像")
private String customerPhoto;
@ApiModelProperty("见面方式key")
private String visitWayKey;
@ApiModelProperty("见面方式(到店/电话/拜访)")
private String visitWay;
@ApiModelProperty("备注")
private String remarks;
}

99
yxt_supervise/supervise-crm/supervise-crm-biz/pom.xml

@ -0,0 +1,99 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<groupId>com.yxt.supervise</groupId>
<artifactId>supervise-crm</artifactId>
<version>0.0.1</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>supervise-crm-biz</artifactId>
<groupId>com.yxt.supervise</groupId>
<version>0.0.1</version>
<dependencies>
<dependency>
<groupId>com.yxt.supervise</groupId>
<artifactId>supervise-system-api</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.yxt</groupId>
<artifactId>yxt-common-base</artifactId>
<version>0.0.1</version>
</dependency>
<dependency>
<artifactId>supervise-crm-api</artifactId>
<groupId>com.yxt.supervise</groupId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-annotation</artifactId>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.5.6</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*Mapper.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>

23
yxt_supervise/supervise-crm/supervise-crm-biz/src/main/java/com/yxt/supervise/crm/CrmApplication.java

@ -0,0 +1,23 @@
package com.yxt.supervise.crm;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* @author dimengzhe
*/
@SpringBootApplication(scanBasePackages = {
"com.yxt.common.base.config",
"com.yxt.supervise.crm"
})
@EnableDiscoveryClient
@EnableFeignClients(basePackages = {"com.yxt.supervise.system"})
public class CrmApplication {
public static void main(String[] args) {
SpringApplication.run(CrmApplication.class, args);
}
}

47
yxt_supervise/supervise-crm/supervise-crm-biz/src/main/java/com/yxt/supervise/crm/biz/crmcustomertemp/CrmCustomerTempMapper.java

@ -0,0 +1,47 @@
package com.yxt.supervise.crm.biz.crmcustomertemp;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.yxt.supervise.crm.api.crmcustomertemp.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
import java.util.Map;
/**
* Project: supervise-crm(客户管理) <br/>
* File: CrmCustomerTempMapper.java <br/>
* Class: com.yxt.supervise.crm.biz.crmcustomertemp.CrmCustomerTempMapper <br/>
* Description: 潜在客户信息. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2022-01-12 11:21:17 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Mapper
public interface CrmCustomerTempMapper extends BaseMapper<CrmCustomerTemp> {
IPage<CrmCustomerTempVo> selectPageVo(IPage<CrmCustomerTemp> page, @Param(Constants.WRAPPER) Wrapper<CrmCustomerTemp> qw);
/**
* 根据客户的微信号以及当前登录者所在部门的sid和登录者所关联的员工sid查询
*
* @param staffSid 登录者所关联的员工sid
* @param weixin 微信号
* @return
*/
CrmCustomerTempVo selectByWx(@Param("staffSid") String staffSid, @Param("weixin") String weixin);
CrmCustomerTempVo selectNo(String customerNo);
CrmCustomerTempVo selectNo1(@Param("customerNo") String customerNo, @Param("sid") String sid);
}

33
yxt_supervise/supervise-crm/supervise-crm-biz/src/main/java/com/yxt/supervise/crm/biz/crmcustomertemp/CrmCustomerTempMapper.xml

@ -0,0 +1,33 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yxt.supervise.crm.biz.crmcustomertemp.CrmCustomerTempMapper">
<!-- <where> ${ew.sqlSegment} </where>-->
<!-- ${ew.customSqlSegment} -->
<select id="selectPageVo" resultType="com.yxt.supervise.crm.api.crmcustomertemp.CrmCustomerTempVo">
SELECT cct.*
FROM crm_customer_temp cct
<where>
${ew.sqlSegment}
</where>
</select>
<!--根据客户的微信号以及当前登录者所在部门的sid和登录者所关联的员工sid查询-->
<select id="selectByWx" resultType="com.yxt.supervise.crm.api.crmcustomertemp.CrmCustomerTempVo">
SELECT *
FROM crm_customer_temp
WHERE staffSid = #{staffSid}
and weixin = #{weixin}
</select>
<select id="selectNo" resultType="com.yxt.supervise.crm.api.crmcustomertemp.CrmCustomerTempVo">
select *
from crm_customer_temp
where customerNo = #{customerNo}
</select>
<select id="selectNo1" resultType="com.yxt.supervise.crm.api.crmcustomertemp.CrmCustomerTempVo">
select *
from crm_customer_temp
where customerNo = #{customerNo}
and sid != #{sid}
</select>
</mapper>

104
yxt_supervise/supervise-crm/supervise-crm-biz/src/main/java/com/yxt/supervise/crm/biz/crmcustomertemp/CrmCustomerTempRest.java

@ -0,0 +1,104 @@
package com.yxt.supervise.crm.biz.crmcustomertemp;
import com.yxt.supervise.crm.api.crmcustomertemp.*;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import io.swagger.annotations.Api;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
* Project: supervise-crm(客户管理) <br/>
* File: CrmCustomerTempFeignFallback.java <br/>
* Class: com.yxt.supervise.crm.biz.crmcustomertemp.CrmCustomerTempRest <br/>
* Description: 潜在客户信息. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2022-01-12 11:21:17 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Api(tags = "潜在客户信息")
@RestController
@RequestMapping("v1/crmcustomertemp")
public class CrmCustomerTempRest implements CrmCustomerTempFeign {
@Autowired
private CrmCustomerTempService crmCustomerTempService;
@Override
public ResultBean<PagerVo<CrmCustomerTempVo>> listPage(@RequestBody PagerQuery<CrmCustomerTempQuery> pq) {
ResultBean rb = ResultBean.fireFail();
PagerVo<CrmCustomerTempVo> pv = crmCustomerTempService.listPageVo(pq);
return rb.success().setData(pv);
}
/**
* 潜在客户新增保存
*
* @param dto 数据传输对象
* @return
*/
@Override
public ResultBean save(CrmCustomerTempDto dto) {
return crmCustomerTempService.saveCrmCustomer(dto);
}
/**
* 潜在客户修改保存
*
* @param dto 数据传输对象
* @param sid 潜在客户sid
* @return
*/
@Override
public ResultBean update(CrmCustomerTempUpdateDto dto, String sid) {
ResultBean rb = ResultBean.fireFail();
String weixin = dto.getWeixin();
if (StringUtils.isNotBlank(weixin)) {
if (!weixin.matches("^[a-zA-Z]{1}[-_a-zA-Z0-9]{5,19}$") && !weixin.matches("^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$")) {
return rb.setMsg("微信号格式不正确");
}
}
String email = dto.getE_mail();
if (StringUtils.isNotBlank(email)) {
if (!email.matches("^[0-9A-Za-z][\\.-_0-9A-Za-z]*@[0-9A-Za-z]+(?:\\.[0-9A-Za-z]+)+$")) {
return rb.setMsg("邮箱格式不正确");
}
}
ResultBean resultBean = crmCustomerTempService.updateCrmCustomer(dto, sid);
if (!resultBean.getSuccess()) {
return rb.setMsg(resultBean.getMsg());
}
return rb.success().setMsg(resultBean.getMsg());
}
@Override
public ResultBean del(String[] sid) {
ResultBean rb = ResultBean.fireFail();
crmCustomerTempService.delBySids(sid);
return rb.success();
}
@Override
public ResultBean<CrmCustomerTempVo> fetchSid(String sid) {
ResultBean<CrmCustomerTempVo> rb = ResultBean.fireFail();
CrmCustomerTemp customerTemp = crmCustomerTempService.fetchBySid(sid);
if (customerTemp == null) {
return rb.setMsg("该客户不存在");
}
CrmCustomerTempVo vo = crmCustomerTempService.fetchAllBySid(sid);
return rb.success().setData(vo);
}
}

330
yxt_supervise/supervise-crm/supervise-crm-biz/src/main/java/com/yxt/supervise/crm/biz/crmcustomertemp/CrmCustomerTempService.java

@ -0,0 +1,330 @@
package com.yxt.supervise.crm.biz.crmcustomertemp;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yxt.supervise.crm.api.crmcustomertemp.*;
import com.yxt.common.base.config.component.FileUploadComponent;
import com.yxt.common.base.service.MybatisBaseService;
import com.yxt.common.base.utils.HanZiConverterPinYin;
import com.yxt.common.base.utils.HttpStatusEnum;
import com.yxt.common.base.utils.PagerUtil;
import com.yxt.common.core.query.PagerQuery;
import com.yxt.common.core.result.ResultBean;
import com.yxt.common.core.vo.PagerVo;
import com.yxt.supervise.system.dictcommon.DictCommonFeign;
import com.yxt.supervise.system.sysorganization.SysOrganizationFeign;
import com.yxt.supervise.system.sysorganization.SysOrganizationVo;
import com.yxt.supervise.system.sysstafforg.SysStaffOrg;
import com.yxt.supervise.system.sysstafforg.SysStaffOrgFeign;
import com.yxt.supervise.system.sysuser.SysUserFeign;
import com.yxt.supervise.system.sysuser.SysUserInfoVo;
import com.yxt.supervise.system.sysuser.SysUserVo;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* Project: supervise-crm(客户管理) <br/>
* File: CrmCustomerTempService.java <br/>
* Class: com.yxt.supervise.crm.biz.crmcustomertemp.CrmCustomerTempService <br/>
* Description: 潜在客户信息 业务逻辑. <br/>
* Copyright: Copyright (c) 2011 <br/>
* Company: https://gitee.com/liuzp315 <br/>
* Makedate: 2022-01-12 11:21:17 <br/>
*
* @author liupopo
* @version 1.0
* @since 1.0
*/
@Service
public class CrmCustomerTempService extends MybatisBaseService<CrmCustomerTempMapper, CrmCustomerTemp> {
@Autowired
private SysUserFeign sysUserFeign;
@Autowired
private SysStaffOrgFeign sysStaffOrgFeign;
@Autowired
private SysOrganizationFeign sysOrganizationFeign;
private QueryWrapper<CrmCustomerTemp> createQueryWrapper(CrmCustomerTempQuery query) {
QueryWrapper<CrmCustomerTemp> qw = new QueryWrapper<>();
if (StringUtils.isNotBlank(query.getCustomerTypeKey())) {
qw.eq("cct.customerTypeKey", query.getCustomerTypeKey());
}
if (StringUtils.isNotBlank(query.getName())) {
qw.like("cct.name", query.getName());
}
if (StringUtils.isNotBlank(query.getLevelKey())) {
qw.eq("cct.levelKey", query.getLevelKey());
}
if (StringUtils.isNotBlank(query.getMobile())) {
qw.like("cct.mobile", query.getMobile());
}
if (StringUtils.isNotBlank(query.getStaffSid())) {
qw.eq("cct.staffSid", query.getStaffSid());
}
if (query.getCustomerSidList() != null && query.getCustomerSidList().size() > 0) {
qw.notIn("cct.sid", query.getCustomerSidList());
}
String remindStartDay = query.getRemindStartDay();
String remindEndDay = query.getRemindEndDay();
qw.apply(StringUtils.isNotBlank(remindStartDay), "date_format (cct.remind_day,'%Y-%m-%d') >= date_format('" + remindStartDay + "','%Y-%m-%d')").
apply(StringUtils.isNotBlank(remindEndDay), "date_format (cct.remind_day,'%Y-%m-%d') <= date_format('" + remindEndDay + "','%Y-%m-%d')"
);
return qw;
}
public PagerVo<CrmCustomerTempVo> listPageVo(PagerQuery<CrmCustomerTempQuery> pq) {
CrmCustomerTempQuery query = pq.getParams();
QueryWrapper<CrmCustomerTemp> qw = createQueryWrapper(query);
IPage<CrmCustomerTemp> page = PagerUtil.queryToPage(pq);
IPage<CrmCustomerTempVo> pagging = baseMapper.selectPageVo(page, qw);
PagerVo<CrmCustomerTempVo> p = PagerUtil.pageToVo(pagging, null);
return p;
}
/**
* pc端潜在客户新增保存
*
* @param dto 数据传输对象
* state值211为当前用户的客户
* @return
*/
public ResultBean saveCrmCustomer(CrmCustomerTempDto dto) {
ResultBean rb = ResultBean.fireFail();
//当前登录用户的sid
String userSid = dto.getUserSid();
//根据登录用户sid查询该用户是否已设置部门
ResultBean<SysUserInfoVo> sysUserInfoVoResultBean = sysUserFeign.selectUserInfoByUserSid(userSid);
if (!sysUserInfoVoResultBean.getSuccess()) {
return rb.setMsg(sysUserInfoVoResultBean.getMsg());
}
//用户所属组织信息
SysUserInfoVo sysUserInfoVo = sysUserInfoVoResultBean.getData();
if (StringUtils.isBlank(sysUserInfoVo.getOrgSid())) {
return rb.setMsg("请先设置该员工所属部门");
}
//手机号
String mobile = dto.getMobile();
//微信号
String weixin = dto.getWeixin();
if (StringUtils.isBlank(mobile)) {
return rb.setMsg("请输入联系电话");
}
if ("1".equals(dto.getCustomerType())) {
if (!weixin.matches("^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$")) {
return rb.setMsg("手机号格式不正确");
}
if (StringUtils.isNotBlank(dto.getIDNumber())) {
if (!weixin.matches("^[1-9]\\d{5}(18|19|([23]\\d))\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$")) {
return rb.setMsg("证件号码格式不正确");
}
}
} else {
if (StringUtils.isNotBlank(dto.getIDNumber())) {
if (dto.getIDNumber().length() != 9 && dto.getIDNumber().length() != 18) {
return rb.setMsg("证件号码格式不正确");
}
}
}
if (StringUtils.isNotBlank(weixin)) {
if (!weixin.matches("^[a-zA-Z]{1}[-_a-zA-Z0-9]{5,19}$") && !weixin.matches("^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$")) {
return rb.setMsg("微信号格式不正确");
}
}
String email = dto.getE_mail();
if (StringUtils.isNotBlank(email)) {
if (!email.matches("^[0-9A-Za-z][\\.-_0-9A-Za-z]*@[0-9A-Za-z]+(?:\\.[0-9A-Za-z]+)+$")) {
return rb.setMsg("邮箱格式不正确");
}
}
String emergencyMobile = dto.getEmergencyMobile();
if (StringUtils.isNotBlank(emergencyMobile)) {
if (!emergencyMobile.matches("^((13[0-9])|(14[5,7])|(15[0-3,5-9])|(17[0,3,5-8])|(18[0-9])|166|198|199|(147))\\d{8}$")) {
return rb.setMsg("紧急联系电话格式不正确");
}
}
//当前登录用户的所在部门sid
String staffSid = sysUserInfoVo.getStaffSid();
//根据客户的手机号以及当前登录者所在部门的sid查询该部门内是否有重复的
if (StringUtils.isNotBlank(mobile)) {
//客户编码
String customerNo = getPrefix(staffSid, dto.getName(), dto.getMobile());
CrmCustomerTempVo crmCustomerTempVo = baseMapper.selectNo(customerNo);
if (crmCustomerTempVo == null) {
//新增潜在客户信息
CrmCustomerTemp crmCustomerTemp = saveCrmCustomerTemp(dto, sysUserInfoVo);
return rb.success().setData(crmCustomerTemp.getSid());
} else {
//是否为当前用户的客户
if (crmCustomerTempVo.getStaffSid().equals(sysUserInfoVo.getStaffSid())) {
return rb.setCode(HttpStatusEnum.CRM_ERROR_EXIST.getCode()).setMsg(HttpStatusEnum.CRM_ERROR_EXIST.getMsg()).setData(crmCustomerTempVo.getSid());
} else {
//不是当前用户的客户,提示信息。
ResultBean<SysUserVo> sysUserVoResultBean = sysUserFeign.selectByStaffsid(crmCustomerTempVo.getStaffSid());
if (sysUserVoResultBean.getSuccess()) {
return rb.setMsg("该手机号客户为" + sysUserVoResultBean.getData().getName() + "的客户,如需更改,请联系" + sysUserVoResultBean.getData().getName());
} else {
return rb.setMsg(sysUserInfoVoResultBean.getMsg());
}
}
}
} else if (StringUtils.isNotBlank(weixin)) {
//根据客户的微信号以及当前登录者所在部门的sid和登录者所关联的员工sid查询
CrmCustomerTempVo crmCustomerTempVo = baseMapper.selectByWx(staffSid, weixin);
if (crmCustomerTempVo == null) {
//新增潜在客户信息
CrmCustomerTemp crmCustomerTemp = saveCrmCustomerTemp(dto, sysUserInfoVo);
return rb.success().setData(crmCustomerTemp.getSid());
} else {
return rb.setCode(HttpStatusEnum.CRM_ERROR_WXEXIST.getCode()).setMsg(HttpStatusEnum.CRM_ERROR_WXEXIST.getMsg());
}
}
return rb.success();
}
/**
* 新增潜在客户信息及运营信息并增加跟进记录
*
* @param dto 潜在客户信息数据传输对象
* @param sysUserInfoVo 当前登录者的组织信息
* @return
*/
private CrmCustomerTemp saveCrmCustomerTemp(CrmCustomerTempDto dto, SysUserInfoVo sysUserInfoVo) {
CrmCustomerTemp crmCustomerTemp = new CrmCustomerTemp();
dto.fillEntity(crmCustomerTemp);
crmCustomerTemp.setCreateBySid(dto.getUserSid());
crmCustomerTemp.setStaffSid(sysUserInfoVo.getStaffSid());
String orgSid = sysStaffOrgFeign.getPathSidByUserSid(dto.getUserSid()).getData();
crmCustomerTemp.setCreateOrgSid(orgSid);
String customerNoPrefix = "";
//查询业务员的分公司简称和部门编码
ResultBean<SysStaffOrg> staffOrgResultBean = sysStaffOrgFeign.getOrgByStaffSid(sysUserInfoVo.getStaffSid());
if (staffOrgResultBean.getSuccess()) {
SysStaffOrg sysStaffOrg = staffOrgResultBean.getData();
if (sysStaffOrg != null) {
ResultBean<String> resultBean1 = sysStaffOrgFeign.getOrgSidByPath(sysStaffOrg.getOrgSidPath());
if (resultBean1.getSuccess()) {
String osid = resultBean1.getData();
if (StringUtils.isNotBlank(osid)) {
ResultBean<SysOrganizationVo> sysOrganizationVoResultBean = sysOrganizationFeign.fetchBySid(osid);
if (sysOrganizationVoResultBean.getSuccess()) {
SysOrganizationVo sysOrganizationVo = sysOrganizationVoResultBean.getData();
customerNoPrefix = customerNoPrefix + sysOrganizationVo.getOrgAbbre();
}
}
}
String orgSid1 = sysStaffOrg.getOrgSid();
ResultBean<SysOrganizationVo> sysOrganizationVoResultBean = sysOrganizationFeign.fetchBySid(orgSid1);
if (sysOrganizationVoResultBean.getSuccess()) {
SysOrganizationVo sysOrganizationVo = sysOrganizationVoResultBean.getData();
customerNoPrefix = customerNoPrefix + sysOrganizationVo.getOrgCode();
}
}
}
//客户编码
String customerNo = getPrefix(crmCustomerTemp.getStaffSid(), crmCustomerTemp.getName(), crmCustomerTemp.getMobile());
crmCustomerTemp.setCustomerNo(customerNo);
save(crmCustomerTemp);
return crmCustomerTemp;
}
public String getPrefix(String staffSid, String name, String mobile) {
String customerNoPrefix = "";
//查询业务员的分公司简称和部门编码
ResultBean<SysStaffOrg> staffOrgResultBean = sysStaffOrgFeign.getOrgByStaffSid(staffSid);
if (staffOrgResultBean.getSuccess()) {
SysStaffOrg sysStaffOrg = staffOrgResultBean.getData();
if (sysStaffOrg != null) {
ResultBean<String> resultBean1 = sysStaffOrgFeign.getOrgSidByPath(sysStaffOrg.getOrgSidPath());
if (resultBean1.getSuccess()) {
String osid = resultBean1.getData();
if (StringUtils.isNotBlank(osid)) {
ResultBean<SysOrganizationVo> sysOrganizationVoResultBean = sysOrganizationFeign.fetchBySid(osid);
if (sysOrganizationVoResultBean.getSuccess()) {
SysOrganizationVo sysOrganizationVo = sysOrganizationVoResultBean.getData();
customerNoPrefix = customerNoPrefix + sysOrganizationVo.getOrgAbbre();
}
}
}
String orgSid1 = sysStaffOrg.getOrgSid();
ResultBean<SysOrganizationVo> sysOrganizationVoResultBean = sysOrganizationFeign.fetchBySid(orgSid1);
if (sysOrganizationVoResultBean.getSuccess()) {
SysOrganizationVo sysOrganizationVo = sysOrganizationVoResultBean.getData();
customerNoPrefix = customerNoPrefix + sysOrganizationVo.getOrgCode();
}
}
}
customerNoPrefix = customerNoPrefix + mobile + HanZiConverterPinYin.getPinYinFirst(name);
System.out.println(customerNoPrefix.length() > 30 ? customerNoPrefix.substring(0, 30) : customerNoPrefix);
return customerNoPrefix.length() > 30 ? customerNoPrefix.substring(0, 30) : customerNoPrefix;
}
/**
* 潜在客户的信息的编辑保存
*
* @param dto 数据传输对象
* @param sid 潜在客户的sid
* @return
*/
public ResultBean updateCrmCustomer(CrmCustomerTempUpdateDto dto, String sid) {
ResultBean rb = ResultBean.fireFail();
//当前登录用户的sid
String userSid = dto.getUserSid();
//根据登录用户sid查询该用户是否已设置部门
ResultBean<SysUserInfoVo> sysUserInfoVoResultBean = sysUserFeign.selectUserInfoByUserSid(userSid);
if (!sysUserInfoVoResultBean.getSuccess()) {
return rb.setMsg(sysUserInfoVoResultBean.getMsg());
}
//用户所属组织信息
SysUserInfoVo sysUserInfoVo = sysUserInfoVoResultBean.getData();
if (StringUtils.isBlank(sysUserInfoVo.getOrgSid())) {
return rb.setMsg("请先设置该员工所属部门");
}
String staffSid = sysUserInfoVo.getStaffSid();
String mobile = dto.getMobile();
String weixin = dto.getWeixin();
if (StringUtils.isBlank(mobile) && StringUtils.isBlank(weixin)) {
return rb.setMsg("联系电话和微信号二选一必填");
}
if (StringUtils.isNotBlank(mobile)) {
String customerNo = getPrefix(staffSid, dto.getName(), dto.getMobile());
CrmCustomerTempVo crmCustomerTempVo = baseMapper.selectNo1(customerNo, sid);
if (crmCustomerTempVo != null && !crmCustomerTempVo.getStaffSid().equals(sysUserInfoVo.getStaffSid())) {
return rb.setMsg("该手机号已绑定其他客户,请重新添加");
}
} else {
//根据客户的微信号以及当前登录者所在部门的sid和登录者所关联的员工sid查询
CrmCustomerTempVo crmCustomerTempVo = baseMapper.selectByWx(staffSid, weixin);
if (crmCustomerTempVo != null && !crmCustomerTempVo.getStaffSid().equals(sysUserInfoVo.getStaffSid())) {
return rb.setMsg("该微信号已绑定其他客户,请重新添加");
}
}
CrmCustomerTemp customerTemp = fetchBySid(sid);
if (customerTemp == null) {
return rb.setMsg("该客户信息不存在");
}
BeanUtil.copyProperties(dto, customerTemp);
//客户编码
String customerNoPrefix = "";
//查询业务员的分公司简称和部门简称
String customerNo = getPrefix(staffSid, dto.getName(), dto.getMobile());
customerTemp.setCustomerNo(customerNo);
baseMapper.updateById(customerTemp);
return rb.success().setMsg("更新成功");
}
public CrmCustomerTempVo fetchAllBySid(String sid) {
CrmCustomerTempVo vo = new CrmCustomerTempVo();
CrmCustomerTemp crmCustomerTemp = this.fetchBySid(sid);
BeanUtil.copyProperties(crmCustomerTemp, vo);
return vo;
}
}

31
yxt_supervise/supervise-crm/supervise-crm-biz/src/main/resources/application-devv.yml

@ -0,0 +1,31 @@
spring:
datasource:
hikari:
max-lifetime: 500000
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/supervise_crm?serverTimezone=GMT%2B8&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&nullCatalogMeansCurrent=true
username: root
password: root
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
redis:
database: 3 # Redis数据库索引(默认为0)
host: 127.0.0.1
jedis:
pool:
max-active: -1 #连接池最大连接数(使用负值表示没有限制)
max-idle: 8 #连接池中的最大空闲连接
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
min-idle: 0 # 连接池中的最小空闲连接
password:
port: 6379
timeout: 0 # 连接超时时间(毫秒)
image:
upload:
path: D:\supervise\upload\
url:
prefix: http://127.0.0.1:8112/upload/

28
yxt_supervise/supervise-crm/supervise-crm-biz/src/main/resources/application-pro.yml

@ -0,0 +1,28 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://127.0.0.1:3306/supervise_crm?serverTimezone=GMT%2B8&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8
username: root
password: root
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
redis:
database: 3 # Redis数据库索引(默认为0)
host: 127.0.0.1
jedis:
pool:
max-active: -1 #连接池最大连接数(使用负值表示没有限制)
max-idle: 8 #连接池中的最大空闲连接
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
min-idle: 0 # 连接池中的最小空闲连接
password: 123456
port: 6379
timeout: 0 # 连接超时时间(毫秒)
image:
upload:
path: D:\supervise\upload\
url:
prefix: http://127.0.0.1/api/upload/

30
yxt_supervise/supervise-crm/supervise-crm-biz/src/main/resources/application-test.yml

@ -0,0 +1,30 @@
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://122.14.222.186:3306/supervise_crm?serverTimezone=GMT%2B8&autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&nullCatalogMeansCurrent=true
username: root
password: 1LAiGz$t1*Iw
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
redis:
database: 3 # Redis数据库索引(默认为0)
host: 127.0.0.1
jedis:
pool:
max-active: -1 #连接池最大连接数(使用负值表示没有限制)
max-idle: 8 #连接池中的最大空闲连接
max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)
min-idle: 0 # 连接池中的最小空闲连接
password: 123456
port: 6379
timeout: 0 # 连接超时时间(毫秒)
image:
upload:
path: D:/webapps/supervise/static/upload/
url:
prefix: http://122.14.222.186:7003/upload/

46
yxt_supervise/supervise-crm/supervise-crm-biz/src/main/resources/application.yml

@ -0,0 +1,46 @@
spring:
application:
name: supervise-crm
profiles:
active: devv
messages:
# 国际化资源文件路径
basename: i18n/messages
servlet:
#上传文件
multipart:
max-file-size: 50MB
max-request-size: 100MB
devtools:
restart:
# 热部署开关
enabled: true
server:
port: 7004
max-http-header-size: 102400
undertow:
max-http-post-size: -1
#mybatis
mybatis-plus:
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapper-locations: classpath*:**Mapper.xml
global-config:
refresh: true
db-config:
#定义生成ID的类型
id-type: Auto
db-type: mysql
configuration:
map-underscore-to-camel-case: false
cache-enabled: true
call-setters-on-nulls: true
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

50
yxt_supervise/supervise-crm/supervise-crm-biz/src/main/resources/logback-spring.xml

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<property name="log.base" value="logs/supervise_crm" />
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符 :
|%blue(%thread) 线程 如 :DiscoveryClient-CacheRefreshExecutor-0-->
<!--<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>-->
<pattern>%yellow(%date{yyyy-MM-dd HH:mm:ss}) |%highlight(%-5level) |%green(%logger:%line) |%blue(%msg%n)
</pattern>
<!--<charset>UTF-8</charset> -->
</encoder>
</appender>
<!-- 彩色日志 -->
<!-- 彩色日志依赖的渲染类 -->
<conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />
<conversionRule conversionWord="wex" converterClass="org.springframework.boot.logging.logback.WhitespaceThrowableProxyConverter" />
<conversionRule conversionWord="wEx" converterClass="org.springframework.boot.logging.logback.ExtendedWhitespaceThrowableProxyConverter" />
<!-- 彩色日志格式 -->
<property name="CONSOLE_LOG_PATTERN" value="${CONSOLE_LOG_PATTERN:-%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<appender name="FILEOUT"
class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${log.base}.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>${log.base}.%d{yyyyMMdd}.%i.log.zip
</fileNamePattern>
<!-- 当文件大小超过10MB时触发滚动 -->
<timeBasedFileNamingAndTriggeringPolicy
class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
<maxFileSize>1MB</maxFileSize>
</timeBasedFileNamingAndTriggeringPolicy>
</rollingPolicy>
<encoder>
<!--<pattern>%date [%thread] %-5level %logger{35} - %msg%n</pattern>-->
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36}
-%msg%n</Pattern>
<!--<charset>UTF-8</charset> -->
</encoder>
</appender>
<root level="INFO">
<appender-ref ref="STDOUT" />
<appender-ref ref="FILEOUT" />
</root>
</configuration>
Loading…
Cancel
Save