209 Commits
Author SHA1 Message Date
bgyandGitea 7c0f59f731 Merge branch 'dev' of SH-Arbitrate/Mediation-Backend into prod 2024-07-05 11:36:51 +08:00
bgyandGitea dc70ecbce7 Merge branch 'bgy' of SH-Arbitrate/Mediation-Backend into dev 2024-07-05 11:35:56 +08:00
wangqiong f6ac03bca3 优化启动成功图案,jar命名 2024-07-05 11:34:06 +08:00
wangqiong123andGitea cde1d5eb81 Merge branch 'dev' of SH-Arbitrate/Mediation-Backend into prod 2024-06-03 15:44:12 +08:00
wangqiong123andGitea 5abeaf5224 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-06-03 15:43:55 +08:00
18792927508 9e8724c525 仲裁短信回调 2024-06-03 15:43:22 +08:00
wangqiong123andGitea 8e8b402ced Merge branch 'dev' of SH-Arbitrate/Mediation-Backend into prod 2024-06-03 10:27:08 +08:00
wangqiong123andGitea a08092eb37 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-05-31 16:47:09 +08:00
18792927508 32846984c0 bug修复 2024-05-31 16:46:38 +08:00
wangqiong123andGitea 5a264e2ef0 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-05-31 09:18:52 +08:00
18792927508 9b8b004edf bug修复 2024-05-31 09:16:06 +08:00
wangqiong123andGitea ea354f0967 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-05-29 13:43:16 +08:00
18792927508 3f55cee7e3 短信邮件完善 2024-05-29 13:41:12 +08:00
wangqiong123andGitea 521f1e24b9 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-05-21 13:50:22 +08:00
18792927508 0bf88192cf 调解bug修复 2024-05-21 13:47:19 +08:00
wangqiong123andGitea b6d27fa7e1 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-05-17 15:57:12 +08:00
18792927508 b75a892a50 bug修复 2024-05-17 15:56:39 +08:00
wangqiong123andGitea f1a5037af3 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-05-16 16:09:13 +08:00
18792927508 8f9f16254a 调解bug修复 2024-05-16 16:08:37 +08:00
wangqiong123andGitea 6acf5e3bcc Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-05-13 13:58:30 +08:00
18792927508 e35ffedea5 调解系统机构代码修改 2024-05-13 13:57:57 +08:00
wangqiong123andGitea fbe9359595 Merge branch 'dev' of SH-Arbitrate/Mediation-Backend into prod 2024-05-06 15:54:23 +08:00
wangqiong123andGitea 1110c97ef6 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-05-06 15:53:25 +08:00
18792927508 44b50777fb 测试bug修改 2024-05-06 15:52:40 +08:00
wangqiong123andGitea c84ba68599 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-30 18:05:34 +08:00
18792927508 3ec845fc46 上传调解书修改 2024-04-30 17:32:57 +08:00
wangqiong123andGitea 7fb8b20955 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-30 14:18:06 +08:00
18792927508 8b490936aa 429bug修复 2024-04-30 14:16:26 +08:00
wangqiong123andGitea 2299906c55 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-29 16:38:41 +08:00
18792927508 95a91b4189 bug修复 2024-04-29 16:37:57 +08:00
wangqiong123andGitea 09c3555645 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-25 18:16:28 +08:00
18792927508 bda663a740 bug修复 2024-04-25 18:15:59 +08:00
wangqiong123andGitea 3637a7d65d Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-23 18:04:24 +08:00
18792927508 cc4d7139dc PC端人脸核身 2024-04-23 18:03:53 +08:00
wangqiong123andGitea 0fb56c95db Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-22 16:08:31 +08:00
18792927508 809e457480 上传下载调解书 2024-04-22 16:08:05 +08:00
wangqiong123andGitea e2c5fbf77d Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-22 09:21:48 +08:00
18792927508 29d7cd37bf bug修复 2024-04-22 09:20:45 +08:00
wangqiong123andGitea a73b5ca3b4 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-19 14:20:02 +08:00
18792927508 8718bece10 签收优化 2024-04-19 14:19:41 +08:00
wangqiong123andGitea f6471058a3 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-19 11:31:27 +08:00
18792927508 b03cf6428b 会议短信,签收优化 2024-04-19 11:30:54 +08:00
wangqiong123andGitea f8a9cc83fe Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-19 09:17:11 +08:00
18792927508 e646b00333 视频会议优化 2024-04-19 09:16:32 +08:00
bgyandGitea 7d6976224d Merge branch 'bgy' of SH-Arbitrate/Mediation-Backend into dev 2024-04-18 18:37:41 +08:00
wangqiong 918c1a8bad 优化通过uid查询视频会议信息接口 2024-04-18 18:36:45 +08:00
wangqiong 5e544e6d4e Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into bgy 2024-04-18 17:58:37 +08:00
wangqiong123andGitea 07dd08f824 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-18 13:57:14 +08:00
18792927508 f76a2e9850 异步发送短信 2024-04-18 13:56:30 +08:00
wangqiong123andGitea 504d1e371b Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-18 11:18:47 +08:00
18792927508 7c3044811e 短信重发修改 2024-04-18 11:18:13 +08:00
wangqiong a5e3b61d4f Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into bgy 2024-04-18 10:21:02 +08:00
wangqiong123andGitea a03a23f2c1 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-18 09:36:46 +08:00
18792927508 58a5f083fe 功能优化 2024-04-18 09:36:21 +08:00
wangqiong123andGitea 0367602fe3 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-18 09:33:36 +08:00
18792927508 6da9516d82 功能优化 2024-04-18 09:32:37 +08:00
wangqiong f94be91bb3 优化邮件发送记录编辑功能 2024-04-17 17:44:40 +08:00
bgyandGitea e5c8ebfb31 Merge branch 'bgy' of SH-Arbitrate/Mediation-Backend into dev 2024-04-17 15:25:39 +08:00
wangqiong 75da02d795 新增邮件发送记录编辑接口,邮件记录重新发送接口 2024-04-17 15:24:38 +08:00
bgyandGitea 376e86cc28 Merge branch 'bgy' of SH-Arbitrate/Mediation-Backend into dev 2024-04-16 13:44:39 +08:00
wangqiong b0aa7d09c4 优化流程保存和更新接口、优化流程信息查询接口 2024-04-16 13:43:30 +08:00
bgyandGitea a32386e726 Merge branch 'bgy' of SH-Arbitrate/Mediation-Backend into dev 2024-04-16 10:04:33 +08:00
wangqiong 333c162ab0 重新发送手机短信接口 2024-04-16 10:03:15 +08:00
bgyandGitea 915b60f43b Merge branch 'bgy' of SH-Arbitrate/Mediation-Backend into dev 2024-04-15 17:43:13 +08:00
wangqiong a6195fc255 优化短信跳转链接 2024-04-15 17:35:14 +08:00
wangqiong a24635c429 增加待开发事项:线上调解时发送视频会议链接短信给用户。 2024-04-12 18:30:26 +08:00
wangqiong b56288cc8c 新增查询加密后的明文信息接口,新增加密视频会议相关信息方法 2024-04-12 17:42:14 +08:00
wangqiong123andGitea a851d66423 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-09 16:22:59 +08:00
18792927508 02ba078238 admin权限修改,注册逻辑修改 2024-04-09 16:22:08 +08:00
bgyandGitea 6559304793 Merge branch 'bgy' of SH-Arbitrate/Mediation-Backend into dev 2024-04-08 17:06:47 +08:00
wangqiong dfddc6a9f4 新增短信编辑和重新发送短信接口 2024-04-08 17:05:06 +08:00
wangqiong123andGitea 4daceeb105 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-08 15:48:02 +08:00
18792927508 6314a583b9 bug修改 2024-04-08 15:46:26 +08:00
wangqiong123andGitea 36b5925786 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-08 14:06:25 +08:00
18792927508 17c9b2659e bug修复 2024-04-08 14:05:20 +08:00
wangqiong123andGitea 37ad9a3112 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-07 11:11:26 +08:00
18792927508 666090fbe3 bug修复 2024-04-07 11:10:35 +08:00
wangqiong123andGitea 9537faea90 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-04-02 16:00:15 +08:00
18792927508 72026ee6f4 调解系统修改 2024-04-02 15:56:40 +08:00
wangqiong 08f4aca27c 对接接口方法:1.获取token2.更新案件状态3.上传文件4.推送案件附件信息 2024-03-28 18:54:08 +08:00
wangqiong123andGitea c48d18b13f Merge branch 'dev' of SH-Arbitrate/Mediation-Backend into prod 2024-03-20 14:01:09 +08:00
wangqiong123andGitea b0f71c6e3a Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-20 14:00:29 +08:00
18792927508 653f814372 调解员签名按钮权限返回修复 2024-03-20 13:59:25 +08:00
18792927508 7fef478c00 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into wq1 2024-03-20 13:56:16 +08:00
qtzandGitea a7f1f00cf9 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-20 09:18:48 +08:00
qitz c54981e584 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-03-20 09:14:42 +08:00
qitz cf42c93c6d 印章审核回调 2024-03-20 09:14:17 +08:00
wangqiong123andGitea c596c5654f Merge branch 'dev' of SH-Arbitrate/Mediation-Backend into prod 2024-03-19 18:27:14 +08:00
wangqiong123andGitea bf343b7e5a Merge branch 'prod' of SH-Arbitrate/Mediation-Backend into dev 2024-03-19 18:18:06 +08:00
wangqiong123andGitea de0d26882e Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-19 18:17:40 +08:00
18792927508 7977c89ab4 bug修复 2024-03-19 18:17:04 +08:00
wangqiong123andGitea 35f0663fb3 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-18 14:13:33 +08:00
18792927508 1256a9dd50 身份类别字典 2024-03-18 14:12:45 +08:00
qtzandGitea 249b11ee61 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-18 10:02:10 +08:00
qitz a64aa29a4e Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-03-18 09:58:23 +08:00
qitz 4502b8128f 优化查询日志 2024-03-18 09:58:01 +08:00
wangqiong123andGitea 9f52637abd Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-15 17:47:29 +08:00
18792927508 8a7cf059fd 在线修改 2024-03-15 17:46:50 +08:00
wangqiong123andGitea 21e86a4c47 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-15 17:38:23 +08:00
18792927508 a9bf9379ba 调节申请书修改 2024-03-15 17:37:56 +08:00
qtzandGitea 983edd6dd9 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-15 10:12:33 +08:00
qitz fb36d28f56 优化签署日志 2024-03-15 10:08:29 +08:00
wangqiong123andGitea 3e00799963 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-15 09:19:08 +08:00
18792927508 dd776e6fab 保存附件 2024-03-15 09:18:18 +08:00
wangqiong123andGitea 4875ac4b70 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-14 17:17:11 +08:00
18792927508 1cece4a0d1 在线修改 2024-03-14 17:16:38 +08:00
qtzandGitea b22b49763c Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-14 16:16:42 +08:00
qitz 3c1eb3ba55 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-03-14 16:13:38 +08:00
qitz abeca57c83 优化签署回调 2024-03-14 16:13:22 +08:00
qtzandGitea 0fc6595fb3 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-14 10:51:13 +08:00
qitz d7d48a3ff3 优化回调 2024-03-14 10:46:47 +08:00
wangqiong123andGitea b4e54bd501 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-13 14:52:55 +08:00
18792927508 92c619f123 onlyoffice 2024-03-13 14:52:04 +08:00
qtzandGitea 6ce906e04c Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-13 14:45:43 +08:00
qitz 2b5765d935 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-03-13 14:42:20 +08:00
qitz 619734469d 实现签署回调功能 2024-03-13 14:41:46 +08:00
wangqiong123andGitea 9f94b61bfb Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-12 14:57:37 +08:00
18792927508 13422f5c2d 新增,单点登录 2024-03-12 14:56:51 +08:00
18792927508 6f8879c5d1 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into wq1 2024-03-12 14:55:00 +08:00
qtzandGitea 609e0470fb Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-11 10:07:22 +08:00
qitz 40666adb10 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-03-11 10:04:09 +08:00
qitz df108c15eb 优化签名用印功能 2024-03-11 10:03:52 +08:00
qtzandGitea 658ce02b8f Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-08 11:09:10 +08:00
qitz 8e235b6135 优化调解功能 2024-03-08 11:05:35 +08:00
18792927508 4b615599b4 1 2024-03-06 18:25:05 +08:00
18792927508 c042d9e611 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into prod 2024-03-06 18:24:18 +08:00
18792927508 6be935061c Merge branch 'prod' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into wq1 2024-03-06 18:18:38 +08:00
wangqiong123andGitea 327aa07c21 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-06 18:15:00 +08:00
18792927508 bf0a834577 正式环境端口修改 2024-03-06 18:14:39 +08:00
wangqiong123andGitea 2afcbb6f73 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-06 17:06:17 +08:00
18792927508 2696ac1156 bug 2024-03-06 17:05:22 +08:00
qtzandGitea 80fd24e1c3 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-06 16:32:21 +08:00
qitz ac0278a1c5 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-03-06 16:28:49 +08:00
qitz c927559270 优化调解功能 2024-03-06 16:28:27 +08:00
qtzandGitea 9c36ade13f Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-03-06 11:29:18 +08:00
qitz 07a1bad4a1 优化案件受理功能 2024-03-06 11:26:00 +08:00
qtzandGitea dc95793394 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-29 17:59:59 +08:00
qitz 134c5b880a Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-29 17:56:51 +08:00
qitz b3398e9828 优化查询流程 2024-02-29 17:56:31 +08:00
qtzandGitea 988e763abd Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-29 15:30:20 +08:00
qitz e02dc53776 优化调解的短信记录 2024-02-29 15:26:24 +08:00
wangqiong123andGitea dc0826ddad Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-28 09:57:24 +08:00
wangqiong123andGitea c97c5965f9 Merge branch 'dev' of SH-Arbitrate/Mediation-Backend into prod 2024-02-28 09:53:30 +08:00
18792927508 1a3848e339 测试系统数据库 2024-02-28 09:51:33 +08:00
wangqiong123andGitea beb7989c5e Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-28 09:43:10 +08:00
18792927508 49c99ecb5e 视频会议 2024-02-28 09:39:43 +08:00
wangqiong123andGitea f87943e9f5 Merge branch 'dev' of SH-Arbitrate/Mediation-Backend into prod 2024-02-27 18:04:47 +08:00
wangqiong123andGitea 0579a94658 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-27 18:04:26 +08:00
18792927508 4a2155f7eb bug修复 2024-02-27 18:00:46 +08:00
wangqiong123andGitea badbdf8c13 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-27 15:28:57 +08:00
18792927508 694a7667f4 bug修复 2024-02-27 15:25:03 +08:00
qtzandGitea 1ddfff3e51 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-27 15:08:29 +08:00
qitz 02575e8bfc Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-27 15:04:47 +08:00
qitz ba28986510 优化流程查询功能 2024-02-27 15:04:28 +08:00
qtzandGitea e2bf519221 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-26 14:34:42 +08:00
qitz ef5f37d83a Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-26 14:31:49 +08:00
qitz dc990ef8bb 修改查看流程功能 2024-02-26 14:31:26 +08:00
wangqiong123andGitea ce307a7912 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-26 14:01:32 +08:00
18792927508 86b8305dc2 bug修复 2024-02-26 13:58:05 +08:00
qtzandGitea da4a49956c Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-26 11:00:38 +08:00
qitz 7ad9bdd869 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-26 10:57:43 +08:00
qitz 766f9e9fb7 优化用印申请功能 2024-02-26 10:57:31 +08:00
qtzandGitea d8cb453153 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-26 10:27:18 +08:00
qitz 9fe2684b33 修改签收功能 2024-02-26 10:24:00 +08:00
qtzandGitea 5ad63c8905 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-23 15:19:18 +08:00
qitz ea727fc760 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-23 15:16:19 +08:00
qitz 657e748cb3 优化日志查询 2024-02-23 15:15:51 +08:00
wangqiong123andGitea d69913799c Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-23 14:28:38 +08:00
18792927508 e00d61949b bug 2024-02-23 14:25:37 +08:00
qtzandGitea ba20a9d807 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-23 11:30:55 +08:00
qitz 48aa6625f4 优化查询流程 2024-02-23 11:26:42 +08:00
wangqiong123andGitea 1c90f35d47 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-22 10:21:33 +08:00
18792927508 dc26290e28 bug修复 2024-02-22 10:18:22 +08:00
qtzandGitea 8d61792ec6 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-22 09:44:17 +08:00
qitz 66131d6b1a 优化修改案件功能 2024-02-22 09:40:49 +08:00
wangqiong123andGitea 4a7194c9ea Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-21 16:19:49 +08:00
18792927508 0d246d5917 BUG修复 2024-02-21 16:16:22 +08:00
qtzandGitea 657df6d9a5 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-21 14:24:05 +08:00
qitz aa8522293f Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-21 14:21:07 +08:00
qitz 5e4fe7df97 优化查看流程功能 2024-02-21 14:20:50 +08:00
qtzandGitea 6ae4f4bec7 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-21 11:43:10 +08:00
qitz 7377980330 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-21 11:40:23 +08:00
qitz 854f98c560 修改查询日志 2024-02-21 11:40:07 +08:00
qtzandGitea 8e54eba40a Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-21 09:42:24 +08:00
qitz f595820ec4 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-21 09:38:30 +08:00
wangqiong123andGitea 5c0439f1f0 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-21 09:38:22 +08:00
qitz 1fc66789aa 优化送达功能 2024-02-21 09:38:08 +08:00
18792927508 398d4a80d0 bug修复221 2024-02-21 09:35:21 +08:00
qtzandGitea 0fe491cf84 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-20 17:26:07 +08:00
qitz 158e6ee9fd Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-20 17:23:00 +08:00
qitz 32db41e641 优化查询流程 2024-02-20 17:22:44 +08:00
qtzandGitea e67d6d2d3f Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-20 09:20:46 +08:00
qitz e6160f71d4 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-20 09:17:29 +08:00
qitz a98413baba 优化更新状态 2024-02-20 09:16:57 +08:00
wangqiong123andGitea 8309678cb4 Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-20 09:09:57 +08:00
18792927508 0b96d4351d bug修复 2024-02-20 09:06:43 +08:00
qtzandGitea b8ad0dfc8c Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-19 15:09:49 +08:00
qitz 6ee2fd571a Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-19 15:06:45 +08:00
qitz 483128ca87 优化签名功能 2024-02-19 15:06:30 +08:00
qtzandGitea af4922ce3c Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-19 14:00:37 +08:00
qitz 5f6b9495b1 Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-19 13:57:54 +08:00
qitz 7b7ee0ab63 优化修改功能 2024-02-19 13:57:36 +08:00
qtzandGitea fb76ba3a21 Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-19 11:36:16 +08:00
qitz d014a5e76b Merge branch 'dev' of http://git.xayunmei.com/SH-Arbitrate/Mediation-Backend into qtz1 2024-02-19 11:33:14 +08:00
qitz 962e28c0d8 修改调解和解功能 2024-02-19 11:32:55 +08:00
qtzandGitea 39c7bb43bd Merge branch 'qtz1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-19 10:22:03 +08:00
qitz 784f7c0675 修改送达功能 2024-02-19 10:19:12 +08:00
wangqiong123andGitea 54dea94f6a Merge branch 'wq1' of SH-Arbitrate/Mediation-Backend into dev 2024-02-19 09:23:08 +08:00
18792927508 164642ae58 bug修复 2024-02-19 09:20:03 +08:00
175 changed files with 10226 additions and 3636 deletions
@@ -391,7 +391,7 @@ public class WxPayElegentTrade implements ElegentTrade {
private CloseableHttpClient getWxHttpClient() {
try {
//这里对秘钥进行加密使用的完全是官网上的代码
//TODO 参考官网代码 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_6_2.shtml
// 参考官网代码 https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_6_2.shtml
// 加载商户私钥(privateKey:私钥字符串)
String key = FileUtil.readToStr("wxpay_private.key");
+3 -2
View File
@@ -9,7 +9,8 @@
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>ruoyi-admin</artifactId>
<artifactId>mediation</artifactId>
<version>1.1.0</version>
<description>
web服务入口
@@ -99,7 +100,7 @@
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
<finalName>${project.artifactId}-${project.version}</finalName>
</build>
</project>
@@ -1,11 +1,21 @@
package com.ruoyi;
import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.scheduling.annotation.EnableScheduling;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.List;
/**
* 启动程序
*
@@ -20,15 +30,30 @@ public class RuoYiApplication
{
// System.setProperty("spring.devtools.restart.enabled", "false");
SpringApplication.run(RuoYiApplication.class, args);
System.out.println("(♥◠‿◠)ノ゙ 若依启动成功 ლ(´ڡ`ლ)゙ \n" +
" .-------. ____ __ \n" +
" | _ _ \\ \\ \\ / / \n" +
" | ( ' ) | \\ _. / ' \n" +
" |(_ o _) / _( )_ .' \n" +
" | (_,_).' __ ___(_ o _)' \n" +
" | |\\ \\ | || |(_,_)' \n" +
" | | \\ `' /| `-' / \n" +
" | | \\ / \\ / \n" +
" ''-' `'-' `-..-' ");
System.out.println("(♥◠‿◠)ノ゙ 启动成功 ლ(´ڡ`ლ)゙ \n" +
" _ _ _ _ \n" +
" | |_(_) __ _ ___ (_|_) ___ \n" +
" | __| |/ _` |/ _ \\ | | |/ _ \\\n" +
" | |_| | (_| | (_) | | | | __/\n" +
" \\__|_|\\__,_|\\___/ _/ |_|\\___|\n" +
" |__/ ");
// 启动成功后,查询用户表,将用户信息存到redis
RedisCache redisCache = SpringUtils.getBean(RedisCache.class);
SysUserMapper userMapper = SpringUtils.getBean(SysUserMapper.class);
List<SysUser> sysUsers = userMapper.selectUserListByIds(null);
if(CollectionUtil.isNotEmpty(sysUsers)){
for (SysUser sysUser : sysUsers) {
redisCache.setCacheObject(CacheConstants.USER_KEY+sysUser.getUserId(),sysUser);
}
}
// 初始化角色redis
SysRoleMapper roleMapper = SpringUtils.getBean(SysRoleMapper.class);
List<SysRole> roles = roleMapper.selectRoleList(new SysRole());
if(CollectionUtil.isNotEmpty(roles)){
for (SysRole role : roles) {
redisCache.setCacheObject(CacheConstants.ROLE_KEY+role.getRoleName(),role.getRoleId());
}
}
}
}
@@ -23,6 +23,8 @@ import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
import static com.google.common.io.Files.getFileExtension;
/**
* 通用请求处理
*
@@ -116,6 +118,7 @@ public class CommonController
.annexType(annexType)
.useId(SecurityUtils.getUserId())
.useAccount(SecurityUtils.getUsername())
.suffix(getFileExtension(path))
.build();
msCaseAttachMapper.save(caseAttach);
return caseAttach.getAnnexId();
@@ -5,10 +5,7 @@ import com.ruoyi.system.domain.vo.flow.MsCaseFlowSearchVO;
import com.ruoyi.system.domain.vo.flow.MsCaseFlowVO;
import com.ruoyi.system.service.flow.CaseFlowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import static com.ruoyi.common.core.domain.AjaxResult.success;
@@ -28,6 +25,13 @@ public class CaseFlowController {
public Object queryCaseFlowInfo(@RequestBody MsCaseFlowSearchVO caseFlowSearchVO) {
return caseFlowService.queryCaseFlowInfo(caseFlowSearchVO);
}
/**
* 查询案件流程信息
*/
@GetMapping("/selectCaseFlow")
public AjaxResult selectCaseFlow() {
return caseFlowService.selectCaseFlow();
}
/**
* 新增或编辑案件流程节点信息
@@ -1,19 +1,6 @@
package com.ruoyi.web.controller.system;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
@@ -24,6 +11,14 @@ import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.system.service.ISysDictDataService;
import com.ruoyi.system.service.ISysDictTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
/**
* 数据字典信息
@@ -82,6 +77,20 @@ public class SysDictDataController extends BaseController
}
return success(data);
}
/**
* 根据字典类型查询字典数据信息,跳过token
*/
@Anonymous
@GetMapping(value = "/type/skipToken/{dictType}")
public AjaxResult skipToken(@PathVariable String dictType)
{
List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
if (StringUtils.isNull(data))
{
data = new ArrayList<SysDictData>();
}
return success(data);
}
/**
* 新增字典类型
@@ -1,8 +1,19 @@
package com.ruoyi.web.controller.system;
import java.util.List;
import java.util.Set;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.MD5;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginBody;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.framework.web.service.SysLoginService;
import com.ruoyi.framework.web.service.SysPermissionService;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.system.service.flow.CaseFlowService;
import com.ruoyi.wisdomarbitrate.domain.dto.miniprogress.IdentityAuthentication;
@@ -12,15 +23,11 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginBody;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.framework.web.service.SysLoginService;
import com.ruoyi.framework.web.service.SysPermissionService;
import com.ruoyi.system.service.ISysMenuService;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 登录验证
@@ -43,6 +50,8 @@ public class SysLoginController {
private ISysUserService sysUserService;
@Autowired
private CaseFlowService caseFlowService;
@Autowired
private TokenService tokenService;
/**
* 登录方法
*
@@ -78,11 +87,20 @@ public class SysLoginController {
public AjaxResult getInfo() {
SysUser user = SecurityUtils.getLoginUser().getUser();
// 角色集合
Set<String> roles = permissionService.getRolePermission(user);
List<SysRole> roles = permissionService.getRolePermission(user);
Set<String> permsSet = new HashSet<>();
for (SysRole perm : roles)
{
if (StringUtils.isNotNull(perm))
{
permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
}
}
user.setRoles(roles);
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(user);
//查询用户角色关联的案件状态
Set<Integer> caseStatus = caseFlowService.getCaseStatusIdByRoleKey(roles);
Set<Integer> caseStatus = caseFlowService.getCaseStatusIdByRoleKey(permsSet);
AjaxResult ajax = AjaxResult.success();
ajax.put("user", user);
ajax.put("roles", roles);
@@ -102,4 +120,30 @@ public class SysLoginController {
List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
return AjaxResult.success(menuService.buildMenus(menus));
}
/**sso登录接口*/
@PostMapping("login/sso")
public AjaxResult loginSSO( @RequestBody LoginBody loginBody){
if(StrUtil.isEmpty(loginBody.getUsername()) || StrUtil.isEmpty(loginBody.getTicket())
|| StrUtil.isEmpty(loginBody.getRoleName()) ){
return AjaxResult.error("参数错误");
}
return loginService.loginSSO(loginBody);
}
/**对接BM,根据用户名查询token*/
@GetMapping("selectTokenByUserName")
public AjaxResult selectTokenByUserName( LoginBody loginBody){
if(StrUtil.isEmpty(loginBody.getUsername()) || StrUtil.isEmpty(loginBody.getTicket())
){
return AjaxResult.error("参数错误");
}
return loginService.selectTokenByUserName(loginBody);
}
public static void main(String[] args) {
System.out.println( MD5.create().digestHex("BMceshi" ));
}
}
@@ -1,17 +1,5 @@
package com.ruoyi.web.controller.system;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
@@ -20,6 +8,12 @@ import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 菜单信息
@@ -139,4 +133,13 @@ public class SysMenuController extends BaseController
}
return toAjax(menuService.deleteMenuById(menuId));
}
/**
* 根据用户查询菜单权限字符
*/
@GetMapping("/getMenuPermsByUser")
public AjaxResult getMenuPermsByUser()
{
return menuService.getMenuPermsByUser();
}
}
@@ -0,0 +1,70 @@
package com.ruoyi.web.controller.tool;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.AttachmentOperateTypeEnum;
import com.ruoyi.common.enums.DocumentTypeEnum;
import com.ruoyi.common.enums.PushCaseStatusEnum;
import com.ruoyi.system.service.impl.BeiMingInterfaceService;
import com.ruoyi.wisdomarbitrate.domain.vo.mscase.MsCaseFileInfo;
import com.ruoyi.wisdomarbitrate.domain.vo.mscase.MsCaseStatusInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import static com.ruoyi.common.utils.EncryptUtils.sm4Decrypt;
@RestController
@RequestMapping("/beiming/api")
public class TestApiController {
@Autowired
BeiMingInterfaceService beiMingInterfaceService;
@Value("${beimingprivatekey}")
public String privateKey;
@GetMapping("/test")
@Anonymous
public AjaxResult selectCaseFlow() {
String token = beiMingInterfaceService.getApiToken("BWT_MEDIATION", "86251b190e3a40f3942v215d1762c663", System.currentTimeMillis());
// token = "f910e1441fc56e49d3f31396e8d9aa04228045815ee986a9587d7a5cb7312f9d11c7f80041745f38ec686ea1f819c8b8227f9c03196c6dd004f89215c4805c24355be4b57abeddb7b9d2cbda45fae74c49f4a83fb6496d84302ca8c07245786d682ecb68aed966fcbda3188b9c4d4376089471bb5aee371a62073b0ce15d72dccd6fbc8fd13957e2fb7aa018cb5937938bfc9773e570ac06ac633617cea8405759cf609c832074aaa03f972c0a6a93cde531da0d91d07770c037fdea1368ee5772941ba2a55ef155979d1ed8222faad92ed342530ef04f3746aa96499dee6ea4869ce46bd0dcfe7a69e7db49eb2aec388c47824c201b49825f24ffe82dde41b5";
System.out.println("toke:" + token);
//解密
if (token != null && !token.isEmpty()) {
JSONObject jsonObject = JSON.parseObject(token);
String tokenString = jsonObject.getString("data");
System.out.println("data信息:" + tokenString);
String tokenstr = sm4Decrypt(tokenString, privateKey);
System.out.println("解密后的字符串:" + tokenstr);
if (tokenstr != null && !tokenstr.isEmpty()) {
JSONObject tokenObject = JSON.parseObject(tokenstr);
String resultToken = tokenObject.getString("token");
MsCaseStatusInfo info = MsCaseStatusInfo.builder().caseNo("zc2024032700012").statusCode(PushCaseStatusEnum.MEDIATE.getCode()).caseClosureExplanation(PushCaseStatusEnum.MEDIATE.getName()).build();
JSONObject result = beiMingInterfaceService.submitCaseStatusInfo(resultToken, "zc2024032700012", "BWT_MEDIATION", info);
System.out.println("jieguo:" + result.toString());
if (result != null) {
String data = result.getString("data");
String datastr = sm4Decrypt(data, privateKey);
System.out.println("最终解密后的字符串:" + datastr);
}
}
}
return AjaxResult.success();
}
@GetMapping("/testfile")
@Anonymous
public AjaxResult testfile() {
// File file = new File("D:/WorkDoc/TJ/File/证据1.png");
File file = new File("D:/WorkDoc/TJ/File/证据3.png");
MsCaseFileInfo jsonObject1 = beiMingInterfaceService.pushAttachmentInfo("BWT_MEDIATION", "86251b190e3a40f3942v215d1762c663", file, "BWT_MEDIATION", "zc2024032700012", AttachmentOperateTypeEnum.ADD, DocumentTypeEnum.EVEDENT_AGREEMENT);
System.out.println("fanhui:" + jsonObject1.toString());
return AjaxResult.success();
}
}
@@ -1,5 +1,6 @@
package com.ruoyi.web.controller.wisdomarbitrate.miniprogress;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.controller.BaseController;
@@ -8,10 +9,7 @@ import com.ruoyi.wisdomarbitrate.domain.dto.miniprogress.IdentityAuthentication;
import com.ruoyi.wisdomarbitrate.service.miniprogress.IdentityAuthenticationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/identityAuthentication")
@@ -25,9 +23,26 @@ public class IdentityAuthenticationController extends BaseController {
@Anonymous
@PostMapping("/selectIdentityAuthenticaEIDtoken")
public AjaxResult selectIdentityAuthenticaEIDtoken() {
JSONObject tokenResult = identityAuthenticationService.selectIdentityAuthenticaEIDtoken();
JSONObject tokenResult = identityAuthenticationService.selectIdentityAuthEIDToken(false);
return success(tokenResult);
}
/**
* 获取PC端EIDtoken
*/
@Anonymous
@PostMapping("/selectPCIdentityAuthenticaEIDtoken")
public AjaxResult selectPCIdentityAuthenticaEIDtoken() {
JSONObject tokenResult = identityAuthenticationService.selectIdentityAuthEIDToken(true);
return success(tokenResult);
}
/**
* H5轮询获取E证通Token状态
*/
@Anonymous
@GetMapping("/selectPCEIDtokenStatus")
public AjaxResult selectPCEIDtokenStatus(@RequestParam String eidToken) {
return identityAuthenticationService.selectPCEIDtokenStatus(eidToken);
}
/**
* 小程序人脸核身后查询身份认证结果
@@ -35,6 +50,9 @@ public class IdentityAuthenticationController extends BaseController {
@Anonymous
@PostMapping("/selectIdentityAuthenticaRespon")
public AjaxResult selectIdentityAuthenticaRespon(@Validated @RequestBody IdentityAuthentication ientityAuthentication) {
if(StrUtil.isEmpty(ientityAuthentication.getEidToken())){
return error("EIDtoken不能为空");
}
AjaxResult checkResult = identityAuthenticationService.selectIdentityAuthenticaRespon(ientityAuthentication);
return checkResult;
}
@@ -4,12 +4,18 @@ import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.wisdomarbitrate.domain.dto.miniprogress.IdentityAuthentication;
import com.ruoyi.wisdomarbitrate.domain.vo.miniprogress.WeChatUserVO;
import com.ruoyi.wisdomarbitrate.service.miniprogress.WeChatUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author wangqiong
* @description 微信小程序用户注册登录
@@ -20,7 +26,10 @@ import org.springframework.web.bind.annotation.*;
public class WeChatUserController extends BaseController {
@Autowired
private WeChatUserService weChatUserService;
@Autowired
private SysRoleMapper roleMapper;
@Autowired
private SysUserMapper userMapper;
/**
* 小程序端获取手机验证码
* @param userVO
@@ -35,14 +44,33 @@ public class WeChatUserController extends BaseController {
}
return weChatUserService.sendCode(userVO);
}
/**
* 获取邮箱验证码
* @param email
* @return
*/
@Anonymous
@GetMapping("/sendEmailCode")
public AjaxResult sendEmailCode( @RequestParam("email") String email)
{
return weChatUserService.sendEmailCode(email);
}
@Anonymous
@GetMapping("/roles")
public AjaxResult roles()
{
List<SysRole> list = roleMapper.selectRoleAll();
return AjaxResult.success(list);
}
/**
* 小程序注册
*/
@Anonymous
@PostMapping("/registerUser")
public AjaxResult registerUser( @RequestBody IdentityAuthentication ientityAuthentication) {
if(ientityAuthentication.getId()==null
|| StrUtil.isEmpty(ientityAuthentication.getName())
if(
// ientityAuthentication.getId()==null ||
StrUtil.isEmpty(ientityAuthentication.getName())
|| StrUtil.isEmpty(ientityAuthentication.getIdentityNo())
|| StrUtil.isEmpty(ientityAuthentication.getPhone())
|| StrUtil.isEmpty(ientityAuthentication.getUserName())
@@ -54,5 +82,16 @@ public class WeChatUserController extends BaseController {
logger.info("调用小程序注册==="+ientityAuthentication.toString());
return weChatUserService.registerUser(ientityAuthentication);
}
@Anonymous
@GetMapping("/verifyUserName")
public AjaxResult verifyUserName(@RequestParam("userName") String userName)
{
SysUser sysUser = userMapper.checkUserNameUnique(userName);
if(sysUser==null){
return AjaxResult.success();
}else {
return AjaxResult.error("用户名已存在!");
}
}
}
@@ -47,33 +47,62 @@ public class MsCaseApplicationController extends BaseController {
@GetMapping("/list")
public TableDataInfo page(MsCaseApplicationReq req)
{
//startPage();
List<MsCaseApplicationVO> list = caseApplicationService.list(req);
return getDataTable(list);
}
/**
* 首页待办数量
*/
@GetMapping("/todoCount")
public AjaxResult todoCount()
{
CaseToDoCountVO vo= caseApplicationService.todoCount();
return success(vo);
}
/**
* 根据登录人返回用户信息
*/
@GetMapping("/getUserInfo")
public AjaxResult getUserInfo()
{
return success(caseApplicationService.getUserInfo());
}
/**
* 新增案件
*/
@PostMapping("/insert")
public AjaxResult insert(@RequestBody MsCaseApplicationVO caseApplication )
{
if(caseApplication.getAffiliate()==null||caseApplication.getAffiliate().getOrganizeFlag()==null){
if( caseApplication.getAffiliate()==null){
error("参数校验失败");
}
return success(caseApplicationService.insert(caseApplication));
AjaxResult ajaxResult = AjaxResult.success();
ajaxResult.put("caseNum",caseApplicationService.insert(caseApplication));
return ajaxResult;
}
/**
* 批量新增案件
*/
@PostMapping("/batchInsert")
public AjaxResult batchInsert(@RequestBody MsCaseBatchInsertVO list )
{
return caseApplicationService.batchInsert(list);
}
/**
* 根据身份证号获取性别和出生日期
*/
@GetMapping("/getInfoByIdCard")
public AjaxResult getInfoByIdCard(@RequestParam("idCard") String idCard)
public AjaxResult getInfoByIdCard(@RequestParam(value = "idCard" ,required = false) String idCard)
{
if(StrUtil.isEmpty(idCard)){
error("参数校验失败");
return error("身份证号不能为空");
}
if(!IdcardUtil.isValidCard(idCard)){
error("身份证不合法,请输入正确的身份证号");
return error("身份证不合法,请输入正确的身份证号");
}
AjaxResult ajax = AjaxResult.success();
Map<String, String> identityNumMap = IdCardUtils.getBirAgeSex(idCard);
@@ -105,16 +134,27 @@ public class MsCaseApplicationController extends BaseController {
}
return success(caseApplicationService.update(caseApplication));
}
/**
* 删除案件
*/
@PostMapping("/delete")
public AjaxResult delete(@RequestBody MsCaseApplication req ) {
if (req.getCaseFlowId() == null
|| (req.getId() == null && StrUtil.isEmpty(req.getBatchNumber()))) {
return error("参数校验失败");
}
return caseApplicationService.delete(req);
}
/**
* 根据id查询案件
*/
@GetMapping("/selectById")
public AjaxResult selectById(@RequestParam Long id )
public AjaxResult selectById(@RequestParam(required = false) Long id ,@RequestParam(required = false) String caseNum )
{
if(id==null){
error("id不能为空");
if(id==null && caseNum==null ){
error("参数校验失败");
}
return success(caseApplicationService.selectById(id));
return success(caseApplicationService.selectById(id,caseNum));
}
/**
* 案件压缩包导入
@@ -122,6 +162,7 @@ public class MsCaseApplicationController extends BaseController {
* @return
* @throws IOException
*/
@PostMapping("/uploadCaseZipFile")
public AjaxResult uploadCaseZipFile(@RequestParam("file") MultipartFile file, @RequestParam("templateId") Long templateId) throws IOException {
if(file.isEmpty()||templateId==null){
@@ -129,6 +170,20 @@ public class MsCaseApplicationController extends BaseController {
}
return caseApplicationService.uploadCaseZipFile(file,templateId);
}
/**
* 用户信息压缩包导入
* @param file
* @return
* @throws IOException
*/
@Anonymous
@PostMapping("/userIdentify")
public AjaxResult userIdentify(@RequestParam("file") MultipartFile file) throws IOException {
if(file.isEmpty()){
return error("参数不能为空");
}
return caseApplicationService.userIdentify(file);
}
/**
* 生成调解申请书
@@ -195,8 +250,8 @@ public class MsCaseApplicationController extends BaseController {
* @return
*/
@GetMapping("/listMediator")
public AjaxResult listMediator( ) {
return caseApplicationService.listMediator();
public AjaxResult listMediator( @RequestParam(value = "caseAppliId",required = true) Long caseAppliId) {
return caseApplicationService.listMediator(caseAppliId);
}
/**
* 保存预约
@@ -255,12 +310,25 @@ public class MsCaseApplicationController extends BaseController {
*/
@PostMapping("/mediation")
public AjaxResult mediation(@RequestBody MsCaseApplicationReq req) throws EsignDemoException, InterruptedException {
if (req.getCaseFlowId() == null || req.getId() == null) {
if (req.getCaseFlowId() == null || req.getId() == null ) {
return error("参数校验失败");
}
return caseApplicationService.mediation(req);
}
/**
* 确定会议结果
* @param
* @return
*/
@PostMapping("/confirmMeetingResult")
public AjaxResult confirmMeetingResult(@RequestBody MsCaseApplicationReq req) {
if (req.getCaseFlowId() == null || req.getId() == null || req.getMediaResult()==null) {
return error("参数校验失败");
}
return caseApplicationService.confirmMeetingResult(req);
}
/**
* 修改庭审笔录
* @param
@@ -274,19 +342,7 @@ public class MsCaseApplicationController extends BaseController {
return caseApplicationService.updateTrialPen(attach);
}
/**
* 确认调解书
* @param
* @return
*/
@PostMapping("/confirmMediation")
public AjaxResult confirmMediation(@RequestBody MsCaseAttachVO attach) throws EsignDemoException, InterruptedException {
if (attach.getCaseFlowId()==null || attach.getCaseAppliId()==null ) {
return error("参数校验失败");
}
return caseApplicationService.confirmMediation(attach);
}
/**
* 获取userSign
* @param userId
@@ -332,4 +388,18 @@ public class MsCaseApplicationController extends BaseController {
return success(videoService.reserveConferenceList(caseId));
}
/**
* 保存onlyOffice在线编辑的文件
* @param
* @return
*/
@PostMapping("/saveOnlyOfficeFile")
public AjaxResult saveOnlyOfficeFile( @RequestBody MsCaseAttach caseAttach) {
if(caseAttach.getCaseAppliId()==null||StrUtil.isEmpty(caseAttach.getOnlyOfficeFileId())||StrUtil.isEmpty(caseAttach.getAnnexPath())){
return error("参数校验失败");
}
return caseApplicationService.saveOnlyOfficeFile(caseAttach);
}
}
@@ -65,7 +65,7 @@ public class MsCaseApplicationPayController extends BaseController {
}
/**
* 确认缴费,支持批量(batchNumber不为空,则为批量)
* 申请人/被申请人确认缴费,支持批量(batchNumber不为空,则为批量)
* @param dto 缴费传入参数
* @return 统一响应结果
*/
@@ -79,7 +79,7 @@ public class MsCaseApplicationPayController extends BaseController {
return casePaymentService.confirmPayment(dto);
}
/**
* 确认已缴费,支持批量(batchNumber不为空,则为批量)
* 财务确认已缴费,支持批量(batchNumber不为空,则为批量)
* @param dto 缴费传入参数
* @return 统一响应结果
*/
@@ -91,5 +91,18 @@ public class MsCaseApplicationPayController extends BaseController {
}
return casePaymentService.confirmPaid(dto);
}
/**
* 财务确认被申请人已缴费,支持批量(batchNumber不为空,则为批量)
* @param dto 缴费传入参数
* @return 统一响应结果
*/
@PostMapping("/resConfirmPaid")
public AjaxResult resConfirmPaid(@RequestBody CaseConfirmPayDTO dto) {
if ((dto.getCaseId() == null && StrUtil.isEmpty(dto.getBatchNumber()))
|| dto.getCaseFlowId() == null) {
return error("参数校验失败");
}
dto.setApplicantConfirm(false);
return casePaymentService.confirmPaid(dto);
}
}
@@ -2,14 +2,15 @@ package com.ruoyi.web.controller.wisdomarbitrate.mscase;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.exception.EsignDemoException;
import com.ruoyi.wisdomarbitrate.domain.dto.mscase.MsSignSealDTO;
import com.ruoyi.wisdomarbitrate.domain.dto.mscase.SealSignRecord;
import com.ruoyi.wisdomarbitrate.domain.vo.mscase.MsCaseApplicationVO;
import com.ruoyi.wisdomarbitrate.domain.vo.mscase.MsCaseLogRecordVO;
import com.ruoyi.wisdomarbitrate.service.mscase.MsSignSealService;
import com.ruoyi.wisdomarbitrate.utils.SignVerifyUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
@@ -17,7 +18,6 @@ import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.IOException;
import java.util.List;
@RestController
@@ -26,16 +26,7 @@ public class MsSignSealController extends BaseController {
@Autowired
private MsSignSealService msSignSealService;
/**
* 调解书签名
*/
@PostMapping("/sureMediationSeal")
public AjaxResult sureMediationSeal(@RequestBody MsCaseApplicationVO caseApplication ) throws EsignDemoException, InterruptedException {
if(caseApplication.getId()==null){
error("id不能为空");
}
return msSignSealService.sureMediationSeal(caseApplication);
}
/**
* 用印申请
@@ -58,6 +49,38 @@ public class MsSignSealController extends BaseController {
return success(sealUrlRecordselect);
}
/**
* 签名用印回调
*/
@Anonymous
@PostMapping("/signSeaalCaseApplicaCallback")
public AjaxResult signSeaalCaseApplicaCallback() throws Exception {
boolean checkResult= SignVerifyUtils.checkSignuter();
if(checkResult){
String reqbodystr =SignVerifyUtils.getRequestBody();
return msSignSealService.signSeaalCaseApplicaCallback(reqbodystr);
}else {
return AjaxResult.error("error");
}
}
/**
* 印章审核回调
*/
@Anonymous
@PostMapping("/sealCheckCallback")
public AjaxResult sealCheckCallback() throws Exception {
boolean checkResult= SignVerifyUtils.checkSignuter();
if(checkResult){
String reqbodystr =SignVerifyUtils.getRequestBody();
return msSignSealService.sealCheckCallback(reqbodystr);
}else {
return AjaxResult.error("error");
}
}
/**
* 查询案件进度
*/
@@ -116,55 +139,5 @@ public class MsSignSealController extends BaseController {
return msSignSealService.msCaseSignUrlApplyPC(dto);
}
/**
* PC端被申请人签名
* @param dto
* @return
*/
@PostMapping("/msCaseSignUrlResPC")
public AjaxResult msCaseSignUrlResPC(@RequestBody MsSignSealDTO dto) throws EsignDemoException {
if (dto.getCaseId() == null) {
return error("参数校验失败");
}
return msSignSealService.msCaseSignUrlResPC(dto);
}
/**
* 小程序端申请人签名
* @param dto
* @return
*/
@PostMapping("/msCaseSignUrlApplyAPP")
public AjaxResult msCaseSignUrlApplyAPP(@RequestBody MsSignSealDTO dto) throws EsignDemoException {
if (dto.getCaseId() == null) {
return error("参数校验失败");
}
return msSignSealService.msCaseSignUrlApplyAPP(dto);
}
/**
* 小程序端被申请人签名
* @param dto
* @return
*/
@PostMapping("/msCaseSignUrlResAPP")
public AjaxResult msCaseSignUrlResAPP(@RequestBody MsSignSealDTO dto) throws EsignDemoException {
if (dto.getCaseId() == null) {
return error("参数校验失败");
}
return msSignSealService.msCaseSignUrlResAPP(dto);
}
}
@@ -1,17 +1,33 @@
package com.ruoyi.web.controller.wisdomarbitrate.mscase;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.AnnexTypeEnum;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.framework.config.ServerConfig;
import com.ruoyi.wisdomarbitrate.domain.entity.mscase.MsCaseAttach;
import com.ruoyi.wisdomarbitrate.domain.vo.mscase.MsReservedConferenceVO;
import com.ruoyi.wisdomarbitrate.domain.vo.mscase.SendRoomNoMessageVO;
import com.ruoyi.wisdomarbitrate.domain.vo.mscase.VideoCallBackVO;
import com.ruoyi.wisdomarbitrate.mapper.mscase.MsCaseAttachMapper;
import com.ruoyi.wisdomarbitrate.service.mscase.MsCaseApplicationService;
import com.ruoyi.wisdomarbitrate.service.mscase.VideoConferenceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.util.Objects;
import static com.google.common.io.Files.getFileExtension;
/**
* 视频会议控制层
@@ -19,11 +35,18 @@ import javax.validation.Valid;
* @Date 2024/01/8
* @Version V1.0
*/
@CrossOrigin(origins = "*")
@RestController
@RequestMapping("/video")
public class MsVideoConferenceController extends BaseController {
@Autowired
private VideoConferenceService videoService;
@Autowired
private ServerConfig serverConfig;
@Autowired
private MsCaseAttachMapper msCaseAttachMapper;
@Autowired
private MsCaseApplicationService caseApplicationService;
/**
* 根据案件ID查询视频
* @param caseId 案件id
@@ -34,8 +57,111 @@ public class MsVideoConferenceController extends BaseController {
return videoService.videoList(caseId);
}
/**
* 通用上传请求(单个)
* param officeFlag: 是否上传到onlyoffice,0-否,1-是
* param isMediaBook: 是否上调解书,1-是,其余为否
*/
@PostMapping("/upload")
public AjaxResult uploadFile(@RequestParam("file") MultipartFile file, @RequestParam(value = "isMediaBook",required = false) Integer isMediaBook, @RequestParam("annexType") Integer annexType, @RequestParam(value = "officeFlag", required = false) Integer officeFlag,@RequestParam(value = "caseId",required = false) Long caseId) throws Exception
{
try
{
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath();
// 上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
String suffix = getFileExtension(fileName);
if(StrUtil.isNotEmpty(suffix)&& suffix.contains("doc")){
// 上传到onlyoffice
officeFlag=1;
}
String url = serverConfig.getUrl() + fileName;
if(officeFlag != null && officeFlag == 1){
// officeFlag,fileName为annexPath
JSONArray jsonArray = caseApplicationService.uploadOnlyOffice(fileName,caseId);
if(jsonArray!=null && jsonArray.size() > 0) {
// 先删除之前的附件
if(Objects.equals(annexType, AnnexTypeEnum.MEDIATE_BOOK.getCode()) && caseId!=null) {
msCaseAttachMapper.deleteCaseAttachByCasedIdAndType(caseId, annexType);
}
MsCaseAttach caseAttach=null;
for (Object obj : jsonArray) {
JSONObject jsonObject = (JSONObject) obj;
caseAttach = MsCaseAttach.builder()
.caseAppliId(caseId)
.annexName(jsonObject.get("fileName")!=null?jsonObject.getString("fileName"):"")
.annexType(annexType)
.onlyOfficeFileId(jsonObject.getString("fileId"))
.build();
if(jsonObject.get("filePath")!=null){
String officePath = jsonObject.getString("filePath");
String replace = officePath.replace("/home/ruoyi/uploadPath/", "/profile/");
caseAttach.setAnnexPath(replace);
}
caseAttach.setSuffix( (getFileExtension(caseAttach.getAnnexPath())));
msCaseAttachMapper.save(caseAttach);
}
if(caseAttach==null){
return AjaxResult.error("上传失败");
}
AjaxResult ajax = AjaxResult.success();
ajax.put("annexId", caseAttach.getAnnexId());
ajax.put("annexType", annexType);
ajax.put("onlyOfficeFileId", caseAttach.getOnlyOfficeFileId());
ajax.put("fileName", fileName);
ajax.put("newFileName", FileUtils.getName(fileName));
ajax.put("originalFilename", file.getOriginalFilename());
return ajax;
}else {
return AjaxResult.error("上传失败");
}
}else {
// 如果是调解书并且是pdf,则删除之前的在新增
if(isMediaBook != null && isMediaBook == 1 ){
if(StrUtil.isNotEmpty(suffix)&&!suffix.equals("pdf")){
return AjaxResult.error("请上传pdf格式文件");
}
annexType=AnnexTypeEnum.MEDIATE_BOOK_PDF.getCode();
// 先删除之前的附件
if(caseId!=null) {
msCaseAttachMapper.deleteCaseAttachByCasedIdAndType(caseId, annexType);
}
}
Long annexId = saveCaseAttach(annexType, fileName, file.getOriginalFilename(), caseId);
// 是否上传到onlyoffice
AjaxResult ajax = AjaxResult.success();
ajax.put("annexId", annexId);
ajax.put("annexType", annexType);
ajax.put("url", url);
ajax.put("fileName", fileName);
ajax.put("newFileName", FileUtils.getName(fileName));
ajax.put("originalFilename", file.getOriginalFilename());
return ajax;
}
}
catch (Exception e)
{
return AjaxResult.error(e.getMessage());
}
}
private Long saveCaseAttach(Integer annexType, String path, String originalFilename,Long caseId) {
MsCaseAttach caseAttach = MsCaseAttach.builder()
.annexName(originalFilename)
.caseAppliId(caseId)
.annexPath(path)
.annexType(annexType)
.useId(SecurityUtils.getUserId())
.useAccount(SecurityUtils.getUsername())
.suffix(getFileExtension(path))
.build();
msCaseAttachMapper.save(caseAttach);
return caseAttach.getAnnexId();
}
/**
* 从腾讯云下载文件到本地
* @param
@@ -49,6 +175,20 @@ public class MsVideoConferenceController extends BaseController {
}
return success();
}
/**
* 腾讯云短信回调
* @param body
* @param request
* @return
*/
@Anonymous
@PostMapping("/smsRollBack")
public AjaxResult smsRollBack( @RequestBody String body, HttpServletRequest request) {
logger.info("短信回调======"+body);
videoService.smsRollBack(body,request);
return success();
}
/**
* 根据房间号绑定案件ID
* @param
@@ -106,9 +246,20 @@ public class MsVideoConferenceController extends BaseController {
*/
@Anonymous
@GetMapping("secretaryRoleByUserId")
public AjaxResult secretaryRoleByUserId( @RequestParam(value = "userId",required = true) Long userId) {
public AjaxResult secretaryRoleByUserId( @RequestParam(value = "userId",required = true) Long userId,@RequestParam(value = "caseId",required = true) Long caseId) {
return videoService.secretaryRoleByUserId(userId);
return videoService.secretaryRoleByUserId(userId,caseId);
}
/**
* 根据案件id查询申请人/被申请人会议上传附件按钮权限
* @param caseId
* @return
*/
@Anonymous
@GetMapping("selectRoleMenuByCaseId")
public AjaxResult selectRoleMenuByCaseId( @RequestParam(value = "caseId",required = true) Long caseId) {
return videoService.selectRoleMenuByCaseId(caseId);
}
/**
* 根据html字符串转pdf并和案件关联
@@ -1,19 +1,18 @@
package com.ruoyi.web.controller.wisdomarbitrate.sendrecord;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.wisdomarbitrate.domain.dto.sendrecord.SendMailRecord;
import com.ruoyi.wisdomarbitrate.service.sendrecord.ISendMailRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/sendMailRecord")
public class SendMailRecordController extends BaseController {
public class SendMailRecordController extends BaseController {
@Autowired
private ISendMailRecordService sendMailRecordService;
@@ -21,13 +20,30 @@ public class SendMailRecordController extends BaseController {
* 查询发送邮件记录列表
*/
@GetMapping("/list")
public TableDataInfo list(SendMailRecord sendMailRecord)
{
public TableDataInfo list(SendMailRecord sendMailRecord) {
startPage();
List<SendMailRecord> list = sendMailRecordService.selectSendMailRecordList(sendMailRecord);
return getDataTable(list);
}
/**
* 编辑邮件记录
*/
@PostMapping("/update")
public AjaxResult update(@RequestBody SendMailRecord sendMailRecord) {
return sendMailRecordService.updateSendMailRecord(sendMailRecord);
}
/**
* 重新发送邮件记录
*/
@PostMapping("/reSendMailRecord")
public AjaxResult reSendMailRecord(@RequestBody SendMailRecord sendMailRecord) {
Boolean aBoolean = sendMailRecordService.reSendMailRecord(sendMailRecord);
if (aBoolean) {
return AjaxResult.success("发送成功");
} else {
return AjaxResult.error("发送失败");
}
}
}
@@ -0,0 +1,127 @@
package com.ruoyi.web.controller.wisdomarbitrate.sendrecord;
import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.framework.web.service.TokenService;
import com.ruoyi.system.domain.entity.shortmessage.MeetingInfo;
import com.ruoyi.system.domain.entity.sms.MsSmsSendRecordParam;
import com.ruoyi.system.domain.entity.sms.MsSmsTemplateParam;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.mapper.shortmessage.MeetingInfoMapper;
import com.ruoyi.system.mapper.sms.MsSmsSendHistoryRecordParamMapper;
import com.ruoyi.system.mapper.sms.MsSmsSendRecordParamMapper;
import com.ruoyi.wisdomarbitrate.domain.dto.sendrecord.SmsSendRecord;
import com.ruoyi.wisdomarbitrate.domain.vo.shortmessage.MeetingInfoVO;
import com.ruoyi.wisdomarbitrate.domain.vo.shortmessage.ReSendMessageVO;
import com.ruoyi.wisdomarbitrate.mapper.sendrecord.SmsRecordMapper;
import com.ruoyi.wisdomarbitrate.service.shortmessage.ShortMessageService;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import tk.mybatis.mapper.entity.Example;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@RestController
@RequestMapping("/shortMessage")
public class ShortMessageController extends BaseController {
@Autowired
private SmsRecordMapper smsRecordMapper;
@Autowired
private ShortMessageService shortMessageService;
@Autowired
MsSmsSendRecordParamMapper recordParamMapper;
@Autowired
MsSmsSendHistoryRecordParamMapper historyRecordParamMapper;
/**
* 查询短信发送记录
*
* @param smsSendRecord
* @return
*/
@GetMapping("/recordList")
public TableDataInfo smsSendRecordList(SmsSendRecord smsSendRecord) {
startPage();
List<SmsSendRecord> list = shortMessageService.smsSendRecordList(smsSendRecord);
return getDataTable(list);
}
@Anonymous
@PostMapping("/updateSendContent")
public AjaxResult update(@RequestBody SmsSendRecord smsSendRecord) {
if (smsSendRecord == null || smsSendRecord.getId() == null || CollectionUtil.isEmpty(smsSendRecord.getTemplateParams())) {
return AjaxResult.error("参数校验失败");
}
// 查询当前版本记录
SmsSendRecord oldSendRecord = smsRecordMapper.selectById(smsSendRecord.getId());
smsSendRecord.setUpdateTime(new Date());
// 更新短信内容,先删除短信记录参数表
Example recordParamExam = new Example(MsSmsSendRecordParam.class);
recordParamExam.createCriteria().andEqualTo("smsRecordId", smsSendRecord.getId());
recordParamMapper.deleteByExample(recordParamExam);
// 新增短信记录参数表
List<MsSmsSendRecordParam> recordParams = new ArrayList<>();
for (MsSmsTemplateParam templateParam : smsSendRecord.getTemplateParams()) {
MsSmsSendRecordParam recordParam = new MsSmsSendRecordParam();
recordParam.setSmsRecordId(smsSendRecord.getId());
recordParam.setParamValue(templateParam.getParamValue());
recordParams.add(recordParam);
}
recordParamMapper.batchInsert(recordParams);
shortMessageService.insertShortMessageHistoryRecord(oldSendRecord, recordParams);
return AjaxResult.success();
}
/**
* 重新发送短信
*/
@Anonymous
@PostMapping("/reSendShortMessage")
public AjaxResult reSendShortMessage(@RequestBody ReSendMessageVO reSendMessageVO) {
if (reSendMessageVO != null) {
AjaxResult result = shortMessageService.reSendShortMessage(reSendMessageVO);
return result;
}
return AjaxResult.error("参数缺失");
}
@Autowired
MeetingInfoMapper meetingInfoMapper;
@Autowired
SysUserMapper sysUserMapper;
@Autowired
private TokenService tokenService;
/**
* 查询UID好的密钥
*/
@Anonymous
@GetMapping("/getMeetingInfo")
public Object getEncryptInfoByUid(@RequestParam(name = "authId", required = true) String authId) {
MeetingInfoVO result = new MeetingInfoVO();
if (authId != null) {
MeetingInfo meetingInfo = meetingInfoMapper.selectByPrimaryKey(authId);
if (meetingInfo != null && meetingInfo.getUserId() != null) {
BeanUtils.copyProperties(meetingInfo, result);
SysUser sysUser = sysUserMapper.selectUserById(meetingInfo.getUserId());
LoginUser loginUser = new LoginUser();
loginUser.setUserId(sysUser.getUserId());
loginUser.setUser(sysUser);
String token = tokenService.createVideoToken(loginUser, 120);
// String createToken = createToken(claims);
result.setToken(token);
}
return result;
}
return AjaxResult.error("查询失败");
}
}
@@ -0,0 +1,55 @@
package com.ruoyi.web.controller.wisdomarbitrate.sms;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.system.domain.entity.sms.MsSmsTemplate;
import com.ruoyi.wisdomarbitrate.service.sms.SMSTemplateService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* 短信模板控制器
*/
@RestController
@RequestMapping("/smsTemplate")
public class SMSTemplateController extends BaseController {
@Autowired
private SMSTemplateService templateService;
/**
* 查询
* @param
* @return
*/
@GetMapping("/page")
public TableDataInfo page( ){
startPage();
List<MsSmsTemplate> list = templateService.page();
return getDataTable(list);
}
/**
* 新增或者修改
* @param
* @return
*/
@PostMapping("/insert")
public AjaxResult insert(@RequestBody MsSmsTemplate template){
return templateService.insert(template);
}
/**
* 删除
* @param
* @return
*/
@PostMapping("/delete")
public AjaxResult delete(@RequestBody MsSmsTemplate template){
if(template.getId()==null){
return AjaxResult.warn("id不能为空");
}
return templateService.delete(template.getId());
}
}
@@ -6,7 +6,8 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://121.40.189.20:3306/mediation_system?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=true&serverTimezone=Asia/Shanghai&useSSL=false
# url: jdbc:mysql://121.40.189.20:3306/mediation_system?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=true&serverTimezone=Asia/Shanghai&useSSL=false
url: jdbc:mysql://121.40.189.20:3306/mediation_system_prod?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true&useSSL=true&serverTimezone=Asia/Shanghai&useSSL=false
username: root
password: YMzc157#
# 从库数据源
+42 -15
View File
@@ -17,8 +17,8 @@ ruoyi:
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8080
port: 6001
# 测试环境6001,开发环境7001
port: 7001
servlet:
# 应用的访问路径
context-path: /
@@ -72,7 +72,7 @@ spring:
host: 121.40.189.20
# 端口,默认为6379
port: 6389
# 数据库索引
# TODO 数据库索引,测试环境1,正式环境0
database: 0
# 密码
password:
@@ -90,7 +90,7 @@ spring:
max-wait: -1ms
web:
resources:
static-locations: file:/home/ruoyi/
static-locations: file:/home/ruoyi/
mail:
host: smtp.163.com
port: 25
@@ -121,7 +121,7 @@ token:
# 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期(默认30分钟)
expireTime: 30
expireTime: 120
# MyBatis配置
mybatis:
@@ -166,13 +166,17 @@ elegent:
alipay:
appId: 2021003141676135
callback:
domain: http://121.40.189.20:9001/
# TODO
domain: http://121.40.189.20:7001/
watch: true
cycle: 10
identityAuthentication:
credentialSecretId: AKID3xfHgroY4MQHvLXUXMwIQL1UjmbBX1Tv
credentialSecretKey: INDrIXcT8YmomZBcsy0oNirnU0LTN4X7
# 小程序端人脸核身商户id
merchantId: 0NSJ2309281116194321
# pc端人脸核身商户id
pcMerchantId: 0NSJ2404231626029804
privateKeyHexDecodeinfo: 4c3b311bf7b98969994e85928e069574a1e95777f24d1c510679cc3c2f460faf
# 腾讯云即时通信相关配置
imConfig:
@@ -184,15 +188,38 @@ imConfig:
secretId: AKID3xfHgroY4MQHvLXUXMwIQL1UjmbBX1Tv
# 腾讯云密钥
secretKey: INDrIXcT8YmomZBcsy0oNirnU0LTN4X7
#jodconverter:
# local:
# host: 121.40.189.20
# TODO 调解机构代码配置
organizeConfig:
# creditCode
creditCode: 910000870060480009
# TODO 引入仲裁系统url配置
arbitrateConfig:
url: http://121.40.189.20:9001/callArbitrateCaseApplication/generateCaseApplication
smsURL: http://121.40.189.20:9001/shortMessage/smsCallBack
# TODO 回调通知
signSealCallbackConfig:
url: http://121.40.189.20:7001/mssignSeal/signSeaalCaseApplicaCallback
# onlyOffice系统url配置
onlyOfficeConfig:
# url: http://172.16.0.254:9090/files/upload
url: http://121.40.189.20:9090/files/upload
# 北明
BMConfig:
userName: BWT_MEDIATION
password: 86251b190e3a40f3942v215d1762c663
syncSource: BWT_MEDIATION
#jodconverter:
# local:
# host: 121.40.189.20
#暂时关闭预览,启动时会有点慢
# enabled: true
# enabled: true
#设置libreoffice主目录 linux地址如:/usr/lib64/libreoffice
# office-home: /usr/lib64/libreoffice/
# office-home: D:\app\libreOffice\
#开启多个libreoffice进程,每个端口对应一个进程
# port-numbers: 8100
#libreoffice进程重启前的最大进程数
# office-home: /usr/lib64/libreoffice/
# office-home: D:\app\libreOffice\
#开启多个libreoffice进程,每个端口对应一个进程
# port-numbers: 8100
#libreoffice进程重启前的最大进程数
# max-tasks-per-process: 100
beimingapihost: https://zj.odrcloud.cn
beimingapiprefix: /onestop/sync
beimingprivatekey: d7724e72c4be93196a35203e8379ded5
-22
View File
@@ -1,24 +1,2 @@
Application Version: ${ruoyi.version}
Spring Boot Version: ${spring-boot.version}
////////////////////////////////////////////////////////////////////
// _ooOoo_ //
// o8888888o //
// 88" . "88 //
// (| ^_^ |) //
// O\ = /O //
// ____/`---'\____ //
// .' \\| |// `. //
// / \\||| : |||// \ //
// / _||||| -:- |||||- \ //
// | | \\\ - /// | | //
// | \_| ''\---/'' | | //
// \ .-\__ `-` ___/-. / //
// ___`. .' /--.--\ `. . ___ //
// ."" '< `.___\_<|>_/___.' >'"". //
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
// \ \ `-. \_ __\ /__ _/ .-` / / //
// ========`-.____`-.___\_____/___.-`____.-'======== //
// `=---=' //
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
// 佛祖保佑 永不宕机 永无BUG //
////////////////////////////////////////////////////////////////////
+6 -1
View File
@@ -200,7 +200,7 @@
<dependency>
<groupId>com.tencentcloudapi</groupId>
<artifactId>tencentcloud-sdk-java</artifactId>
<version>3.1.876</version>
<version>3.1.962</version>
</dependency>
<dependency>
@@ -283,6 +283,11 @@
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.12.RELEASE</version>
</dependency>
</dependencies>
@@ -0,0 +1,25 @@
package com.ruoyi.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
@Configuration
public class RestTemplateConfig {
@Bean
public RestTemplate restTemplate(ClientHttpRequestFactory factory){
return new RestTemplate(factory);
}
@Bean
public ClientHttpRequestFactory simpleClientHttpRequestFactory(){
SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
factory.setReadTimeout(5000);//单位为ms
factory.setConnectTimeout(5000);//单位为ms
return factory;
}
}
@@ -11,6 +11,11 @@ public class CacheConstants
* 登录用户 redis key
*/
public static final String LOGIN_TOKEN_KEY = "login_tokens:";
/**
* 登录用户名 redis key
*/
public static final String LOGIN_USERNAME_TOKEN_KEY = "login_username_tokens:";
/**
* 验证码 redis key
@@ -42,4 +47,22 @@ public class CacheConstants
*/
public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
public static final String WE_CHAT_SMS_VERIFY_CODE_KEY="we_chat_sms_verify_code:";
public static final String EMAIL_VERIFY_CODE_KEY="email_verify_code:";
/**
* 案件 redis key
*/
public static final String CASE_KEY = "case_codes:";
/**
* 所有用户 redis key
*/
public static final String USER_KEY = "user_key:";
/**
* 用户邮箱 redis key
*/
// public static final String USER_EMAIL_KEY = "user_email_key:";
/**
* 角色 redis key
*/
public static final String ROLE_KEY = "role_key:";
}
@@ -1,58 +0,0 @@
package com.ruoyi.common.constant;
/**
* 立案申请案件状态
*
*/
public class CaseApplicationConstants {
/** 立案申请 */
public static final int CASE_APPLICATION = 0;
/** 待立案审查 */
public static final int CASE_CHECK = 1;
/** 待缴费 */
public static final int PENDING_PAYMENT = 2;
/** 待缴费确认 */
public static final int PENDING_PAYMENT_CONFIRM = 3;
/** 待案件质证 */
public static final int CASE_CROSSEXAMI = 4;
/** 待组庭 */
public static final int PENDING_TRIAL = 26;
/** 待组庭审核 */
public static final int CONFIRMDED_PENDING_TRIAL_SUBMMIT = 5;
/** 待组庭确定 */
public static final int CONFIRMDED_PENDING_TRIAL = 6;
/** 待审核仲裁方式 */
public static final int CHECK_ARBITRATION_METHOD = 7;
/** 待开庭审理 */
public static final int PENDING_OPENCOURT_HEAR = 8;
/** 待书面审理 */
public static final int PENDING_WRIITEN_HEAR = 9;
/** 待生成仲裁文书 */
public static final int GENERATED_ARBITRATION = 10;
/**待秘书核验仲裁文书*/
public static final int VERPRIF_ARBITRATION = 11;
/**待部门长审核仲裁文书*/
public static final int CHECK_ARBITRATION = 12;
/**待仲裁文书签名*/
public static final int SIGN_ARBITRATION = 13;
/** 待仲裁文书用印 */
public static final int ARBITRATED_SEAL = 14;
/** 待仲裁文书送达 */
public static final int ARBITRATION_DELIVERY = 15;
/** 待案件归档*/
public static final int CASE_FILING = 16;
/** 已归档*/
public static final int CASE_ARCHIVED = 17;
/** 待修改开庭时间*/
public static final int MODIFY_HEARDATE = 31;
/**待仲裁员审核仲裁文书*/
public static final int HEAD_CHECK_ARBITRATION = 18;
}
@@ -7,8 +7,7 @@ import io.jsonwebtoken.Claims;
*
* @author ruoyi
*/
public class Constants
{
public class Constants {
/**
* UTF-8 字符集
*/
@@ -95,6 +94,10 @@ public class Constants
* 令牌前缀
*/
public static final String LOGIN_USER_KEY = "login_user_key";
/**
* 会议主键Id
*/
public static final String MEETING_KEY = "meeting_key";
/**
* 用户ID
@@ -141,21 +144,23 @@ public class Constants
*/
public static final String LOOKUP_LDAPS = "ldaps:";
public static final String DEFAULT_PASSWORD = "123456";
public static final String SPLIT_COMMA =",";
// 英文逗号分隔符
public static final String SPLIT_COMMA = ",";
// 中文逗号分隔符
public static final String CN_SPLIT_COMMA = ",";
/**
* 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全)
*/
public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.ruoyi" };
public static final String[] JSON_WHITELIST_STR = {"org.springframework", "com.ruoyi"};
/**
* 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
*/
public static final String[] JOB_WHITELIST_STR = { "com.ruoyi" };
public static final String[] JOB_WHITELIST_STR = {"com.ruoyi"};
/**
* 定时任务违规的字符
*/
public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
"org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config" };
public static final String[] JOB_ERROR_STR = {"java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config"};
}
@@ -68,7 +68,7 @@ public class UserConstants
* 用户名长度限制
*/
public static final int USERNAME_MIN_LENGTH = 2;
public static final int USERNAME_MAX_LENGTH = 20;
public static final int USERNAME_MAX_LENGTH = 50;
/**
* 密码长度限制
@@ -19,6 +19,7 @@ import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import java.beans.PropertyEditorSupport;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -83,6 +84,9 @@ public class BaseController
@SuppressWarnings({ "rawtypes", "unchecked" })
protected TableDataInfo getDataTable(List<?> list)
{
if(list == null){
list=new ArrayList<>();
}
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setMsg("查询成功");
@@ -112,7 +116,7 @@ public class BaseController
*/
public AjaxResult success(String message)
{
return AjaxResult.success(message);
return AjaxResult .success(message);
}
/**
@@ -0,0 +1,26 @@
package com.ruoyi.common.core.domain.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Classname SMSNotice
* @Description 消息通知
* @Version 1.0.0
* @Date 2024/3/26 11:13
* @Created wangqiong
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SMSNotice {
/**
* 申请人通知
*/
private SMSNoticeDO applicantNotice;
/**
* 被申通知
*/
private SMSNoticeDO resNotice;
}
@@ -0,0 +1,34 @@
package com.ruoyi.common.core.domain.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* @Classname SMSNoticeDO
* @Description 消息通知实体
* @Version 1.0.0
* @Date 2024/3/26 11:10
* @Created wangqiong
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SMSNoticeDO {
/**
* 主题
*/
private String subject;
/**
* 发送内容
*/
private String content;
/**
* 模板id
*/
private String templateId;
/**
* 模板参数
*/
private String[] templateParamSet;
}
@@ -1,14 +1,15 @@
package com.ruoyi.common.core.domain.entity;
import java.util.ArrayList;
import java.util.List;
import com.ruoyi.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.ArrayList;
import java.util.List;
/**
* 部门表 sys_dept
@@ -54,6 +55,68 @@ public class SysDept extends BaseEntity
/** 父部门名称 */
private String parentName;
/**
* 代码(统一社会信用代码或者身份证号)
*/
private String code;
/**
* 法定代表人
*/
private String compLegalPerson;
/**
* 住所
*/
private String home;
/**
* 联系地址
*/
private String address;
/**
*
* 国籍,0-国内,1-国外
*/
private Integer nationality;
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public Integer getNationality() {
return nationality;
}
public String getHome() {
return home;
}
public void setHome(String home) {
this.home = home;
}
public void setNationality(Integer nationality) {
this.nationality = nationality;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getCompLegalPerson() {
return compLegalPerson;
}
public void setCompLegalPerson(String compLegalPerson) {
this.compLegalPerson = compLegalPerson;
}
public Integer getDeptType() {
return deptType;
@@ -63,8 +63,24 @@ public class SysUser extends BaseEntity
/** 用户身份证号 */
@Excel(name = "身份证号")
private String idCard;
/** 身份类别,0-身份证,1-护照,默认0 */
private Integer idType;
/** 国籍,0-国内,1-国外,默认0 */
private Integer nationality;
/**
* 生日
*/
private Date birth;
/**
* 住所
*/
private String home;
/**
* 联系地址
*/
private String address;
/** 用户邮箱 */
@Excel(name = "用户邮箱")
@@ -136,6 +152,54 @@ public class SysUser extends BaseEntity
this.userId = userId;
}
public Date getBirth() {
return birth;
}
public void setBirth(Date birth) {
this.birth = birth;
}
public String getHome() {
return home;
}
public void setHome(String home) {
this.home = home;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public List<SysDept> getDepts() {
return depts;
}
public void setDepts(List<SysDept> depts) {
this.depts = depts;
}
public Integer getIdType() {
return idType;
}
public void setIdType(Integer idType) {
this.idType = idType;
}
public Integer getNationality() {
return nationality;
}
public void setNationality(Integer nationality) {
this.nationality = nationality;
}
public Long getUserId()
{
return userId;
@@ -361,6 +425,8 @@ public class SysUser extends BaseEntity
.append("deptIds", getDeptIds())
.append("userName", getUserName())
.append("idCard", getIdCard())
.append("idType", getIdType())
.append("nationality", getNationality())
.append("nickName", getNickName())
.append("email", getEmail())
.append("phonenumber", getPhonenumber())
@@ -26,12 +26,36 @@ public class LoginBody
* 唯一标识
*/
private String uuid;
/**
* 密文:BM+用户名用MD5加密
*/
private String ticket;
/**
* 角色名,申请人,被申请人,委托代理人
*/
private String roleName;
public String getRoleName() {
return roleName;
}
public void setRoleName(String roleName) {
this.roleName = roleName;
}
public String getUsername()
{
return username;
}
public String getTicket() {
return ticket;
}
public void setTicket(String ticket) {
this.ticket = ticket;
}
public void setUsername(String username)
{
this.username = username;
@@ -16,10 +16,13 @@ public enum AnnexTypeEnum implements EnumsInterface {
PAYMENT_RECEIPT(4, "申请人缴费单"),
MEETING_VIDEO(5, "会议视频"),
MEDIATE(6, "庭审笔录"),
MEDIATE_BOOK(7, "调解书"),
MEDIATE_BOOK(7, "调解书或和解协议"),
MEDIATION_FILES(8, "调解资料"),
RES_PAYMENT_RECEIPT(9, "被申请人缴费单"),
SEAL_PICTURE(10, "印章图片"),
FLOW_SVG(11, "流程节点SVG"),
MEETING_FILE(12, "被申请人证据"),
MEDIATE_BOOK_PDF(13, "PDF调解书或和解协议"),
;
@@ -0,0 +1,15 @@
package com.ruoyi.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* 案件附件操作类型
*/
@AllArgsConstructor
@Getter
public enum AttachmentOperateTypeEnum {
ADD("ADD", "新增"), DEL("DEL", "删除"), UPD("UPD", "修改");
private String code;
private String name;
}
@@ -0,0 +1,18 @@
package com.ruoyi.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public enum DocumentTypeEnum {
EVEDENT_METERIAL("EVEDENT_METERIAL", "证据材料", 1),
EVEDENT_APPLY_BOOK("EVEDENT_APPLY_BOOK", "调解申请书", 2),
EVEDENT_MEDIATION_VIDEO("EVEDENT_MEDIATION_VIDEO", "调解视频", 3),
EVEDENT_MEDIATION_RECORD("EVEDENT_MEDIATION_RECORD", "调解笔录", 4),
EVEDENT_AGREEMENT("EVEDENT_AGREEMENT", "调解书或和解协议", 5),
;
private String code;
private String name;
private Integer value;
}
@@ -0,0 +1,13 @@
package com.ruoyi.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@AllArgsConstructor
@Getter
public enum PushCaseStatusEnum {
MEDIATE("MEDIATE", "调解中", 1), SUCCESS("SUCCESS", "调解成功", 2), FAIL("FAIL", "调解失败", 3);
private String code;
private String name;
private Integer value;
}
@@ -0,0 +1,64 @@
package com.ruoyi.common.enums;
import com.ruoyi.common.interfaces.EnumsInterface;
/**
* @author wangqiong
* @description 短信状态枚举
* @date 2023-11-17 14:05
*/
public enum SMSStatusEnum implements EnumsInterface
{
SUCCESS(1, "成功"),
SENDING(2, "发送中"),
FAIL(3, "失败"),
;
private final Integer code;
private final String text;
SMSStatusEnum(Integer code, String text)
{
this.code = code;
this.text = text;
}
public Integer getCode()
{
return code;
}
public String getText()
{
return text;
}
/**
* 根据code获取text
* @param codeNo
* @return
*/
public static String getTextByCode(Integer codeNo){
for (SMSStatusEnum value : SMSStatusEnum.values()) {
if (value.getCode().equals(codeNo)){
return value.getText();
}
}
return codeNo.toString();
}
/**
* 根据text获取code
* @param textStr
* @return
*/
public static String getCodeByText(String textStr){
for (SMSStatusEnum value : SMSStatusEnum.values()) {
if (value.getText().equals(textStr)){
return value.getText();
}
}
return textStr;
}
}
@@ -10,9 +10,10 @@ import com.ruoyi.common.interfaces.EnumsInterface;
* @Created wangqiong
*/
public enum TemplateTypeEnum implements EnumsInterface {
MEDIATION_APPLICATION(1, "调解申请书模板"),
MEDIATION_APPLICATION(1, "机构调解申请书模板"),
MEDIATION_AGREEMENT(2, "和解协议模板"),
MEDIATE_BOOK(3, "调解书模板"),
PERSON_MEDIATION_APPLICATION(4, "自然人调解申请书模板"),
@@ -1,10 +1,12 @@
package com.ruoyi.common.utils;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.utils.uuid.UUID;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.mail.MailException;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.JavaMailSenderImpl;
@@ -45,12 +47,12 @@ public class EmailOutUtil {
// private static String fromOut;
@Value("${spring.mail.host}")
private String hostOut;
// @Value("${spring.mail.username}")
// private String usernameOut;
private String usernameOut="wq18792927508@163.com";
// @Value("${spring.mail.password}")
// private String passwordOut;
private String passwordOut= "WDFHKSEMCKVRELEA";
@Value("${spring.mail.username}")
private String usernameOut;
@Value("${spring.mail.password}")
private String passwordOut;
@Value("${spring.mail.port}")
private Integer portOut;
@@ -72,18 +74,29 @@ public class EmailOutUtil {
* @param subject 邮件主题
* @param content 邮件内容(发送内容)
*/
public void sendMessage(String to, String subject, String content, String from, JavaMailSender mailSender) {
// 创建一个邮件对象
SimpleMailMessage msg = new SimpleMailMessage();
msg.setFrom(from);
msg.setTo(to);
// 设置邮件主题
msg.setSubject(subject);
// 设置邮件内容
msg.setText(content);
// 发送邮件
mailSender.send(msg);
////System.out.println("发送成功:" + from + ":to:" + to);
public Boolean sendMessage(String to, String subject, String content, String from, JavaMailSender mailSender) {
try {
if(mailSender==null){
mailSender= rebuildMailSender();
}
// 创建一个邮件对象
SimpleMailMessage msg = new SimpleMailMessage();
if(StrUtil.isEmpty(from)){
msg.setFrom(usernameOut);
}else {
msg.setFrom(from);
}
msg.setTo(to);
// 设置邮件主题
msg.setSubject(subject);
// 设置邮件内容
msg.setText(content);
// 发送邮件
mailSender.send(msg);
} catch (MailException e) {
return false;
}
return true;
}
/**
@@ -91,8 +104,9 @@ public class EmailOutUtil {
* @param message 邮件内容
* @param subject 邮件主题
* @param fileList 邮件附件
* @param fileNameMap 附件名称map,附件路径-附件名称
*/
public Boolean sendEmil(String to, String message, String subject, List<File> fileList, File file) {
public Boolean sendEmil(String to, String message, String subject, List<File> fileList, File file,Map<String,String> fileNameMap) {
try {
String messageContent = "<html><body><p style=\"font-family: Arial, sans-serif; font-size: 18px;\">"+message+"。</p></body></html>";
MimeBodyPart messageBodyPart = new MimeBodyPart();
@@ -149,7 +163,10 @@ public class EmailOutUtil {
for (File tempfile : fileList) {
MimeBodyPart attachmentPart = new MimeBodyPart();
attachmentPart.attachFile(tempfile);
attachmentPart.setFileName(MimeUtility.encodeText(tempfile.getName()));
// 设置附件名称
if(fileNameMap!=null && fileNameMap.containsKey(tempfile.getPath())) {
attachmentPart.setFileName(MimeUtility.encodeText(fileNameMap.get(tempfile.getPath())));
}
multipart.addBodyPart(attachmentPart);
}
msg.setContent(multipart);
@@ -4,10 +4,7 @@ import lombok.extern.slf4j.Slf4j;
import javax.mail.*;
import javax.mail.internet.MimeMessage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
@Slf4j
public final class EmailUtil {
@@ -27,8 +24,8 @@ public final class EmailUtil {
BodyPart bodyPart = multipart.getBodyPart(i);
if(bodyPart.getContentType().contains("Message/Rfc822")){
MimeMessage mimeMessage = new MimeMessage(session, bodyPart.getInputStream());
if(mimeMessage.getSubject()!=null&&mimeMessage.getSubject().contains("裁决书")){
String[] split = mimeMessage.getSubject().split("裁决书");
if(mimeMessage.getSubject()!=null&&mimeMessage.getSubject().contains("调解书")){
String[] split = mimeMessage.getSubject().split("调解书");
if(split.length>0){
return split[0];
}
@@ -0,0 +1,128 @@
package com.ruoyi.common.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import java.nio.charset.StandardCharsets;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.Security;
import java.util.UUID;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.Mac;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
@Slf4j
public class EncryptUtils {
static {
Security.addProvider(new BouncyCastleProvider());
}
/**
* sm4加密
* @explain 加密模式:ECB 密文长度不固定,会随着被加密字符串长度的变化而变化
* @param paramStr 待加密字符串
* @return 返回16进制的加密字符串
* @throws Exception
*/
public static String sm4Encrypt(String paramStr, String secretKey) {
if (StringUtils.isBlank(paramStr)) {
return null;
}
try {
// 16进制字符串-->byte[]
byte[] keyData = ByteUtils.fromHexString(secretKey);
// String-->byte[]
byte[] srcData = paramStr.getBytes(StandardCharsets.UTF_8);
// 加密后的数组
Cipher cipher = Cipher.getInstance("SM4/ECB/PKCS5Padding", BouncyCastleProvider.PROVIDER_NAME);
Key sm4Key = new SecretKeySpec(keyData, "SM4");
cipher.init(Cipher.ENCRYPT_MODE, sm4Key);
byte[] cipherArray = cipher.doFinal(srcData);
// byte[]-->hexString
return ByteUtils.toHexString(cipherArray);
} catch (Exception e) {
log.error("sm4加密失败:{}", paramStr, e);
}
return null;
}
/**
* sm4解密
* @explain 解密模式:采用ECB
* @param cipherText 16进制的加密字符串(忽略大小写)
* @return 解密后的字符串
* @throws Exception
*/
public static String sm4Decrypt(String cipherText, String secretKey) {
if (StringUtils.isBlank(cipherText)) {
return null;
}
try {
// hexString-->byte[]
byte[] keyData = ByteUtils.fromHexString(secretKey);
// hexString-->byte[]
byte[] cipherData = ByteUtils.fromHexString(cipherText);
// 解密
Cipher cipher = Cipher.getInstance("SM4/ECB/PKCS5Padding", BouncyCastleProvider.PROVIDER_NAME);
Key sm4Key = new SecretKeySpec(keyData, "SM4");
cipher.init(Cipher.DECRYPT_MODE, sm4Key);
byte[] cipherArray = cipher.doFinal(cipherData);
// byte[]-->String
return new String(cipherArray, StandardCharsets.UTF_8);
} catch (Exception e) {
log.error("sm4解密失败:{}", cipherText, e);
}
return null;
}
/**
* @description: 初始化 HmacMD5 密钥
*/
public static String initHmacMD5Key() throws NoSuchAlgorithmException {
//Init KeyGenerator.
KeyGenerator generator = KeyGenerator.getInstance("HmacSHA224");
//Generate key.
SecretKey secretKey = generator.generateKey();
return ByteUtils.toHexString(secretKey.getEncoded());
}
/**
* @description: HmacMD5 消息摘要
*/
public static String encodeHmacMD5(String data, String key) throws NoSuchAlgorithmException, InvalidKeyException {
//Restore key.
SecretKey secretKey = new SecretKeySpec(ByteUtils.fromHexString(key), "HmacSHA224");
//Instantiate Mac.
Mac mac = Mac.getInstance(secretKey.getAlgorithm());
//Init Mac.
mac.init(secretKey);
//Execute.
return ByteUtils.toHexString(mac.doFinal(ByteUtils.fromHexString(data)));
}
public static void main(String[] args) {
String privateKey = "936df5fd9aba3b86adc3c1a1c52dcde1";
ObjectNode param = new ObjectMapper().createObjectNode();
param.put("userName", "张三");
param.put("caseNo", "ZC1234125");
param.put("userId", "124124");
param.put("roomId", "124125");
param.put("systemType", "tiaojiexitong");
String encryptString = sm4Encrypt(param.toString(), privateKey);
System.out.println("加密后的字符串:" + encryptString);
String uid = UUID.randomUUID().toString().replace("-", "");
System.out.println("uid:" + uid);
System.out.println("解密后的字符串:" + sm4Decrypt(encryptString, privateKey));
}
}
@@ -4,22 +4,16 @@ import com.documents4j.api.DocumentType;
import com.documents4j.api.IConverter;
import com.documents4j.job.LocalConverter;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfWriter;
import com.itextpdf.tool.xml.XMLWorkerFontProvider;
import com.itextpdf.tool.xml.XMLWorkerHelper;
import com.ruoyi.common.config.RuoYiConfig;
import com.tencentcloudapi.teo.v20220901.models.CC;
import lombok.extern.slf4j.Slf4j;
import java.io.*;
import java.nio.charset.Charset;
import java.nio.file.Files;
import static cn.hutool.core.util.ClassLoaderUtil.getClassLoader;
/**
* @author wangqiong
* @description pdf转换工具类
@@ -44,7 +38,7 @@ public class PdfUtils {
document.setMarginMirroring(false);
document.open();
// 解决PDF中文不显示
String fontPath = "/D:/simsun.ttf"; //字体文件路径
String fontPath = "/home/ruoyi/uploadPath/songfont/simsun.ttf"; //字体文件路径
XMLWorkerFontProvider provider = new XMLWorkerFontProvider(XMLWorkerFontProvider.DONTLOOKFORFONTS);
provider.register(fontPath);//注册字体
log.error("注册字体");
@@ -1,104 +0,0 @@
package com.ruoyi.common.utils;
import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
import com.tencentcloudapi.sms.v20210111.models.SendStatus;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import lombok.var;
import java.util.Objects;
@Slf4j
public class SmsUtils {
//应用id
private static final String SDK_APP_ID = "1400854852";
//API的SecretId
private static final String SECRET_ID = "AKIDeEf2A8uX1HSainvvnXAc3X9ZlhtyvkMp";
//API的SecretKey
private static final String SECRET_KEY = "QjphKo8zkHZigT8j9PVtFPJyfIvO3d6V";
//签名内容
private static final String SIGN_NAME = "乙巢智慧仲裁网";
public static Boolean sendSms(SendSmsRequest request) {
Credential cred = new Credential(SECRET_ID, SECRET_KEY );
SmsClient client = new SmsClient(cred, "ap-guangzhou");
final var req = new com.tencentcloudapi.sms.v20210111.models.SendSmsRequest();
req.setPhoneNumberSet(new String[]{"+86" + request.getPhone()});
req.setSmsSdkAppId(SDK_APP_ID );
req.setSignName(SIGN_NAME);
req.setTemplateId(request.getTemplateId());
req.setTemplateParamSet(request.getTemplateParamSet());
SendSmsResponse res = null;
try {
res = client.SendSms(req);
} catch (TencentCloudSDKException e) {
log.error("发送短信出错:", e);
return Boolean.FALSE;
}
SendStatus sendStatus = res.getSendStatusSet()[0];
log.info("发送短信结果:Code={}, Message={}", sendStatus.getCode(), sendStatus.getMessage());
if (Objects.nonNull(res.getSendStatusSet()) && res.getSendStatusSet().length > 0 && "Ok".equals(res.getSendStatusSet()[0].getCode())){
return Boolean.TRUE;
}
return Boolean.FALSE;
}
public static Boolean sendSms(Long caseId,String templateId,String phone,String[] templateParamSet) {
SendSmsRequest request = new SendSmsRequest(phone,templateId,templateParamSet,caseId);
Credential cred = new Credential(SECRET_ID, SECRET_KEY );
SmsClient client = new SmsClient(cred, "ap-guangzhou");
final var req = new com.tencentcloudapi.sms.v20210111.models.SendSmsRequest();
req.setPhoneNumberSet(new String[]{"+86" + request.getPhone()});
req.setSmsSdkAppId(SDK_APP_ID );
req.setSignName(SIGN_NAME);
req.setTemplateId(request.getTemplateId());
req.setTemplateParamSet(request.getTemplateParamSet());
SendSmsResponse res = null;
try {
res = client.SendSms(req);
} catch (TencentCloudSDKException e) {
log.error("发送短信出错:", e);
return Boolean.FALSE;
}
SendStatus sendStatus = res.getSendStatusSet()[0];
log.info("发送短信结果:Code={}, Message={}", sendStatus.getCode(), sendStatus.getMessage());
if (Objects.nonNull(res.getSendStatusSet()) && res.getSendStatusSet().length > 0 && "Ok".equals(res.getSendStatusSet()[0].getCode())){
return Boolean.TRUE;
}
return Boolean.FALSE;
}
/**
* 参数对象
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class SendSmsRequest {
/**
* 电话
*/
private String phone;
/**
* 模板 ID: 必须填写已审核通过的模板 ID
*/
private String templateId;
/**
* 模板参数: 模板参数的个数需要与 TemplateId 对应模板的变量个数保持一致,若无模板参数,则设置为空
*/
private String[] templateParamSet;
private Long caseId;
}
}
@@ -1,26 +1,19 @@
package com.ruoyi.common.utils;
import cn.hutool.core.io.resource.ClassPathResource;
import com.deepoove.poi.XWPFTemplate;
import com.deepoove.poi.config.Configure;
import com.deepoove.poi.data.*;
import com.deepoove.poi.data.style.ParagraphStyle;
import com.deepoove.poi.data.style.Style;
import com.deepoove.poi.policy.PictureRenderPolicy;
import com.deepoove.poi.util.PoitlIOUtils;
import org.apache.commons.io.FileUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.wp.usermodel.Paragraph;
import org.apache.poi.xwpf.usermodel.*;
import javax.print.Doc;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -205,6 +198,24 @@ public class WordUtil {
}
}
/**
* 替换标签内容
* @param map
* @param templatePath 模板路径
* @param outputPath 文件输出路径
*/
public static void render(Map<String, Object> map,String templatePath,String outputPath){
XWPFTemplate template = XWPFTemplate.compile(templatePath).render(map);
try {
FileOutputStream out = new FileOutputStream(outputPath);
template.write(out);
out.flush();
out.close();
template.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
@@ -16,8 +16,9 @@ public class MimeTypeUtils
public static final String IMAGE_BMP = "image/bmp";
public static final String IMAGE_GIF = "image/gif";
public static final String IMAGE_SVG = "image/svg";
public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png" };
public static final String[] IMAGE_EXTENSION = { "bmp", "gif", "jpg", "jpeg", "png","svg" };
public static final String[] FLASH_EXTENSION = { "swf", "flv" };
@@ -28,7 +29,7 @@ public class MimeTypeUtils
public static final String[] DEFAULT_ALLOWED_EXTENSION = {
// 图片
"bmp", "gif", "jpg", "jpeg", "png",
"bmp", "gif", "jpg", "jpeg", "png","svg",
// word excel powerpoint
"doc", "docx", "xls", "xlsx", "ppt", "pptx", "html", "htm", "txt",
// 压缩文件
@@ -52,6 +53,8 @@ public class MimeTypeUtils
return "bmp";
case IMAGE_GIF:
return "gif";
case IMAGE_SVG:
return "svg";
default:
return "";
}
@@ -1,20 +1,13 @@
package com.ruoyi.common.utils.file;
import cn.hutool.json.JSONObject;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.ruoyi.common.config.EsignDemoConfig;
import com.ruoyi.common.constant.EsignHeaderConstant;
import com.ruoyi.common.constant.FileTransformation;
import com.ruoyi.common.core.domain.entity.EsignHttpResponse;
import com.ruoyi.common.enums.EsignRequestType;
import com.ruoyi.common.exception.EsignDemoException;
import com.ruoyi.common.utils.EsignHttpHelper;
import com.ruoyi.common.utils.bean.EsignFileBean;
import com.ruoyi.common.utils.uuid.IdUtils;
import java.time.LocalDate;
import java.util.Map;
public class SaaSAPIFileUtils {
@@ -88,43 +81,27 @@ public class SaaSAPIFileUtils {
public static void main(String[] args) throws EsignDemoException {
String filePath = "D:\\home\\ruoyi\\uploadPath\\upload\\2023\\10\\7\\23893bfd3f2249ffa5c82850c11c482e.docx";
EsignHttpResponse uploadUrl = getUploadUrl(filePath);
String body = uploadUrl.getBody();
JSONObject jsonObject = new JSONObject(body);
JSONObject dataObj = jsonObject.getJSONObject("data");
String fileUploadUrl = dataObj.get("fileUploadUrl").toString();
System.out.println("这是fileUploadUrl:"+fileUploadUrl);
String fileId = dataObj.get("fileId").toString();
System.out.println("这是fileId:"+fileId);
//String fileUploadUrl = "https://esignoss.esign.cn/1111564182/ccf6db5a-92da-4523-89ba-385a30423596/23893bfd3f2249ffa5c82850c11c482e.docx?Expires=1697021257&OSSAccessKeyId=STS.NTmgvSC8n5Zg1y7EciQftF23N&Signature=CxVZmpwFksWmLYkxPjVz9K4mVyA%3D&callback-var=eyJ4OmZpbGVfa2V5IjoiJDAyODhjOTg3LWNlNzgtNDM1OC04NWYwLTdlNmUyM2NjOTJmNiQzNDk1NzQ3MjE5In0%3D%0A&callback=eyJjYWxsYmFja1VybCI6Imh0dHA6Ly9zbWx0YXBpLnRzaWduLmNuL2FueWRvb3IvZmlsZS1zeXN0ZW0vY2FsbGJhY2svYWxpb3NzIiwiY2FsbGJhY2tCb2R5IjogIntcIm1pbWVUeXBlXCI6JHttaW1lVHlwZX0sXCJzaXplXCI6ICR7c2l6ZX0sXCJidWNrZXRcIjogJHtidWNrZXR9LFwib2JqZWN0XCI6ICR7b2JqZWN0fSxcImV0YWdcIjogJHtldGFnfSxcImZpbGVfa2V5XCI6JHt4OmZpbGVfa2V5fX0iLCJjYWxsYmFja0JvZHlUeXBlIjogImFwcGxpY2F0aW9uL2pzb24ifQ%3D%3D%0A&security-token=CAIS%2BAF1q6Ft5B2yfSjIr5fYLMznrudPgpiMM1%2BGoWM8XelYqfeYrDz2IHtKdXRvBu8Xs%2F4wnmxX7f4YlqB6T55OSAmcNZEofT7katr4MeT7oMWQweEurv%2FMQBqyaXPS2MvVfJ%2BOLrf0ceusbFbpjzJ6xaCAGxypQ12iN%2B%2Fm6%2FNgdc9FHHPPD1x8CcxROxFppeIDKHLVLozNCBPxhXfKB0ca0WgVy0EHsPnvm5DNs0uH1AKjkbRM9r6ceMb0M5NeW75kSMqw0eBMca7M7TVd8RAi9t0t1%2FIVpGiY4YDAWQYLv0rda7DOltFiMkpla7MmXqlft%2BhzcgeQY0pc%2FRqAAaxcPCSY0Du8wgErfR1llD8t2zeFG%2B1mktU4Rsl7AgxsSFxrwILBUk2x7imVsFVA0kkS8rNBMDKGIsIZTCl5M7S2L%2BD8364htwcZgIZYHK2fCN6gCuy%2Bfk9C%2FfQaTc00IWBMw8OubuJ%2Fq2mdMh32yoi7dLuJyhwt1z%2F%2BWf5vIFHdIAA%3D";
EsignHttpResponse esignHttpResponse = uploadFile(fileUploadUrl, filePath);
System.out.println("这是上传文件流的结果:"+esignHttpResponse.getBody());
EsignHttpResponse fileStatus = getFileStatus(fileId);
System.out.println("这是获取文件上传状态的结果:"+fileStatus.getBody());
// getFileStatus("a808f1f39a744357a2f018e4ab34c55d");
// fileDownloadUrl("");
fileDownloadUrl("8425b244bf4b417dbb22fd39a1c2d65f");
// Gson gson = new Gson();
// EsignHttpResponse fileDownload = fileDownloadUrl(signFlowId);
// JsonObject fileDownloadJsonObject = gson.fromJson(fileDownload.getBody(),JsonObject.class);
// JsonObject fileDownloadData = fileDownloadJsonObject.getAsJsonObject("data");
// JsonArray filesArray = fileDownloadData.get("files").getAsJsonArray();
// if(filesArray!=null&&filesArray.size()>0){
// JsonObject fileObject = (JsonObject)filesArray.get(0);
// String fileDownloadUrl = fileObject.get("downloadUrl").toString();
// String fileName = java.util.UUID.randomUUID().toString().replace("-", "") + ".pdf";
// String savePath = "/home/ruoyi/uploadPath/upload";
// LocalDate now = LocalDate.now();
// String year = Integer.toString(now.getYear());
// String month = String.format("%02d", now.getMonthValue());
// String day = String.format("%02d", now.getDayOfMonth());
// String saveName = "/profile/upload/" + year + "/" + month + "/" + day + "/" + fileName;
// String fileDownloadUrlnew = fileDownloadUrl.substring(1,fileDownloadUrl.length()-1);
// FileTransformation.downLoadFileByUrl(fileDownloadUrlnew,dir);
// }
// String filePath = "D:\\home\\ruoyi\\uploadPath\\upload\\2023\\10\\7\\23893bfd3f2249ffa5c82850c11c482e.docx";
//
// EsignHttpResponse uploadUrl = getUploadUrl(filePath);
// String body = uploadUrl.getBody();
// JSONObject jsonObject = new JSONObject(body);
// JSONObject dataObj = jsonObject.getJSONObject("data");
// String fileUploadUrl = dataObj.get("fileUploadUrl").toString();
// System.out.println("这是fileUploadUrl:"+fileUploadUrl);
// String fileId = dataObj.get("fileId").toString();
// System.out.println("这是fileId:"+fileId);
// //String fileUploadUrl = "https://esignoss.esign.cn/1111564182/ccf6db5a-92da-4523-89ba-385a30423596/23893bfd3f2249ffa5c82850c11c482e.docx?Expires=1697021257&OSSAccessKeyId=STS.NTmgvSC8n5Zg1y7EciQftF23N&Signature=CxVZmpwFksWmLYkxPjVz9K4mVyA%3D&callback-var=eyJ4OmZpbGVfa2V5IjoiJDAyODhjOTg3LWNlNzgtNDM1OC04NWYwLTdlNmUyM2NjOTJmNiQzNDk1NzQ3MjE5In0%3D%0A&callback=eyJjYWxsYmFja1VybCI6Imh0dHA6Ly9zbWx0YXBpLnRzaWduLmNuL2FueWRvb3IvZmlsZS1zeXN0ZW0vY2FsbGJhY2svYWxpb3NzIiwiY2FsbGJhY2tCb2R5IjogIntcIm1pbWVUeXBlXCI6JHttaW1lVHlwZX0sXCJzaXplXCI6ICR7c2l6ZX0sXCJidWNrZXRcIjogJHtidWNrZXR9LFwib2JqZWN0XCI6ICR7b2JqZWN0fSxcImV0YWdcIjogJHtldGFnfSxcImZpbGVfa2V5XCI6JHt4OmZpbGVfa2V5fX0iLCJjYWxsYmFja0JvZHlUeXBlIjogImFwcGxpY2F0aW9uL2pzb24ifQ%3D%3D%0A&security-token=CAIS%2BAF1q6Ft5B2yfSjIr5fYLMznrudPgpiMM1%2BGoWM8XelYqfeYrDz2IHtKdXRvBu8Xs%2F4wnmxX7f4YlqB6T55OSAmcNZEofT7katr4MeT7oMWQweEurv%2FMQBqyaXPS2MvVfJ%2BOLrf0ceusbFbpjzJ6xaCAGxypQ12iN%2B%2Fm6%2FNgdc9FHHPPD1x8CcxROxFppeIDKHLVLozNCBPxhXfKB0ca0WgVy0EHsPnvm5DNs0uH1AKjkbRM9r6ceMb0M5NeW75kSMqw0eBMca7M7TVd8RAi9t0t1%2FIVpGiY4YDAWQYLv0rda7DOltFiMkpla7MmXqlft%2BhzcgeQY0pc%2FRqAAaxcPCSY0Du8wgErfR1llD8t2zeFG%2B1mktU4Rsl7AgxsSFxrwILBUk2x7imVsFVA0kkS8rNBMDKGIsIZTCl5M7S2L%2BD8364htwcZgIZYHK2fCN6gCuy%2Bfk9C%2FfQaTc00IWBMw8OubuJ%2Fq2mdMh32yoi7dLuJyhwt1z%2F%2BWf5vIFHdIAA%3D";
// EsignHttpResponse esignHttpResponse = uploadFile(fileUploadUrl, filePath);
// System.out.println("这是上传文件流的结果:"+esignHttpResponse.getBody());
// EsignHttpResponse fileStatus = getFileStatus(fileId);
// System.out.println("这是获取文件上传状态的结果:"+fileStatus.getBody());
@@ -1,5 +1,10 @@
package com.ruoyi.framework.config;
import cn.hutool.core.util.StrUtil;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.wisdomarbitrate.service.mscase.MsCaseApplicationService;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
@@ -75,10 +80,32 @@ public class RedisConfig extends CachingConfigurerSupport
public ApplicationListener applicationListener() {
return (ApplicationListener<RedisKeyExpiredEvent>) event -> {
String key = new String(event.getSource());
// 根据key查询案件表
caseApplicationService.notAccept(key,"已超过案件受理期限五日,");
if(key.startsWith(CacheConstants.CASE_KEY)) {
String[] split = key.split(CacheConstants.CASE_KEY);
if(split.length>1 && StrUtil.isNotEmpty(split[1])) {
caseApplicationService.notAccept(split[1], "已超过案件受理期限五日,");
}
}
};
}
/**
* 获取字典缓存
*
* @param key 参数键
* @return dictDatas 字典数据列表
*/
public static String getCodeCache(String key)
{
String codeCache = SpringUtils.getBean(RedisCache.class).getCacheObject(getVerifyCodeCacheKey(key));
if (StringUtils.isNotNull(codeCache))
{
return codeCache;
}
return null;
}
private static String getVerifyCodeCacheKey(String key) {
return CacheConstants.CASE_KEY + key;
}
/**
* 限流脚本
*/
@@ -111,7 +111,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter
// 过滤请求
.authorizeRequests()
// 对于登录login 注册register 验证码captchaImage 允许匿名访问
.antMatchers("/login", "/register", "/captchaImage","/uploadPath/**","/websocket/**").permitAll()
.antMatchers("/login","/login/sso", "/register", "/captchaImage","/uploadPath/**","/websocket/**").permitAll()
// 静态资源,可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
@@ -1,33 +1,37 @@
package com.ruoyi.framework.web.service;
import javax.annotation.Resource;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.crypto.digest.MD5;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginBody;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.exception.user.*;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.framework.manager.AsyncManager;
import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.framework.security.context.AuthenticationContextHolder;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.exception.user.BlackListException;
import com.ruoyi.common.exception.user.CaptchaException;
import com.ruoyi.common.exception.user.CaptchaExpireException;
import com.ruoyi.common.exception.user.UserNotExistsException;
import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.framework.manager.AsyncManager;
import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.framework.security.context.AuthenticationContextHolder;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
import javax.annotation.Resource;
/**
* 登录校验方法
@@ -51,6 +55,10 @@ public class SysLoginService
@Autowired
private ISysConfigService configService;
@Autowired
private SysRoleMapper roleMapper;
@Autowired
private SysUserMapper userMapper;
/**
* 登录验证
@@ -63,7 +71,6 @@ public class SysLoginService
*/
public String login(String username, String password, String code, String uuid)
{
// 验证码校验
validateCaptcha(username, code, uuid);
// 登录前置校验
loginPreCheck(username, password);
@@ -99,6 +106,45 @@ public class SysLoginService
// 生成token
return tokenService.createToken(loginUser);
}
/**
* 无需验证码登录
* 重写login方法将验证码模块去掉
* @param username
* @param password
* @param uuid
* @return
*/
public String loginNoCaptcha(String username, String password, String uuid)
{
// 用户验证
Authentication authentication = null;
try
{
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password);
AuthenticationContextHolder.setContext(authenticationToken);
// 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
authentication = authenticationManager.authenticate(authenticationToken);
}
catch (Exception e)
{
if (e instanceof BadCredentialsException)
{
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
throw new UserPasswordNotMatchException();
}
else
{
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage()));
throw new ServiceException(e.getMessage());
}
}
AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
LoginUser loginUser = (LoginUser) authentication.getPrincipal();
recordLoginInfo(loginUser.getUserId());
// 生成token
return tokenService.createToken(loginUser);
}
/**
* 校验验证码
@@ -178,4 +224,68 @@ public class SysLoginService
sysUser.setLoginDate(DateUtils.getNowDate());
userService.updateUserProfile(sysUser);
}
public AjaxResult loginSSO(LoginBody loginBody) {
// MD5加密并和Ticket比对
String currentTicket = MD5.create().digestHex("BM" + loginBody.getUsername());
if(!currentTicket.equals(loginBody.getTicket())){
return AjaxResult.error("ticket校验失败");
}
AjaxResult ajax = AjaxResult.success();
String username = loginBody.getUsername();
// 根据用户名获取用户信息,如果用户不存在则新增用户
SysUser user =null;
if(username.contains("@")) {
user= userMapper.selectUserByEmail(username);
}else {
user= userService.selectUserByUserName(username);
}
if(user==null){
// 新增用户
user = new SysUser();
user.setUserName(username);
user.setPassword(SecurityUtils.encryptPassword("abc123456"));
user.setNickName(username);
if(username.contains("@")){
user.setEmail(username);
}
// 根据角色名查询角色id
Long roleIdByName = roleMapper.selectRoleIdByName(loginBody.getRoleName());
if(roleIdByName==null){
return AjaxResult.error("角色不存在");
}
user.setRoleIds( new Long[]{roleIdByName});
userService.insertUser(user);
}// 生成token
LoginUser loginUser = new LoginUser();
loginUser.setUser(user);
loginUser.setUserId(user.getUserId());
String token = tokenService.createToken(loginUser);
ajax.put("userName", user.getUserName());
ajax.put(Constants.TOKEN, token);
return ajax;
}
/**
* 对接BM,根据用户名查询token
* @param loginBody
* @return
*/
public AjaxResult selectTokenByUserName(LoginBody loginBody) {
String username = loginBody.getUsername();
String currentTicket = MD5.create().digestHex("BM" + username);
if(!currentTicket.equals(loginBody.getTicket())){
return AjaxResult.error("ticket校验失败");
}
Object cacheObject = redisCache.getCacheObject(CacheConstants.LOGIN_USERNAME_TOKEN_KEY + username);
if(ObjectUtil.isEmpty(cacheObject)){
return AjaxResult.error("登录时间过长,请重新登录");
}
AjaxResult result = AjaxResult.success();
result.put("token",(String) cacheObject);
return result;
}
}
@@ -1,15 +1,17 @@
package com.ruoyi.framework.web.service;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.system.service.ISysMenuService;
import com.ruoyi.system.service.ISysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 用户权限处理
@@ -31,13 +33,16 @@ public class SysPermissionService
* @param user 用户信息
* @return 角色权限信息
*/
public Set<String> getRolePermission(SysUser user)
public List<SysRole> getRolePermission(SysUser user)
{
Set<String> roles = new HashSet<String>();
List<SysRole> roles = new ArrayList<>();
// 管理员拥有所有权限
if (user.isAdmin())
{
roles.add("admin");
SysRole sysRole = new SysRole();
sysRole.setRoleId(1L);
sysRole.setRoleKey("admin");
roles.add(sysRole);
}
else
{
@@ -58,7 +63,9 @@ public class SysPermissionService
// 管理员拥有所有权限
if (user.isAdmin())
{
perms.add("*:*:*");
// 查询所有数据权限,排除案件管理下的权限即可
perms.addAll(menuService.selectAdminMenu());
// perms.add("*:*:*");
}
else
{
@@ -1,14 +1,5 @@
package com.ruoyi.framework.web.service;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import javax.servlet.http.HttpServletRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.model.LoginUser;
@@ -22,6 +13,16 @@ import eu.bitwalker.useragentutils.UserAgent;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
* token验证处理
@@ -119,10 +120,27 @@ public class TokenService
refreshToken(loginUser);
Map<String, Object> claims = new HashMap<>();
claims.put("userName",loginUser.getUsername());
claims.put("userId",loginUser.getUserId());
claims.put(Constants.LOGIN_USER_KEY, token);
return createToken(claims);
String createToken = createToken(claims);
redisCache.setCacheObject(CacheConstants.LOGIN_USERNAME_TOKEN_KEY+loginUser.getUsername(),createToken, expireTime, TimeUnit.MINUTES);
return createToken;
}
public String createVideoToken(LoginUser loginUser,int expireTime)
{
String token = IdUtils.fastUUID();
loginUser.setToken(token);
setUserAgent(loginUser);
refreshToken(loginUser);
Map<String, Object> claims = new HashMap<>();
claims.put("userName",loginUser.getUsername());
claims.put("userId",loginUser.getUserId());
claims.put(Constants.LOGIN_USER_KEY, token);
String createToken = createToken(claims);
redisCache.setCacheObject(CacheConstants.LOGIN_USERNAME_TOKEN_KEY+loginUser.getUsername(),createToken, expireTime, TimeUnit.MINUTES);
return createToken;
}
/**
* 验证令牌有效期,相差不足20分钟,自动刷新缓存
*
@@ -151,6 +169,7 @@ public class TokenService
// 根据uuid将loginUser缓存
String userKey = getTokenKey(loginUser.getToken());
redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
}
/**
@@ -207,14 +226,24 @@ public class TokenService
Claims claims = parseToken(token);
return claims.getSubject();
}
/**
* 从令牌中获取用户名
*
* @param token 令牌
* @return 用户名
*/
public String getUserNameFromToken(String token)
{
Claims claims = parseToken(token);
return claims.get("userName").toString();
}
/**
* 获取请求token
*
* @param request
* @return token
*/
private String getToken(HttpServletRequest request)
public String getToken(HttpServletRequest request)
{
String token = request.getHeader(header);
if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX))
+16 -16
View File
@@ -45,20 +45,20 @@
<version>2.1.5</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<!-- <build>-->
<!-- <plugins>-->
<!-- <plugin>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-maven-plugin</artifactId>-->
<!-- <configuration>-->
<!-- <excludes>-->
<!-- <exclude>-->
<!-- <groupId>org.projectlombok</groupId>-->
<!-- <artifactId>lombok</artifactId>-->
<!-- </exclude>-->
<!-- </excludes>-->
<!-- </configuration>-->
<!-- </plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>9</source><target>9</target></configuration></plugin>-->
<!-- </plugins>-->
<!-- </build>-->
</project>
@@ -1,10 +1,11 @@
package com.ruoyi.system.domain.entity.flow;
import javax.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.*;
@Getter
@Setter
@ToString
@@ -51,4 +52,9 @@ public class MsCaseFlow {
*/
@Column(name = "button_auth_flag")
private String buttonAuthFlag;
/**
* svg路径
*/
@Column(name = "file_name")
private String fileName;
}
@@ -0,0 +1,44 @@
package com.ruoyi.system.domain.entity.flow;
import java.util.Date;
import javax.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@Table(name = "ms_case_flow_role_sms_related")
public class MsCaseFlowRoleSmsRelated {
/**
* id
*/
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
/**
* 案件流程id
*/
@Column(name = "flow_id")
private Integer flowId;
/**
* 用户角色id
*/
@Column(name = "receive_role_id")
private Long receiveRoleId;
/**
* 短信模版id
*/
@Column(name = "sms_template_id")
private Long smsTemplateId;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
}
@@ -0,0 +1,56 @@
package com.ruoyi.system.domain.entity.log;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Getter
@Setter
@ToString
@Table(name = "ms_request_log")
public class MsRequestLog {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
/**
* 状态,0-成功,1-失败
*/
private Integer status;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
/**
* 请求url
*/
@Column(name = "request_url")
private String requestUrl;
/**
* 请求内容
*/
@Column(name = "content")
private String content;
/**
* 失败原因
*/
@Column(name = "reason")
private String reason;
/**
* 返回内容
*/
@Column(name = "return_content")
private String returnContent;
}
@@ -0,0 +1,60 @@
package com.ruoyi.system.domain.entity.shortmessage;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "meeting_info")
public class MeetingInfo {
/**
* 主键Id
*/
@Id
private String uid;
/**
* 案件Id
*/
@Column(name = "case_id")
private Long caseId;
/**
* 用户Id
*/
@Column(name = "user_id")
private Long userId;
/**
* 用户名称
*/
@Column(name = "user_name")
private String userName;
/**
* 房间Id
*/
@Column(name = "room_id")
private String roomId;
/**
* 系统类型
*/
@Column(name = "system_type")
private String systemType;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
}
@@ -0,0 +1,107 @@
package com.ruoyi.system.domain.entity.shortmessage;
import java.util.Date;
import javax.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@Table(name = "ms_send_mail_history_record")
public class MsSendMailHistoryRecord {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
/**
* 邮件名称
*/
@Column(name = "mail_name")
private String mailName;
/**
* 邮件接收地址
*/
@Column(name = "mail_address")
private String mailAddress;
/**
* 发送时间
*/
@Column(name = "send_time")
private Date sendTime;
/**
* 案件编号
*/
@Column(name = "case_num")
private String caseNum;
/**
* 发送状态
*/
@Column(name = "send_status")
private Long sendStatus;
/**
* 立案申请id
*/
@Column(name = "case_id")
private Long caseId;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
/**
* 创建者
*/
@Column(name = "create_by")
private String createBy;
/**
* 更新者
*/
@Column(name = "update_by")
private String updateBy;
/**
* 更新时间
*/
@Column(name = "update_time")
private Date updateTime;
/**
* 附件id用英文逗号隔开
*/
@Column(name = "file_ids")
private String fileIds;
/**
* 邮件主题
*/
@Column(name = "mail_subject")
private String mailSubject;
/**
* 邮件发送地址
*/
@Column(name = "mail_from_address")
private String mailFromAddress;
/**
* 邮件父类id
*/
@Column(name = "parent_id")
private Long parentId;
/**
* 邮件内容
*/
@Column(name = "mail_content")
private String mailContent;
}
@@ -0,0 +1,98 @@
package com.ruoyi.system.domain.entity.shortmessage;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Table(name = "ms_sms_send_history_record")
public class MsSmsSendHistoryRecord {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
/**
* 案件id
*/
@Column(name = "case_appli_id")
private Long caseAppliId;
/**
* 短信模板表主键id
*/
@Column(name = "ms_sms_template_id")
private Long msSmsTemplateId;
/**
* 案件编号
*/
@Column(name = "case_num")
private String caseNum;
/**
* 手机号
*/
private String phone;
/**
* 发送时间
*/
@Column(name = "send_time")
private Date sendTime;
/**
* 发送状态,0-失败,1-成功
*/
@Column(name = "send_status")
private Long sendStatus;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
/**
* 更新时间
*/
@Column(name = "update_time")
private Date updateTime;
/**
* 创建人
*/
@Column(name = "create_by")
private String createBy;
/**
* 更新者
*/
@Column(name = "update_by")
private String updateBy;
/**
* 发送短信唯一标识
*/
private String sid;
/**
* 父类短信id
*/
@Column(name = "parent_id")
private Long parentId;
/**
* 失败原因
*/
private String reason;
}
@@ -0,0 +1,28 @@
package com.ruoyi.system.domain.entity.sms;
import javax.persistence.*;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
@Table(name = "ms_sms_send_history_record_param")
public class MsSmsSendHistoryRecordParam {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
/**
* 短信历史记录表id
*/
@Column(name = "sms_record_history_id")
private Long smsRecordHistoryId;
/**
* 参数值
*/
@Column(name = "param_value")
private String paramValue;
}
@@ -0,0 +1,33 @@
package com.ruoyi.system.domain.entity.sms;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
@Getter
@Setter
@ToString
@Table(name = "ms_sms_send_record_param")
public class MsSmsSendRecordParam {
@Id
@GeneratedValue(generator = "JDBC")
private Integer id;
/**
* 短信记录表id
*/
@Column(name = "sms_record_id")
private Long smsRecordId;
/**
* 参数值
*/
@Column(name = "param_value")
private String paramValue;
}
@@ -0,0 +1,38 @@
package com.ruoyi.system.domain.entity.sms;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.*;
import java.util.List;
@Getter
@Setter
@ToString
@Table(name = "ms_sms_template")
public class MsSmsTemplate {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
/**
* 腾讯云模板id
*/
@Column(name = "template_id")
private String templateId;
/**
* 模板名称
*/
private String name;
/**
* 模板内容
*/
private String content;
/**
* 模板参数
*/
@Transient
private List<MsSmsTemplateParam> templateParams;
}
@@ -0,0 +1,38 @@
package com.ruoyi.system.domain.entity.sms;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.*;
@Getter
@Setter
@ToString
@Table(name = "ms_sms_template_param")
public class MsSmsTemplateParam {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
/**
* ms_sms_template表id
*/
@Column(name = "sms_template_id")
private Long smsTemplateId;
/**
* 参数
*/
private String param;
/**
* 参数名
*/
@Column(name = "param_name")
private String paramName;
/**
* 参数值
*/
@Transient
private String paramValue;
}
@@ -0,0 +1,28 @@
package com.ruoyi.system.domain.vo.flow;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public class MsBaseCaseFlow {
/**
* 主键id
*/
private Integer id;
/**
* 顺序
*/
private Integer sort;
/**
* 案件状态名称
*/
private String caseStatusName;
}
@@ -0,0 +1,39 @@
package com.ruoyi.system.domain.vo.flow;
import com.alibaba.fastjson2.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public class MsCaseFlowRoleSmsRelatedVO {
/**
* 主键id
*/
private Integer id;
/**
* 流程节点id
*/
private Integer flowId;
/**
* 短信模版id
*/
private Long smsTemplateId;
/**
* 发送短信的角色id
*/
private List<Long> receiveRoleIds;
/**
* 接收短信角色名称
*/
public List<JSONObject> receiveRoleNames;
}
@@ -1,11 +1,11 @@
package com.ruoyi.system.domain.vo.flow;
import com.alibaba.fastjson2.JSONObject;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Column;
import java.util.List;
@@ -57,4 +57,24 @@ public class MsCaseFlowVO {
* 按钮权限标识符
*/
private String buttonAuthFlag;
/**
* 角色名
*/
private String roleName;
/**
* svg图片路径
*/
private String fileName;
/**
* 短信模版id
*/
private Long smsTemplateId;
/**
* 发送短信的角色id
*/
private List<Long> receiveRoleIds;
/**
* 接收短信角色名称
*/
public List<JSONObject> receiveRoleNames;
}
@@ -78,6 +78,13 @@ public interface SysDeptMapper
*/
public SysDept checkDeptNameUnique(@Param("deptName") String deptName, @Param("parentId") Long parentId);
/**
* 根据部门名称查询部门信息
* @param deptName
* @return
*/
public SysDept selectDeptByName(@Param("deptName") String deptName);
/**
* 新增部门信息
*
@@ -1,9 +1,9 @@
package com.ruoyi.system.mapper;
import java.util.List;
import org.apache.ibatis.annotations.Param;
import com.ruoyi.common.core.domain.entity.SysUser;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 用户表 数据层
@@ -143,12 +143,13 @@ public interface SysUserMapper
* @return
*/
SysUser selectUserByIdCard(@Param("idCard")String identityNo);
SysUser selectUserByPhone(@Param("phonenumber")String phonenumber);
/**
* 根据手机号查询用户信息
* @param phone
* 根据邮箱查询用户信息
* @param email
* @return
*/
SysUser selectUserByPhone(@Param("phone")String phone);
SysUser selectUserByEmail(@Param("email")String email);
/**
* 根据部门和角色查询用户
@@ -67,4 +67,11 @@ public interface SysUserRoleMapper
* @param roleId
*/
void insertUserRole(@Param("userId")Long userId, @Param("roleId")Long roleId);
/**
* 根据用户id查询关联的角色id
* @param userId
* @return
*/
public List<Long> selectRoleIdsByUserId(@Param("userId") Long userId);
}
@@ -1,6 +1,8 @@
package com.ruoyi.system.mapper.flow;
import com.ruoyi.system.domain.entity.flow.MsCaseFlow;
import com.ruoyi.system.domain.vo.flow.MsBaseCaseFlow;
import com.ruoyi.system.domain.vo.flow.MsCaseFlowVO;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper;
@@ -16,9 +18,15 @@ public interface MsCaseFlowMapper extends Mapper<MsCaseFlow> {
@Select("select f1.id,f1.node_id nodeId,f1.node_name nodeName,f1.case_status_name caseStatusName,f1.back_flow_id backFlowId,f1.sort from ms_case_flow f1 join ms_case_flow f2 on f2.id=#{caseFlowId} and f1.sort=f2.sort+1 ")
MsCaseFlow nextFlow(Integer caseFlowId);
@Select("select f1.id,f1.node_id nodeId,f1.node_name nodeName,f1.case_status_name caseStatusName,f1.back_flow_id backFlowId,f1.sort from ms_case_flow f1 join ms_case_flow f2 on f2.id=#{caseFlowId} and f1.sort >= f2.sort+1 ")
@Select("select f1.id,f1.node_id nodeId,f1.node_name nodeName,f1.case_status_name caseStatusName,f1.back_flow_id backFlowId,f1.sort from ms_case_flow f1 join ms_case_flow f2 on f2.id=#{caseFlowId} and f1.sort >= f2.sort+1 order by f1.sort ")
List<MsCaseFlow> nextFlowall(Integer caseFlowId);
@Select("select f1.id,f1.node_id nodeId,f1.node_name nodeName,f1.case_status_name caseStatusName,f1.back_flow_id backFlowId,f1.sort from ms_case_flow f1 join ms_case_flow f2 on f2.id=#{caseFlowId} and f1.sort=f2.sort+3 ")
MsCaseFlow nextFlow1(Integer caseFlowId);
@Select("SELECT r.role_name as roleName ,f.node_name as nodeName ,f.case_status_name as caseStatusName FROM ms_case_flow f left join ms_case_flow_role_related fr on f.id = fr.flow_id left join ms_sys_role r on fr.roleid = r.role_id WHERE f.id = #{caseFlowId} ")
List<MsCaseFlowVO> selectFlowRole(Integer caseFlowId);
@Select("select f1.id,f1.case_status_name caseStatusName,f1.sort from ms_case_flow f1 order by f1.sort")
List<MsBaseCaseFlow> selectCaseFlow();
}
@@ -0,0 +1,7 @@
package com.ruoyi.system.mapper.flow;
import com.ruoyi.system.domain.entity.flow.MsCaseFlowRoleSmsRelated;
import tk.mybatis.mapper.common.Mapper;
public interface MsCaseFlowRoleSmsRelatedMapper extends Mapper<MsCaseFlowRoleSmsRelated> {
}
@@ -0,0 +1,7 @@
package com.ruoyi.system.mapper.log;
import com.ruoyi.system.domain.entity.log.MsRequestLog;
import tk.mybatis.mapper.common.Mapper;
public interface MsRequestLogMapper extends Mapper<MsRequestLog> {
}
@@ -0,0 +1,7 @@
package com.ruoyi.system.mapper.shortmessage;
import com.ruoyi.system.domain.entity.shortmessage.MeetingInfo;
import tk.mybatis.mapper.common.Mapper;
public interface MeetingInfoMapper extends Mapper<MeetingInfo> {
}
@@ -0,0 +1,7 @@
package com.ruoyi.system.mapper.shortmessage;
import com.ruoyi.system.domain.entity.shortmessage.MsSendMailHistoryRecord;
import tk.mybatis.mapper.common.Mapper;
public interface MsSendMailHistoryRecordMapper extends Mapper<MsSendMailHistoryRecord> {
}
@@ -0,0 +1,7 @@
package com.ruoyi.system.mapper.shortmessage;
import com.ruoyi.system.domain.entity.shortmessage.MsSmsSendHistoryRecord;
import tk.mybatis.mapper.common.Mapper;
public interface MsSmsSendHistoryRecordMapper extends Mapper<MsSmsSendHistoryRecord> {
}
@@ -0,0 +1,22 @@
package com.ruoyi.system.mapper.sms;
import com.ruoyi.system.domain.entity.sms.MsSmsSendHistoryRecordParam;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
public interface MsSmsSendHistoryRecordParamMapper extends Mapper<MsSmsSendHistoryRecordParam> {
/**
* 批量新增
* @param historyRecordParams
*/
@Select("<script> INSERT INTO ms_sms_send_history_record_param (sms_record_history_id, param_value)\n" +
" VALUES\n" +
" <foreach item=\"item\" index=\"index\" collection=\"list\" separator=\",\">\n" +
" (#{item.smsRecordHistoryId}, #{item.paramValue})\n" +
" </foreach> " +
"</script>")
void batchInsert(@Param("list") List<MsSmsSendHistoryRecordParam> historyRecordParams);
}
@@ -0,0 +1,22 @@
package com.ruoyi.system.mapper.sms;
import com.ruoyi.system.domain.entity.sms.MsSmsSendRecordParam;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
public interface MsSmsSendRecordParamMapper extends Mapper<MsSmsSendRecordParam> {
/**
* 批量插入
* @param list
*/
@Select("<script> INSERT INTO ms_sms_send_record_param (sms_record_id, param_value)\n" +
" VALUES\n" +
" <foreach item=\"item\" index=\"index\" collection=\"list\" separator=\",\">\n" +
" (#{item.smsRecordId}, #{item.paramValue})\n" +
" </foreach> " +
"</script>")
void batchInsert(@Param("list") List<MsSmsSendRecordParam> list);
}
@@ -0,0 +1,7 @@
package com.ruoyi.system.mapper.sms;
import com.ruoyi.system.domain.entity.sms.MsSmsTemplate;
import tk.mybatis.mapper.common.Mapper;
public interface MsSmsTemplateMapper extends Mapper<MsSmsTemplate> {
}
@@ -0,0 +1,18 @@
package com.ruoyi.system.mapper.sms;
import com.ruoyi.system.domain.entity.sms.MsSmsTemplateParam;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import tk.mybatis.mapper.common.Mapper;
import java.util.List;
public interface MsSmsTemplateParamMapper extends Mapper<MsSmsTemplateParam> {
@Select("<script> INSERT INTO ms_sms_template_param (sms_template_id, param,param_name)\n" +
" VALUES\n" +
" <foreach item=\"item\" index=\"index\" collection=\"list\" separator=\",\">\n" +
" (#{item.smsTemplateId}, #{item.param}, #{item.paramName})\n" +
" </foreach> " +
"</script>")
void batchInsert(@Param("list") List<MsSmsTemplateParam> templateParams);
}
@@ -0,0 +1,83 @@
package com.ruoyi.system.service;
import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.enums.AttachmentOperateTypeEnum;
import com.ruoyi.common.enums.DocumentTypeEnum;
import com.ruoyi.wisdomarbitrate.domain.vo.mscase.MsCaseFileInfo;
import com.ruoyi.wisdomarbitrate.domain.vo.mscase.MsCaseStatusInfo;
import java.io.File;
public interface BeiMingInterface {
/**
* 1.获取北明接口令牌token对象
*
* @param userName
* @param password
* @param times
* @return
*/
String getApiToken(String userName, String password, Long times);
/**
* 2.提交案件状态信息
*
* @param token 令牌
* @param abutmentId 第三方平台案件唯一标识
* @param msCaseStatusInfo 案件状态信息
* @return
*/
JSONObject submitCaseStatusInfo(String token, String abutmentId, String syncSource, MsCaseStatusInfo msCaseStatusInfo);
/**
* 3.上传附件
*
* @param file
* @return
*/
JSONObject uploadFile(File file, String token, String syncSource);
/**
* 4.同步附件信息
*
* @param action
* @param caseNo
* @param msCaseFileInfo
* @return
*/
JSONObject syncAttachmentInfo(String token, String syncSource, String action, String caseNo, MsCaseFileInfo msCaseFileInfo);
/**
* 推送案件状态信息(调解系统推送案件状态时调用)
*
* @param username 用户名
* @param password 密码
* @param caseNo 案件编号
* @param statusCode 案件状态编码
* @param caseClosureExplanation 案件状态描述(或结案信息)
* @return
*/
JSONObject pushCaseStatusInfo(String username, String password, String caseNo, String statusCode, String caseClosureExplanation);
/**
* 推送案件附件信息(调解系统推送案件附件信息时调用)
*
* @param username 用户名
* @param password 密码
* @param file 文件
* @param abutmentId 调解系统文件Id
* @param syncSource 用户名
* @param caseNo 案件编号
* @return
*/
MsCaseFileInfo pushAttachmentInfo(String username, String password, File file, String syncSource, String caseNo, AttachmentOperateTypeEnum operateTypeEnum, DocumentTypeEnum documentTypeEnum);
/**
* 删除附件
* @param file
* @param caseNo
* @return
*/
public JSONObject deleteAttachmentInfo( String caseNo,String fileId,String fileName);
}
@@ -1,11 +1,13 @@
package com.ruoyi.system.service;
import java.util.List;
import java.util.Set;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.system.domain.vo.RouterVo;
import java.util.List;
import java.util.Set;
/**
* 菜单 业务层
*
@@ -141,4 +143,17 @@ public interface ISysMenuService
* @return 结果
*/
public boolean checkMenuNameUnique(SysMenu menu);
/**
* 查询管理员权限
* @return
*/
Set<String> selectAdminMenu();
/**
* 根据用户查询菜单权限字符
* @return
*/
AjaxResult getMenuPermsByUser();
}
@@ -1,10 +1,10 @@
package com.ruoyi.system.service;
import java.util.List;
import java.util.Set;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.system.domain.SysUserRole;
import java.util.List;
/**
* 角色业务层
*
@@ -34,7 +34,7 @@ public interface ISysRoleService
* @param userId 用户ID
* @return 权限列表
*/
public Set<String> selectRolePermissionByUserId(Long userId);
public List<SysRole> selectRolePermissionByUserId(Long userId);
/**
* 查询所有角色
@@ -0,0 +1,14 @@
package com.ruoyi.system.service;
import com.ruoyi.system.domain.entity.log.MsRequestLog;
/**
* @Classname MsRequestLogService
* @Description
* @Version 1.0.0
* @Date 2024/4/2 14:18
* @Created wangqiong
*/
public interface MsRequestLogService {
void insert(MsRequestLog requestLog);
}
@@ -1,5 +1,7 @@
package com.ruoyi.system.service.flow;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.system.domain.vo.flow.MsCaseFlowRoleSmsRelatedVO;
import com.ruoyi.system.domain.vo.flow.MsCaseFlowSearchVO;
import com.ruoyi.system.domain.vo.flow.MsCaseFlowVO;
@@ -8,13 +10,22 @@ import java.util.Set;
public interface CaseFlowService {
/**
* 查询案件流程节点信息
*
* @param caseFlowSearchVO
* @return
*/
Object queryCaseFlowInfo(MsCaseFlowSearchVO caseFlowSearchVO);
/**
* 查询案件流程信息
*
* @return
*/
AjaxResult selectCaseFlow();
/**
* 新增或编辑案件流程节点信息
*
* @param caseFlowVO
* @return
*/
@@ -22,6 +33,7 @@ public interface CaseFlowService {
/**
* 删除案件流程节点信息
*
* @param caseFlowVO
* @return
*/
@@ -29,6 +41,7 @@ public interface CaseFlowService {
/**
* 排序案件流程节点
*
* @param caseFlowSearchVO
* @return
*/
@@ -36,8 +49,14 @@ public interface CaseFlowService {
/**
* 查询用户角色关联的案件状态
*
* @param roles
* @return
*/
Set<Integer> getCaseStatusIdByRoleKey(Set<String> roles);
/**
* 查询流程节点接收信息配置记录
*/
MsCaseFlowRoleSmsRelatedVO queryFlowReceiveRoleSmsRelated(Integer flowId);
}
@@ -1,25 +1,33 @@
package com.ruoyi.system.service.flow;
import com.alibaba.fastjson2.JSONObject;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.domain.entity.flow.MsCaseFlow;
import com.ruoyi.system.domain.entity.flow.MsCaseFlowRoleRelated;
import com.ruoyi.system.domain.entity.flow.MsCaseFlowRoleSmsRelated;
import com.ruoyi.system.domain.vo.flow.MsBaseCaseFlow;
import com.ruoyi.system.domain.vo.flow.MsCaseFlowRoleSmsRelatedVO;
import com.ruoyi.system.domain.vo.flow.MsCaseFlowSearchVO;
import com.ruoyi.system.domain.vo.flow.MsCaseFlowVO;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.flow.MsCaseFlowMapper;
import com.ruoyi.system.mapper.flow.MsCaseFlowRoleRelatedMapper;
import com.ruoyi.system.mapper.flow.MsCaseFlowRoleSmsRelatedMapper;
import com.ruoyi.system.util.NewStringUtil;
import com.ruoyi.system.util.TableDataUtil;
import org.bouncycastle.crypto.DataLengthException;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import tk.mybatis.mapper.entity.Example;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;
@@ -40,15 +48,12 @@ public class CaseFlowServiceImpl implements CaseFlowService {
*/
@Override
public Object queryCaseFlowInfo(MsCaseFlowSearchVO caseFlowSearchVO) {
//查询某个案件流程节点信息
if (caseFlowSearchVO.getId() != null) {
if (caseFlowSearchVO == null || caseFlowSearchVO.getPageNum() == null || caseFlowSearchVO.getPageSize() == null) {
//查询所有案件流程节点信息
return msCaseFlowMapper.selectAll();
} else if (caseFlowSearchVO.getId() != null) {
//查询某个案件流程节点信息
return msCaseFlowMapper.selectByPrimaryKey(caseFlowSearchVO.getId());
} else if (caseFlowSearchVO == null) {
//查询所有案件流程节点信息
return msCaseFlowMapper.selectAll();
} else if (caseFlowSearchVO.getPageNum() == null || caseFlowSearchVO.getPageSize() == null) {
//查询所有案件流程节点信息
return msCaseFlowMapper.selectAll();
} else {
//分页查询案件流程节点信息
Map<Integer, List<SysRole>> sysRoleMap = queryRoleByFlowId(null);
@@ -89,6 +94,30 @@ public class CaseFlowServiceImpl implements CaseFlowService {
MsCaseFlow msCaseFlow1 = msCaseFlowMapper.selectByPrimaryKey(msCaseFlow.getBackFlowId());
temp.setBackFlowName(msCaseFlow1 != null ? msCaseFlow1.getNodeName() : "");
}
//短信接收角色
if (msCaseFlow.getId() != null) {
Example example1 = new Example(MsCaseFlowRoleSmsRelated.class);
Example.Criteria criteria1 = example1.createCriteria();
criteria1.andEqualTo("flowId", msCaseFlow.getId());
List<MsCaseFlowRoleSmsRelated> msCaseFlowRoleSmsRelateds = msCaseFlowRoleSmsRelatedMapper.selectByExample(example1);
List<JSONObject> receiveRoleNames = new ArrayList<>();
List<Long> receiveRoleIds = new ArrayList<>();
for (int k = 0; k < msCaseFlowRoleSmsRelateds.size(); k++) {
MsCaseFlowRoleSmsRelated msCaseFlowRoleSmsRelated = msCaseFlowRoleSmsRelateds.get(k);
if (msCaseFlowRoleSmsRelated.getReceiveRoleId() != null) {
SysRole sysRole = sysRoleMapper.selectRoleById(msCaseFlowRoleSmsRelated.getReceiveRoleId());
if (sysRole != null) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("roleId", sysRole.getRoleId());
jsonObject.put("roleName", sysRole.getRoleName());
receiveRoleNames.add(jsonObject);
receiveRoleIds.add(sysRole.getRoleId());
}
}
}
temp.setReceiveRoleIds(receiveRoleIds);
temp.setReceiveRoleNames(receiveRoleNames);
}
list.add(temp);
}
TableDataInfo tableDataInfo = TableDataUtil.rebuildTableDataInfo(list, total);
@@ -96,6 +125,12 @@ public class CaseFlowServiceImpl implements CaseFlowService {
}
}
@Override
public AjaxResult selectCaseFlow() {
List<MsBaseCaseFlow> caseFlows = msCaseFlowMapper.selectCaseFlow();
return AjaxResult.success(caseFlows);
}
/**
* 查询流程信息相关的角色信息
*
@@ -125,6 +160,29 @@ public class CaseFlowServiceImpl implements CaseFlowService {
return map;
}
/**
* 本地图片装64
*
* @param imgPath
* @return
* @throws Exception
*/
public static String convertToBase64(String imgPath) {
byte[] data = null;
// 读取图片字节数组
try {
imgPath = imgPath.replace("/profile/upload", "/home/ruoyi/uploadPath/upload/");
InputStream in = Files.newInputStream(Paths.get(imgPath));
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 返回Base64编码过的字节数组字符串
return Base64.getEncoder().encodeToString(Objects.requireNonNull(data));
}
/**
* 新增或编辑案件流程节点信息
*
@@ -133,39 +191,78 @@ public class CaseFlowServiceImpl implements CaseFlowService {
*/
@Override
public Boolean saveCaseFlow(MsCaseFlowVO caseFlowVO) {
if (caseFlowVO.getId() != null) {
//更新案件流程信息
MsCaseFlow msCaseFlow = new MsCaseFlow();
BeanUtils.copyProperties(caseFlowVO, msCaseFlow);
int i = msCaseFlowMapper.updateByPrimaryKey(msCaseFlow);
if (i > 0) {
//更新流程节点和角色之间的关系
updateFlowRoleByFlowId(msCaseFlow.getId(), caseFlowVO.getRoleIds());
return true;
}
} else {
int sort = 1;
Example example = new Example(MsCaseFlow.class);
example.setOrderByClause("sort DESC limit 1");
Example.Criteria criteria = example.createCriteria();
List<MsCaseFlow> msCaseFlows = msCaseFlowMapper.selectByExample(example);
if (msCaseFlows != null && msCaseFlows.size() > 0) {
sort = msCaseFlows.get(0).getSort() + 1;
}
//新增案件流程信息
MsCaseFlow msCaseFlow = new MsCaseFlow();
BeanUtils.copyProperties(caseFlowVO, msCaseFlow);
msCaseFlow.setSort(sort);
int insert = msCaseFlowMapper.insert(msCaseFlow);
if (insert > 0) {
//更新流程节点和角色之间的关系
updateFlowRoleByFlowId(msCaseFlow.getId(), caseFlowVO.getRoleIds());
return true;
try {
if (caseFlowVO.getId() != null) {
//更新案件流程信息
MsCaseFlow msCaseFlow = new MsCaseFlow();
BeanUtils.copyProperties(caseFlowVO, msCaseFlow);
int i = msCaseFlowMapper.updateByPrimaryKey(msCaseFlow);
if (i > 0) {
//更新流程节点和角色之间的关系
updateFlowRoleByFlowId(msCaseFlow.getId(), caseFlowVO.getRoleIds());
//更新流程节点和短信模板之间的关系
updateFlowMessageRoleByFlowId(msCaseFlow.getId(), caseFlowVO.getReceiveRoleIds(), caseFlowVO.getSmsTemplateId());
return true;
} else {
return false;
}
} else {
int sort = 1;
Example example = new Example(MsCaseFlow.class);
example.setOrderByClause("sort DESC limit 1");
Example.Criteria criteria = example.createCriteria();
List<MsCaseFlow> msCaseFlows = msCaseFlowMapper.selectByExample(example);
if (msCaseFlows != null && msCaseFlows.size() > 0) {
sort = msCaseFlows.get(0).getSort() + 1;
}
//新增案件流程信息
MsCaseFlow msCaseFlow = new MsCaseFlow();
BeanUtils.copyProperties(caseFlowVO, msCaseFlow);
msCaseFlow.setSort(sort);
int insert = msCaseFlowMapper.insert(msCaseFlow);
if (insert > 0) {
//更新流程节点和角色之间的关系
updateFlowRoleByFlowId(msCaseFlow.getId(), caseFlowVO.getRoleIds());
//更新流程节点和短信模板之间的关系
updateFlowMessageRoleByFlowId(msCaseFlow.getId(), caseFlowVO.getReceiveRoleIds(), caseFlowVO.getSmsTemplateId());
return true;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
@Autowired
MsCaseFlowRoleSmsRelatedMapper msCaseFlowRoleSmsRelatedMapper;
/**
* 更新流程节点和短信模板之间的关系
*
* @param flowId
* @param receiveRoleIds
* @param smsTemplateId
*/
private void updateFlowMessageRoleByFlowId(Integer flowId, List<Long> receiveRoleIds, Long smsTemplateId) {
if (receiveRoleIds != null && receiveRoleIds.size() > 0) {
//删除历史流程与短信发送设置记录
Example example = new Example(MsCaseFlowRoleSmsRelated.class);
example.createCriteria().andEqualTo("flowId", flowId);
int count = msCaseFlowRoleSmsRelatedMapper.deleteByExample(example);
//新增流程节点与短信发送设置记录
for (int i = 0; i < receiveRoleIds.size(); i++) {
MsCaseFlowRoleSmsRelated msCaseFlowRoleSmsRelated = new MsCaseFlowRoleSmsRelated();
msCaseFlowRoleSmsRelated.setFlowId(flowId);
msCaseFlowRoleSmsRelated.setReceiveRoleId(receiveRoleIds.get(i));
msCaseFlowRoleSmsRelated.setSmsTemplateId(smsTemplateId);
msCaseFlowRoleSmsRelated.setCreateTime(new Date());
msCaseFlowRoleSmsRelatedMapper.insertSelective(msCaseFlowRoleSmsRelated);
}
}
}
/**
* 更新流程节点和角色之间的关系
*
@@ -228,6 +325,7 @@ public class CaseFlowServiceImpl implements CaseFlowService {
return false;
}
/**
* 排序案件流程节点
*
@@ -321,6 +419,44 @@ public class CaseFlowServiceImpl implements CaseFlowService {
return caseStatusIds;
}
/**
* 查询流程节点接收信息配置记录
*
* @param flowId
*/
@Override
public MsCaseFlowRoleSmsRelatedVO queryFlowReceiveRoleSmsRelated(Integer flowId) {
MsCaseFlowRoleSmsRelatedVO result = new MsCaseFlowRoleSmsRelatedVO();
//短信接收角色
if (flowId != null) {
Example example1 = new Example(MsCaseFlowRoleSmsRelated.class);
Example.Criteria criteria1 = example1.createCriteria();
criteria1.andEqualTo("flowId", flowId);
List<MsCaseFlowRoleSmsRelated> msCaseFlowRoleSmsRelateds = msCaseFlowRoleSmsRelatedMapper.selectByExample(example1);
List<JSONObject> receiveRoleNames = new ArrayList<>();
List<Long> receiveRoleIds = new ArrayList<>();
for (int k = 0; k < msCaseFlowRoleSmsRelateds.size(); k++) {
MsCaseFlowRoleSmsRelated msCaseFlowRoleSmsRelated = msCaseFlowRoleSmsRelateds.get(k);
if (k == 0) {
BeanUtils.copyProperties(msCaseFlowRoleSmsRelated, result);
}
if (msCaseFlowRoleSmsRelated.getReceiveRoleId() != null) {
SysRole sysRole = sysRoleMapper.selectRoleById(msCaseFlowRoleSmsRelated.getReceiveRoleId());
if (sysRole != null) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("roleId", sysRole.getRoleId());
jsonObject.put("roleName", sysRole.getRoleName());
receiveRoleNames.add(jsonObject);
receiveRoleIds.add(sysRole.getRoleId());
}
}
}
result.setReceiveRoleIds(receiveRoleIds);
result.setReceiveRoleNames(receiveRoleNames);
}
return result;
}
/**
* 查询角色的案件状态id
*
@@ -0,0 +1,391 @@
package com.ruoyi.system.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode;
import com.ruoyi.common.enums.AttachmentOperateTypeEnum;
import com.ruoyi.common.enums.DocumentTypeEnum;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.system.domain.entity.log.MsRequestLog;
import com.ruoyi.system.service.BeiMingInterface;
import com.ruoyi.system.service.MsRequestLogService;
import com.ruoyi.wisdomarbitrate.domain.vo.mscase.MsCaseFileInfo;
import com.ruoyi.wisdomarbitrate.domain.vo.mscase.MsCaseStatusInfo;
import com.ruoyi.wisdomarbitrate.utils.CommonInputStreamResource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestClientException;
import org.springframework.web.client.RestTemplate;
import java.io.File;
import java.io.FileInputStream;
import java.util.Date;
import java.util.Objects;
import static com.ruoyi.common.utils.EncryptUtils.sm4Decrypt;
import static com.ruoyi.common.utils.EncryptUtils.sm4Encrypt;
/**
* @author ym
*/
@Slf4j
@Service
public class BeiMingInterfaceService implements BeiMingInterface {
@Autowired
RestTemplate restTemplate;
@Autowired
MsRequestLogService requestLogService;
@Autowired
BeiMingInterfaceService beiMingInterfaceService;
/**
* 接口地址
*/
@Value("${beimingapihost}")
public String apihost;
/**
* 接口路径前缀
*/
@Value("${beimingapiprefix}")
public String apiprefix;
@Value("${beimingprivatekey}")
public String privateKey;
// 北明配置
@Value("${BMConfig.userName}")
private String BMUserName;
@Value("${BMConfig.password}")
private String BMPassword;
@Value("${BMConfig.syncSource}")
private String BMSyncSource;
/**
* 1.获取北明接口令牌token
*
* @param userName
* @param password
* @param times
*/
@Transactional
@Override
public String getApiToken(String userName, String password, Long times) {
JSONObject result = new JSONObject();
MsRequestLog requestLog = new MsRequestLog();
try {
//设置请求头
HttpHeaders httpHeaders = new HttpHeaders();
//传递请求体时必须设置传递参数的格式,为Content-Type : application/json
httpHeaders.add("Content-Type", "application/json;charset=UTF-8");
httpHeaders.add("syncSource", userName);
// 2.请求头 & 请求体
HttpEntity<JSON> fromEntity = new HttpEntity(httpHeaders);
JSONObject body = new JSONObject();
// body.put("account", userName);
// body.put("password", password);
// body.put("timestamp", times);
//对整体请求进行加密
ObjectNode param = new ObjectMapper().createObjectNode();
param.put("account", userName);
param.put("password", password);
param.put("timestamp", times);
String encryptString = sm4Encrypt(param.toString(), privateKey);
body.put("encryptString", encryptString);
System.out.println("encryptString:" + encryptString);
fromEntity = new HttpEntity(body, httpHeaders);
String url = apihost + apiprefix + "/getToken";
requestLog.setRequestUrl(url);
requestLog.setContent(param.toString());
requestLog.setCreateTime((new Date()));
requestLog.setStatus(0);
result = restTemplate.postForObject(url, fromEntity, JSONObject.class);
requestLog.setReturnContent(result!=null?result.toString():null);
} catch (RestClientException e) {
e.printStackTrace();
requestLog.setReason(e.getMessage());
requestLog.setStatus(1);
requestLogService.insert(requestLog);
throw new ServiceException("推送失败");
}
requestLogService.insert(requestLog);
return analysisResultToken(Objects.requireNonNull(result).toString());
}
/**
* 解析加密后端token
*
* @param token
* @return
*/
public String analysisResultToken(String token) {
String resultToken = null;
if (token != null && !token.isEmpty()) {
JSONObject jsonObject = JSON.parseObject(token);
String tokenString = jsonObject.getString("data");
String tokenstr = sm4Decrypt(tokenString, privateKey);
if (tokenstr != null && !tokenstr.isEmpty()) {
JSONObject tokenObject = JSON.parseObject(tokenstr);
resultToken = tokenObject.getString("token");
}
}
return resultToken;
}
/**
* 2.推送案件状态信息
*
* @param token 令牌
* @param abutmentId 第三方平台案件唯一标识
* @param msCaseStatusInfo 案件状态信息
* @param syncSource 同步来源(账户名)
* @return
*/
@Transactional
@Override
public JSONObject submitCaseStatusInfo(String token, String abutmentId, String syncSource, MsCaseStatusInfo msCaseStatusInfo) {
JSONObject result = new JSONObject();
MsRequestLog requestLog = new MsRequestLog();
try {
//设置请求头
HttpHeaders httpHeaders = new HttpHeaders();
//传递请求体时必须设置传递参数的格式,为Content-Type : application/json
httpHeaders.add("Content-Type", "application/json;charset=UTF-8");
httpHeaders.add("token", token);
httpHeaders.add("syncSource", syncSource);
//对整体请求进行加密
ObjectNode param = new ObjectMapper().createObjectNode();
param.put("abutmentId", abutmentId);
param.put("caseNo", msCaseStatusInfo.getCaseNo());
param.put("statusCode", msCaseStatusInfo.getStatusCode());
param.put("caseClosureExplanation", msCaseStatusInfo.getCaseClosureExplanation());
String encryptString = sm4Encrypt(param.toString(), privateKey);
// 2.请求头 & 请求体
HttpEntity<JSON> fromEntity = new HttpEntity(httpHeaders);
JSONObject body = new JSONObject();
// body.put("abutmentId", Encrypt("abutmentId",abutmentId));
// body.put("caseNo", Encrypt("caseNo", msCaseStatusInfo.getCaseNo()));
// body.put("statusCode", Encrypt("statusCode",msCaseStatusInfo.getStatusCode()));
// body.put("caseClosureExplanation", Encrypt("caseClosureExplanation", msCaseStatusInfo.getCaseClosureExplanation()));
//对整体请求进行加密
body.put("encryptString", encryptString);
fromEntity = new HttpEntity(body, httpHeaders);
String url = apihost + apiprefix + "/caseMediation/status";
requestLog.setRequestUrl(url);
requestLog.setContent(param.toString());
requestLog.setCreateTime((new Date()));
requestLog.setStatus(0);
result = restTemplate.postForObject(url, fromEntity, JSONObject.class);
requestLog.setReturnContent(result!=null?result.toString():null);
} catch (RestClientException e) {
e.printStackTrace();
requestLog.setReason(e.getMessage());
requestLog.setStatus(1);
requestLogService.insert(requestLog);
throw new ServiceException("推送失败");
}
requestLogService.insert(requestLog);
return result;
}
/**
* 3.上传附件
*
* @param file
* @return
*/
@Transactional
@Override
public JSONObject uploadFile(File file, String token, String syncSource) {
System.out.println("文件:" + file.getName());
System.out.println("文件:" + file.toString());
JSONObject result = new JSONObject();
MsRequestLog requestLog = new MsRequestLog();
try {
//设置请求头
HttpHeaders httpHeaders = new HttpHeaders();
//传递请求体时必须设置传递参数的格式,为Content-Type : application/json
httpHeaders.add("Content-Type", "multipart/form-data");
httpHeaders.add("token", token);
httpHeaders.add("syncSource", syncSource);
// 构建请求体
MultiValueMap<String, Object> requestBody = new LinkedMultiValueMap<>();
CommonInputStreamResource commonInputStreamResource = null;
try {
FileInputStream fileInputStream = new FileInputStream(file);
commonInputStreamResource = new CommonInputStreamResource(fileInputStream, file.length(), file.getName());
} catch (Exception e) {
log.error("文件输入流转换错误", e);
}
requestBody.add("file", commonInputStreamResource);
HttpEntity<MultiValueMap> fromEntity = new HttpEntity<MultiValueMap>(requestBody, httpHeaders);
String url = apihost + apiprefix + "/uploadFile";
requestLog.setRequestUrl(url);
requestLog.setContent(fromEntity.toString());
requestLog.setCreateTime((new Date()));
requestLog.setStatus(0);
result = restTemplate.postForObject(url, fromEntity, JSONObject.class);
requestLog.setReturnContent(result!=null?result.toString():null);
} catch (RestClientException e) {
e.printStackTrace();
requestLog.setReason(e.getMessage());
requestLog.setStatus(1);
requestLogService.insert(requestLog);
throw new ServiceException("推送失败");
}
requestLogService.insert(requestLog);
return result;
}
/**
* 4.同步附件信息
*
* @param token
* @param syncSource 用户名
* @param action 附件操作类型
* @param caseNo 案件编号
* @param msCaseFileInfo 案件附件信息
* @return
*/
@Transactional
@Override
public JSONObject syncAttachmentInfo(String token, String syncSource, String action, String caseNo, MsCaseFileInfo msCaseFileInfo) {
JSONObject result = new JSONObject();
MsRequestLog requestLog = new MsRequestLog();
try {
//设置请求头
HttpHeaders httpHeaders = new HttpHeaders();
//传递请求体时必须设置传递参数的格式,为Content-Type : application/json
httpHeaders.add("Content-Type", "application/json;charset=UTF-8");
httpHeaders.add("token", token);
httpHeaders.add("syncSource", syncSource);
//对整体请求进行加密
ObjectNode param = new ObjectMapper().createObjectNode();
param.put("caseNo", caseNo);
param.put("action", action);
param.put("abutmentId", msCaseFileInfo.getAbutmentId());
param.put("abutmentCaseId", msCaseFileInfo.getAbutmentCaseId());
param.put("documentSubject", msCaseFileInfo.getDocumentSubject());
param.put("documentType", msCaseFileInfo.getDocumentType());
param.put("fileName", msCaseFileInfo.getFileName());
param.put("fileId", msCaseFileInfo.getFileId());
if (msCaseFileInfo.getOwnerType() != null) {
param.put("ownerType", msCaseFileInfo.getOwnerType());
}
if (msCaseFileInfo.getOwnerId() != null) {
param.put("ownerId", msCaseFileInfo.getOwnerId());
}
if (msCaseFileInfo.getOwnerName() != null) {
param.put("ownerName", msCaseFileInfo.getOwnerName());
}
String encryptString = sm4Encrypt(param.toString(), privateKey);
// 2.请求体
HttpEntity<JSON> fromEntity = new HttpEntity(httpHeaders);
JSONObject body = new JSONObject();
//对整体请求进行加密
body.put("encryptString", encryptString);
fromEntity = new HttpEntity(body, httpHeaders);
String url = apihost + apiprefix + "/caseMediation/attachment/accept";
requestLog.setRequestUrl(url);
requestLog.setContent(param.toString());
requestLog.setCreateTime((new Date()));
requestLog.setStatus(0);
result = restTemplate.postForObject(url, fromEntity, JSONObject.class);
requestLog.setReturnContent(result!=null?result.toString():null);
} catch (RestClientException e) {
e.printStackTrace();
requestLog.setReason(e.getMessage());
requestLog.setStatus(1);
requestLogService.insert(requestLog);
throw new ServiceException("推送失败");
}
requestLogService.insert(requestLog);
return result;
}
/**
* 推送案件状态信息
*/
@Transactional
@Override
public JSONObject pushCaseStatusInfo(String username, String password, String caseNo, String statusCode, String caseClosureExplanation) {
JSONObject result = new JSONObject();
String token = beiMingInterfaceService.getApiToken(username, password, System.currentTimeMillis());
if (token != null && !token.isEmpty()) {
MsCaseStatusInfo info = MsCaseStatusInfo.builder().caseNo(caseNo).statusCode(statusCode).caseClosureExplanation(caseClosureExplanation).build();
result = submitCaseStatusInfo(token, caseNo, username, info);
System.out.println("jieguo:" + result.toString());
if (result != null) {
String data = result.getString("data");
String datastr = sm4Decrypt(data, privateKey);
System.out.println("最终解密后的字符串:" + datastr);
}
}
return result;
}
/**
* 推送案件附件信息
*/
@Transactional
@Override
public MsCaseFileInfo pushAttachmentInfo(String username, String password, File file, String syncSource, String caseNo, AttachmentOperateTypeEnum operateTypeEnum, DocumentTypeEnum documentTypeEnum) {
JSONObject result = new JSONObject();
MsCaseFileInfo fileInfo=null;
//1.获取token
String token = beiMingInterfaceService.getApiToken(username, password, System.currentTimeMillis());
if (token != null && !token.isEmpty()) {
//2.上传文件
JSONObject fileResult = uploadFile(file, token, syncSource);
if (fileResult != null) {
String data = fileResult.getString("data");
String datastr = sm4Decrypt(data, privateKey);
System.out.println("最终解密后的字符串:" + datastr);
if (datastr != null) {
JSONObject parse = JSON.parseObject(datastr);
if (parse != null) {
String fileId = parse.getString("fileId");
System.out.println("fileId====:" + fileId);
if (fileId != null) {
//3.同步附件更新信息
fileInfo = MsCaseFileInfo.builder().fileId(fileId).fileName(file.getName()).abutmentId(fileId).abutmentCaseId(caseNo).documentSubject("EVEDENT").documentType(documentTypeEnum.getCode()).build();
result = syncAttachmentInfo(token, username, operateTypeEnum.getCode(), caseNo, fileInfo);
// 更新到附件表将fileId
// result = syncAttachmentInfo(token, username, AttachmentOperateTypeEnum.UPD.getCode(), caseNo, fileInfo);
// result = syncAttachmentInfo(token, username, AttachmentOperateTypeEnum.DEL.getCode(), caseNo, fileInfo);
}
}
}
}
}
return fileInfo;
}
@Override
public JSONObject deleteAttachmentInfo( String caseNo,String fileId,String fileName) {
String token = beiMingInterfaceService.getApiToken(BMUserName, BMPassword, System.currentTimeMillis());
MsCaseFileInfo fileInfo = MsCaseFileInfo.builder().fileId(fileId).fileName(fileName).abutmentId(fileId).abutmentCaseId(caseNo).documentSubject("EVEDENT").documentType("EVEDENT_METERIAL").build();
return syncAttachmentInfo(token, BMUserName, AttachmentOperateTypeEnum.DEL.getCode(), caseNo, fileInfo);
}
/**
* 对字段值进行加密
*
* @return
*/
private String Encrypt(String filed, String filedValue) {
ObjectNode param = new ObjectMapper().createObjectNode();
param.put(filed, filedValue);
String encryptString = sm4Encrypt(param.toString(), privateKey);
return encryptString;
}
}
@@ -0,0 +1,27 @@
package com.ruoyi.system.service.impl;
import com.ruoyi.system.domain.entity.log.MsRequestLog;
import com.ruoyi.system.mapper.log.MsRequestLogMapper;
import com.ruoyi.system.service.MsRequestLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
/**
* @Classname MsRequestLogServiceImpl
* @Description
* @Version 1.0.0
* @Date 2024/4/2 14:19
* @Created wangqiong
*/
@Service
public class MsRequestLogServiceImpl implements MsRequestLogService {
@Autowired
private MsRequestLogMapper logMapper;
@Transactional(propagation = Propagation.REQUIRES_NEW)
@Override
public void insert(MsRequestLog requestLog) {
logMapper.insert(requestLog);
}
}
@@ -1,17 +1,13 @@
package com.ruoyi.system.service.impl;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.core.text.Convert;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
@@ -20,6 +16,14 @@ import com.ruoyi.common.utils.spring.SpringUtils;
import com.ruoyi.system.mapper.SysDeptMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.service.ISysDeptService;
import com.ruoyi.wisdomarbitrate.mapper.mscase.MsCaseApplicationMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.stream.Collectors;
/**
* 部门管理 服务实现
@@ -34,6 +38,10 @@ public class SysDeptServiceImpl implements ISysDeptService
@Autowired
private SysRoleMapper roleMapper;
@Autowired
private RedisCache redisCache;
@Autowired
MsCaseApplicationMapper caseApplicationMapper;
/**
* 查询部门管理数据
@@ -221,7 +229,8 @@ public class SysDeptServiceImpl implements ISysDeptService
}
dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
}
return deptMapper.insertDept(dept);
int i = deptMapper.insertDept(dept);
return i;
}
/**
@@ -293,6 +302,12 @@ public class SysDeptServiceImpl implements ISysDeptService
@Override
public int deleteDeptById(Long deptId)
{
// 查询部门是否与案件有关
List<Long> caseList = caseApplicationMapper.selectCaseByDeptId(deptId);
if(CollectionUtil.isNotEmpty(caseList)){
throw new ServiceException("该部门有关联案件,不允许删除");
}
return deptMapper.deleteDeptById(deptId);
}
@@ -1,17 +1,9 @@
package com.ruoyi.system.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.TreeSelect;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.core.domain.entity.SysRole;
@@ -24,6 +16,11 @@ import com.ruoyi.system.mapper.SysMenuMapper;
import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysRoleMenuMapper;
import com.ruoyi.system.service.ISysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
import java.util.stream.Collectors;
/**
* 菜单 业务层处理
@@ -120,6 +117,36 @@ public class SysMenuServiceImpl implements ISysMenuService
}
return permsSet;
}
/**
* 查询管理员权限
* @return
*/
@Override
public Set<String> selectAdminMenu() {
Set<String> permsSet = new HashSet<>();
List<SysMenu> sysMenus = menuMapper.selectMenuList(new SysMenu());
Long caseMenuId =null;
if(CollectionUtil.isNotEmpty(sysMenus)){
Optional<SysMenu> optional = sysMenus.stream().filter(sysMenu -> sysMenu.getMenuName().equals("案件列表")).findFirst();
if(optional.isPresent()){
caseMenuId= optional.get().getMenuId();
}
for (SysMenu sysMenu : sysMenus) {
if(!sysMenu.getParentId().equals(caseMenuId)&&StringUtils.isNotEmpty(sysMenu.getPerms())){
permsSet.addAll(Arrays.asList(sysMenu.getPerms().trim().split(",")));
}
}
}
return permsSet;
}
@Override
public AjaxResult getMenuPermsByUser() {
AjaxResult result = AjaxResult.success();
List<String> perms = menuMapper.selectMenuPermsByUserId(SecurityUtils.getUserId());
result.put("perms",perms);
return result;
}
/**
* 根据用户ID查询菜单
@@ -346,6 +373,8 @@ public class SysMenuServiceImpl implements ISysMenuService
return UserConstants.UNIQUE;
}
/**
* 获取路由名称
*
@@ -1,17 +1,12 @@
package com.ruoyi.system.service.impl;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
@@ -24,6 +19,12 @@ import com.ruoyi.system.mapper.SysRoleMapper;
import com.ruoyi.system.mapper.SysRoleMenuMapper;
import com.ruoyi.system.mapper.SysUserRoleMapper;
import com.ruoyi.system.service.ISysRoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.*;
import java.util.stream.Collectors;
/**
* 角色 业务层处理
@@ -44,6 +45,8 @@ public class SysRoleServiceImpl implements ISysRoleService
@Autowired
private SysRoleDeptMapper roleDeptMapper;
@Autowired
private RedisCache redisCache;
/**
* 根据条件分页查询角色数据
@@ -90,18 +93,11 @@ public class SysRoleServiceImpl implements ISysRoleService
* @return 权限列表
*/
@Override
public Set<String> selectRolePermissionByUserId(Long userId)
public List<SysRole> selectRolePermissionByUserId(Long userId)
{
List<SysRole> perms = roleMapper.selectRolePermissionByUserId(userId);
Set<String> permsSet = new HashSet<>();
for (SysRole perm : perms)
{
if (StringUtils.isNotNull(perm))
{
permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(",")));
}
}
return permsSet;
return perms;
}
/**
@@ -233,6 +229,7 @@ public class SysRoleServiceImpl implements ISysRoleService
{
// 新增角色信息
roleMapper.insertRole(role);
redisCache.setCacheObject(CacheConstants.ROLE_KEY+role.getRoleName(),role.getRoleId());
return insertRoleMenu(role);
}
@@ -250,6 +247,7 @@ public class SysRoleServiceImpl implements ISysRoleService
roleMapper.updateRole(role);
// 删除角色与菜单关联
roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId());
redisCache.setCacheObject(CacheConstants.ROLE_KEY+role.getRoleName(),role.getRoleId());
return insertRoleMenu(role);
}
@@ -341,10 +339,15 @@ public class SysRoleServiceImpl implements ISysRoleService
@Transactional
public int deleteRoleById(Long roleId)
{
// 根据角色id查询角色名
SysRole role = roleMapper.selectRoleById(roleId);
// 删除角色与菜单关联
roleMenuMapper.deleteRoleMenuByRoleId(roleId);
// 删除角色与部门关联
roleDeptMapper.deleteRoleDeptByRoleId(roleId);
if(role!=null) {
redisCache.deleteObject(CacheConstants.ROLE_KEY + role.getRoleName());
}
return roleMapper.deleteRoleById(roleId);
}
@@ -358,6 +361,11 @@ public class SysRoleServiceImpl implements ISysRoleService
@Transactional
public int deleteRoleByIds(Long[] roleIds)
{
List<SysRole> roles = roleMapper.selectRoleList(new SysRole());
if(CollectionUtil.isEmpty(roles)){
return 0;
}
Map<Long, String> roleMap = roles.stream().collect(Collectors.toMap(SysRole::getRoleId, SysRole::getRoleName, (n1, n2) -> n2));
for (Long roleId : roleIds)
{
checkRoleAllowed(new SysRole(roleId));
@@ -367,6 +375,9 @@ public class SysRoleServiceImpl implements ISysRoleService
{
throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName()));
}
if(roleMap.containsKey(roleId)) {
redisCache.deleteObject(CacheConstants.ROLE_KEY + roleMap.get(roleId));
}
}
// 删除角色与菜单关联
roleMenuMapper.deleteRoleMenu(roleIds);
@@ -2,12 +2,15 @@ package com.ruoyi.system.service.impl;
import cn.hutool.core.collection.CollectionUtil;
import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysRole;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.domain.entity.SysUserDept;
import com.ruoyi.common.core.redis.RedisCache;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.bean.BeanValidators;
@@ -18,6 +21,7 @@ import com.ruoyi.system.domain.SysUserRole;
import com.ruoyi.system.mapper.*;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
import com.ruoyi.wisdomarbitrate.mapper.mscase.MsCaseApplicationMapper;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -27,6 +31,7 @@ import org.springframework.util.CollectionUtils;
import javax.validation.Validator;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
@@ -65,6 +70,10 @@ public class SysUserServiceImpl implements ISysUserService {
@Autowired
protected Validator validator;
@Autowired
private RedisCache redisCache;
@Autowired
MsCaseApplicationMapper msCaseApplicationMapper;
/**
* 根据条件分页查询用户列表
@@ -241,7 +250,10 @@ public class SysUserServiceImpl implements ISysUserService {
@Transactional
public AjaxResult insertUser(SysUser user) {
// 新增用户信息
user.setCreateBy("admin");
user.setCreateTime(DateUtils.getNowDate());
int rows = userMapper.insertUser(user);
// 新增用户部门关联
if(CollectionUtil.isNotEmpty(user.getDeptIds())) {
// 先删除用户与部门关联
@@ -259,6 +271,8 @@ public class SysUserServiceImpl implements ISysUserService {
insertUserPost(user);
// 新增用户与角色管理
insertUserRole(user);
// redis缓存
redisCache.setCacheObject(CacheConstants.USER_KEY+user.getUserId(),user);
return AjaxResult.success("新建用户成功");
}
@@ -270,7 +284,10 @@ public class SysUserServiceImpl implements ISysUserService {
*/
@Override
public boolean registerUser(SysUser user) {
return userMapper.insertUser(user) > 0;
int i = userMapper.insertUser(user);
// redis缓存
redisCache.setCacheObject(CacheConstants.USER_KEY+user.getUserId(),user);
return i > 0;
}
/**
@@ -305,6 +322,9 @@ public class SysUserServiceImpl implements ISysUserService {
// 新增用户与岗位管理
insertUserPost(user);
userMapper.updateUser(user);
// redis缓存
user=userMapper.selectUserById(userId);
redisCache.setCacheObject(CacheConstants.USER_KEY+user.getUserId(),user);
return AjaxResult.success("更新用户成功");
}
@@ -329,7 +349,10 @@ public class SysUserServiceImpl implements ISysUserService {
*/
@Override
public int updateUserStatus(SysUser user) {
return userMapper.updateUser(user);
int i = userMapper.updateUser(user);
// redis缓存
// redisCache.setCacheObject(CacheConstants.USER_KEY+user.getUserId(),user);
return i;
}
/**
@@ -340,7 +363,11 @@ public class SysUserServiceImpl implements ISysUserService {
*/
@Override
public int updateUserProfile(SysUser user) {
return userMapper.updateUser(user);
int i = userMapper.updateUser(user);
// redis缓存
user=userMapper.selectUserById(user.getUserId());
redisCache.setCacheObject(CacheConstants.USER_KEY+user.getUserId(),user);
return i;
}
/**
@@ -363,7 +390,8 @@ public class SysUserServiceImpl implements ISysUserService {
*/
@Override
public int resetPwd(SysUser user) {
return userMapper.updateUser(user);
int i = userMapper.updateUser(user);
return i;
}
/**
@@ -437,10 +465,20 @@ public class SysUserServiceImpl implements ISysUserService {
@Transactional
public int deleteUserById(Long userId) {
// 删除用户与角色关联
userRoleMapper.deleteUserRoleByUserId(userId);
// userRoleMapper.deleteUserRoleByUserId(userId);
// 删除用户与岗位表
userPostMapper.deleteUserPostByUserId(userId);
return userMapper.deleteUserById(userId);
// userPostMapper.deleteUserPostByUserId(userId);
// 与案件有关的人员不能删除
List<Long> userIds = new ArrayList<>();
userIds.add(userId);
List<Long> caseIds= msCaseApplicationMapper.countCasePerson(userIds);
if(CollectionUtil.isNotEmpty(caseIds)){
throw new ServiceException("该人员已参与案件,不能删除");
}
int i = userMapper.deleteUserById(userId);
// 删除缓存
redisCache.deleteObject(CacheConstants.USER_KEY+userId);
return i;
}
/**
@@ -452,17 +490,30 @@ public class SysUserServiceImpl implements ISysUserService {
@Override
@Transactional
public int deleteUserByIds(Long[] userIds) {
// 校验是否与案件关联
if(userIds==null || userIds.length==0){
throw new ServiceException("请选择删除的用户");
}
List<Long> caseIds= msCaseApplicationMapper.countCasePerson(new ArrayList<>(Arrays.asList(userIds)));
if(CollectionUtil.isNotEmpty(caseIds)){
throw new ServiceException("删除人员中存在与案件关联的人员,不能删除");
}
for (Long userId : userIds) {
checkUserAllowed(new SysUser(userId));
checkUserDataScope(userId);
}
// 删除用户与角色关联
userRoleMapper.deleteUserRole(userIds);
// userRoleMapper.deleteUserRole(userIds);
// 删除用户与岗位关联
userPostMapper.deleteUserPost(userIds);
// userPostMapper.deleteUserPost(userIds);
// 删除用户部门关联
userDeptMapper.deleteUserByIds(userIds);
return userMapper.deleteUserByIds(userIds);
// userDeptMapper.deleteUserByIds(userIds);
int i = userMapper.deleteUserByIds(userIds);
for (Long userId : userIds) {
// 删除缓存
redisCache.deleteObject(CacheConstants.USER_KEY+userId);
}
return i;
}
/**
@@ -492,6 +543,8 @@ public class SysUserServiceImpl implements ISysUserService {
user.setPassword(SecurityUtils.encryptPassword(password));
user.setCreateBy(operName);
userMapper.insertUser(user);
// redis缓存
redisCache.setCacheObject(CacheConstants.USER_KEY+user.getUserId(),user);
successNum++;
successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 导入成功");
} else if (isUpdateSupport) {
@@ -501,6 +554,9 @@ public class SysUserServiceImpl implements ISysUserService {
user.setUserId(u.getUserId());
user.setUpdateBy(operName);
userMapper.updateUser(user);
// redis缓存
user=userMapper.selectUserById(user.getUserId());
redisCache.setCacheObject(CacheConstants.USER_KEY+user.getUserId(),user);
successNum++;
successMsg.append("<br/>" + successNum + "、账号 " + user.getUserName() + " 更新成功");
} else {
@@ -1,7 +1,6 @@
package com.ruoyi.wisdomarbitrate.domain.dto.miniprogress;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
@@ -12,14 +11,30 @@ public class IdentityAuthentication extends BaseEntity {
/** ID */
private Long id;
/**
* 角色id
*/
private Long roleId;
/** 姓名 */
private String name;
/** 身份证号 */
private String identityNo;
/**
* 身份类别,0-身份证,1-护照,默认0
*/
private Integer idType;
/**
* 国籍,0-国内,1-国外,默认0
*/
private Integer nationality;
/**
* 短信验证码
*/
private String VerifyCode;
/**
* email验证码
*/
private String emailVerifyCode;
private String passWord;
private String phone;
/**
@@ -36,6 +51,14 @@ public class IdentityAuthentication extends BaseEntity {
/** 认证状态 */
private Integer certificationStatus;
public String getEmailVerifyCode() {
return emailVerifyCode;
}
public void setEmailVerifyCode(String emailVerifyCode) {
this.emailVerifyCode = emailVerifyCode;
}
public Integer getCertificationStatus() {
return certificationStatus;
}
@@ -100,6 +123,22 @@ public class IdentityAuthentication extends BaseEntity {
return userId;
}
public Integer getIdType() {
return idType;
}
public void setIdType(Integer idType) {
this.idType = idType;
}
public Integer getNationality() {
return nationality;
}
public void setNationality(Integer nationality) {
this.nationality = nationality;
}
public void setUserId(Long userId) {
this.userId = userId;
}
@@ -30,5 +30,17 @@ public class CaseConfirmPayDTO {
* 缴费凭证
*/
private List<MsCaseAttach> payOrderList;
/**
* 是否同意,0-拒绝,1-同意
*/
private Integer yesOrNo;
/**
* 拒绝原因
*/
private String reason;
/**
* 是否申请人确认缴费
*/
private Boolean applicantConfirm=true;
}
@@ -1,11 +1,14 @@
package com.ruoyi.wisdomarbitrate.domain.dto.sendrecord;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.wisdomarbitrate.domain.entity.mscase.MsCaseAttach;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
public class SendMailRecord extends BaseEntity {
private static final long serialVersionUID = 1L;
@@ -40,6 +43,16 @@ public class SendMailRecord extends BaseEntity {
private Integer sendStatus;
/** 附件id */
private String fileIds;
/** 邮件主题 */
private String mailSubject;
/** 邮件发件人地址 */
private String mailFromAddress;
private List<MsCaseAttach> caseAttachList;
public Integer getSendStatus() {
return sendStatus;
@@ -2,11 +2,13 @@ package com.ruoyi.wisdomarbitrate.domain.dto.sendrecord;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.system.domain.entity.sms.MsSmsTemplateParam;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
@Data
@AllArgsConstructor
@@ -16,6 +18,10 @@ public class SmsSendRecord extends BaseEntity {
* ID
*/
private Long id;
/**
* 短信模板主键id
*/
private Long msSmsTemplateId;
/**
* 案件申请id
*/
@@ -33,21 +39,39 @@ public class SmsSendRecord extends BaseEntity {
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date sendTime;
/**
* 发送内容
*/
private String sendContent;
/**
* 发送状态
*/
private Integer sendStatus;
/**
* 短信sid,发送的唯一标识
*/
private String sid;
/**
* 失败原因
*/
private String reason;
/**
* 短信内容
*/
private String sendContent;
/**
* 腾讯云模板id
*/
private String templateId;
/**
* 模板内容
*/
private String templateContent;
private List<MsSmsTemplateParam> templateParams;
public SmsSendRecord(Long caseId, String caseNum, String phone, Date sendTime, String sendContent) {
public SmsSendRecord(Long caseId, String caseNum, String phone, Date sendTime, String sendContent,String sid) {
this.caseId = caseId;
this.caseNum = caseNum;
this.phone = phone;
this.sendTime = sendTime;
this.sendContent = sendContent;
this.sid = sid;
}
}
@@ -144,6 +144,27 @@ public class MsSealSignRecord {
@Column(name = "position_ypsn_medi")
private double positionYpsnMedi;
/**
* 申请人签名状态
*/
@Column(name = "sign_status_apply")
private Integer signStatusApply;
/**
* 被申请人签名状态
*/
@Column(name = "sign_status_response")
private Integer signStatusResponse;
/**
* 调解员签名状态
*/
@Column(name = "sign_status_mediator")
private Integer signStatusMediator;
/**
* 用印状态
*/
@Column(name = "seal_status")
private Integer sealStatus;
}
@@ -1,5 +1,6 @@
package com.ruoyi.wisdomarbitrate.domain.entity.mscase;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@@ -7,151 +8,143 @@ import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.util.Date;
@Getter
@Setter
@ToString
@Table(name = "ms_case_affiliate")
public class MsCaseAffiliate {
public class MsCaseAffiliate{
/**
* id
*/
@Id
@Column(name = "id")
private Long id;
/**
* 案件主表id,案件申请表主键
*/
@Id
@Column(name = "case_appli_id")
private Long caseAppliId;
/**
* 是否机构申请,0-自然人,1-申请机构,默认0
* 用户id,用户表user_id关联
*/
@Column(name = "organize_flag")
private Integer organizeFlag;
@Column(name = "user_id")
private Long userId;
/**
* 申请人id
* 申请机构id,和部门表id关联
*/
@Column(name = "application_id")
private String applicationId;
/**
* 申请人名称
*/
@Column(name = "application_name")
private String applicationName;
@Column(name = "applicant_dept_id")
private Long applicantDeptId;
/**
* 代码(统一社会信用代码或者身份证号)
*/
@Column(name = "code")
@Transient
private String code;
/**
* 申请人联系电话
* 用户名
*/
@Column(name = "application_phone")
private String applicationPhone;
/**
* 申请人邮箱
*/
@Column(name = "application_email")
private String applicationEmail;
@Transient
private String userName;
/**
* 法定代表人
*/
@Column(name = "comp_legal_person")
@Transient
private String compLegalPerson;
/**
* 角色类别,1-申请操作人/申请人,2-申请人代理人,3-被申请人操作人/被申请人,4-被申请人代理人
*/
@Column(name = "role_type")
private Integer roleType=1;
/**
* 组别
*/
@Column(name = "group_order")
private Integer groupOrder;
/**
* 是否操作人,0-否,1-是
*/
@Column(name = "operator_flag")
private Integer operatorFlag=1;
/**
* 是否机构申请,0-自然人,1-申请机构,默认0
*/
@Column(name = "organize_flag")
private Integer organizeFlag=0;
/**
* 电话
*/
@Transient
private String phone;
/**
* 邮箱
*/
@Transient
private String email;
/**
* 姓名
*/
@Transient
private String name;
/**
* 住所
*/
@Transient
private String home;
/**
* 联系地址
*/
@Transient
private String address;
/**
* 身份证号
*/
@Transient
private String idCard;
/**
* 申请人住所
* '身份类别,0-身份证,1-护照,默认0'
*/
@Column(name = "applicant_home")
private String applicantHome;
@Transient
private Integer idType;
/**
* 申请人联系地址
* 国籍,0-境内,1-境外,默认0
*/
@Column(name = "applicant_address")
private String applicantAddress;
@Transient
private Integer nationality;
/**
* 委托代理人姓名
* 生日
*/
@Column(name = "name_agent")
private String nameAgent;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "Asia/Shanghai")
@Transient
private Date birth;
/**
* 代理人联系电话
* 性别,0-男,1-女
*/
@Column(name = "contact_telphone_agent")
private String contactTelphoneAgent;
/**
* 代理人邮箱
*/
@Column(name = "agent_email")
private String agentEmail;
/**
* 申请人快递单号
*/
@Column(name = "applicant_track_num")
private String applicantTrackNum;
@Transient
private String sex;
/**
* 被申请人姓名
*/
@Column(name = "respondent_name")
private String respondentName;
@Transient
private String resName;
/**
* 角色名称
*/
@Transient
private String roleName;
/**
* 申请机构名称
*/
@Transient
private String applicantOrgName;
/**
* 角色id
*/
@Transient
private Long roleId;
/**
* 被申请人身份证号
*/
@Column(name = "respondent_identity_num")
private String respondentIdentityNum;
/**
* 被申请人联系电话
*/
@Column(name = "respondent_phone")
private String respondentPhone;
/**
* 被申请人性别(0=男,女=1)
*/
@Column(name = "respondent_sex")
private String respondentSex;
/**
* 被申请人出生年月日
*/
@Column(name = "respondent_birth")
private Date respondentBirth;
/**
* 被申请人申请人住所
*/
@Column(name = "respondent_home")
private String respondentHome;
/**
* 被申请人邮箱
*/
@Column(name = "respondent_email")
private String respondentEmail;
/**
* 被申请人快递单号
*/
@Column(name = "respondent_track_num")
private String respondentTrackNum;
/**
* 申请人是否签收
*/
@Column(name = "is_sign_apply")
private Integer isSignApply;
/**
* 被申请人是否签收
*/
@Column(name = "is_sign_respon")
private Integer isSignRespon;
}
@@ -6,10 +6,7 @@ import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.*;
import java.math.BigDecimal;
import java.util.Date;
@@ -99,7 +96,7 @@ public class MsCaseApplication {
private String payType;
/**
* 调解结果,1达成调解,2未达成调解,3未达成调解但不再争议,4未达成调解但同意引入仲裁
* 调解结果,1达成调解,2未达成调解,3未达成调解但不再争议,4未达成调解但同意引入仲裁,5-达成和解
*/
@Column(name = "media_result")
private Integer mediaResult;
@@ -209,4 +206,22 @@ public class MsCaseApplication {
@Column(name = "is_reconci")
private Integer isReconci;
/**
* 案件来源,YC-乙巢,空字符串-北明
*/
@Column(name = "case_source")
private String caseSource;
/**
* 是否需要用印,1-需要
*/
@Column(name = "seal_flag")
private Integer sealFlag;
/**
* 拒绝原因
*/
@Transient
private String rejectReason;
@Transient
private Integer organizeFlag=0;
}
@@ -73,8 +73,18 @@ public class MsCaseAttach {
private Long sealStatus;
/**
* 是否是证据上传,0-否,1-是
* onlyOffice附件id
*/
@Column(name = "is_batch_upload")
private Long isBatchUpload;
@Column(name = "only_office_file_id")
private String onlyOfficeFileId;
/**
* 对接其它系统返回的附件id
*/
@Column(name = "other_sys_file_id")
private String otherSysFileId;
/**
* 附件后缀
*/
@Column(name = "suffix")
private String suffix;
}
@@ -0,0 +1,69 @@
package com.ruoyi.wisdomarbitrate.domain.entity.mscase;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.Table;
import java.util.Date;
@Getter
@Setter
@ToString
@Table(name = "ms_case_audit")
public class MsCaseAudit {
@Id
@GeneratedValue(generator = "JDBC")
private Long id;
/**
* 案件申请id
*/
@Column(name = "case_appli_id")
private Long caseAppliId;
/**
* 案件节点
*/
@Column(name = "case_node")
private Integer caseNode;
/**
* 案件状态
*/
@Column(name = "case_status_name")
private String caseStatusName;
/**
* 是否同意,0-拒绝,1-同意,默认1同意
*/
@Column(name = "yes_or_no")
private Integer yesOrNo;
/**
* 操作人用户名
*/
@Column(name = "create_by")
private String createBy;
/**
* 操作人用户昵称
*/
@Column(name = "create_nick_name")
private String createNickName;
/**
* 创建时间
*/
@Column(name = "create_time")
private Date createTime;
/**
* 拒绝原因
*/
@Column(name = "reason")
private String reason;
}

Some files were not shown because too many files have changed in this diff Show More