Commit d8e49fa0f6b54df99541588b8cc299f514adbf1e

Authored by 芋道源码
Committed by Gitee
2 parents 81b6aebf 3af96883

!701 feat: 调整 CRM 客户表的字段

Merge pull request !701 from wanwan/feature/crm
Showing 18 changed files with 266 additions and 122 deletions
sql/mysql/crm.sql
... ... @@ -188,34 +188,42 @@ CREATE TABLE `crm_contact` (
188 188 -- ----------------------------
189 189 -- 客户表
190 190 -- ----------------------------
191   -CREATE TABLE `crm_customer` (
192   - `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号,主键自增',
193   - `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '客户名称',
194   - `follow_up_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '跟进状态',
195   - `lock_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '锁定状态',
196   - `deal_status` tinyint(1) NOT NULL DEFAULT '0' COMMENT '成交状态',
197   - `mobile` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '手机',
198   - `telephone` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '电话',
199   - `website` varchar(1024) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '网址',
200   - `remark` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '备注',
201   - `owner_user_id` bigint DEFAULT NULL COMMENT '负责人的用户编号',
202   - `ro_user_ids` varchar(4096) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '只读权限的用户编号数组',
203   - `rw_user_ids` varchar(4096) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '读写权限的用户编号数组',
204   - `area_id` bigint DEFAULT NULL COMMENT '地区编号',
205   - `detail_address` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '详细地址',
206   - `longitude` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地理位置经度',
207   - `latitude` varchar(50) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '地理位置维度',
208   - `contact_last_time` datetime DEFAULT NULL COMMENT '最后跟进时间',
209   - `contact_next_time` datetime DEFAULT NULL COMMENT '下次联系时间',
210   - `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '创建者',
211   - `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
212   - `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '更新者',
213   - `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
214   - `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
215   - `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号',
216   - PRIMARY KEY (`id`),
217   - KEY `owner_user_id` (`owner_user_id`)
218   -) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='客户表';
  191 +DROP TABLE IF EXISTS `crm_customer`;
  192 +CREATE TABLE `crm_customer` (
  193 + `id` bigint NOT NULL AUTO_INCREMENT COMMENT '编号,主键自增',
  194 + `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '客户名称',
  195 + `follow_up_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '跟进状态',
  196 + `lock_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '锁定状态',
  197 + `deal_status` tinyint(1) NOT NULL DEFAULT 0 COMMENT '成交状态',
  198 + `industry_id` int NULL DEFAULT NULL COMMENT '所属行业',
  199 + `level` int NULL DEFAULT NULL COMMENT '客户等级',
  200 + `source` int NULL DEFAULT NULL COMMENT '客户来源',
  201 + `mobile` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '手机',
  202 + `telephone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '电话',
  203 + `website` varchar(1024) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '网址',
  204 + `qq` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT 'QQ',
  205 + `wechat` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '微信',
  206 + `email` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '邮箱',
  207 + `description` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '客户描述',
  208 + `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '备注',
  209 + `owner_user_id` bigint NULL DEFAULT NULL COMMENT '负责人的用户编号',
  210 + `ro_user_ids` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '只读权限的用户编号数组',
  211 + `rw_user_ids` varchar(4096) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '读写权限的用户编号数组',
  212 + `area_id` bigint NULL DEFAULT NULL COMMENT '地区编号',
  213 + `detail_address` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '详细地址',
  214 + `longitude` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '地理位置经度',
  215 + `latitude` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT NULL COMMENT '地理位置维度',
  216 + `contact_last_time` datetime NULL DEFAULT NULL COMMENT '最后跟进时间',
  217 + `contact_next_time` datetime NULL DEFAULT NULL COMMENT '下次联系时间',
  218 + `creator` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '创建者',
  219 + `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  220 + `updater` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NULL DEFAULT '' COMMENT '更新者',
  221 + `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  222 + `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除',
  223 + `tenant_id` bigint NOT NULL DEFAULT 0 COMMENT '租户编号',
  224 + PRIMARY KEY (`id`) USING BTREE,
  225 + INDEX `owner_user_id`(`owner_user_id`) USING BTREE
  226 +) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci COMMENT = '客户表' ROW_FORMAT = Dynamic;
219 227 -- ----------------------------
220 228 -- 商机状态表
221 229 -- ----------------------------
... ...
sql/mysql/crm_data.sql
... ... @@ -17,3 +17,42 @@ INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `st
17 17 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1400, 7, '微信支付', '7', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:55:53', '1', '2023-10-18 21:55:53', b'0');
18 18 INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1401, 8, '其他', '8', 'crm_return_type', 0, 'default', '', '', '1', '2023-10-18 21:56:06', '1', '2023-10-18 21:56:06', b'0');
19 19  
  20 +
  21 +
  22 +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (188, '客户来源', 'crm_customer_source', 0, 'CRM 客户来源', '1', '2023-10-28 23:00:34', '1', '2023-10-28 15:11:16', b'0', NULL);
  23 +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (187, '客户等级', 'crm_customer_level', 0, 'CRM 客户等级', '1', '2023-10-28 22:59:12', '1', '2023-10-28 15:11:16', b'0', NULL);
  24 +INSERT INTO `system_dict_type` (`id`, `name`, `type`, `status`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`, `deleted_time`) VALUES (186, '客户所属行业', 'crm_customer_industry', 0, 'CRM 客户所属行业', '1', '2023-10-28 22:57:07', '1', '2023-10-28 15:11:16', b'0', NULL);
  25 +
  26 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1434, 10, '邮件咨询', '10', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:33', '1', '2023-10-28 23:10:33', b'0');
  27 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1433, 9, '电话咨询', '9', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:18', '1', '2023-10-28 23:10:18', b'0');
  28 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1432, 8, '陌拜', '8', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:10:04', '1', '2023-10-28 23:10:04', b'0');
  29 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1431, 7, '预约上门', '7', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:39', '1', '2023-10-28 23:09:39', b'0');
  30 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1430, 6, '线上咨询', '6', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:22', '1', '2023-10-28 23:09:22', b'0');
  31 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1429, 5, '线上注册', '5', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:09:12', '1', '2023-10-28 23:09:12', b'0');
  32 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1428, 4, '转介绍', '4', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:58', '1', '2023-10-28 23:08:58', b'0');
  33 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1427, 3, '广告', '3', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:47', '1', '2023-10-28 23:08:47', b'0');
  34 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1426, 2, '搜索引擎', '2', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:39', '1', '2023-10-28 23:08:39', b'0');
  35 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1425, 1, '促销', '1', 'crm_customer_source', 0, 'default', '', '', '1', '2023-10-28 23:08:29', '1', '2023-10-28 23:08:29', b'0');
  36 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1424, 3, 'C (非优先客户)', '3', 'crm_customer_level', 0, 'default', '', '', '1', '2023-10-28 23:07:53', '1', '2023-10-28 23:07:53', b'0');
  37 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1423, 2, 'B (普通客户)', '2', 'crm_customer_level', 0, 'info', '', '', '1', '2023-10-28 23:07:35', '1', '2023-10-28 23:07:35', b'0');
  38 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1422, 1, 'A (重点客户)', '1', 'crm_customer_level', 0, 'primary', '', '', '1', '2023-10-28 23:07:13', '1', '2023-10-28 23:07:13', b'0');
  39 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1421, 20, 'T 国际组织', '20', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:06:15', '1', '2023-10-28 23:06:15', b'0');
  40 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1420, 19, 'S 公共管理、社会保障和社会组织', '19', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:06:05', '1', '2023-10-28 23:06:05', b'0');
  41 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1419, 18, 'R 文化、体育和娱乐业', '18', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:05:55', '1', '2023-10-28 23:05:55', b'0');
  42 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1418, 17, 'Q 卫生和社会工作', '17', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:05:44', '1', '2023-10-28 23:05:44', b'0');
  43 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1417, 16, 'P 教育', '16', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:05:15', '1', '2023-10-28 23:05:15', b'0');
  44 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1416, 15, 'O 居民服务、修理和其他服务业', '15', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:05:05', '1', '2023-10-28 23:05:05', b'0');
  45 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1415, 14, 'N 水利、环境和公共设施管理业', '14', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:04:53', '1', '2023-10-28 23:04:53', b'0');
  46 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1414, 13, 'M 科学研究和技术服务业', '13', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:04:43', '1', '2023-10-28 23:04:43', b'0');
  47 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1413, 12, 'L 租赁和商务服务业', '12', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:04:33', '1', '2023-10-28 23:04:33', b'0');
  48 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1412, 11, 'K 房地产业', '11', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:04:15', '1', '2023-10-28 23:04:22', b'0');
  49 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1411, 10, 'J 金融业', '10', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:57', '1', '2023-10-28 23:03:57', b'0');
  50 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1410, 9, 'I 信息传输、软件和信息技术服务业', '9', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:47', '1', '2023-10-28 23:03:47', b'0');
  51 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1409, 8, 'H 住宿和餐饮业', '8', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:37', '1', '2023-10-28 23:03:37', b'0');
  52 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1408, 7, 'G 交通运输、仓储和邮政业', '7', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:27', '1', '2023-10-28 23:03:27', b'0');
  53 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1407, 6, 'F 批发和零售业', '6', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:13', '1', '2023-10-28 23:03:13', b'0');
  54 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1406, 5, 'E 建筑业', '5', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:03:03', '1', '2023-10-28 23:03:03', b'0');
  55 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1405, 4, 'D 电力、热力、燃气及水生产和供应业', '4', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:54', '1', '2023-10-28 23:02:54', b'0');
  56 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1404, 3, 'C 制造业', '3', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:41', '1', '2023-10-28 23:02:41', b'0');
  57 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1403, 2, 'B 采矿业', '2', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:29', '1', '2023-10-28 23:02:29', b'0');
  58 +INSERT INTO `system_dict_data` (`id`, `sort`, `label`, `value`, `dict_type`, `status`, `color_type`, `css_class`, `remark`, `creator`, `create_time`, `updater`, `update_time`, `deleted`) VALUES (1402, 1, 'A 农、林、牧、渔业', '1', 'crm_customer_industry', 0, 'default', '', '', '1', '2023-10-28 23:02:15', '1', '2023-10-28 23:02:15', b'0');
