From b97b7e59bfcb3ea99b18f04f8174caed44ae9f3b Mon Sep 17 00:00:00 2001 From: hupeng Date: Sat, 9 Nov 2024 14:38:37 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8F=91=E9=82=AE=E4=BB=B6?= =?UTF-8?q?=E3=80=81=E5=8F=91=E7=9F=AD=E4=BF=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- yshop-crm/sql/yshop-crm.sql | 42 ++++++++----- .../framework/common/enums/UserTypeEnum.java | 3 +- .../crmcustomer/CrmCustomerController.java | 18 +++++- .../crmcustomer/vo/MailTemplateSendVO.java | 28 +++++++++ .../crmcustomer/vo/SmsTemplateSendVO.java | 28 +++++++++ .../crmcustomer/CrmCustomerService.java | 18 +++++- .../crmcustomer/CrmCustomerServiceImpl.java | 61 ++++++++++++++++++- 7 files changed, 174 insertions(+), 24 deletions(-) create mode 100644 yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/vo/MailTemplateSendVO.java create mode 100644 yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/vo/SmsTemplateSendVO.java diff --git a/yshop-crm/sql/yshop-crm.sql b/yshop-crm/sql/yshop-crm.sql index d38165f..61793d1 100644 --- a/yshop-crm/sql/yshop-crm.sql +++ b/yshop-crm/sql/yshop-crm.sql @@ -11,7 +11,7 @@ Target Server Version : 80027 File Encoding : 65001 - Date: 09/10/2024 15:54:16 + Date: 21/10/2024 16:47:05 */ SET NAMES utf8mb4; @@ -1574,7 +1574,7 @@ CREATE TABLE `system_login_log` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=4645 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统访问记录'; +) ENGINE=InnoDB AUTO_INCREMENT=4650 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='系统访问记录'; -- ---------------------------- -- Records of system_login_log @@ -1601,6 +1601,11 @@ INSERT INTO `system_login_log` VALUES (4641, 200, '', 1, 2, 'admin', 0, '0:0:0:0 INSERT INTO `system_login_log` VALUES (4642, 100, '', 1, 2, 'admin', 0, '0:0:0:0:0:0:0:1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1 wechatdevtools/1.06.2307260 MicroMessenger/8.0.5 Language/zh_CN webview/', NULL, '2024-10-07 15:35:34', NULL, '2024-10-07 15:35:34', b'0', 0); INSERT INTO `system_login_log` VALUES (4643, 100, '', 1, 2, 'admin', 0, '0:0:0:0:0:0:0:1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36', NULL, '2024-10-07 15:36:20', NULL, '2024-10-07 15:36:20', b'0', 0); INSERT INTO `system_login_log` VALUES (4644, 200, '', 1, 2, 'admin', 0, '0:0:0:0:0:0:0:1', 'Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1 wechatdevtools/1.06.2307260 MicroMessenger/8.0.5 Language/zh_CN webview/', '1', '2024-10-08 15:22:49', '1', '2024-10-08 15:22:49', b'0', 0); +INSERT INTO `system_login_log` VALUES (4645, 200, '', 1, 2, 'admin', 0, '0:0:0:0:0:0:0:1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36', '1', '2024-10-10 11:23:24', '1', '2024-10-10 11:23:24', b'0', 0); +INSERT INTO `system_login_log` VALUES (4646, 100, '', 1, 2, 'admin', 0, '0:0:0:0:0:0:0:1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36', NULL, '2024-10-10 11:23:32', NULL, '2024-10-10 11:23:32', b'0', 0); +INSERT INTO `system_login_log` VALUES (4647, 100, '', 1, 2, 'admin', 0, '0:0:0:0:0:0:0:1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36', NULL, '2024-10-18 09:23:23', NULL, '2024-10-18 09:23:23', b'0', 0); +INSERT INTO `system_login_log` VALUES (4648, 100, '', 1, 2, 'admin', 0, '0:0:0:0:0:0:0:1', 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36', NULL, '2024-10-21 10:20:41', NULL, '2024-10-21 10:20:41', b'0', 0); +INSERT INTO `system_login_log` VALUES (4649, 100, '', 1, 2, 'admin', 0, '0:0:0:0:0:0:0:1', 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Mobile Safari/537.36 wechatdevtools/1.06.2307260 MicroMessenger/8.0.5 Language/zh_CN webview/', NULL, '2024-10-21 10:43:26', NULL, '2024-10-21 10:43:26', b'0', 0); COMMIT; -- ---------------------------- @@ -1743,7 +1748,7 @@ INSERT INTO `system_menu` VALUES (103, '部门管理', '', 2, 4, 1, 'dept', 'ant INSERT INTO `system_menu` VALUES (104, '岗位管理', '', 2, 5, 1, 'post', 'fa:address-book-o', 'system/post/index', 'SystemPost', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-05-31 17:01:40', b'0'); INSERT INTO `system_menu` VALUES (105, '字典管理', '', 2, 6, 1, 'dict', 'ep:collection', 'system/dict/index', 'SystemDictType', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-05-31 17:01:51', b'0'); INSERT INTO `system_menu` VALUES (106, '配置管理', '', 2, 6, 2, 'config', 'fa:connectdevelop', 'infra/config/index', 'InfraConfig', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-07-24 17:36:48', b'1'); -INSERT INTO `system_menu` VALUES (107, '新闻公告', '', 2, 8, 1, 'notice', 'fa-solid:newspaper', 'system/notice/index', 'SystemNotice', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-07-24 17:31:53', b'1'); +INSERT INTO `system_menu` VALUES (107, '通知管理', '', 2, 8, 2426, 'notice', 'fa-solid:newspaper', 'system/notice/index', 'SystemNotice', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-10-21 10:32:28', b'0'); INSERT INTO `system_menu` VALUES (108, '审计日志', '', 1, 9, 1, 'log', 'ep:document-copy', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-05-31 17:02:22', b'0'); INSERT INTO `system_menu` VALUES (109, '令牌管理', '', 2, 2, 1261, 'token', 'fa:key', 'system/oauth2/token/index', 'SystemTokenClient', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-05-31 17:02:32', b'0'); INSERT INTO `system_menu` VALUES (110, '定时任务', '', 2, 12, 2, 'job', 'fa-solid:tasks', 'infra/job/index', 'InfraJob', 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-05-31 17:02:43', b'0'); @@ -1790,10 +1795,10 @@ INSERT INTO `system_menu` VALUES (1032, '配置新增', 'infra:config:create', 3 INSERT INTO `system_menu` VALUES (1033, '配置修改', 'infra:config:update', 3, 3, 106, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-07-24 17:36:32', b'1'); INSERT INTO `system_menu` VALUES (1034, '配置删除', 'infra:config:delete', 3, 4, 106, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-07-24 17:36:36', b'1'); INSERT INTO `system_menu` VALUES (1035, '配置导出', 'infra:config:export', 3, 5, 106, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2024-07-24 17:36:41', b'1'); -INSERT INTO `system_menu` VALUES (1036, '公告查询', 'system:notice:query', 3, 1, 107, '#', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2024-07-24 17:31:40', b'1'); -INSERT INTO `system_menu` VALUES (1037, '公告新增', 'system:notice:create', 3, 2, 107, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-07-24 17:31:43', b'1'); -INSERT INTO `system_menu` VALUES (1038, '公告修改', 'system:notice:update', 3, 3, 107, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-07-24 17:31:46', b'1'); -INSERT INTO `system_menu` VALUES (1039, '公告删除', 'system:notice:delete', 3, 4, 107, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-07-24 17:31:49', b'1'); +INSERT INTO `system_menu` VALUES (1036, '公告查询', 'system:notice:query', 3, 1, 107, '#', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2024-10-21 10:25:57', b'0'); +INSERT INTO `system_menu` VALUES (1037, '公告新增', 'system:notice:create', 3, 2, 107, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-10-21 10:26:00', b'0'); +INSERT INTO `system_menu` VALUES (1038, '公告修改', 'system:notice:update', 3, 3, 107, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-10-21 10:26:03', b'0'); +INSERT INTO `system_menu` VALUES (1039, '公告删除', 'system:notice:delete', 3, 4, 107, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '1', '2024-10-21 10:26:08', b'0'); INSERT INTO `system_menu` VALUES (1040, '操作查询', 'system:operate-log:query', 3, 1, 500, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); INSERT INTO `system_menu` VALUES (1042, '日志导出', 'system:operate-log:export', 3, 2, 500, '', '', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); INSERT INTO `system_menu` VALUES (1043, '登录查询', 'system:login-log:query', 3, 1, 501, '#', '#', '', NULL, 0, b'1', b'1', b'1', 'admin', '2021-01-05 17:03:48', '', '2022-04-20 17:03:10', b'0'); @@ -2075,7 +2080,7 @@ INSERT INTO `system_menu` VALUES (2422, '合同创建', 'crm:contract:create', 3 INSERT INTO `system_menu` VALUES (2423, '合同更新', 'crm:contract:update', 3, 3, 2420, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-08-05 11:19:21', '', '2024-08-05 11:19:21', b'0'); INSERT INTO `system_menu` VALUES (2424, '合同删除', 'crm:contract:delete', 3, 4, 2420, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-08-05 11:19:21', '', '2024-08-05 11:19:21', b'0'); INSERT INTO `system_menu` VALUES (2425, '合同导出', 'crm:contract:export', 3, 5, 2420, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-08-05 11:19:21', '', '2024-08-05 11:19:21', b'0'); -INSERT INTO `system_menu` VALUES (2426, '审批流程', '', 1, 60, 0, '/flow', 'ep:flag', '', '', 0, b'1', b'1', b'1', '1', '2024-08-07 16:53:15', '1', '2024-08-15 20:15:57', b'0'); +INSERT INTO `system_menu` VALUES (2426, 'CRM配置', '', 1, 60, 0, '/flow', 'ep:flag', '', '', 0, b'1', b'1', b'1', '1', '2024-08-07 16:53:15', '1', '2024-10-21 10:29:47', b'0'); INSERT INTO `system_menu` VALUES (2427, '审批管理', '', 2, 0, 2426, 'flow', 'ep:caret-right', 'crm/crmflow/index', 'CrmFlow', 0, b'1', b'1', b'1', '', '2024-08-07 17:40:38', '1', '2024-08-07 18:19:14', b'0'); INSERT INTO `system_menu` VALUES (2428, '审批流程查询', 'crm:flow:query', 3, 1, 2427, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-08-07 17:40:38', '', '2024-08-07 17:40:38', b'0'); INSERT INTO `system_menu` VALUES (2429, '审批流程创建', 'crm:flow:create', 3, 2, 2427, '', '', '', NULL, 0, b'1', b'1', b'1', '', '2024-08-07 17:40:38', '', '2024-08-07 17:40:38', b'0'); @@ -2118,7 +2123,7 @@ CREATE TABLE `system_notice` ( `deleted` bit(1) NOT NULL DEFAULT b'0' COMMENT '是否删除', `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知公告表'; +) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='通知公告表'; -- ---------------------------- -- Records of system_notice @@ -2127,6 +2132,7 @@ BEGIN; INSERT INTO `system_notice` VALUES (1, 'B2C单商户微服务-统计报表功能正式发布!', 'https://apidc.yixiang.co/admin-api/infra/file/4/get/ad0cc3947ff9a41caceab6207e13982beed27559b9bfc311128e5992cc702056.jpg', '

新版本内容133

', 1, 0, 'admin', '2021-01-05 17:03:48', '1', '2024-05-06 17:58:44', b'0', 1); INSERT INTO `system_notice` VALUES (2, '618最后三天,你还不来', 'https://apidc.yixiang.co/admin-api/infra/file/4/get/ad0cc3947ff9a41caceab6207e13982beed27559b9bfc311128e5992cc702056.jpg', '

618最后三天,你还不来618最后三天,你还不来618最后三天,你还不来618最后三天,你还不来

', 2, 0, 'admin', '2021-01-05 17:03:48', '1', '2024-05-31 18:02:57', b'0', 1); INSERT INTO `system_notice` VALUES (4, 'YSHOP-PRO 预售开始啦', NULL, '

哈哈哈哈123

', 1, 0, '110', '2022-02-22 01:01:25', '1', '2023-07-26 14:29:42', b'0', 121); +INSERT INTO `system_notice` VALUES (5, '新通知', ' http://localhost:48081/admin-api/infra/file/4/get/26d4848ac60a8c0c6ab609ecad30dd1741600443304f6a5b3366d248a119cd14.png', '

2222

', 1, 0, '1', '2024-10-21 14:59:16', '1', '2024-10-21 14:59:16', b'0', 0); COMMIT; -- ---------------------------- @@ -2217,7 +2223,7 @@ CREATE TABLE `system_oauth2_access_token` ( `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', `shop_id` bigint DEFAULT '0' COMMENT '门店id', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=4727 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='OAuth2 访问令牌'; +) ENGINE=InnoDB AUTO_INCREMENT=4731 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='OAuth2 访问令牌'; -- ---------------------------- -- Records of system_oauth2_access_token @@ -2233,7 +2239,11 @@ INSERT INTO `system_oauth2_access_token` VALUES (4722, 1, 2, '{\"nickname\":\"ys INSERT INTO `system_oauth2_access_token` VALUES (4723, 100, 2, '{\"nickname\":\"yixiang\",\"deptId\":\"104\"}', '6f51af87bdc0448cac32d99d41186170', 'c8f638e4c03740f3baf6dffe17a036b7', 'default', NULL, '2025-05-02 19:19:48', NULL, '2024-10-06 11:19:48', NULL, '2024-10-06 11:32:18', b'1', 0, 0); INSERT INTO `system_oauth2_access_token` VALUES (4724, 129, 2, '{\"nickname\":\"yshop001\",\"deptId\":\"103\"}', 'a0cb47cb75b442a1bfbd0898f737e79e', '6cbb9ffff70c45e5b9311809fc30d901', 'default', NULL, '2025-05-02 19:32:34', NULL, '2024-10-06 11:32:34', NULL, '2024-10-07 15:24:46', b'1', 0, 0); INSERT INTO `system_oauth2_access_token` VALUES (4725, 1, 2, '{\"nickname\":\"yshop\",\"deptId\":\"100\"}', '74403f122b3147c0b5d240514b139ed7', 'f6992c4265db42b980d2e3a9194eff4c', 'default', NULL, '2025-05-03 23:35:34', NULL, '2024-10-07 15:35:34', NULL, '2024-10-08 15:22:48', b'1', 0, 0); -INSERT INTO `system_oauth2_access_token` VALUES (4726, 1, 2, '{\"nickname\":\"yshop\",\"deptId\":\"100\"}', 'a281b2bf024c4f01a11e8aed10790843', '6d94de083b77465089488f9f01f67f0b', 'default', NULL, '2025-05-03 23:36:20', NULL, '2024-10-07 15:36:20', NULL, '2024-10-07 15:36:20', b'0', 0, 0); +INSERT INTO `system_oauth2_access_token` VALUES (4726, 1, 2, '{\"nickname\":\"yshop\",\"deptId\":\"100\"}', 'a281b2bf024c4f01a11e8aed10790843', '6d94de083b77465089488f9f01f67f0b', 'default', NULL, '2025-05-03 23:36:20', NULL, '2024-10-07 15:36:20', NULL, '2024-10-10 11:23:23', b'1', 0, 0); +INSERT INTO `system_oauth2_access_token` VALUES (4727, 1, 2, '{\"nickname\":\"yshop\",\"deptId\":\"100\"}', '2faa8cfde8fa456c874c4c20fa156569', '970b93c3071548a1a908eb81f5c232d0', 'default', NULL, '2025-05-06 19:23:32', NULL, '2024-10-10 11:23:32', NULL, '2024-10-10 11:23:32', b'0', 0, 0); +INSERT INTO `system_oauth2_access_token` VALUES (4728, 1, 2, '{\"nickname\":\"yshop\",\"deptId\":\"100\"}', 'f7572f13fd624828933377a7ca565da6', '1cc82e0c20eb4ca5a8c91221ad53a28c', 'default', NULL, '2025-05-14 17:23:23', NULL, '2024-10-18 09:23:23', NULL, '2024-10-18 09:23:23', b'0', 0, 0); +INSERT INTO `system_oauth2_access_token` VALUES (4729, 1, 2, '{\"nickname\":\"yshop\",\"deptId\":\"100\"}', 'd90a0e21e3cc494b828d98955464de9f', '445a56bd0f144577901364fe7e322cf2', 'default', NULL, '2025-05-17 18:20:41', NULL, '2024-10-21 10:20:41', NULL, '2024-10-21 10:20:41', b'0', 0, 0); +INSERT INTO `system_oauth2_access_token` VALUES (4730, 1, 2, '{\"nickname\":\"yshop\",\"deptId\":\"100\"}', '61445b738f7b40508e55c4a6e451bbb6', 'd8daf41829f74874b60c81b28f3be382', 'default', NULL, '2025-05-17 18:43:26', NULL, '2024-10-21 10:43:26', NULL, '2024-10-21 10:43:26', b'0', 0, 0); COMMIT; -- ---------------------------- @@ -2351,7 +2361,7 @@ CREATE TABLE `system_oauth2_refresh_token` ( `tenant_id` bigint NOT NULL DEFAULT '0' COMMENT '租户编号', `shop_id` bigint DEFAULT '0' COMMENT '门店ID', PRIMARY KEY (`id`) USING BTREE -) ENGINE=InnoDB AUTO_INCREMENT=3041 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='OAuth2 刷新令牌'; +) ENGINE=InnoDB AUTO_INCREMENT=3045 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='OAuth2 刷新令牌'; -- ---------------------------- -- Records of system_oauth2_refresh_token @@ -2367,7 +2377,11 @@ INSERT INTO `system_oauth2_refresh_token` VALUES (3036, 1, 'aff0fc36fc3c4294ba89 INSERT INTO `system_oauth2_refresh_token` VALUES (3037, 100, 'c8f638e4c03740f3baf6dffe17a036b7', 2, 'default', NULL, '2024-10-06 23:19:48', NULL, '2024-10-06 11:19:48', NULL, '2024-10-06 11:32:18', b'1', 0, 0); INSERT INTO `system_oauth2_refresh_token` VALUES (3038, 129, '6cbb9ffff70c45e5b9311809fc30d901', 2, 'default', NULL, '2024-10-06 23:32:34', NULL, '2024-10-06 11:32:34', NULL, '2024-10-07 15:24:47', b'1', 0, 0); INSERT INTO `system_oauth2_refresh_token` VALUES (3039, 1, 'f6992c4265db42b980d2e3a9194eff4c', 2, 'default', NULL, '2024-10-08 03:35:34', NULL, '2024-10-07 15:35:34', NULL, '2024-10-08 15:22:48', b'1', 0, 0); -INSERT INTO `system_oauth2_refresh_token` VALUES (3040, 1, '6d94de083b77465089488f9f01f67f0b', 2, 'default', NULL, '2024-10-08 03:36:20', NULL, '2024-10-07 15:36:20', NULL, '2024-10-07 15:36:20', b'0', 0, 0); +INSERT INTO `system_oauth2_refresh_token` VALUES (3040, 1, '6d94de083b77465089488f9f01f67f0b', 2, 'default', NULL, '2024-10-08 03:36:20', NULL, '2024-10-07 15:36:20', NULL, '2024-10-10 11:23:23', b'1', 0, 0); +INSERT INTO `system_oauth2_refresh_token` VALUES (3041, 1, '970b93c3071548a1a908eb81f5c232d0', 2, 'default', NULL, '2024-10-10 23:23:32', NULL, '2024-10-10 11:23:32', NULL, '2024-10-10 11:23:32', b'0', 0, 0); +INSERT INTO `system_oauth2_refresh_token` VALUES (3042, 1, '1cc82e0c20eb4ca5a8c91221ad53a28c', 2, 'default', NULL, '2024-10-18 21:23:23', NULL, '2024-10-18 09:23:23', NULL, '2024-10-18 09:23:23', b'0', 0, 0); +INSERT INTO `system_oauth2_refresh_token` VALUES (3043, 1, '445a56bd0f144577901364fe7e322cf2', 2, 'default', NULL, '2024-10-21 22:20:41', NULL, '2024-10-21 10:20:41', NULL, '2024-10-21 10:20:41', b'0', 0, 0); +INSERT INTO `system_oauth2_refresh_token` VALUES (3044, 1, 'd8daf41829f74874b60c81b28f3be382', 2, 'default', NULL, '2024-10-21 22:43:26', NULL, '2024-10-21 10:43:26', NULL, '2024-10-21 10:43:26', b'0', 0, 0); COMMIT; -- ---------------------------- @@ -4267,7 +4281,7 @@ CREATE TABLE `system_users` ( -- Records of system_users -- ---------------------------- BEGIN; -INSERT INTO `system_users` VALUES (1, 'admin', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', 'yshop', '管理员', 100, '[1]', 'yshop@yixaing.co', '18000000000', 1, 'https://app2.yixiang.co/avatar/20200705181403641316.png', 0, '0:0:0:0:0:0:0:1', '2024-10-07 15:36:20', 'admin', '2021-01-05 17:03:47', NULL, '2024-10-07 15:36:20', b'0', 1); +INSERT INTO `system_users` VALUES (1, 'admin', '$2a$10$mRMIYLDtRHlf6.9ipiqH1.Z.bh/R9dO9d5iHiGYPigi6r5KOoR2Wm', 'yshop', '管理员', 100, '[1]', 'yshop@yixaing.co', '18000000000', 1, 'https://app2.yixiang.co/avatar/20200705181403641316.png', 0, '0:0:0:0:0:0:0:1', '2024-10-21 10:43:26', 'admin', '2021-01-05 17:03:47', NULL, '2024-10-21 10:43:26', b'0', 1); INSERT INTO `system_users` VALUES (100, 'yshop', '$2a$04$DDHxxwc0jNmsS6.h5s5gpu.QxAaWMMMiOemVK6UO6R87UbfzDOu7a', 'yixiang', '不要吓我', 104, '[1]', 'yshop@iocoder.cn', '15601691300', 1, '', 0, '0:0:0:0:0:0:0:1', '2024-10-06 11:19:48', '', '2021-01-07 09:07:17', NULL, '2024-10-06 11:19:48', b'0', 1); INSERT INTO `system_users` VALUES (126, 'yixiang001', '$2a$04$JTIqo.OqDIy/QnGD8DyalOuD2S10Rdz20abG1Vw7uaU5xDjBqEWky', '意向餐饮管理员', '', 110, '[]', '', '18888888888', 0, '', 0, '0:0:0:0:0:0:0:1', '2024-03-13 18:10:56', '1', '2023-09-05 10:23:17', NULL, '2024-03-13 18:10:56', b'0', 0); INSERT INTO `system_users` VALUES (127, 'myshop', '$2a$04$oqIyvsv5yVcmLL0PE3V2C.swndkOqFAAMabSeghaCWm2pUHJTp78a', 'yshop-drink', NULL, NULL, NULL, '', '18777777777', 0, '', 0, '0:0:0:0:0:0:0:1', '2024-04-02 08:18:32', '1', '2024-03-26 18:14:45', NULL, '2024-07-24 17:28:10', b'0', 151); diff --git a/yshop-crm/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/UserTypeEnum.java b/yshop-crm/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/UserTypeEnum.java index 35b9543..bc3455a 100644 --- a/yshop-crm/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/UserTypeEnum.java +++ b/yshop-crm/yshop-framework/yshop-common/src/main/java/co/yixiang/yshop/framework/common/enums/UserTypeEnum.java @@ -15,7 +15,8 @@ import java.util.Arrays; public enum UserTypeEnum implements IntArrayValuable { MEMBER(1, "会员"), // 面向 c 端,普通用户 - ADMIN(2, "管理员"); // 面向 b 端,管理后台 + ADMIN(2, "管理员"), // 面向 b 端,管理后台 + CUSTOMER(3, "客户"); //客户 public static final int[] ARRAYS = Arrays.stream(values()).mapToInt(UserTypeEnum::getValue).toArray(); diff --git a/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/CrmCustomerController.java b/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/CrmCustomerController.java index 6d51687..3345a78 100644 --- a/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/CrmCustomerController.java +++ b/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/CrmCustomerController.java @@ -6,9 +6,7 @@ import co.yixiang.yshop.framework.common.pojo.PageParam; import co.yixiang.yshop.framework.common.pojo.PageResult; import co.yixiang.yshop.framework.common.util.object.BeanUtils; import co.yixiang.yshop.framework.excel.core.util.ExcelUtils; -import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.CrmCustomerPageReqVO; -import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.CrmCustomerRespVO; -import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.CrmCustomerSaveReqVO; +import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.*; import co.yixiang.yshop.module.crm.dal.dataobject.crmcustomer.CrmCustomerDO; import co.yixiang.yshop.module.crm.service.crmcustomer.CrmCustomerService; import io.swagger.v3.oas.annotations.Operation; @@ -114,6 +112,20 @@ public class CrmCustomerController { BeanUtils.toBean(list, CrmCustomerRespVO.class)); } + @PostMapping("/send-sms") + @Operation(summary = "发送短信") + public CommonResult sendSms(@Valid @RequestBody SmsTemplateSendVO sendVO) { + customerService.sendSms(sendVO); + return success(true); + } + + @PostMapping("/send-mail") + @Operation(summary = "发送邮件") + public CommonResult sendMail(@Valid @RequestBody MailTemplateSendVO sendVO) { + customerService.sendMail(sendVO); + return success(true); + } + } \ No newline at end of file diff --git a/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/vo/MailTemplateSendVO.java b/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/vo/MailTemplateSendVO.java new file mode 100644 index 0000000..68bd854 --- /dev/null +++ b/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/vo/MailTemplateSendVO.java @@ -0,0 +1,28 @@ +package co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Schema(description = "管理后台 - 邮箱模板的发送 Request VO") +@Data +public class MailTemplateSendVO { + + @Schema(description = "客户ID") + @NotNull(message = "请选择客户") + private List customerIds; + + @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "test_01") + @NotNull(message = "模板编码不能为空") + private String templateCode; + + @Schema(description = "模板参数") + private Map templateParams; + + @Schema(description = "是否发送客户") + private Boolean isCustomer; + +} diff --git a/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/vo/SmsTemplateSendVO.java b/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/vo/SmsTemplateSendVO.java new file mode 100644 index 0000000..380ca52 --- /dev/null +++ b/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/controller/admin/crmcustomer/vo/SmsTemplateSendVO.java @@ -0,0 +1,28 @@ +package co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.Data; + +import java.util.List; +import java.util.Map; + +@Schema(description = "管理后台 - 短信模板的发送 Request VO") +@Data +public class SmsTemplateSendVO { + + @Schema(description = "客户ID") + @NotNull(message = "请选择客户") + private List customerIds; + + @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "test_01") + @NotNull(message = "模板编码不能为空") + private String templateCode; + + @Schema(description = "模板参数") + private Map templateParams; + + @Schema(description = "是否发送客户") + private Boolean isCustomer; + +} diff --git a/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/service/crmcustomer/CrmCustomerService.java b/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/service/crmcustomer/CrmCustomerService.java index 7261646..ce7c7d7 100644 --- a/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/service/crmcustomer/CrmCustomerService.java +++ b/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/service/crmcustomer/CrmCustomerService.java @@ -1,9 +1,7 @@ package co.yixiang.yshop.module.crm.service.crmcustomer; import co.yixiang.yshop.framework.common.pojo.PageResult; -import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.CrmCustomerPageReqVO; -import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.CrmCustomerRespVO; -import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.CrmCustomerSaveReqVO; +import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.*; import co.yixiang.yshop.module.crm.dal.dataobject.crmcustomer.CrmCustomerDO; import jakarta.validation.Valid; @@ -72,6 +70,20 @@ public interface CrmCustomerService { */ PageResult getCustomerPage2(CrmCustomerPageReqVO pageReqVO); + /** + * 发送短信 + * @param sendVO + * @return + */ + void sendSms(SmsTemplateSendVO sendVO); + + /** + * 发送邮件 + * @param sendVO + * @return + */ + void sendMail(MailTemplateSendVO sendVO); + } \ No newline at end of file diff --git a/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/service/crmcustomer/CrmCustomerServiceImpl.java b/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/service/crmcustomer/CrmCustomerServiceImpl.java index 771f22b..261437c 100644 --- a/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/service/crmcustomer/CrmCustomerServiceImpl.java +++ b/yshop-crm/yshop-module-crm/yshop-module-crm-biz/src/main/java/co/yixiang/yshop/module/crm/service/crmcustomer/CrmCustomerServiceImpl.java @@ -1,11 +1,12 @@ package co.yixiang.yshop.module.crm.service.crmcustomer; +import cn.hutool.core.util.StrUtil; +import co.yixiang.yshop.framework.common.enums.UserTypeEnum; +import co.yixiang.yshop.framework.common.exception.ErrorCode; import co.yixiang.yshop.framework.common.pojo.PageResult; import co.yixiang.yshop.framework.common.util.object.BeanUtils; import co.yixiang.yshop.framework.security.core.util.SecurityFrameworkUtils; -import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.CrmCustomerPageReqVO; -import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.CrmCustomerRespVO; -import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.CrmCustomerSaveReqVO; +import co.yixiang.yshop.module.crm.controller.admin.crmcustomer.vo.*; import co.yixiang.yshop.module.crm.dal.dataobject.crmcustomer.CrmCustomerDO; import co.yixiang.yshop.module.crm.dal.dataobject.crmcustomercontacts.CrmCustomerContactsDO; import co.yixiang.yshop.module.crm.dal.mysql.crmcustomer.CrmCustomerMapper; @@ -14,6 +15,8 @@ import co.yixiang.yshop.module.crm.enums.CustomerTypesEnum; import co.yixiang.yshop.module.crm.enums.RelationEnum; import co.yixiang.yshop.module.crm.service.crmoperatelog.CrmOperatelogService; import co.yixiang.yshop.module.system.api.user.AdminUserApi; +import co.yixiang.yshop.module.system.service.mail.MailSendService; +import co.yixiang.yshop.module.system.service.sms.SmsSendService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import jakarta.annotation.Resource; import org.springframework.stereotype.Service; @@ -44,6 +47,10 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { private CrmCustomerContactsMapper customerContactsMapper; @Resource private AdminUserApi adminUserApi; + @Resource + private SmsSendService smsSendService; + @Resource + private MailSendService mailSendService; @Override @@ -173,4 +180,52 @@ public class CrmCustomerServiceImpl implements CrmCustomerService { public PageResult getCustomerPage2(CrmCustomerPageReqVO pageReqVO) { return customerMapper.selectPage2(pageReqVO); } + + + @Override + public void sendSms(SmsTemplateSendVO sendVO) { + List crmCustomerDOS = null; + if(sendVO.getIsCustomer()){ + crmCustomerDOS = customerContactsMapper.selectList(new LambdaQueryWrapper(). + in(CrmCustomerContactsDO::getCustomerId,sendVO.getCustomerIds())); + }else{ + crmCustomerDOS = customerContactsMapper.selectList(new LambdaQueryWrapper(). + in(CrmCustomerContactsDO::getId,sendVO.getCustomerIds())); + } + + if(crmCustomerDOS == null || crmCustomerDOS.isEmpty()){ + throw exception(new ErrorCode(202409100,"客户信息不存在")); + } + crmCustomerDOS.forEach(customer -> { + //发送短信 + if(StrUtil.isNotEmpty(customer.getMobile())){ + smsSendService.sendSingleSms(customer.getMobile(),customer.getId(), UserTypeEnum.CUSTOMER.getValue(), + sendVO.getTemplateCode(),sendVO.getTemplateParams()); + } + }); + + } + + @Override + public void sendMail(MailTemplateSendVO sendVO) { + List crmCustomerDOS = null; + if(sendVO.getIsCustomer()){ + crmCustomerDOS = customerContactsMapper.selectList(new LambdaQueryWrapper(). + in(CrmCustomerContactsDO::getCustomerId,sendVO.getCustomerIds())); + }else{ + crmCustomerDOS = customerContactsMapper.selectList(new LambdaQueryWrapper(). + in(CrmCustomerContactsDO::getId,sendVO.getCustomerIds())); + } + if(crmCustomerDOS == null || crmCustomerDOS.isEmpty()){ + throw exception(new ErrorCode(202409101,"客户信息不存在")); + } + crmCustomerDOS.forEach(customer -> { + //发送邮件 + if(StrUtil.isNotEmpty(customer.getEmail())){ + mailSendService.sendSingleMail(customer.getEmail(),customer.getId(), UserTypeEnum.CUSTOMER.getValue(), + sendVO.getTemplateCode(),sendVO.getTemplateParams()); + } + }); + } + } \ No newline at end of file