20 59 \ No newline at end of file
... ...
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/DictTypeConstants.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.enums;
  2 +
  3 +/**
  4 + * System 字典类型的枚举类
  5 + *
  6 + * @author 芋道源码
  7 + */
  8 +public interface DictTypeConstants {
  9 +
  10 + // ========== CRM 模块 ==========
  11 + String CRM_CUSTOMER_INDUSTRY = "crm_customer_industry"; // CRM 客户所属行业
  12 + String CRM_CUSTOMER_LEVEL = "crm_customer_level"; // CRM 客户等级
  13 + String CRM_CUSTOMER_SOURCE = "crm_customer_source"; // CRM 客户来源
  14 +
  15 +}
... ...
yudao-module-crm/yudao-module-crm-api/src/main/java/cn/iocoder/yudao/module/crm/enums/customer/CrmCustomerLevelEnum.java 0 → 100644
  1 +package cn.iocoder.yudao.module.crm.enums.customer;
  2 +
  3 +import cn.iocoder.yudao.framework.common.core.IntArrayValuable;
  4 +import lombok.AllArgsConstructor;
  5 +import lombok.Getter;
  6 +
  7 +import java.util.Arrays;
  8 +
  9 +/**
  10 + * CRM 客户等级
  11 + *
  12 + * @author Wanwan
  13 + */
  14 +@Getter
  15 +@AllArgsConstructor
  16 +public enum CrmCustomerLevelEnum implements IntArrayValuable {
  17 +
  18 + IMPORTANT(1, "A (重点客户)"),
  19 + GENERAL(2, "B (普通客户)"),
  20 + LOW_PRIORITY(3, "C (非优先客户)");
  21 +
  22 + public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(CrmCustomerLevelEnum::getStatus).toArray();
  23 +
  24 + /**
  25 + * 状态
  26 + */
  27 + private final Integer status;
  28 + /**
  29 + * 状态名
  30 + */
  31 + private final String name;
  32 +
  33 + @Override
  34 + public int[] array() {
  35 + return ARRAYS;
  36 + }
  37 +
  38 +}
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/CrmCustomerController.java
... ... @@ -19,7 +19,6 @@ import javax.annotation.Resource;
19 19 import javax.servlet.http.HttpServletResponse;
20 20 import javax.validation.Valid;
21 21 import java.io.IOException;
22   -import java.util.Collection;
23 22 import java.util.List;
24 23  
25 24 import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerBaseVO.java
1 1 package cn.iocoder.yudao.module.crm.controller.admin.customer.vo;
2 2  
  3 +import cn.iocoder.yudao.framework.common.validation.InEnum;
3 4 import cn.iocoder.yudao.framework.common.validation.Mobile;
4 5 import cn.iocoder.yudao.framework.common.validation.Telephone;
  6 +import cn.iocoder.yudao.module.crm.enums.customer.CrmCustomerLevelEnum;
5 7 import io.swagger.v3.oas.annotations.media.Schema;
6 8 import lombok.Data;
7 9 import org.springframework.format.annotation.DateTimeFormat;
8 10  
  11 +import javax.validation.constraints.Email;
9 12 import javax.validation.constraints.NotEmpty;
10 13 import javax.validation.constraints.NotNull;
  14 +import javax.validation.constraints.Size;
11 15 import java.time.LocalDateTime;
12 16  
13 17 import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
... ... @@ -23,15 +27,15 @@ public class CrmCustomerBaseVO {
23 27 @NotEmpty(message = "客户名称不能为空")
24 28 private String name;
25 29  
26   - // TODO wanwan:这个字段应该只有 RespVO 会有;创建和修改不传递;
27   - @Schema(description = "跟进状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
28   - @NotNull(message = "跟进状态不能为空")
29   - private Boolean followUpStatus;
  30 + @Schema(description = "所属行业", example = "1")
  31 + private Integer industryId;
30 32  
31   - // TODO wanwan:这个字段应该只有 RespVO 会有;创建和修改不传递;
32   - @Schema(description = "锁定状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
33   - @NotNull(message = "锁定状态不能为空")
34   - private Boolean lockStatus;
  33 + @Schema(description = "客户等级", example = "2")
  34 + @InEnum(CrmCustomerLevelEnum.class)
  35 + private Integer level;
  36 +
  37 + @Schema(description = "客户来源", example = "3")
  38 + private Integer source;
35 39  
36 40 @Schema(description = "手机", example = "18000000000")
37 41 @Mobile
... ... @@ -44,32 +48,32 @@ public class CrmCustomerBaseVO {
44 48 @Schema(description = "网址", example = "https://www.baidu.com")
45 49 private String website;
46 50  
  51 + @Schema(description = "QQ", example = "123456789")
  52 + @Size(max = 20, message = "QQ长度不能超过20个字符")
  53 + private String qq;
  54 +
  55 + @Schema(description = "wechat", example = "123456789")
  56 + @Size(max = 255, message = "微信长度不能超过255个字符")
  57 + private String wechat;
  58 +
  59 + @Schema(description = "email", example = "123456789@qq.com")
  60 + @Email(message = "邮箱格式不正确")
  61 + @Size(max = 255, message = "邮箱长度不能超过255个字符")
  62 + private String email;
  63 +
  64 + @Schema(description = "客户描述", example = "任意文字")
  65 + @Size(max = 4096, message = "客户描述长度不能超过255个字符")
  66 + private String description;
  67 +
47 68 @Schema(description = "备注", example = "随便")
48 69 private String remark;
49 70  
50   - // TODO wanwan:这个字段应该只有 RespVO 会有;创建和修改不传递;因为它会在“移交”里面做哈
51   - @Schema(description = "负责人的用户编号", example = "25682")
52   - @NotNull(message = "负责人不能为空")
53   - private Long ownerUserId;
54   -
55 71 @Schema(description = "地区编号", example = "20158")
56 72 private Long areaId;
57 73  
58 74 @Schema(description = "详细地址", example = "北京市海淀区")
59 75 private String detailAddress;
60 76  
61   - // TODO @芋艿:longitude、latitude 这两个字段删除;
62   - @Schema(description = "地理位置经度", example = "116.40341")
63   - private String longitude;
64   -
65   - @Schema(description = "地理位置维度", example = "39.92409")
66   - private String latitude;
67   -
68   - // TODO wanwan:这个字段应该只有 RespVO 会有;创建和修改不传递;
69   - @Schema(description = "最后跟进时间")
70   - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
71   - private LocalDateTime contactLastTime;
72   -
73 77 @Schema(description = "下次联系时间")
74 78 @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
75 79 private LocalDateTime contactNextTime;
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerCreateReqVO.java
... ... @@ -11,12 +11,4 @@ import lombok.ToString;
11 11 @ToString(callSuper = true)
12 12 public class CrmCustomerCreateReqVO extends CrmCustomerBaseVO {
13 13  
14   - // TODO @wanwan:类型应该是传递 List<Long>; 不过这个字段,默认新建的时候不传递,在“移交”功能里管理
15   - @Schema(description = "只读权限的用户编号数组")
16   - private String roUserIds;
17   -
18   - // TODO @wanwan:类型应该是传递 List<Long>; 不过这个字段,默认新建的时候不传递,在“移交”功能里管理
19   - @Schema(description = "读写权限的用户编号数组")
20   - private String rwUserIds;
21   -
22 14 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerExcelVO.java
... ... @@ -4,6 +4,7 @@ import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat;
4 4 import cn.iocoder.yudao.framework.excel.core.convert.DictConvert;
5 5 import cn.iocoder.yudao.module.infra.enums.DictTypeConstants;
6 6 import com.alibaba.excel.annotation.ExcelProperty;
  7 +import io.swagger.v3.oas.annotations.media.Schema;
7 8 import lombok.Data;
8 9  
9 10 import java.time.LocalDateTime;
... ... @@ -35,6 +36,18 @@ public class CrmCustomerExcelVO {
35 36 @DictFormat(DictTypeConstants.BOOLEAN_STRING)
36 37 private Boolean dealStatus;
37 38  
  39 + @ExcelProperty(value = "所属行业", converter = DictConvert.class)
  40 + @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_INDUSTRY)
  41 + private Integer industryId;
  42 +
  43 + @ExcelProperty(value = "客户等级", converter = DictConvert.class)
  44 + @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_LEVEL)
  45 + private Integer level;
  46 +
  47 + @ExcelProperty(value = "客户来源", converter = DictConvert.class)
  48 + @DictFormat(cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_SOURCE)
  49 + private Integer source;
  50 +
38 51 @ExcelProperty("手机")
39 52 private String mobile;
40 53  
... ... @@ -44,6 +57,18 @@ public class CrmCustomerExcelVO {
44 57 @ExcelProperty("网址")
45 58 private String website;
46 59  
  60 + @ExcelProperty("QQ")
  61 + private String qq;
  62 +
  63 + @ExcelProperty("wechat")
  64 + private String wechat;
  65 +
  66 + @ExcelProperty("email")
  67 + private String email;
  68 +
  69 + @ExcelProperty("客户描述")
  70 + private String description;
  71 +
47 72 @ExcelProperty("备注")
48 73 private String remark;
49 74  
... ... @@ -56,12 +81,6 @@ public class CrmCustomerExcelVO {
56 81 @ExcelProperty("详细地址")
57 82 private String detailAddress;
58 83  
59   - @ExcelProperty("地理位置经度")
60   - private String longitude;
61   -
62   - @ExcelProperty("地理位置维度")
63   - private String latitude;
64   -
65 84 @ExcelProperty("最后跟进时间")
66 85 private LocalDateTime contactLastTime;
67 86  
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerExportReqVO.java
... ... @@ -14,10 +14,4 @@ public class CrmCustomerExportReqVO {
14 14 @Schema(description = "手机", example = "18000000000")
15 15 private String mobile;
16 16  
17   - @Schema(description = "电话", example = "18000000000")
18   - private String telephone;
19   -
20   - @Schema(description = "网址", example = "https://www.baidu.com")
21   - private String website;
22   -
23 17 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerPageReqVO.java
... ... @@ -18,13 +18,5 @@ public class CrmCustomerPageReqVO extends PageParam {
18 18 @Schema(description = "手机", example = "18000000000")
19 19 private String mobile;
20 20  
21   - // TODO @wanwan:这个字段不需要哈
22   - @Schema(description = "电话", example = "18000000000")
23   - private String telephone;
24   -
25   - // TODO @wanwan:这个字段不需要哈
26   - @Schema(description = "网址", example = "https://www.baidu.com")
27   - private String website;
28   -
29 21 // TODO @芋艿:场景;
30 22 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerRespVO.java
... ... @@ -4,9 +4,12 @@ import io.swagger.v3.oas.annotations.media.Schema;
4 4 import lombok.Data;
5 5 import lombok.EqualsAndHashCode;
6 6 import lombok.ToString;
  7 +import org.springframework.format.annotation.DateTimeFormat;
7 8  
8 9 import java.time.LocalDateTime;
9 10  
  11 +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
  12 +
10 13 @Schema(description = "管理后台 - 客户 Response VO")
11 14 @Data
12 15 @EqualsAndHashCode(callSuper = true)
... ... @@ -16,9 +19,22 @@ public class CrmCustomerRespVO extends CrmCustomerBaseVO {
16 19 @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13563")
17 20 private Long id;
18 21  
  22 + @Schema(description = "跟进状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
  23 + private Boolean followUpStatus;
  24 +
  25 + @Schema(description = "锁定状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
  26 + private Boolean lockStatus;
  27 +
19 28 @Schema(description = "成交状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "true")
20 29 private Boolean dealStatus;
21 30  
  31 + @Schema(description = "负责人的用户编号", example = "25682")
  32 + private Long ownerUserId;
  33 +
  34 + @Schema(description = "最后跟进时间")
  35 + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
  36 + private LocalDateTime contactLastTime;
  37 +
22 38 @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
23 39 private LocalDateTime createTime;
24 40  
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/controller/admin/customer/vo/CrmCustomerUpdateReqVO.java
... ... @@ -17,11 +17,4 @@ public class CrmCustomerUpdateReqVO extends CrmCustomerBaseVO {
17 17 @NotNull(message = "编号不能为空")
18 18 private Long id;
19 19  
20   - // TODO @wanwan:下面两个字段,同 CrmCustomerCreateReqVO
21   - @Schema(description = "只读权限的用户编号数组")
22   - private String roUserIds;
23   -
24   - @Schema(description = "读写权限的用户编号数组")
25   - private String rwUserIds;
26   -
27 20 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/dataobject/customer/CrmCustomerDO.java
1 1 package cn.iocoder.yudao.module.crm.dal.dataobject.customer;
2 2  
3 3 import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
  4 +import cn.iocoder.yudao.framework.mybatis.core.type.LongListTypeHandler;
4 5 import com.baomidou.mybatisplus.annotation.KeySequence;
  6 +import com.baomidou.mybatisplus.annotation.TableField;
5 7 import com.baomidou.mybatisplus.annotation.TableId;
6 8 import com.baomidou.mybatisplus.annotation.TableName;
7 9 import lombok.*;
8 10  
9 11 import java.time.LocalDateTime;
  12 +import java.util.List;
10 13  
11 14 // TODO 芋艿:调整下字段
  15 +
12 16 /**
13 17 * 客户 DO
14 18 *
15 19 * @author Wanwan
16 20 */
17   -@TableName("crm_customer")
  21 +@TableName(value = "crm_customer", autoResultMap = true)
18 22 @KeySequence("crm_customer_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
19 23 @Data
20 24 @EqualsAndHashCode(callSuper = true)
... ... @@ -46,6 +50,21 @@ public class CrmCustomerDO extends BaseDO {
46 50 */
47 51 private Boolean dealStatus;
48 52 /**
  53 + * 所属行业
  54 + * 对应字典 {@link cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_INDUSTRY}
  55 + */
  56 + private Integer industryId;
  57 + /**
  58 + * 客户等级
  59 + * 对应字典 {@link cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_LEVEL}
  60 + */
  61 + private Integer level;
  62 + /**
  63 + * 客户来源
  64 + * 对应字典 {@link cn.iocoder.yudao.module.crm.enums.DictTypeConstants.CRM_CUSTOMER_SOURCE}
  65 + */
  66 + private Integer source;
  67 + /**
49 68 * 手机
50 69 */
51 70 private String mobile;
... ... @@ -58,6 +77,22 @@ public class CrmCustomerDO extends BaseDO {
58 77 */
59 78 private String website;
60 79 /**
  80 + * QQ
  81 + */
  82 + private String qq;
  83 + /**
  84 + * wechat
  85 + */
  86 + private String wechat;
  87 + /**
  88 + * email
  89 + */
  90 + private String email;
  91 + /**
  92 + * 客户描述
  93 + */
  94 + private String description;
  95 + /**
61 96 * 备注
62 97 */
63 98 private String remark;
... ... @@ -65,15 +100,16 @@ public class CrmCustomerDO extends BaseDO {
65 100 * 负责人的用户编号
66 101 */
67 102 private Long ownerUserId;
68   - // TODO @wanwan:下面两个字段,使用 List<Long>,然后使用 typeHandler = LongListTypeHandler 解决持久化的问题;注意类上需要加 autoResultMap = true
69 103 /**
70 104 * 只读权限的用户编号数组
71 105 */
72   - private String roUserIds;
  106 + @TableField(typeHandler = LongListTypeHandler.class)
  107 + private List<Long> roUserIds;
73 108 /**
74 109 * 读写权限的用户编号数组
75 110 */
76   - private String rwUserIds;
  111 + @TableField(typeHandler = LongListTypeHandler.class)
  112 + private List<Long> rwUserIds;
77 113 /**
78 114 * 地区编号
79 115 */
... ... @@ -82,15 +118,6 @@ public class CrmCustomerDO extends BaseDO {
82 118 * 详细地址
83 119 */
84 120 private String detailAddress;
85   - // TODO @wanwan:下面两个字段:删除
86   - /**
87   - * 地理位置经度
88   - */
89   - private String longitude;
90   - /**
91   - * 地理位置维度
92   - */
93   - private String latitude;
94 121 /**
95 122 * 最后跟进时间
96 123 */
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/dal/mysql/customer/CrmCustomerMapper.java
... ... @@ -19,11 +19,10 @@ import java.util.List;
19 19 public interface CrmCustomerMapper extends BaseMapperX<CrmCustomerDO> {
20 20  
21 21 default PageResult<CrmCustomerDO> selectPage(CrmCustomerPageReqVO reqVO) {
  22 + // TODO @Wanwan 填充负责人,所属部门字段
22 23 return selectPage(reqVO, new LambdaQueryWrapperX<CrmCustomerDO>()
23 24 .likeIfPresent(CrmCustomerDO::getName, reqVO.getName())
24 25 .eqIfPresent(CrmCustomerDO::getMobile, reqVO.getMobile())
25   - .eqIfPresent(CrmCustomerDO::getTelephone, reqVO.getTelephone())
26   - .likeIfPresent(CrmCustomerDO::getWebsite, reqVO.getWebsite())
27 26 .orderByDesc(CrmCustomerDO::getId));
28 27 }
29 28  
... ... @@ -31,8 +30,6 @@ public interface CrmCustomerMapper extends BaseMapperX&lt;CrmCustomerDO&gt; {
31 30 return selectList(new LambdaQueryWrapperX<CrmCustomerDO>()
32 31 .likeIfPresent(CrmCustomerDO::getName, reqVO.getName())
33 32 .eqIfPresent(CrmCustomerDO::getMobile, reqVO.getMobile())
34   - .eqIfPresent(CrmCustomerDO::getTelephone, reqVO.getTelephone())
35   - .likeIfPresent(CrmCustomerDO::getWebsite, reqVO.getWebsite())
36 33 .orderByDesc(CrmCustomerDO::getId));
37 34 }
38 35  
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/clue/CrmClueServiceImpl.java
... ... @@ -39,7 +39,7 @@ public class CrmClueServiceImpl implements CrmClueService {
39 39 @Override
40 40 public Long createClue(CrmClueCreateReqVO createReqVO) {
41 41 // 校验客户是否存在
42   - validateCustomerExists(createReqVO.getCustomerId());
  42 + customerService.validateCustomer(createReqVO.getCustomerId());
43 43 // 插入
44 44 CrmClueDO clue = CrmClueConvert.INSTANCE.convert(createReqVO);
45 45 clueMapper.insert(clue);
... ... @@ -52,7 +52,7 @@ public class CrmClueServiceImpl implements CrmClueService {
52 52 // 校验存在
53 53 validateClueExists(updateReqVO.getId());
54 54 // 校验客户是否存在
55   - validateCustomerExists(updateReqVO.getCustomerId());
  55 + customerService.validateCustomer(updateReqVO.getCustomerId());
56 56  
57 57 // 更新
58 58 CrmClueDO updateObj = CrmClueConvert.INSTANCE.convert(updateReqVO);
... ... @@ -96,16 +96,4 @@ public class CrmClueServiceImpl implements CrmClueService {
96 96 return clueMapper.selectList(exportReqVO);
97 97 }
98 98  
99   - // TODO @wanwan:可以在 CrmClueServiceImpl 中,增加一个方法,用于校验客户是否存在;validateCustomer;然后其它方法可以调用它。不过要注意,需要把 CustomerDO 返回,因为其它模块可能要它的信息
100   - /**
101   - * 校验客户是否存在
102   - *
103   - * @param customerId 客户id
104   - */
105   - private void validateCustomerExists(Long customerId) {
106   - if (customerService.getCustomer(customerId) == null) {
107   - throw exception(CUSTOMER_NOT_EXISTS);
108   - }
109   - }
110   -
111 99 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerService.java
... ... @@ -72,4 +72,12 @@ public interface CrmCustomerService {
72 72 */
73 73 List<CrmCustomerDO> getCustomerList(CrmCustomerExportReqVO exportReqVO);
74 74  
  75 + /**
  76 + * 校验客户是否存在
  77 + *
  78 + * @param customerId 客户id
  79 + * @return
  80 + */
  81 + CrmCustomerDO validateCustomer(Long customerId);
  82 +
75 83 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/main/java/cn/iocoder/yudao/module/crm/service/customer/CrmCustomerServiceImpl.java
1 1 package cn.iocoder.yudao.module.crm.service.customer;
2 2  
  3 +import cn.iocoder.yudao.module.system.api.dept.DeptApi;
3 4 import org.springframework.stereotype.Service;
4 5 import javax.annotation.Resource;
5 6 import org.springframework.validation.annotation.Validated;
... ... @@ -29,6 +30,8 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
29 30  
30 31 @Resource
31 32 private CrmCustomerMapper customerMapper;
  33 + @Resource
  34 + private DeptApi deptApi;
32 35  
33 36 @Override
34 37 public Long createCustomer(CrmCustomerCreateReqVO createReqVO) {
... ... @@ -85,4 +88,18 @@ public class CrmCustomerServiceImpl implements CrmCustomerService {
85 88 return customerMapper.selectList(exportReqVO);
86 89 }
87 90  
  91 + /**
  92 + * 校验客户是否存在
  93 + *
  94 + * @param customerId 客户id
  95 + * @return
  96 + */
  97 + @Override
  98 + public CrmCustomerDO validateCustomer(Long customerId) {
  99 + CrmCustomerDO customer = getCustomer(customerId);
  100 + if (Objects.isNull(customer)) {
  101 + throw exception(CUSTOMER_NOT_EXISTS);
  102 + }
  103 + return customer;
  104 + }
88 105 }
... ...
yudao-module-crm/yudao-module-crm-biz/src/test/resources/sql/create_tables.sql
... ... @@ -113,8 +113,6 @@ CREATE TABLE IF NOT EXISTS &quot;crm_customer&quot; (
113 113 "rw_user_ids" varchar,
114 114 "area_id" bigint,
115 115 "detail_address" varchar,
116   - "longitude" varchar,
117   - "latitude" varchar,
118 116 "contact_last_time" varchar,
119 117 "contact_next_time" varchar,
120 118 "creator" varchar DEFAULT '',
... ...