287 Commits

Author SHA1 Message Date
litianxiang
921d2d956e minio缓存 2026-05-20 15:09:26 +08:00
litianxiang
d700f94f9d flux test 2026-05-14 16:36:55 +08:00
litianxiang
b277479e73 豆包模型更换 2026-05-13 20:52:28 +08:00
litianxiang
83cbd57dea 登录鉴权按照Source判断id来自于何处 2026-05-13 09:40:30 +08:00
litianxiang
4d3b22de82 买家端需要的获取商家主页和模糊搜索接口 2026-05-11 16:40:44 +08:00
litianxiang
6b5c2cfec0 日志
订单表字段改名
视频返回新增字段
2026-05-06 16:58:46 +08:00
litianxiang
b676de054a 新工作流 2026-05-06 14:37:42 +08:00
litianxiang
4c169ef67e seller产品图处加入视频 2026-05-06 13:30:21 +08:00
litianxiang
f2bce066b6 seller产品图编辑 2026-05-06 10:46:14 +08:00
litianxiang
6af442eb15 服务端口号与宿主机统一,方便本地调试不需要修改bootstrap 2026-05-04 14:21:35 +08:00
litianxiang
768df55309 服务端口号与宿主机统一,方便本地调试不需要修改bootstrap 2026-05-04 14:19:37 +08:00
litianxiang
f351277b73 nacos注册配置 2026-05-04 10:27:20 +08:00
litianxiang
a799162ea4 工作流 2026-04-28 16:40:56 +08:00
litianxiang
c035eb9d7d bootstrap配置 2026-04-28 14:38:00 +08:00
litianxiang
906a54b3c8 工作流配置 2026-04-28 13:58:46 +08:00
litianxiang
643799546b 工作流配置 2026-04-28 13:42:24 +08:00
litianxiang
f582464cd3 工作流配置 2026-04-28 13:37:47 +08:00
litianxiang
b864b393bc 1 2026-04-28 13:21:12 +08:00
litianxiang
c03a8762e7 商品bug 2026-04-28 09:39:26 +08:00
litianxiang
cb87ad1099 host配置 2026-04-27 16:43:18 +08:00
litianxiang
fb229764f8 host配置 2026-04-27 16:29:54 +08:00
litianxiang
8bec1f842d 工作流配置 2026-04-27 16:10:01 +08:00
litianxiang
b54bd04cff 端口号冲突 2026-04-27 15:00:28 +08:00
litianxiang
b4ccad6242 服务名修改 2026-04-27 14:30:29 +08:00
litianxiang
6068bf7d7d 微服务改造 2026-04-27 13:54:03 +08:00
litianxiang
d36baf747f 微服务改造 2026-04-27 11:47:15 +08:00
7c8f1bee6a 添加 .gitea/workflows/develop_3.1_MS_build_manual.yaml 2026-04-24 13:40:03 +08:00
litianxiang
62bd145e2c 微服务改造 2026-04-23 10:52:49 +08:00
litianxiang
23716984cc 微服务改造 2026-04-22 15:54:42 +08:00
litianxiang
d0b8b8d674 微服务改造 2026-04-22 11:16:03 +08:00
litianxiang
92e7dbf258 微服务改造 2026-04-22 11:15:34 +08:00
litianxiang
32a228485b token保持一致 2026-04-20 10:26:04 +08:00
litianxiang
560e47747a 微服务改造 2026-04-16 15:51:05 +08:00
litianxiang
c8dc38575a Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2026-04-15 14:52:35 +08:00
litianxiang
c00d906083 portfolioUrl 漏加fix 2026-04-15 14:52:18 +08:00
4df3f9cc53 BUGFIX:design印花scale与getDetail获取到的印花scale不一致 2026-04-15 14:43:59 +08:00
litianxiang
b0343be544 配置过滤器 2026-04-15 14:05:57 +08:00
litianxiang
d33cb9f0bf 配置过滤器 2026-04-15 13:47:28 +08:00
litianxiang
40f2735831 配置过滤器 2026-04-15 13:26:15 +08:00
01d3806d5f Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2026-04-13 17:52:35 +08:00
107e4e9771 BUGFIX:design 没有使用printboard中的元素 2026-04-13 17:51:15 +08:00
litianxiang
716d720782 GlobalAward返回最大的参赛者编号 2026-04-13 14:38:02 +08:00
litianxiang
6b5bacc49b GlobalAward返回最大的参赛者编号 2026-04-13 14:34:05 +08:00
litianxiang
409bc7b1fd 过滤器配置 2026-04-13 13:09:12 +08:00
litianxiang
ec6a5df8af TO DEV 2026-04-13 11:55:17 +08:00
litianxiang
029b96ae99 GlobalAward下载到浏览器 2026-04-13 11:47:20 +08:00
litianxiang
14002e7331 GlobalAward下载补充和数量接口 2026-04-13 10:22:43 +08:00
14dfe2806c merge dev 2026-04-10 23:27:37 +08:00
798c7b0592 Merge branch 'release/3.1' into dev/3.1_release_merge 2026-04-10 23:09:33 +08:00
9bd10581f4 BUGFIX:获取relight结果时删除了排序记录 2026-04-10 23:03:15 +08:00
1f288fe5e3 BUGFIX 2026-04-10 22:55:44 +08:00
72602eb245 BUGFIX 2026-04-10 22:51:00 +08:00
983d53268d DEBUG 2026-04-10 22:32:55 +08:00
f3aeeb3584 DEBUG 2026-04-10 22:21:56 +08:00
5d3692a204 BUGFIX:支付失败后的邮件通知类型错误(临时处理) 2026-04-08 13:52:38 +08:00
f2a074b2f6 Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-03-31 15:19:56 +08:00
6a7a37dcec BUGFIX:只有Printboard时,首次design没有使用元素 2026-03-31 14:12:43 +08:00
litianxiang
c4d2780f0e TO DEV 2026-03-31 13:55:32 +08:00
litianxiang
1da6b7728c Merge remote-tracking branch 'origin/dev/3.1_release_merge' into release/3.1 2026-03-30 17:05:43 +08:00
litianxiang
0faf77899b fix:PRINTBOARD_HIGH_I2I与PRINTBOARD_ADVANCED_I2I使用模型一致导致积分扣除错误 2026-03-27 16:49:10 +08:00
litianxiang
e4940019bf 框选适配py 2026-03-27 15:19:38 +08:00
litianxiang
0da66ff210 print t2i模型替换 2026-03-27 15:16:33 +08:00
litianxiang
5dd862ff79 MOOD_BOARD high 去掉翻译 2026-03-26 16:13:43 +08:00
litianxiang
edaec9884d TO PROD 2026-03-25 22:28:44 +08:00
litianxiang
76eeb2be53 moodboard基础模型修改 2026-03-25 10:39:22 +08:00
litianxiang
cb6f94d2d4 py api fix 2026-03-25 10:19:06 +08:00
litianxiang
28656c44c8 FIX FLUX2 2026-03-24 16:24:43 +08:00
litianxiang
6757a89d04 Pattern模式参数fix 2026-03-24 15:54:53 +08:00
litianxiang
9be1a1e307 加锁解决不同线程读取前还未保存的问题 2026-03-24 15:49:16 +08:00
litianxiang
2168978f61 print pattern也改为flux2 2026-03-24 15:32:06 +08:00
litianxiang
54466b935d debug 2026-03-24 15:23:33 +08:00
litianxiang
c970ebe691 debug 2026-03-24 15:15:59 +08:00
litianxiang
1c5a3a12b9 debug 2026-03-24 15:04:40 +08:00
litianxiang
6e06000083 debug 2026-03-24 14:46:01 +08:00
litianxiang
dea2b3be42 debug 2026-03-24 14:29:08 +08:00
litianxiang
bcf51aea23 debug 2026-03-24 14:20:39 +08:00
litianxiang
0c9d5404c6 flux2失败状态判断 2026-03-24 14:05:27 +08:00
litianxiang
93429839c0 本地flux改为flux2 2026-03-24 13:39:38 +08:00
litianxiang
27859c3e28 Merge remote-tracking branch 'origin/release/3.1' into dev/3.1_release_merge 2026-03-23 14:11:33 +08:00
litianxiang
f02c0930a6 日志切面(controller层报错打印) 2026-03-23 13:56:47 +08:00
litianxiang
d57bb83b25 Merge remote-tracking branch 'origin/release/3.1' into release/3.1 2026-03-23 13:50:44 +08:00
731e34f133 TO DEV 2026-03-23 13:38:10 +08:00
75eca8d6ba Merge branch 'release/3.1' into dev/3.1_release_merge
# Conflicts:
#	src/main/java/com/ai/da/python/PythonService.java
2026-03-23 13:22:18 +08:00
3e53401f76 TASK:返回符合查询条件的金额总计 2026-03-23 11:55:07 +08:00
litianxiang
b6a068ebcd SKETCHBOARD传入的text改为获取第一个,为分割获取style的方式 2026-03-23 11:50:24 +08:00
litianxiang
dc291ea086 加入非空校验 2026-03-14 01:50:39 +08:00
litianxiang
2e846e671a romantic风格缺少下装fix 2026-03-13 10:06:26 +08:00
litianxiang
a5093311f9 当style为洛丽塔时无sketch和谷歌风控问题FIX 2026-03-12 19:06:54 +08:00
litianxiang
aed338a6d7 当style为洛丽塔时无sketch和谷歌风控问题FIX 2026-03-12 18:59:17 +08:00
litianxiang
8bdb49d25c 当style为洛丽塔时无sketch和谷歌风控问题FIX 2026-03-12 18:49:57 +08:00
litianxiang
5d53a8cd42 当style为洛丽塔时无sketch和谷歌风控问题FIX 2026-03-12 18:49:28 +08:00
litianxiang
61b7f3072f 当style为洛丽塔时无sketch和谷歌风控问题FIX 2026-03-12 18:36:21 +08:00
litianxiang
a1f489f3a1 比赛url修改 2026-03-12 17:39:05 +08:00
litianxiang
fc3fd877a8 transpose和rotate获取位置修改 2026-03-05 16:58:17 +08:00
litianxiang
fc72d2c430 transpose和rotate获取位置修改 2026-03-05 13:29:14 +08:00
litianxiang
1ac01dd090 测试token恢复 2026-02-25 16:36:06 +08:00
litianxiang
3bbdf7c672 fix:按编号导出参赛选手文件 2026-02-09 10:33:25 +08:00
litianxiang
0646484fba 按编号导出参赛选手文件 2026-02-09 10:21:40 +08:00
litianxiang
96b8613741 映射temp到服务器 2026-02-06 17:29:42 +08:00
litianxiang
cf30226a51 映射temp到服务器 2026-02-06 17:24:43 +08:00
litianxiang
3c15a3ff68 映射temp到服务器 2026-02-06 17:21:07 +08:00
litianxiang
0c904be227 测试临时token 2026-02-06 11:42:34 +08:00
litianxiang
7759b56123 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2026-02-05 17:39:15 +08:00
litianxiang
d5bfaa8822 fix:允许图生图不带提示词 2026-02-05 17:38:38 +08:00
967c0cbc01 Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-02-05 16:55:24 +08:00
417e34b41a BUGFIX:1.首次design没有使用library和生成的印花2.design overall印花太小 2026-02-05 16:54:45 +08:00
litianxiang
d51aa84647 fix:参赛者根据链接返回文件参数 2026-02-05 09:41:10 +08:00
litianxiang
5895bc6ab6 Revert "fix:参赛者根据链接返回文件参数"
This reverts commit 3301869f20.
2026-02-05 09:40:35 +08:00
litianxiang
3301869f20 fix:参赛者根据链接返回文件参数 2026-02-05 09:40:15 +08:00
litianxiang
1ec42f4ad5 fix:参赛者id逻辑更改 2026-02-04 17:20:22 +08:00
cc506ff7e9 Merge branch 'dev/3.1_release_merge' into release/3.1 2026-02-04 17:05:59 +08:00
litianxiang
f2d43f06f4 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2026-02-04 15:28:08 +08:00
litianxiang
9251df49f8 比赛新增文件大小和视频时长 2026-02-04 15:27:51 +08:00
430156f4e8 Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-02-04 14:48:38 +08:00
litianxiang
d1123aedcc fix:导出为页面下载 2026-02-04 14:45:11 +08:00
8c007077a3 BUGFIX: detail中的merge模式下没有存储partialDesign的图片 2026-02-04 14:43:29 +08:00
litianxiang
d63b4b4e63 fix:参赛选手加入编号 2026-02-04 14:03:30 +08:00
litianxiang
b826f0bf39 参赛选手加入编号,增加导出功能 2026-02-04 13:41:16 +08:00
litianxiang
1decd8e258 参赛选手加入编号,增加导出功能 2026-02-04 13:41:09 +08:00
litianxiang
1286e84488 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev-ltx 2026-02-04 13:21:19 +08:00
a252fdf7f9 BUGFIX: detail中的default模式报错 2026-02-03 16:56:15 +08:00
807d802178 TASK:motion 参数数据类型变更 2026-02-02 15:30:04 +08:00
53f1b548be CONFIG 2026-02-02 15:28:54 +08:00
45dd78032a BUGFIX: 1.token过期,重新登录无法解决 2.motion生成参数数据类型变更 2026-02-02 15:04:27 +08:00
c160da5132 BUGFIX: token过期,重新登录无法解决 2026-02-02 14:57:32 +08:00
b23faeeee2 Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-02-02 13:32:55 +08:00
67789abca4 TASK:getAllPose id的数据类型改为整型 2026-02-02 13:32:27 +08:00
1c78d66aab Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-30 17:14:50 +08:00
528bc69923 BUGFIX: design single merge模式下取消传递print及elements等元素 2026-01-30 17:10:37 +08:00
litianxiang
22880d128d Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev-ltx 2026-01-30 15:40:25 +08:00
9c56a102cc Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-29 14:38:20 +08:00
2f59fe074f BUGFIX: 管理员修改用户身份为游客 2026-01-29 14:37:54 +08:00
9c61b1c8fe Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-29 10:12:47 +08:00
e30fdf7401 BUGFIX:模特上传,事务管理不统一导致library出现孤儿数据 2026-01-29 10:10:21 +08:00
ba2d10afbc paymentMethodConfiguration切换 2026-01-28 15:41:52 +08:00
6146112d04 TO PROD 2026-01-27 16:39:39 +08:00
412550df27 BUGFIX:管理员查design频次与chart中获取到的数量有区别 2026-01-27 14:59:39 +08:00
497421e7fe TO DEV 2026-01-27 10:15:36 +08:00
891527426c Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge
# Conflicts:
#	src/main/java/com/ai/da/service/impl/DesignServiceImpl.java
2026-01-26 14:49:38 +08:00
litianxiang
3e334d7956 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev-ltx 2026-01-26 11:16:46 +08:00
litianxiang
8f0d0953b2 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2026-01-26 11:15:38 +08:00
f5c3621a5d bugfix: design like 2026-01-23 22:45:40 +08:00
litianxiang
9a1a0045e0 fix:like报错 2026-01-23 22:40:30 +08:00
6223c8e994 brandDNA 2026-01-23 22:25:01 +08:00
67bbee49fd Merge branch 'dev/3.1_release_merge' into release/3.1 2026-01-23 21:20:26 +08:00
ad62ceb32a Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-23 21:02:04 +08:00
082afe9e94 gradiant 置空 2026-01-23 20:57:48 +08:00
49288c3a31 TO Prod 2026-01-23 16:10:55 +08:00
81624e36db Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2026-01-23 15:12:15 +08:00
a526b122d1 Merge branch 'release/3.1' into dev/3.1_release_merge 2026-01-23 15:11:45 +08:00
litianxiang
d882b2e817 Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2026-01-23 15:05:22 +08:00
litianxiang
ebf6427d42 fix:用户特征存入逻辑错误 2026-01-23 15:04:59 +08:00
77fe03d361 Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-23 11:46:31 +08:00
7a44d67dbf BUGFIX: 系统消息发布 广播时消息数量错误 2026-01-23 11:46:08 +08:00
55ce2c6c7e Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-23 10:54:35 +08:00
a426caaca3 BUGFIX: 系统消息发布 2026-01-23 10:54:03 +08:00
7cb7ce2836 Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-22 16:56:11 +08:00
8e075f1da4 BUGFIX: 通过hsv批量获取潘通信息,替换rgb 2026-01-22 16:55:00 +08:00
litianxiang
0f0fde2a3e Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2026-01-22 14:28:37 +08:00
litianxiang
8c6389a1f6 删除不用的字段 2026-01-22 14:28:10 +08:00
652f82b6a4 Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-22 13:56:44 +08:00
7ca2528dcf BUGFIX: design后未存储undivided layers 2026-01-22 13:56:07 +08:00
litianxiang
a7800913d2 Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2026-01-22 13:51:42 +08:00
litianxiang
1eaec64ff4 fix:GlobalAward读取配置错误 2026-01-22 13:51:13 +08:00
e603952332 Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-22 11:37:25 +08:00
2bc8b8ef96 BUGFIX: single design的渐变色未存储 2026-01-22 11:36:43 +08:00
0ce968b919 BUGFIX: 用户登录时的有效期验证异常抛出导致事务回滚,用户信息修改失败 2026-01-22 10:37:23 +08:00
litianxiang
dfc9ae4db2 GlobalAward站内信url修改 2026-01-21 16:50:01 +08:00
litianxiang
a3505c6d95 GlobalAward站内信url修改 2026-01-21 15:09:45 +08:00
litianxiang
6db0afd515 GlobalAward保存成功发送站内信,根据url可跳转且召回已填写资料 2026-01-21 14:59:41 +08:00
litianxiang
b1e6183dd1 GlobalAward接口token验证,id更换为uuid 2026-01-21 14:34:43 +08:00
30d08356c0 Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-21 14:14:17 +08:00
64cc29f456 TASK:Global Award邮箱验证 2026-01-21 14:13:33 +08:00
litianxiang
2b3e12a11c GlobalAward MINIO配置 2026-01-21 11:38:38 +08:00
litianxiang
d4a4724f61 GlobalAward拦截器配置 2026-01-21 10:35:22 +08:00
litianxiang
ba6e2bd24c GlobalAward拦截器配置 2026-01-21 10:21:17 +08:00
litianxiang
a38895b028 GlobalAward拦截器配置 2026-01-21 10:13:11 +08:00
litianxiang
69a95e66ca GlobalAward上传文件 2026-01-20 16:37:46 +08:00
litianxiang
40518cab37 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev-ltx
# Conflicts:
#	src/main/java/com/ai/da/controller/GlobalAwardController.java
#	src/main/java/com/ai/da/model/dto/ContestantDTO.java
#	src/main/resources/application-dev.properties
#	src/main/resources/application-prod.properties
2026-01-20 16:20:41 +08:00
litianxiang
46d61cb73f GlobalAward上传文件 2026-01-20 15:58:27 +08:00
08f20fd1fe Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-20 13:24:49 +08:00
d7edc166b3 TASK:Global Award邮箱验证 2026-01-20 13:14:50 +08:00
litianxiang
79ad02f66b fix:style为all时,like报错 2026-01-19 16:50:14 +08:00
litianxiang
5e261b55c7 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2026-01-19 16:41:02 +08:00
litianxiang
bc92fcbaf4 Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2026-01-19 16:40:58 +08:00
litianxiang
c6aec917c2 fix:style为all时,like报错 2026-01-19 16:40:28 +08:00
6bc500e78f Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-16 17:17:25 +08:00
4c43b98c02 TASK:DB中PartialDesign为空时,取undivided_layer作为merge_image_path 2026-01-16 17:17:04 +08:00
litianxiang
5bae785a9f Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2026-01-16 16:37:49 +08:00
litianxiang
7b619aa4cb GlobalAward首次提交 2026-01-16 16:37:03 +08:00
c93ad6daa9 Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-16 16:24:38 +08:00
0047be7a03 BUGFIX:PartialDesign传空时,先从数据库获取原数据 2026-01-16 16:23:56 +08:00
4ef209cfd4 Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-16 14:28:27 +08:00
a19751b4b7 BUGFIX:designType参数校验;print数据验空 2026-01-16 14:28:04 +08:00
litianxiang
bb0e5a4263 Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2026-01-16 11:04:52 +08:00
litianxiang
9e9df5367d fix:接口SegAnything返回值处理 2026-01-16 11:04:18 +08:00
ba8a2c52de Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2026-01-15 17:36:37 +08:00
39d8c7efcf TASK:取消存储/返回UndividedLayer和UndividedLayerWithSinglePrint字段 2026-01-15 17:35:55 +08:00
litianxiang
401910901a Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge
# Conflicts:
#	src/main/java/com/ai/da/python/PythonService.java
2026-01-15 17:21:30 +08:00
litianxiang
3f5ce6e0e7 接口SegAnything返回值处理 2026-01-15 17:17:08 +08:00
0787025151 TASK:merge 模式返回mask 2026-01-15 14:07:18 +08:00
08b26872ff Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2026-01-14 14:28:05 +08:00
5bbf1326bb TASK:design single部分cv操作前置,新增merge | default两种designType 2026-01-14 14:26:47 +08:00
litianxiang
c5e27cd220 Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2026-01-14 13:55:01 +08:00
litianxiang
112e9c3bc9 对接前端和py接口SegAnything 2026-01-14 13:31:33 +08:00
litianxiang
ce95cb5080 Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2026-01-12 14:42:02 +08:00
litianxiang
71211bfbc3 修改存入userPreference表的时间方式 2026-01-12 14:41:24 +08:00
72ad977dcb BUGFIX: 获取近期新用户图表数据允许userType为null 2026-01-12 11:55:43 +08:00
litianxiang
6400e79929 Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2026-01-09 14:49:25 +08:00
litianxiang
dd8c72f7d7 切换用户sketch点赞记录存储方式;新增镜像和角度字段,存储前端需要的object 2026-01-09 10:14:46 +08:00
13151b65f5 TASK:限制同一个管理员不允许绑定不同组织的订阅计划 2026-01-07 15:24:38 +08:00
9f523d5953 TASK:分页获取所有用户id,添加按邮箱模糊查询 2026-01-07 11:26:39 +08:00
4879cfeb60 BUGFIX: 2026-01-07 09:53:58 +08:00
9e252b16ef BUGFIX: 2026-01-06 17:36:12 +08:00
e64add14af BUGFIX:更新订阅计划时根据业务需要对参数进行判断并在需要时更新管理员信息 2026-01-06 17:29:33 +08:00
3beb27e491 TASK:获取用户id信息做分页;订阅计划添加国家或地区字段 2026-01-06 09:56:21 +08:00
501032ef17 TASK:试用用户试用期延长至7天 2025-12-31 13:15:13 +08:00
litianxiang
cb25bdd2e0 Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2025-12-29 14:57:41 +08:00
litianxiang
7a9fb0213b 适配新推荐接口 2025-12-29 13:49:31 +08:00
cd767dce6f BUGFIX:新用户不能获取历史系统通知 2025-12-24 11:47:11 +08:00
bf95b85841 to dev 2025-12-23 16:28:07 +08:00
9e58bd9e7d Merge branch 'release/3.1' into dev/3.1_release_merge
# Conflicts:
#	src/main/java/com/ai/da/common/utils/SendRequestUtil.java
2025-12-23 16:16:30 +08:00
d0ec5c5c26 BUGFIX:邮件发送失败 2025-12-23 16:03:48 +08:00
ab8aa5ea5c Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2025-12-23 14:07:53 +08:00
aefcd2fdb0 BUGFIX:邮件发送失败 2025-12-23 14:07:26 +08:00
e74eab1070 BUGFIX:邮件发送失败 2025-12-23 14:05:20 +08:00
litianxiang
34da437a26 Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2025-12-22 11:36:23 +08:00
litianxiang
f84935d0bd 登录token存入redis 2025-12-22 11:35:38 +08:00
35edaa0f27 CONFIG: 拦截器配置 2025-12-19 21:43:02 +08:00
f43099e19e CONFIG: redis 配置修改 2025-12-19 21:21:21 +08:00
8079877734 CONFIG: TO DEV 2025-12-19 17:40:37 +08:00
ef686e38ac CONFIG: TO PROD 2025-12-19 17:33:51 +08:00
100019d2a4 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2025-12-19 16:00:55 +08:00
litianxiang
12af237d76 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2025-12-19 15:47:36 +08:00
litianxiang
44dbbb2a4b 更换Moodboard和Printboard提示词 2025-12-19 15:47:07 +08:00
9f42e153a4 Merge branch 'release/3.1' into dev/3.1_release_merge
# Conflicts:
#	.gitea/workflows/develop_build_manual.yaml
2025-12-19 15:01:32 +08:00
4fa70a1c90 BUGFIX:订阅计划创建不允许指定子账号为管理员 2025-12-18 18:03:03 +08:00
dfb34916e7 BUGFIX:订阅计划与子账号新增 2025-12-18 14:52:12 +08:00
9f7987306c BUGFIX:订阅计划 2025-12-18 13:38:38 +08:00
litianxiang
d3fc70fbf2 fix:edit产品图照成排序问题,恢复原逻辑 2025-12-17 16:08:49 +08:00
litianxiang
17645d17e5 关闭batch MQ监听 2025-12-17 16:02:49 +08:00
litianxiang
258eea5277 edit 产品图失败会导致sort不对试验5 2025-12-17 15:43:26 +08:00
litianxiang
bb1d3bd359 Revert "edit 产品图失败会导致sort不对试验5"
This reverts commit 6a8c87ed95.
2025-12-17 15:41:02 +08:00
litianxiang
6a8c87ed95 edit 产品图失败会导致sort不对试验5 2025-12-17 15:40:47 +08:00
litianxiang
eb3826927d edit 产品图失败会导致sort不对试验4 2025-12-17 15:33:14 +08:00
litianxiang
7720c8c771 edit 产品图失败会导致sort不对试验3 2025-12-17 14:12:20 +08:00
litianxiang
b459148d58 edit 产品图失败会导致sort不对试验2 2025-12-17 13:49:07 +08:00
litianxiang
eadda18d1e Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2025-12-17 13:28:12 +08:00
litianxiang
d403df51ec edit 产品图失败会导致sort不对试验 2025-12-17 13:28:04 +08:00
6903b98b60 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev/3.1_release_merge 2025-12-17 13:20:34 +08:00
81bf65515c Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2025-12-17 13:19:54 +08:00
8e984eb283 BUGFIX:订阅计划 2025-12-17 13:18:24 +08:00
litianxiang
afc6041570 临时测试修改 2025-12-17 13:10:09 +08:00
bce368248c Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2025-12-16 16:26:27 +08:00
ca7121dcda BUGFIX:订阅计划 2025-12-16 16:24:52 +08:00
litianxiang
9a206f9979 生产环境配置callbackUrl 2025-12-16 14:10:22 +08:00
litianxiang
eb7a46c7e8 fix:callbackUrl 2025-12-16 13:45:21 +08:00
litianxiang
95ef68a784 Merge remote-tracking branch 'origin/dev-ltx' into dev/3.1_release_merge 2025-12-16 13:20:31 +08:00
litianxiang
6429288fd9 dev环境加入design回调配置 2025-12-16 13:16:36 +08:00
c5af194876 BUGFIX 2025-12-16 10:42:31 +08:00
da84e1e4b4 注解修改 2025-12-15 18:39:16 +08:00
95a9c81a1b Merge branch 'dev/dev_xp' into dev/3.1_release_merge
# Conflicts:
#	src/main/java/com/ai/da/model/dto/SubscriptionPlanDTO.java
#	src/main/java/com/ai/da/model/vo/SubscriptionPlanVO.java
2025-12-15 18:34:30 +08:00
81c0d7eeac TASK:订阅计划相关 2025-12-15 18:30:28 +08:00
litianxiang
fbc473735c fix:对没有like的已发布作品进行二创,会不显示原作者名字 2025-12-15 15:41:58 +08:00
litianxiang
9f48a2ce09 fix:升级swagger注解 2025-12-15 13:38:44 +08:00
459c743ce4 CONFIG: 2025-12-11 16:58:24 +08:00
ce3516916d CONFIG: 2025-12-11 16:18:37 +08:00
0692b29065 Merge branch 'dev/dev_xp' into dev/3.1_release_merge
# Conflicts:
#	src/main/java/com/ai/da/controller/AccountController.java
2025-12-11 16:12:41 +08:00
94cafbd10c TASK:flux积分不足,邮件通知 2025-12-11 16:07:14 +08:00
5c2008ec4a TASK:订阅计划,测试修改 2025-12-11 15:26:20 +08:00
litianxiang
4e4b8bd4d2 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into dev-ltx 2025-12-11 15:12:22 +08:00
litianxiang
9c19d061be fix:升级swagger注解 2025-12-11 10:35:08 +08:00
7f094265da TASK:新增订阅计划概念 2025-12-11 09:44:25 +08:00
22bc8750c8 Merge branch 'dev-ltx' into dev/dev_xp 2025-12-03 16:53:17 +08:00
a940105fa4 DEV 数据库切换 2025-12-03 14:18:58 +08:00
litianxiang
a643338916 fix:接口文档打不开问题pom更新 2025-12-02 15:43:16 +08:00
litianxiang
9344a946ad fix:接口文档打不开问题 2025-12-02 15:42:51 +08:00
6cd42b799a 删除 .gitea/workflows/prod_build_schedule.yaml 2025-12-01 10:22:29 +08:00
6e1ed7f9b8 删除 .gitea/workflows/prod_build_manual.yaml 2025-12-01 10:22:25 +08:00
b7be16738b 删除 .gitea/workflows/develop_build_manual.yaml 2025-12-01 10:22:21 +08:00
6da5e91ec1 删除 .gitea/workflows/develop_build_commit.yaml 2025-12-01 10:22:17 +08:00
a710fdd432 删除 docker-compose.yml 2025-11-30 11:01:12 +08:00
d598f53d3c Merge branch 'dev/3.1_release_merge' into release/3.1
# Conflicts:
#	.gitea/workflows/prod_build_schedule.yaml
2025-11-28 17:16:55 +08:00
96170a9956 更新 .gitea/workflows/prod_build_manual.yaml 2025-11-28 15:25:50 +08:00
8205fb5290 上传文件至「.gitea/workflows」 2025-11-28 15:25:41 +08:00
fcbe4762b3 TO prod 2025-11-27 17:38:24 +08:00
e750adcc94 TO prod 2025-11-27 17:35:47 +08:00
306 changed files with 17757 additions and 12847 deletions

View File

@@ -0,0 +1,111 @@
name: 手动 AiDA back-java 开发分支构建部署
on:
workflow_dispatch:
jobs:
build_and_deploy:
runs-on: java21
outputs:
build_status: ${{ job.status }}
build_url: ${{ gitea.server_url }}/${{ gitea.repository.owner.name }}/${{ gitea.repository.name }}/actions/runs/${{ gitea.run_id }}
permissions:
contents: read
packages: write
env:
REMOTE_DEPLOY_PATH: /workspace/workspace_aida/DevelopVersion/develop-MS-version-aida-back
steps:
- name: 0.记录开始时间
id: build_start_time
run: echo "current_time=$(TZ='Asia/Hong_Kong' date '+%Y-%m-%d %H:%M:%S %Z')" >> $GITHUB_OUTPUT
- name: 1.检出代码
uses: actions/checkout@v4
with:
ref: dev/3.1_release_merge_MS
- name: 3.缓存 Maven 依赖
uses: actions/cache@v5
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
- name: 4.构建项目
run: |
java -version
mvn -v
mvn clean package -DskipTests
- name: 5.生成Dockerfile
run: |
echo "===== 生成Dockerfile ====="
cat > Dockerfile << 'EOF'
FROM openjdk:21-ea-21-jdk-slim
VOLUME /tmp
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' > /etc/timezone
ADD ./target/aida-0.0.1-SNAPSHOT.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
EOF
echo "Dockerfile内容:"
cat Dockerfile
- name: 6.生成docker-compose.yml
run: |
echo "===== 生成docker-compose.yml ====="
cat > docker-compose.yml << 'EOF'
version: '3'
services:
aida_back:
container_name: develop-aida-ms
build: .
volumes:
# 数据挂载
- ./log:/log
- ./temp:/temp
- ./uploads:/temp/uploads
ports:
- '10092:10092'
restart: always
EOF
# 验证docker-compose.yml生成
echo "docker-compose.yml内容:"
cat docker-compose.yml
- name: 7.上传jar到远程服务器
uses: appleboy/scp-action@master
with:
host: ${{ secrets.SERVER_HOST }}
port: 22
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
source: "target/*.jar,Dockerfile,docker-compose.yml"
target: ${{ env.REMOTE_DEPLOY_PATH }}
preserve_host_directory_structure: false
- name: 8. 重启 Docker 服务
uses: appleboy/ssh-action@master # 👈 专门执行命令的 action
with:
host: ${{ secrets.SERVER_HOST }}
username: ${{ secrets.SERVER_USER }}
key: ${{ secrets.SSH_KEY }}
key_base64: true
script: |
echo "========= 进入部署目录 ========="
cd ${{ env.REMOTE_DEPLOY_PATH }}
ls -l
echo "========= 停止旧服务 ========="
docker compose down
echo "========= 启动新服务 ========="
docker compose up -d --build
echo "========= 查看运行状态 ========="
docker compose ps

View File

@@ -99,9 +99,17 @@ jobs:
volumes: volumes:
# 数据挂载 # 数据挂载
- ./log:/log - ./log:/log
- ./temp:/temp
- ./uploads:/temp/uploads
ports: ports:
- '10090:5567' - '10090:5567'
networks:
- aida_java_net
restart: always restart: always
networks:
aida_java_net:
external: true
name: aida_java_net
EOF EOF
# 验证docker-compose.yml生成 # 验证docker-compose.yml生成
echo "docker-compose.yml内容:" echo "docker-compose.yml内容:"

77
pom.xml
View File

@@ -5,7 +5,7 @@
<parent> <parent>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId> <artifactId>spring-boot-starter-parent</artifactId>
<version>3.1.6</version> <version>3.2.5</version>
<relativePath/> <!-- lookup parent from repository --> <relativePath/> <!-- lookup parent from repository -->
</parent> </parent>
<groupId>com.aida</groupId> <groupId>com.aida</groupId>
@@ -15,7 +15,7 @@
<description>ai da</description> <description>ai da</description>
<properties> <properties>
<java.version>21</java.version> <java.version>21</java.version>
<mybatis.plus.version>3.5.5</mybatis.plus.version> <mybatis.plus.version>3.5.7</mybatis.plus.version>
<hutool.version>5.8.23</hutool.version> <hutool.version>5.8.23</hutool.version>
<wx.java.version>4.2.7.B</wx.java.version> <wx.java.version>4.2.7.B</wx.java.version>
<fastjson.version>2.0.43</fastjson.version> <fastjson.version>2.0.43</fastjson.version>
@@ -28,6 +28,11 @@
<javacv.version>1.5.5</javacv.version> <javacv.version>1.5.5</javacv.version>
<system.windowsx64>windows-x86_64</system.windowsx64> <system.windowsx64>windows-x86_64</system.windowsx64>
<javacpp.platform.linux-x86_64>linux-x86_64</javacpp.platform.linux-x86_64> <javacpp.platform.linux-x86_64>linux-x86_64</javacpp.platform.linux-x86_64>
<!-- Spring Cloud Alibaba 版本 -->
<spring-cloud-alibaba.version>2023.0.3.4</spring-cloud-alibaba.version>
<!-- Spring Cloud 版本 -->
<spring-cloud.version>2023.0.4</spring-cloud.version>
</properties> </properties>
<dependencyManagement> <dependencyManagement>
<dependencies> <dependencies>
@@ -38,6 +43,22 @@
<type>pom</type> <type>pom</type>
<scope>import</scope> <scope>import</scope>
</dependency> </dependency>
<!-- Spring Cloud 依赖版本管理 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- Spring Cloud Alibaba 依赖版本管理 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies> </dependencies>
</dependencyManagement> </dependencyManagement>
<dependencies> <dependencies>
@@ -74,9 +95,14 @@
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.baomidou</groupId> <groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId> <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatis.plus.version}</version> <version>${mybatis.plus.version}</version>
</dependency> </dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>3.0.4</version>
</dependency>
<dependency> <dependency>
<groupId>org.springframework.boot</groupId> <groupId>org.springframework.boot</groupId>
@@ -135,9 +161,14 @@
<dependency> <dependency>
<groupId>com.github.xiaoymin</groupId> <groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-spring-boot-starter</artifactId> <artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.4.0</version> <version>4.4.0</version>
</dependency> </dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.3.0</version>
</dependency>
<!-- Swagger 2 annotations for backward compatibility --> <!-- Swagger 2 annotations for backward compatibility -->
<dependency> <dependency>
<groupId>io.swagger</groupId> <groupId>io.swagger</groupId>
@@ -232,6 +263,12 @@
<version>2.15.1</version> <version>2.15.1</version>
</dependency> </dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.13.0</version>
</dependency>
<dependency> <dependency>
<groupId>com.stripe</groupId> <groupId>com.stripe</groupId>
<artifactId>stripe-java</artifactId> <artifactId>stripe-java</artifactId>
@@ -422,6 +459,38 @@
<artifactId>bcpkix-jdk18on</artifactId> <artifactId>bcpkix-jdk18on</artifactId>
<version>1.78.1</version> <version>1.78.1</version>
</dependency> </dependency>
<!-- AOP -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- ==================== Spring Cloud Alibaba 微服务相关 ==================== -->
<!-- 启用 bootstrap.yml 加载 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- Nacos 服务注册与发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- Nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- OpenFeign 服务调用 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<!-- Spring Cloud LoadBalancer 负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
</dependencies> </dependencies>
<build> <build>

View File

@@ -3,6 +3,8 @@ package com.ai.da;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.EnableScheduling;
@@ -10,6 +12,8 @@ import org.springframework.scheduling.annotation.EnableScheduling;
@SpringBootApplication @SpringBootApplication
@EnableScheduling @EnableScheduling
@EnableAsync @EnableAsync
@EnableFeignClients
@EnableDiscoveryClient
public class AiDaApplication { public class AiDaApplication {
public static void main(String[] args) { public static void main(String[] args) {

View File

@@ -559,103 +559,103 @@ public class GenerateConsumer {
log.info("============ProcessPoseTransformResult End listening=========="); log.info("============ProcessPoseTransformResult End listening==========");
} }
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
@RabbitHandler // @RabbitHandler
public void generateConsumer1(Message msg, Channel channel) { // public void generateConsumer1(Message msg, Channel channel) {
generate(msg, channel, "consumer 1"); // generate(msg, channel, "consumer 1");
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
@RabbitHandler // @RabbitHandler
public void generateConsumer2(Message msg, Channel channel) { // public void generateConsumer2(Message msg, Channel channel) {
generate(msg, channel, "consumer 2"); // generate(msg, channel, "consumer 2");
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
@RabbitHandler // @RabbitHandler
public void generateConsumer3(Message msg, Channel channel) { // public void generateConsumer3(Message msg, Channel channel) {
generate(msg, channel, "consumer 3"); // generate(msg, channel, "consumer 3");
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
@RabbitHandler // @RabbitHandler
public void generateConsumer4(Message msg, Channel channel) { // public void generateConsumer4(Message msg, Channel channel) {
generate(msg, channel, "consumer 4"); // generate(msg, channel, "consumer 4");
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
@RabbitHandler // @RabbitHandler
public void generateConsumer5(Message msg, Channel channel) { // public void generateConsumer5(Message msg, Channel channel) {
generate(msg, channel, "consumer 5"); // generate(msg, channel, "consumer 5");
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
@RabbitHandler // @RabbitHandler
public void generateConsumer6(Message msg, Channel channel) { // public void generateConsumer6(Message msg, Channel channel) {
generate(msg, channel, "consumer 6"); // generate(msg, channel, "consumer 6");
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
@RabbitHandler // @RabbitHandler
public void generateConsumer7(Message msg, Channel channel) { // public void generateConsumer7(Message msg, Channel channel) {
generate(msg, channel, "consumer 7"); // generate(msg, channel, "consumer 7");
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
@RabbitHandler // @RabbitHandler
public void generateConsumer8(Message msg, Channel channel) { // public void generateConsumer8(Message msg, Channel channel) {
generate(msg, channel, "consumer 8"); // generate(msg, channel, "consumer 8");
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.generate}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.generate}")
@RabbitHandler // @RabbitHandler
public void generateConsumer9(Message msg, Channel channel) { // public void generateConsumer9(Message msg, Channel channel) {
generate(msg, channel, "consumer 9"); // generate(msg, channel, "consumer 9");
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.generateResult}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.generateResult}")
@RabbitHandler // @RabbitHandler
public void getGenerateResult(Message msg, Channel channel) { // public void getGenerateResult(Message msg, Channel channel) {
processGenerateResult(msg, channel); // processGenerateResult(msg, channel);
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.toProductImageResult}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.toProductImageResult}")
@RabbitHandler // @RabbitHandler
public void getToProductImageResult(Message msg, Channel channel) { // public void getToProductImageResult(Message msg, Channel channel) {
processToProductImageResult(msg, channel); // processToProductImageResult(msg, channel);
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.relightResult}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.relightResult}")
@RabbitHandler // @RabbitHandler
public void getRelightResult(Message msg, Channel channel) { // public void getRelightResult(Message msg, Channel channel) {
processRelightResult(msg, channel); // processRelightResult(msg, channel);
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.poseTransform}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.poseTransform}")
@RabbitHandler // @RabbitHandler
public void getPoseTransformationResult(Message msg, Channel channel) { // public void getPoseTransformationResult(Message msg, Channel channel) {
processPoseTransformResult(msg, channel); // processPoseTransformResult(msg, channel);
} // }
@RabbitListener(queues = "#{rabbitMQProperties.queues.designBatch}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.designBatch}")
@RabbitHandler // @RabbitHandler
public void getDesignBatchResult(Message msg, Channel channel) { // public void getDesignBatchResult(Message msg, Channel channel) {
processDesignBatchResult(msg, channel); // processDesignBatchResult(msg, channel);
} // }
@RabbitListener(queues = "#{rabbitMQProperties.queues.toProductImageBatch}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.toProductImageBatch}")
@RabbitHandler // @RabbitHandler
public void getToProductImageBatchResult(Message msg, Channel channel) { // public void getToProductImageBatchResult(Message msg, Channel channel) {
processToProductImageBatchResult(msg, channel); // processToProductImageBatchResult(msg, channel);
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.relightBatch}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.relightBatch}")
@RabbitHandler // @RabbitHandler
public void getRelightBatchResult(Message msg, Channel channel) { // public void getRelightBatchResult(Message msg, Channel channel) {
processRelightBatchResult(msg, channel); // processRelightBatchResult(msg, channel);
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.poseTransformBatch}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.poseTransformBatch}")
@RabbitHandler // @RabbitHandler
public void getPoseTransformBatchResult(Message msg, Channel channel) { // public void getPoseTransformBatchResult(Message msg, Channel channel) {
processPoseTransformBatchResult(msg, channel); // processPoseTransformBatchResult(msg, channel);
} // }
} }

View File

@@ -28,6 +28,11 @@ public class MQPublisher {
amqpTemplate.convertAndSend(rabbitMQProperties.getQueues().getSr(), mm); amqpTemplate.convertAndSend(rabbitMQProperties.getQueues().getSr(), mm);
} }
public void sendGenerateResultMessage(String mm) {
log.info("send generate result message: {}", mm);
amqpTemplate.convertAndSend(rabbitMQProperties.getQueues().getGenerateResult(), mm);
}
/** /**
* *
* @param mailParams 含有的字段 * @param mailParams 含有的字段

View File

@@ -222,16 +222,16 @@ public class SRConsumer {
taskListService.updateTaskStatusOrOutputRedis(uniqueId, "fail", null); taskListService.updateTaskStatusOrOutputRedis(uniqueId, "fail", null);
} }
@RabbitListener(queues = "#{rabbitMQProperties.queues.sr}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.sr}")
@RabbitHandler // @RabbitHandler
public void SRConsumer1(Message msg, Channel channel) { // public void SRConsumer1(Message msg, Channel channel) {
superResolution(msg, channel, "consumer 1"); // superResolution(msg, channel, "consumer 1");
} // }
//
@RabbitListener(queues = "#{rabbitMQProperties.queues.srResult}") // @RabbitListener(queues = "#{rabbitMQProperties.queues.srResult}")
@RabbitHandler // @RabbitHandler
public void SRResultConsumer1(Message msg, Channel channel) { // public void SRResultConsumer1(Message msg, Channel channel) {
getSRResult(msg, channel, "consumer 1"); // getSRResult(msg, channel, "consumer 1");
} // }
} }

View File

@@ -0,0 +1,170 @@
package com.ai.da.common.aspect;
import com.ai.da.common.context.UserContext;
import com.ai.da.model.vo.AuthPrincipalVo;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import java.util.HashMap;
import java.util.Map;
/**
* Controller日志切面
* 记录所有Controller接口的请求参数和用户信息
*/
@Aspect
@Component
public class ControllerLoggingAspect {
private static final Logger logger = LoggerFactory.getLogger(ControllerLoggingAspect.class);
/**
* 定义切点所有Controller方法
*/
@Pointcut("execution(* com.ai.da.controller..*(..))")
public void controllerMethods() {
}
/**
* Controller方法执行前记录日志
*/
// @Before("controllerMethods()")
public void logControllerBefore(JoinPoint joinPoint) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes != null) {
HttpServletRequest request = attributes.getRequest();
// 获取当前用户ID
Long userId = null;
AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder();
if (authPrincipalVo != null) {
userId = authPrincipalVo.getId();
}
// 获取请求参数
Map<String, Object> params = getRequestParams(joinPoint, request);
logger.info("=== 请求开始 ===");
logger.info("用户ID: {}", userId);
logger.info("请求URL: {}", request.getRequestURL().toString());
logger.info("请求方法: {}", request.getMethod());
logger.info("请求IP: {}", getClientIpAddress(request));
logger.info("调用方法: {}.{}", joinPoint.getSignature().getDeclaringType().getSimpleName(), joinPoint.getSignature().getName());
logger.info("请求参数: {}", params);
}
}
/**
* 获取请求参数
*/
private Map<String, Object> getRequestParams(JoinPoint joinPoint, HttpServletRequest request) {
Map<String, Object> params = new HashMap<>();
// 1. 获取Query String参数
String queryString = request.getQueryString();
if (queryString != null && !queryString.isEmpty()) {
params.put("queryString", queryString);
}
// 2. 获取方法参数(包含 @PathVariable, @RequestParam, @RequestBody 等)
Object[] args = joinPoint.getArgs();
if (args != null && args.length > 0) {
Map<String, Object> methodParams = new HashMap<>();
for (int i = 0; i < args.length; i++) {
Object arg = args[i];
// 过滤掉不可序列化的参数
if (arg != null) {
if (isIgnorable(arg)) {
// 对于可忽略的类型,记录类型名
methodParams.put("arg" + i, "[" + arg.getClass().getSimpleName() + "]");
} else {
try {
methodParams.put("arg" + i, arg);
} catch (Exception e) {
methodParams.put("arg" + i, arg.toString());
}
}
}
}
if (!methodParams.isEmpty()) {
params.put("methodParams", methodParams);
}
}
return params;
}
/**
* 判断是否需要过滤的参数类型
*/
private boolean isIgnorable(Object obj) {
return obj instanceof HttpServletRequest
|| obj instanceof HttpServletResponse
|| obj instanceof MultipartFile
|| obj instanceof MultipartFile[];
}
/**
* Controller方法抛出异常时记录日志
*/
@AfterThrowing(pointcut = "controllerMethods()", throwing = "exception")
public void logControllerAfterThrowing(JoinPoint joinPoint, Throwable exception) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
Long userId = null;
AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder();
if (authPrincipalVo != null) {
userId = authPrincipalVo.getId();
}
// 获取请求参数
Map<String, Object> params = new HashMap<>();
if (attributes != null) {
HttpServletRequest request = attributes.getRequest();
params = getRequestParams(joinPoint, request);
}
logger.error("=== 请求异常 ===");
logger.error("用户ID: {}", userId);
logger.error("调用方法: {}.{}", joinPoint.getSignature().getDeclaringType().getSimpleName(), joinPoint.getSignature().getName());
logger.error("请求参数: {}", params);
logger.error("异常信息: ", exception);
logger.error("=== 异常结束 ===");
}
/**
* 获取客户端真实IP地址
*/
private String getClientIpAddress(HttpServletRequest request) {
String xForwardedFor = request.getHeader("X-Forwarded-For");
if (xForwardedFor != null && !xForwardedFor.isEmpty() && !"unknown".equalsIgnoreCase(xForwardedFor)) {
return xForwardedFor.split(",")[0];
}
String xRealIp = request.getHeader("X-Real-IP");
if (xRealIp != null && !xRealIp.isEmpty() && !"unknown".equalsIgnoreCase(xRealIp)) {
return xRealIp;
}
String proxyClientIp = request.getHeader("Proxy-Client-IP");
if (proxyClientIp != null && !proxyClientIp.isEmpty() && !"unknown".equalsIgnoreCase(proxyClientIp)) {
return proxyClientIp;
}
String wlProxyClientIp = request.getHeader("WL-Proxy-Client-IP");
if (wlProxyClientIp != null && !wlProxyClientIp.isEmpty() && !"unknown".equalsIgnoreCase(wlProxyClientIp)) {
return wlProxyClientIp;
}
return request.getRemoteAddr();
}
}

View File

@@ -308,7 +308,7 @@ public class MyTaskScheduler {
private MinioUtil minioUtil; private MinioUtil minioUtil;
@Resource @Resource
private UserLikeService userLikeService; private UserLikeService userLikeService;
public void clearMinio() { /* public void clearMinio() {
List<CollectionElement> collectionElements = collectionElementMapper.selectDeleteList(); List<CollectionElement> collectionElements = collectionElementMapper.selectDeleteList();
for (CollectionElement collectionElement : collectionElements) { for (CollectionElement collectionElement : collectionElements) {
String url = collectionElement.getUrl(); String url = collectionElement.getUrl();
@@ -472,7 +472,7 @@ public class MyTaskScheduler {
// } // }
// String preSignedUrl = minioUtil.getPreSignedUrl("aida-clothing/image/image_1698374859.3031476.png", 10000); // String preSignedUrl = minioUtil.getPreSignedUrl("aida-clothing/image/image_1698374859.3031476.png", 10000);
// System.out.println(preSignedUrl); // System.out.println(preSignedUrl);
} }*/
@Resource @Resource
private AttributeRetrievalMapper attributeRetrievalMapper; private AttributeRetrievalMapper attributeRetrievalMapper;

View File

@@ -0,0 +1,34 @@
package com.ai.da.common.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.web.SecurityFilterChain;
/**
* Spring Security 配置。
* 由于鉴权逻辑已迁移至 GatewayGlobalAuthWebFilter
* 后端服务 (aida-back) 默认放行所有请求,仅依赖网关传递的用户信息。
*/
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
// 禁用 CSRF微服务通常不需要
.csrf(AbstractHttpConfigurer::disable)
// 允许所有请求,具体鉴权在网关层完成
.authorizeHttpRequests(auth -> auth
.anyRequest().permitAll()
)
// 禁用默认的表单登录和 HTTP Basic 认证,防止 302 重定向
.formLogin(AbstractHttpConfigurer::disable)
.httpBasic(AbstractHttpConfigurer::disable);
return http.build();
}
}

View File

@@ -1,13 +1,16 @@
package com.ai.da.common.config; package com.ai.da.common.config;
import com.ai.da.common.interceptor.UserContextInterceptor;
import org.hibernate.validator.HibernateValidator; import org.hibernate.validator.HibernateValidator;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.validation.beanvalidation.MethodValidationPostProcessor; import org.springframework.validation.beanvalidation.MethodValidationPostProcessor;
import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import jakarta.annotation.Resource;
import jakarta.validation.Validation; import jakarta.validation.Validation;
import jakarta.validation.Validator; import jakarta.validation.Validator;
import jakarta.validation.ValidatorFactory; import jakarta.validation.ValidatorFactory;
@@ -17,11 +20,20 @@ public class WebConfig implements WebMvcConfigurer {
static final String ORIGINS[] = new String[]{"GET", "POST", "PUT", "DELETE"}; static final String ORIGINS[] = new String[]{"GET", "POST", "PUT", "DELETE"};
@Resource
private UserContextInterceptor userContextInterceptor;
@Override @Override
public void addCorsMappings(CorsRegistry registry) { public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**").allowedOriginPatterns("*").allowCredentials(true).allowedMethods(ORIGINS).maxAge(3600); registry.addMapping("/**").allowedOriginPatterns("*").allowCredentials(true).allowedMethods(ORIGINS).maxAge(3600);
} }
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(userContextInterceptor)
.addPathPatterns("/**");
}
@Bean @Bean
public Validator validator() { public Validator validator() {
ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class) ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class)

View File

@@ -4,11 +4,13 @@ import com.ai.da.common.response.Response;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.ai.da.common.response.ResultEnum; import com.ai.da.common.response.ResultEnum;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException; import org.springframework.validation.BindException;
import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
/** /**
* @author: dangweijian * @author: dangweijian
@@ -36,6 +38,14 @@ public class ExceptionCatch {
return Response.error(e.getCode(), e.getMsg()); return Response.error(e.getCode(), e.getMsg());
} }
@ResponseBody
@ResponseStatus(HttpStatus.UNAUTHORIZED)
@ExceptionHandler(UnauthorizedException.class)
public Response<String> unauthorizedExceptionCatch(UnauthorizedException e) {
log.error("Unauthorized: {}", e.getMessage());
return Response.error(401, e.getMessage());
}
@ResponseBody @ResponseBody
@ExceptionHandler(Exception.class) @ExceptionHandler(Exception.class)
public Response<String> exceptionCatch(Exception e) { public Response<String> exceptionCatch(Exception e) {

View File

@@ -1,12 +0,0 @@
package com.ai.da.common.config.exception;
public class TokenMissingOrExpiredException extends RuntimeException {
public TokenMissingOrExpiredException(String message) {
super(message);
}
@Override
public Throwable fillInStackTrace() {
return this;
}
}

View File

@@ -0,0 +1,12 @@
package com.ai.da.common.config.exception;
public class UnauthorizedException extends RuntimeException {
public UnauthorizedException(String message) {
super(message);
}
public UnauthorizedException() {
super("Gateway token verification failed");
}
}

View File

@@ -10,7 +10,7 @@ public class CommonConstant {
// 单位 秒 两天过期 // 单位 秒 两天过期
public static final Long CREDITS_EXPIRE_TIME = 2 * 24 * 60 * 60L; public static final Long CREDITS_EXPIRE_TIME = 2 * 24 * 60 * 60L;
// 单位 分钟 // 单位 分钟
public static final Integer MINIO_IMAGE_EXPIRE_TIME = 24 * 60; public static final Integer MINIO_IMAGE_EXPIRE_TIME = 24 * 60 * 7;
// 单位 秒 一天过期 in redis // 单位 秒 一天过期 in redis
public static final Long GENERATE_RESULT_EXPIRE_TIME = 24 * 60 * 60L; public static final Long GENERATE_RESULT_EXPIRE_TIME = 24 * 60 * 60L;
// 单位 秒 7天过期 // 单位 秒 7天过期
@@ -23,6 +23,7 @@ public class CommonConstant {
} }
public static final String GENERATE_PATH = "/api/generate_image"; public static final String GENERATE_PATH = "/api/generate_image";
public static final String GENERATE_PATH_FLUX2_KLEIN = "/api/generate_image_flux2_klein";
public static final String GENERATE_SINGLE_LOGO = "/api/generate_single_logo"; public static final String GENERATE_SINGLE_LOGO = "/api/generate_single_logo";

View File

@@ -18,9 +18,9 @@ public class ModelConstants {
// 模型名称常量 // 模型名称常量
public static final String PRINTBOARD_ADVANCED_T2I = "qwen-image"; public static final String PRINTBOARD_ADVANCED_T2I = "qwen-image";
public static final String MOODBOARD_ADVANCED = "doubao-seedream-3-0-t2i-250415"; public static final String MOODBOARD_ADVANCED = "doubao-seedream-4-5-251128";
public static final String PRINTBOARD_HIGH_T2I = "doubao-seedream-3-0-t2i-250415"; public static final String PRINTBOARD_HIGH_T2I = "doubao-seedream-4-0-250828-high";
public static final String PRINTBOARD_HIGH_I2I = "doubao-seededit-3-0-i2i-250628"; public static final String PRINTBOARD_HIGH_I2I = "doubao-seedream-4-0-250828-fast";
public static final String PRINTBOARD_ADVANCED_I2I = "doubao-seedream-4-0-250828"; public static final String PRINTBOARD_ADVANCED_I2I = "doubao-seedream-4-0-250828";
public static final String IMAGEN_MODEL = "imagen-4.0-generate-001"; public static final String IMAGEN_MODEL = "imagen-4.0-generate-001";
public static final String NANO_BANANA = "gemini-2.5-flash-image"; public static final String NANO_BANANA = "gemini-2.5-flash-image";

View File

@@ -1,14 +0,0 @@
package com.ai.da.common.constant;
/**
* @author yanglei
* 异常类常量
*/
public class TokenConstant {
/**
* 固定session
*/
public static final String FIX_SESSION = "qrLS_003af9d8c1363fc4_6c97e932665c4460a1fdbfbf47ce3490";
public static final String PERMISSIONS = "9672233956";
}

View File

@@ -3,17 +3,39 @@ package com.ai.da.common.context;
import com.ai.da.model.vo.AuthPrincipalVo; import com.ai.da.model.vo.AuthPrincipalVo;
public class UserContext { public class UserContext {
private static ThreadLocal<AuthPrincipalVo> userHolder = new ThreadLocal<AuthPrincipalVo>(); private static final ThreadLocal<AuthPrincipalVo> userHolder = new ThreadLocal<>();
public static void setUserHolder(AuthPrincipalVo authPrincipalVo) {
userHolder.set(authPrincipalVo);
}
public static AuthPrincipalVo getUserHolder() { public static AuthPrincipalVo getUserHolder() {
return userHolder.get(); AuthPrincipalVo holder = userHolder.get();
if (holder == null) {
throw new RuntimeException("User not authenticated");
}
if (!"AIDA".equals(holder.getSource())) {
throw new RuntimeException("Access denied: source must be AIDA");
}
return holder;
} }
public static void delete() { public static void delete() {
userHolder.remove(); userHolder.remove();
} }
public static void setUserHolder(AuthPrincipalVo authPrincipalVo) { public static Long getUserId() {
userHolder.set(authPrincipalVo); return getUserHolder().getId();
}
public static Long getBuyerId() {
AuthPrincipalVo holder = userHolder.get();
if (holder == null) {
throw new RuntimeException("User not authenticated");
}
if (!"BUYER".equals(holder.getSource())) {
throw new RuntimeException("Access denied: source must be BUYER");
}
return holder.getId();
} }
} }

View File

@@ -33,7 +33,11 @@ public enum AuthenticationOperationTypeEnum {
*/ */
UPDATE_USERINFO, UPDATE_USERINFO,
REGISTER; REGISTER,
/**
* Global_Award 活动验证
*/
GLOBAL_AWARD;
public static AuthenticationOperationTypeEnum of(String name) { public static AuthenticationOperationTypeEnum of(String name) {
return Stream.of(AuthenticationOperationTypeEnum.values()).filter(v -> v.name().equals(name)).findFirst().orElse(null); return Stream.of(AuthenticationOperationTypeEnum.values()).filter(v -> v.name().equals(name)).findFirst().orElse(null);

View File

@@ -1,33 +0,0 @@
package com.ai.da.common.httpdata.token;
public enum TokenApis {
/**
* token
*/
GET_TOKEN("POST", "/api/openApi/v2/Weixin/QrCodeLoginCheck?session="),
GENERATE_USER("POST", "/api/openApi/v2/Welink/TopicGetjson");
private String method;
private String url;
TokenApis(String method, String url) {
this.method = method;
this.url = url;
}
public String getMethod() {
return method;
}
public void setMethod(String method) {
this.method = method;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}

View File

@@ -1,42 +0,0 @@
package com.ai.da.common.httpdata.token;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class TokenQuery {
private static final String GET_TOKEN_DOMAIN = "https://www.szsige.com";
private static final String GENERATE_USER_DOMAIN = "https://www.szsige.com";
public static JSONObject getToken(String session) {
String url = GET_TOKEN_DOMAIN + TokenApis.GET_TOKEN.getUrl() + session;
log.info("获取用户token接口请求url:" + url);
HttpResponse httpResponse = HttpUtil.createPost(url).execute();
log.info("获取用户token接口响应" + httpResponse);
if (httpResponse.isOk() && StrUtil.isNotEmpty(httpResponse.body())) {
return JSONObject.parseObject(httpResponse.body());
}
return null;
}
public static JSONObject generateUser(Map<String, Object> param, String token) {
HttpResponse httpResponse = HttpUtil.createPost(GENERATE_USER_DOMAIN + TokenApis.GENERATE_USER.getUrl())
.body(JSONObject.toJSONString(param != null ? param : new HashMap<>()))
.header("Authorization", "Bearer " + token)
.header("X-Promiss", "9672233956")
.execute();
log.info("生成用户信息接口响应:" + httpResponse);
if (httpResponse.isOk() && StrUtil.isNotEmpty(httpResponse.body())) {
return JSONObject.parseObject(httpResponse.body());
}
return null;
}
}

View File

@@ -0,0 +1,51 @@
package com.ai.da.common.interceptor;
import com.ai.da.common.context.UserContext;
import com.ai.da.model.vo.AuthPrincipalVo;
import com.fasterxml.jackson.databind.ObjectMapper;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpHeaders;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
/**
* 从 Gateway 转发的请求头中读取已鉴权的用户身份,写入 UserContext。
* <p>
* Gateway 验证 JWT 后将 X-User-Id 和 X-User-Info 写入请求头,
* 此拦截器负责将信息填充到 ThreadLocal供业务代码使用。
* 不需要 Gateway 鉴权路径(如 login、静态资源不会有这两个头
* 此时 UserContext 保持为空,业务代码应自行处理。
*/
@Slf4j
@Component
@RequiredArgsConstructor
public class UserContextInterceptor implements HandlerInterceptor {
private static final String USER_ID_HEADER = "X-User-Id";
private static final String USER_INFO_HEADER = "X-User-Info";
private final ObjectMapper objectMapper;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String userInfoJson = request.getHeader(USER_INFO_HEADER);
if (userInfoJson != null && !userInfoJson.isBlank()) {
try {
AuthPrincipalVo principal = objectMapper.readValue(userInfoJson, AuthPrincipalVo.class);
UserContext.setUserHolder(principal);
} catch (Exception e) {
log.warn("Failed to parse X-User-Info header: {}", e.getMessage());
}
}
return true;
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response,
Object handler, Exception ex) {
UserContext.delete();
}
}

View File

@@ -1,8 +1,7 @@
package com.ai.da.common.response; package com.ai.da.common.response;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -16,17 +15,17 @@ import java.util.List;
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@ApiModel("分页响应结果") @Schema(description = "分页响应结果")
public class PageBaseResponse<T> { public class PageBaseResponse<T> {
@ApiModelProperty("页码") @Schema(description = "页码")
private long page; private long page;
@ApiModelProperty("每页数量") @Schema(description = "每页数量")
private long size; private long size;
@ApiModelProperty("总页数") @Schema(description = "总页数")
private long pages; private long pages;
@ApiModelProperty("总条数") @Schema(description = "总条数")
private long total; private long total;
@ApiModelProperty("结果集") @Schema(description = "结果集")
private List<T> content; private List<T> content;

View File

@@ -1,8 +1,7 @@
package com.ai.da.common.response; package com.ai.da.common.response;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -16,18 +15,18 @@ import java.util.List;
*/ */
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@ApiModel("分页响应结果") @Schema(description = "分页响应结果")
public class PageResponse<T> extends Response<List<T>> { public class PageResponse<T> extends Response<List<T>> {
@ApiModelProperty("页码") @Schema(description = "页码")
private long page; private long page;
@ApiModelProperty("每页数量") @Schema(description = "每页数量")
private long size; private long size;
@ApiModelProperty("总页数") @Schema(description = "总页数")
private long pages; private long pages;
@ApiModelProperty("总条数") @Schema(description = "总条数")
private long total; private long total;
@ApiModelProperty("结果集") @Schema(description = "结果集")
private List<T> content; private List<T> content;

View File

@@ -1,7 +1,6 @@
package com.ai.da.common.response; package com.ai.da.common.response;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -17,14 +16,14 @@ import java.io.Serializable;
@Data @Data
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@ApiModel("响应结果") @Schema(description = "响应结果")
public class Response<T> implements Serializable { public class Response<T> implements Serializable {
@ApiModelProperty("响应状态码 0成功 -1失败") @Schema(description = "响应状态码 0成功 -1失败")
private int errCode; private int errCode;
@ApiModelProperty("提示消息") @Schema(description = "提示消息")
private String errMsg; private String errMsg;
@ApiModelProperty("数据结果") @Schema(description = "数据结果")
private T data; private T data;
public static <T> Response<T> success() { public static <T> Response<T> success() {

View File

@@ -1,6 +1,6 @@
package com.ai.da.common.response; package com.ai.da.common.response;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
@@ -8,7 +8,7 @@ import java.math.BigDecimal;
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@ApiModel("交易记录分页响应结果") @Schema(description = "交易记录分页响应结果")
public class TransactionPageResponse<T> extends PageBaseResponse<T> { public class TransactionPageResponse<T> extends PageBaseResponse<T> {
private BigDecimal totalAmount; private BigDecimal totalAmount;

View File

@@ -1,27 +0,0 @@
package com.ai.da.common.security;
import com.ai.da.common.response.Response;
import com.ai.da.common.response.ResultEnum;
import com.ai.da.common.utils.JSONResponseUtils;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.web.access.AccessDeniedHandler;
import org.springframework.stereotype.Component;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @ClassName UserAuthAccessDeniedHandler
* @Description 无权限处理类
* @Author dwjian
* @Date 2020/7/9 20:30
*/
@Component
public class UserAuthAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AccessDeniedException exception) throws IOException {
Response<String> response = Response.error(ResultEnum.NO_PERMISSION.getCode(), ResultEnum.NO_PERMISSION.getMsg());
JSONResponseUtils.build(httpServletResponse, response);
}
}

View File

@@ -1,29 +0,0 @@
package com.ai.da.common.security;
import com.ai.da.common.response.Response;
import com.ai.da.common.response.ResultEnum;
import com.ai.da.common.utils.JSONResponseUtils;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
import org.springframework.stereotype.Component;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @ClassName UserAuthenticationEntryPointHandler
* @Description 未登录处理类
* @Author dwjian
* @Date 2020/7/9 20:13
*/
@Component
public class UserAuthenticationEntryPointHandler implements AuthenticationEntryPoint {
@Override
public void commence(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {
Response<String> response = Response.error(ResultEnum.NO_LOGIN.getCode(), ResultEnum.NO_LOGIN.getMsg());
httpServletResponse.setStatus(401);
JSONResponseUtils.build(httpServletResponse, response);
}
}

View File

@@ -1,25 +0,0 @@
package com.ai.da.common.security;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.stereotype.Component;
import jakarta.annotation.Resource;
/**
* @author: dangweijian
* @description: 认证管理器
* @create: 2020-07-10 15:58
**/
@Component
public class UserAuthenticationManager implements AuthenticationManager {
@Resource
private UserAuthenticationProvider userAuthenticationProvider;
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
return userAuthenticationProvider.authenticate(authentication);
}
}

View File

@@ -1,59 +0,0 @@
package com.ai.da.common.security;
import com.ai.da.common.config.RsaProperties;
import com.ai.da.common.utils.RsaDecryptUtils;
import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.stereotype.Component;
/**
* @author: dangweijian
* @description: 登录校验处理类
* @create: 2020-07-09 14:39
**/
@Component
public class UserAuthenticationProvider implements AuthenticationProvider {
@Override
public Authentication authenticate(Authentication authentication) throws AuthenticationException {
String userName = (String) authentication.getPrincipal();
String password = (String) authentication.getCredentials();
try {
password = RsaDecryptUtils.decrypt(password, RsaProperties.privateKey);
} catch (Exception e) {
throw new BadCredentialsException("用户名或密码错误");
}
// User user = userService.getByUsername(userName);
// if (user == null) {
// throw new UsernameNotFoundException("用户名或密码错误");
// }
// //账号已冻结
// if(user.getStatus() == 1){
// throw new LockedException("账号已冻结");
// }
// if(!passwordEncoder.matches(password, user.getPassword())){
// throw new BadCredentialsException("用户名或密码错误");
// }
// //超级管理员
// Set<SimpleGrantedAuthority> authorities = new HashSet<>();
// if(user.getIsAdmin()) {
// authorities.add(new SimpleGrantedAuthority("admin"));
// return new UsernamePasswordAuthenticationToken(user, password, authorities);
// }else {
// List<RoleMenuDto> userMenus = menuService.getRoleMenusByUserId(user.getId(), null);
// if(CollUtil.isNotEmpty(userMenus)){
// authorities.addAll(userMenus.stream().map(RoleMenuDto::getPermission).filter(StringUtils::isNotEmpty).map(SimpleGrantedAuthority::new).collect(Collectors.toSet()));
// }
// return new UsernamePasswordAuthenticationToken(user, password, authorities);
// }
return null;
}
@Override
public boolean supports(Class<?> aClass) {
return UsernamePasswordAuthenticationToken.class.isAssignableFrom(aClass);
}
}

View File

@@ -1,48 +0,0 @@
package com.ai.da.common.security;
import com.ai.da.common.response.Response;
import com.ai.da.common.response.ResultEnum;
import com.ai.da.common.utils.JSONResponseUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.security.authentication.*;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.web.authentication.AuthenticationFailureHandler;
import org.springframework.stereotype.Component;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @ClassName UserLoginFailureHandler
* @Description 登录失败处理类
* @Author dwjian
* @Date 2020/7/9 20:17
*/
@Slf4j
@Component
public class UserLoginFailureHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, AuthenticationException e) throws IOException, ServletException {
Response<String> response;
if (e instanceof UsernameNotFoundException || e instanceof BadCredentialsException) {
response = Response.fail(e.getMessage());
} else if (e instanceof LockedException) {
response = Response.fail(ResultEnum.ACCOUNT_LOCK);
} else if (e instanceof CredentialsExpiredException) {
response = Response.fail("证书过期,请联系管理员!");
} else if (e instanceof AccountExpiredException) {
response = Response.fail("账户过期,请联系管理员!");
} else if (e instanceof DisabledException) {
response = Response.fail("账户被禁用,请联系管理员!");
} else if (e instanceof AuthenticationServiceException) {
response = Response.fail(e.getMessage());
} else {
log.error("登录失败:", e);
response = Response.fail("登录失败!");
}
JSONResponseUtils.build(httpServletResponse, response);
}
}

View File

@@ -1,51 +0,0 @@
package com.ai.da.common.security;
import com.ai.da.common.response.ResultEnum;
import com.ai.da.common.utils.JSONResponseUtils;
import com.ai.da.common.response.Response;
import com.ai.da.common.security.jwt.JWTTokenHelper;
import org.springframework.security.core.Authentication;
import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
import org.springframework.stereotype.Component;
import jakarta.annotation.Resource;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* @author: dangweijian
* @description: 登录成功处理类
* @create: 2020-07-09 14:58
**/
@Component
public class UserLoginSuccessHandler implements AuthenticationSuccessHandler {
@Resource
private JWTTokenHelper jwtTokenHelper;
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
// User user = (User) authentication.getPrincipal();
// AuthPrincipalVo principal = new AuthPrincipalVo();
// BeanUtils.copyProperties(user, principal);
// // 获取用户角色
// List<UserRoleDto> userRoles = roleService.getUserRoles(user.getId(), 0);
// principal.setRoles(userRoles);
// // 获取角色部门
// if(CollUtil.isNotEmpty(userRoles)){
// principal.setDepts(deptService.getDeptByRoleIds(userRoles.stream().map(UserRoleDto::getRoleId).collect(Collectors.toList())));
// }
// // 用户角色权限
// List<String> authorities = new ArrayList<>(authentication.getAuthorities()).stream().map(GrantedAuthority::getAuthority).collect(Collectors.toList());
// principal.setAuthorities(authorities);
// AuthVo authVo = new AuthVo();
// authVo.setAuthorities(authorities);
// authVo.setToken(jwtTokenHelper.createToken(principal));
// authVo.setPrincipal(principal);
// user.setLastLoginTime(new Date());
// userService.updateById(user);
JSONResponseUtils.build(response, Response.success(ResultEnum.SUCCESS.getCode(), ResultEnum.SUCCESS.getMsg(), null));
}
}

View File

@@ -1,34 +0,0 @@
package com.ai.da.common.security;
import org.springframework.security.access.PermissionEvaluator;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
* @ClassName UserPermissionEvaluator
* @Description 权限校验处理器
* @Author dwjian
* @Date 2020/7/12 10:16
*/
@Component
public class UserPermissionEvaluator implements PermissionEvaluator {
@Override
public boolean hasPermission(Authentication authentication, Object targetUrl, Object permission) {
System.out.println(authentication);
System.out.println(targetUrl);
System.out.println(permission);
return false;
}
@Override
public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
System.out.println(authentication);
System.out.println(targetId);
System.out.println(targetType);
System.out.println(permission);
return false;
}
}

View File

@@ -1,97 +0,0 @@
package com.ai.da.common.security.config;
import com.ai.da.common.security.*;
import com.ai.da.common.security.filter.AuthenticationFilter;
import com.ai.da.common.security.filter.UserAuthenticationProcessingFilter;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.Customizer;
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
import org.springframework.security.config.annotation.web.configurers.HeadersConfigurer;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.web.SecurityFilterChain;
import org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
import org.springframework.security.web.authentication.www.BasicAuthenticationFilter;
import jakarta.annotation.Resource;
@Configuration
@EnableWebSecurity
@EnableMethodSecurity(prePostEnabled = true)
@EnableConfigurationProperties(SecurityProperties.class)
public class SecurityConfig {
@Resource
private SecurityProperties securityProperties;
@Resource
private UserLoginSuccessHandler userLoginSuccessHandler;
@Resource
private UserLoginFailureHandler userLoginFailureHandler;
@Resource
private UserAuthAccessDeniedHandler userAuthAccessDeniedHandler;
@Resource
private UserAuthenticationEntryPointHandler userAuthenticationEntryPointHandler;
@Resource
private UserAuthenticationManager userAuthenticationManager;
@Resource
private UserAuthenticationProcessingFilter userAuthenticationProcessingFilter;
/**
* 不通过注入spring管理 让Security来管理 这样自定义的Filter就不会走,.permitAll()才能起作用
*/
@Resource
private AuthenticationFilter authenticationFilter;
@Resource
private UserPermissionEvaluator userPermissionEvaluator;
@Bean
public AuthenticationManager authenticationManager() throws Exception {
return this.userAuthenticationManager;
}
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.cors(Customizer.withDefaults())
.authorizeHttpRequests(auth -> auth
.requestMatchers(securityProperties.getIgnorePaths()).permitAll()
.anyRequest().authenticated()
)
.headers(headers -> headers
.frameOptions(HeadersConfigurer.FrameOptionsConfig::disable)
.cacheControl(cache -> cache.disable())
)
.exceptionHandling(exception -> exception
.authenticationEntryPoint(userAuthenticationEntryPointHandler)
.accessDeniedHandler(userAuthAccessDeniedHandler)
)
.formLogin(form -> form
.loginProcessingUrl(securityProperties.getAuthApi())
.successHandler(userLoginSuccessHandler)
.failureHandler(userLoginFailureHandler)
)
.csrf(AbstractHttpConfigurer::disable)
.sessionManagement(session -> session
.sessionCreationPolicy(SessionCreationPolicy.STATELESS)
);
//自定义过滤器在登录时认证用户名、密码
httpSecurity.addFilterAt(userAuthenticationProcessingFilter, UsernamePasswordAuthenticationFilter.class)
.addFilterBefore(authenticationFilter, BasicAuthenticationFilter.class);
return httpSecurity.build();
}
@Bean
public DefaultWebSecurityExpressionHandler userSecurityExpressionHandler() {
DefaultWebSecurityExpressionHandler handler = new DefaultWebSecurityExpressionHandler();
handler.setPermissionEvaluator(userPermissionEvaluator);
return handler;
}
}

View File

@@ -1,26 +0,0 @@
package com.ai.da.common.security.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
/**
* @author: dangweijian
* @description: JWT配置类
* @create: 2020-07-09 09:38
**/
@Data
@ConfigurationProperties(prefix = "spring.security")
public class SecurityProperties {
private String jwtSecret;
private String jwtTokenHeader;
private String jwtTokenPrefix;
private long jwtExpiration;
private String[] ignorePaths;
private String authApi;
}

View File

@@ -1,147 +0,0 @@
package com.ai.da.common.security.filter;
import cn.hutool.core.util.StrUtil;
import com.ai.da.common.config.exception.TokenMissingOrExpiredException;
import com.ai.da.common.context.UserContext;
import com.ai.da.common.security.config.SecurityProperties;
import com.ai.da.common.security.jwt.JWTTokenHelper;
import com.ai.da.common.utils.LocalCacheUtils;
import com.ai.da.common.utils.MultiReadHttpServletRequest;
import com.ai.da.common.utils.MultiReadHttpServletResponse;
import com.ai.da.common.utils.RequestInfoUtil;
import com.ai.da.model.vo.AuthPrincipalVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.lang.NonNull;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.util.StopWatch;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;
import jakarta.annotation.Resource;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
/**
* @author: dangweijian
* @description: 认证拦截器
* @create: 2020-07-10 16:50
**/
@Slf4j
@Configuration
public class AuthenticationFilter extends OncePerRequestFilter {
@Resource
private JWTTokenHelper jwtTokenHelper;
@Resource
private SecurityProperties properties;
private static final List<String> FILTER_URL =
Arrays.asList("/favicon.ico", "/doc.html", "/api/account/login", "/api/account/preLogin", "api/account/sendEmail","api/account/noLoginRequired",
"/webjars/", "/swagger-resources", "/v2/api-docs", "/api/account/resetPwd",
"/api/python/saveGeneratePicture", "/api/python/getLibraryByUserId",
"/api/third/party/addUser","/api/third/party/addTrialUser", "/api/third/party/editUser", "/api/element/initDefaultSysFile",
"/api/third/party/addNoLoginRequiredNew","/api/third/party/deleteNoLoginRequiredNew","/api/third/party/updateNoLoginRequiredNew",
"/api/third/party/existNoLoginRequired","/api/third/party/getRedirectUrl",
"/api/python/flush","/api/account/healthy","/api/ali-pay/trade/notify","/api/paypal/ipn/back","/api/alipay-hk/trade/notify",
"/api/portfolio/page", "/api/portfolio/detail", "/api/portfolio/commentPage", "/api/portfolio/viewsIncrease",
"/api/account/designWorksRegister","/api/account/questionnaire","/api/stripe/trade/notify",
"/notification","/api/account/activateNewEmail","/api/third/party/auth/google_callback","/api/third/party/parseGoogleCredential","/api/third/party/receiveDesignResults","/api/third/party/parseWeChatCode","/api/third/party/receiveDesignParams"
, "/api/account/schoolLogin", "/api/account/enterpriseLogin", "/api/account/organizationNameSearch",
"/api/llm/stream"
);
@Override
protected void doFilterInternal(HttpServletRequest httpServletRequest, @NonNull HttpServletResponse httpServletResponse, @NonNull FilterChain filterChain) throws ServletException, IOException {
String requestURI = httpServletRequest.getRequestURI();
if (calculateUrl(requestURI)/* || hasAuthorizationToken(httpServletRequest)*/) {
StopWatch stopWatch = new StopWatch();
HttpServletRequest wrappedRequest = httpServletRequest;
HttpServletResponse wrappedResponse = httpServletResponse;
try {
stopWatch.start();
if ((httpServletRequest.getContentType() == null && httpServletRequest.getContentLength() > 0) || (httpServletRequest.getContentType() != null && !httpServletRequest.getContentType().contains("application/json"))) {
extracted(wrappedRequest);
filterChain.doFilter(wrappedRequest, wrappedResponse);
} else {
wrappedRequest = new MultiReadHttpServletRequest(httpServletRequest);
wrappedResponse = new MultiReadHttpServletResponse(httpServletResponse);
extracted(wrappedRequest);
// excel导出使用原始response,不对响应做包装
if (requestURI.equals("/api/account/exportAccountsToExcel")) {
filterChain.doFilter(httpServletRequest, httpServletResponse); // 不包装
} else {
filterChain.doFilter(wrappedRequest, wrappedResponse);
}
}
} catch (Exception e) {
SecurityContextHolder.clearContext();
throw e;
} finally {
stopWatch.stop();
}
} else {
//先清空当前线程变量,防止上一个线程遗留
UserContext.delete();
filterChain.doFilter(httpServletRequest, httpServletResponse);
}
}
private Boolean calculateUrl(String requestURI) {
String filterUrl = FILTER_URL.stream().filter(url -> requestURI.contains(url)).findFirst().orElse(null);
return null == filterUrl ? Boolean.TRUE : Boolean.FALSE;
}
private boolean hasAuthorizationToken(HttpServletRequest request) {
String authorizationHeader = request.getHeader("Authorization");
return authorizationHeader != null && authorizationHeader.startsWith("Bearer");
}
private void extracted(HttpServletRequest request) {
String jwtToken = request.getHeader(properties.getJwtTokenHeader());
// log.debug("后台检查令牌:{}", jwtToken);
if (StrUtil.isBlank(jwtToken)) {
String ipAddress = RequestInfoUtil.getIpAddress(request);
log.info("本次请求的ip为 " + ipAddress);
// throw new RuntimeException("请传入token");
throw new TokenMissingOrExpiredException("请传入token");
}
if(jwtToken.equals("Bearer-eyJhbGciOiJIUzUxMiJ9.eyJqdGkiOiIyIiwic3ViIjoie1wiaWRcIjoyLFwidXNlcm5hbWVcIjpcImxpcnNcIn0iLCJpYXQiOjE2NjU3NDEwODcsImlzcyI6IkRXSiIsImF1dGhvcml0aWVzIjoiW10iLCJleHAiOjE2NzQzODEwODd9.ShM9R_NNFD7oo1OvxrEgg7PFeWinOuAKkuInUCMQupp66s64Hhv8tN0Wwr83nIN4rHPqtn95wmd4msWcvaFYJA")){
//写死 暂时放行
return;
}
// 检查token
boolean validate = jwtTokenHelper.validateToken(jwtToken);
if (validate) {
AuthPrincipalVo principal = jwtTokenHelper.parserToUser(jwtToken);
if (principal == null) {
// throw new RuntimeException("TOKEN已过期请重新登录");
throw new TokenMissingOrExpiredException("TOKEN已过期请重新登录(token without userInfo)");
}
//先清空当前线程变量,防止上一个线程遗留
UserContext.delete();
//存取用户信息到缓存
UserContext.setUserHolder(principal);
//校验token
String cacheToken = LocalCacheUtils.getTokenCache(String.valueOf(principal.getId()));
if(StringUtils.isEmpty(cacheToken)){
// throw new RuntimeException("TOKEN已过期请重新登录");
throw new TokenMissingOrExpiredException("TOKEN已过期请重新登录(local cache empty)");
}
if(!cacheToken.equals(jwtToken) ){
// throw new RuntimeException("TOKEN已过期请重新登录");
throw new TokenMissingOrExpiredException("TOKEN已过期请重新登录(token not match local cache)");
}
// UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(null, null);
// SecurityContextHolder.getContext().setAuthentication(authentication);
}
}
}

View File

@@ -1,69 +0,0 @@
package com.ai.da.common.security.filter;
import cn.hutool.core.util.StrUtil;
import com.ai.da.common.security.UserLoginSuccessHandler;
import com.ai.da.common.security.config.SecurityProperties;
import com.ai.da.common.utils.RedisCacheUtils;
import com.alibaba.fastjson.JSONObject;
import com.ai.da.common.security.UserAuthenticationManager;
import com.ai.da.common.security.UserLoginFailureHandler;
import com.ai.da.common.utils.MultiReadHttpServletRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationServiceException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.stereotype.Component;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
* @author: dangweijian
* @description: 用户认证过滤器
* @create: 2020-07-10 15:58
**/
@Slf4j
@Component
public class UserAuthenticationProcessingFilter extends AbstractAuthenticationProcessingFilter {
/**
* @param securityProperties 配置从配置中读取登录url
* @param authenticationManager 认证管理器
* @param adminAuthenticationSuccessHandler 认证成功处理器
* @param adminAuthenticationFailureHandler 认证失败处理器
*/
public UserAuthenticationProcessingFilter(SecurityProperties securityProperties, UserAuthenticationManager authenticationManager, UserLoginSuccessHandler adminAuthenticationSuccessHandler, UserLoginFailureHandler adminAuthenticationFailureHandler) {
super(new AntPathRequestMatcher(securityProperties.getAuthApi(), HttpMethod.POST.name()));
this.setAuthenticationManager(authenticationManager);
this.setAuthenticationSuccessHandler(adminAuthenticationSuccessHandler);
this.setAuthenticationFailureHandler(adminAuthenticationFailureHandler);
}
@Override
public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException {
if (request.getContentType() == null || !request.getContentType().contains("application/json")) {
throw new AuthenticationServiceException("请求头类型不支持: " + request.getContentType());
}
UsernamePasswordAuthenticationToken authRequest;
try {
MultiReadHttpServletRequest wrappedRequest = new MultiReadHttpServletRequest(request);
// 将前端传递的数据转换成jsonBean数据格式
JSONObject jsonObject = JSONObject.parseObject(wrappedRequest.getBodyJsonStrByJson(wrappedRequest));
String code = jsonObject.getString("code");
String uuid = jsonObject.getString("uuid");
if (StrUtil.isEmpty(code) || StrUtil.isEmpty(uuid) || !code.equals(RedisCacheUtils.get("code-key-" + uuid, String.class))) {
throw new AuthenticationServiceException("验证码错误");
}
RedisCacheUtils.delete("code-key-" + uuid);
authRequest = new UsernamePasswordAuthenticationToken(jsonObject.get("username"), jsonObject.get("password"), null);
authRequest.setDetails(authenticationDetailsSource.buildDetails(wrappedRequest));
} catch (Exception e) {
throw new AuthenticationServiceException(e.getMessage());
}
return this.getAuthenticationManager().authenticate(authRequest);
}
}

View File

@@ -1,108 +0,0 @@
package com.ai.da.common.security.jwt;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import com.ai.da.common.constant.CommonConstant;
import com.ai.da.common.security.config.SecurityProperties;
import com.ai.da.model.vo.AuthPrincipalVo;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import jakarta.annotation.Resource;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Date;
/**
* @author: dangweijian
* @description: JWT工具
* @create: 2020-07-09 09:27
**/
@Slf4j
@Component
public class JWTTokenHelper {
@Resource
private SecurityProperties securityProperties;
private static final String ISSUER = "DWJ";
private static final String AUTHORITIES = "authorities";
private static final String CHANGE_MAILBOX = "changeMailbox";
public String createToken(AuthPrincipalVo principal) {
SecretKey key = buildSigningKey();
String token = Jwts.builder()
.id(String.valueOf(principal.getId()))
.subject(JSONObject.toJSONString(principal))
.issuedAt(new Date())
.issuer(ISSUER)
.claim(AUTHORITIES, JSON.toJSONString(new ArrayList<>()))//自定义属性 权限
.expiration(new Date(System.currentTimeMillis() + securityProperties.getJwtExpiration()))
.signWith(key)
.compact();
token = securityProperties.getJwtTokenPrefix() + token;
return token;
}
public boolean validateToken(String token) {
Claims claims = parser(token);
if (MapUtil.isEmpty(claims)) {
return false;
}
return true;
}
public AuthPrincipalVo parserToUser(String token) {
String subject = parser(token).getSubject();
if (StrUtil.isNotEmpty(subject)) {
return JSONObject.parseObject(subject, AuthPrincipalVo.class);
}
return null;
}
public Claims parser(String token) {
token = token.replaceAll(securityProperties.getJwtTokenPrefix(), "");
SecretKey key = buildSigningKey();
return Jwts.parser()
.verifyWith(key)
.build()
.parseSignedClaims(token)
.getPayload();
}
public String createToken(Long userId, String userEmail){
SecretKey key = buildSigningKey();
String token = Jwts.builder()
.id(String.valueOf(userId))
.subject(userEmail + "_" + userId)
.issuedAt(new Date())
.issuer(ISSUER)
.claim(CHANGE_MAILBOX, JSON.toJSONString(new ArrayList<>()))//自定义属性 权限
.expiration(new Date(System.currentTimeMillis() + CommonConstant.CHANGE_MAILBOX_LINK_VALIDITY))
.signWith(key)
.compact();
return token;
}
public String parseToEmailAndId(String token) {
return parser(token).getSubject();
}
/**
* JWT 要求 HMAC-SHA 的密钥至少 256 bit这里统一扩展/哈希密钥长度避免 WeakKeyException。
*/
private SecretKey buildSigningKey() {
byte[] raw = securityProperties.getJwtSecret().getBytes(StandardCharsets.UTF_8);
if (raw.length < 32) {
raw = DigestUtil.sha256(raw);
}
return Keys.hmacShaKeyFor(raw);
}
}

View File

@@ -3,6 +3,7 @@ package com.ai.da.common.task;
import com.ai.da.common.utils.RedisUtil; import com.ai.da.common.utils.RedisUtil;
import com.ai.da.mapper.primary.entity.Account; import com.ai.da.mapper.primary.entity.Account;
import com.ai.da.service.AccountService; import com.ai.da.service.AccountService;
import com.ai.da.service.SubscriptionPlanService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
@@ -18,6 +19,8 @@ public class AccountTask {
private AccountService accountService; private AccountService accountService;
@Resource @Resource
private RedisUtil redisUtil; private RedisUtil redisUtil;
@Resource
private SubscriptionPlanService subscriptionPlanService;
/** /**
* 每周日晚上刷新 年付用户、月付用户的积分 * 每周日晚上刷新 年付用户、月付用户的积分
@@ -25,7 +28,7 @@ public class AccountTask {
* 每个月月初只刷新教育子账号的积分 * 每个月月初只刷新教育子账号的积分
*/ */
// @Scheduled(cron = "0 25 14 * * ?") // @Scheduled(cron = "0 25 14 * * ?")
@Scheduled(cron = "0 0 0 1 * ?") // @Scheduled(cron = "0 0 0 1 * ?")
public void refreshCreditsMonthly() { public void refreshCreditsMonthly() {
log.info("每月1号0点 重置教育版子账号为默认积分"); log.info("每月1号0点 重置教育版子账号为默认积分");
accountService.refreshCreditsMonthly(); accountService.refreshCreditsMonthly();
@@ -37,8 +40,8 @@ public class AccountTask {
accountService.extendValidityForCC(); accountService.extendValidityForCC();
} }
// 每天凌晨0点执行一次 // 每天凌晨0点执行一次 目前已没有角色类型为4的用户
@Scheduled(cron = "0 0 0 * * ?") /*@Scheduled(cron = "0 0 0 * * ?")
public void cancelActivityBenefits() { public void cancelActivityBenefits() {
// 1、查询当前所有参与了活动且过期的用户 // 1、查询当前所有参与了活动且过期的用户
List<Account> accountList = accountService.getExpiredUserBySystemUser(4); List<Account> accountList = accountService.getExpiredUserBySystemUser(4);
@@ -48,10 +51,10 @@ public class AccountTask {
log.info("参与活动的用户{} : {} 于 {} 账号有效期到期,置为游客", account.getId(), account.getUserEmail(), account.getValidEndTime()); log.info("参与活动的用户{} : {} 于 {} 账号有效期到期,置为游客", account.getId(), account.getUserEmail(), account.getValidEndTime());
accountService.toVisitor(account); accountService.toVisitor(account);
} }
} }*/
// 每天检测正式用户到期情况每天凌晨0点执行 // 每天检测正式用户到期情况每天凌晨0点执行
@Scheduled(cron = "0 0 0 * * ?") // @Scheduled(cron = "0 0 0 * * ?")
public void paidUserToVisitor() { public void paidUserToVisitor() {
// 1、查询当前已过期正式用户或试用用户 // 1、查询当前已过期正式用户或试用用户
List<Account> accountList = accountService.getExpiredUserBySystemUser(1); List<Account> accountList = accountService.getExpiredUserBySystemUser(1);
@@ -74,7 +77,7 @@ public class AccountTask {
accountService.registerUserToVisitor(); accountService.registerUserToVisitor();
} }
@Scheduled(cron = "0 0 0 1 * ?") // @Scheduled(cron = "0 0 0 1 * ?")
// 每月初刷新所有用户用户名剩余修改次数 // 每月初刷新所有用户用户名剩余修改次数
public void resetUsernameModifyTimes(){ public void resetUsernameModifyTimes(){
log.info("重置所有用户的用户名修改次数"); log.info("重置所有用户的用户名修改次数");
@@ -82,8 +85,18 @@ public class AccountTask {
} }
// @Scheduled(cron = "0 35 14 * * ?") // @Scheduled(cron = "0 35 14 * * ?")
@Scheduled(cron = "0 5 0 * * ?") // @Scheduled(cron = "0 5 0 * * ?")
public void checkEduAdminExpireStatus() { public void checkEduAdminExpireStatus() {
accountService.checkEduAdminExpireStatus(); accountService.checkEduAdminExpireStatus();
} }
// @Scheduled(cron = "0 5 0 * * ?")
public void activeSubscriptionPlan() {
subscriptionPlanService.activeSubscriptionPlan(null);
}
// @Scheduled(cron = "0 */5 * * * *") // Run every 5 minutes
public void expireSubscription() {
subscriptionPlanService.expireSubscription();
}
} }

View File

@@ -38,7 +38,7 @@ public class GenerateTask {
* 故这里通过定时任务做补偿 * 故这里通过定时任务做补偿
* flux五分钟查询一次万相1小时查询一次 * flux五分钟查询一次万相1小时查询一次
*/ */
@Scheduled(cron = "0 */4 * * * ?") // @Scheduled(cron = "0 */4 * * * ?")
public void fluxCompensationMechanism(){ public void fluxCompensationMechanism(){
// 1、查所有 任务还没成功、还没失败正在等待或者执行中的任务id有哪些 // 1、查所有 任务还没成功、还没失败正在等待或者执行中的任务id有哪些
// 由于获取结果的polling_url在redis中只存一天大部分结果超过一天之后就无法再找到任务小部分可以通过公共路径查到结果 // 由于获取结果的polling_url在redis中只存一天大部分结果超过一天之后就无法再找到任务小部分可以通过公共路径查到结果
@@ -98,7 +98,7 @@ public class GenerateTask {
} }
// 万相 -> pose transformation 补偿 当前任务执行完后5分钟再执行一次不会出现任务重叠的情况 // 万相 -> pose transformation 补偿 当前任务执行完后5分钟再执行一次不会出现任务重叠的情况
@Scheduled(fixedDelay = 5 * 60 * 1000) // @Scheduled(fixedDelay = 5 * 60 * 1000)
public void wxCompensationMechanism(){ public void wxCompensationMechanism(){
List<APIGenerate> apiGenerates = apiGenerateService.getPendingTaskByStatus("wx"); List<APIGenerate> apiGenerates = apiGenerateService.getPendingTaskByStatus("wx");
if (apiGenerates != null && !apiGenerates.isEmpty()){ if (apiGenerates != null && !apiGenerates.isEmpty()){

View File

@@ -97,14 +97,14 @@ public class PaymentTask {
// //
} }
@Scheduled(cron = "0 */5 * * * *") // Run every 5 minutes // @Scheduled(cron = "0 */5 * * * *") // Run every 5 minutes
public void updateAffiliateInfoWithPayment(){ public void updateAffiliateInfoWithPayment(){
// log.info("佣金计算定时器"); // log.info("佣金计算定时器");
affiliateService.updateAffiliateInfoWithPayment(); affiliateService.updateAffiliateInfoWithPayment();
} }
// 定时同步(每分钟一次) // 定时同步(每分钟一次)
@Scheduled(fixedRate = 60000) // @Scheduled(fixedRate = 60000)
public void syncLinkViewCountToDB(){ public void syncLinkViewCountToDB(){
affiliateService.syncLinkViewCountToDB(); affiliateService.syncLinkViewCountToDB();
} }
@@ -120,7 +120,7 @@ public class PaymentTask {
} }
} }
@Scheduled(cron = "0 */5 * * * *") // Run every 5 minutes // @Scheduled(cron = "0 */5 * * * *") // Run every 5 minutes
public void calcCouponsCommission(){ public void calcCouponsCommission(){
// log.info("优惠券佣金计算定时器"); // log.info("优惠券佣金计算定时器");
affiliateService.calcCouponsCommission(); affiliateService.calcCouponsCommission();

View File

@@ -40,7 +40,7 @@ public class SubscriptionReminderTask {
REMINDER_DAYS_CONFIG.put("year", 14); REMINDER_DAYS_CONFIG.put("year", 14);
} }
@Scheduled(cron = "0 0 9 * * ?") // @Scheduled(cron = "0 0 9 * * ?")
public void subscriptionReminder() { public void subscriptionReminder() {
// 获取所有需要通知的订阅 // 获取所有需要通知的订阅
List<SubscriptionInfo> subscriptionInfos = getDueSubscriptions(); List<SubscriptionInfo> subscriptionInfos = getDueSubscriptions();
@@ -97,7 +97,7 @@ public class SubscriptionReminderTask {
return subscriptionInfoMapper.selectList(qw); return subscriptionInfoMapper.selectList(qw);
} }
@Scheduled(cron = "0 0 9 * * ?") // @Scheduled(cron = "0 0 9 * * ?")
public void trialReminder() { public void trialReminder() {
// 今天的 00:00:00 和 23:59:59 // 今天的 00:00:00 和 23:59:59
LocalDateTime startOfDay = LocalDateTime.now().toLocalDate().atStartOfDay(); LocalDateTime startOfDay = LocalDateTime.now().toLocalDate().atStartOfDay();

View File

@@ -3,7 +3,6 @@ package com.ai.da.common.utils;
import com.ai.da.common.constant.CommonConstant; import com.ai.da.common.constant.CommonConstant;
import com.ai.da.model.dto.BasicEmailParamDTO; import com.ai.da.model.dto.BasicEmailParamDTO;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.sun.mail.smtp.SMTPTransport;
import io.netty.util.internal.StringUtil; import io.netty.util.internal.StringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.core.io.InputStreamSource; import org.springframework.core.io.InputStreamSource;
@@ -35,6 +34,7 @@ public class MailUtil {
* 发送邮件 - 默认发件人 * 发送邮件 - 默认发件人
* *
* @param basicEmailParamDTO 发送邮件所需参数 * @param basicEmailParamDTO 发送邮件所需参数
* @param fileName 附件名(如果有)
* @param inputStreamSource 附件(如果有) * @param inputStreamSource 附件(如果有)
*/ */
public int sendMail(BasicEmailParamDTO basicEmailParamDTO, String fileName, InputStreamSource inputStreamSource) throws MessagingException { public int sendMail(BasicEmailParamDTO basicEmailParamDTO, String fileName, InputStreamSource inputStreamSource) throws MessagingException {
@@ -62,30 +62,23 @@ public class MailUtil {
} }
private int sendMail(MimeMessage mimeMessage, String host, String username, String password) throws MessagingException { private int sendMail(MimeMessage mimeMessage, String host, String username, String password) throws MessagingException {
SMTPTransport transport = null;
try { try {
// 获取 SMTPTransport // 配置连接属性
transport = (SMTPTransport) mimeMessage.getSession().getTransport("smtp"); java.util.Properties props = mimeMessage.getSession().getProperties();
// 连接到 SMTP 服务器 props.put("mail.smtp.auth", "true");
transport.connect(host, username, password); props.put("mail.smtp.host", host);
// 发送邮件 props.put("mail.user", username);
transport.sendMessage(mimeMessage, mimeMessage.getAllRecipients()); props.put("mail.password", password);
// 获取 SMTP 服务器的响应
String lastServerResponse = transport.getLastServerResponse();
int lastReturnCode = transport.getLastReturnCode();
log.info("SMTP 状态码: {}, SMTP 服务器响应: {}", lastReturnCode, lastServerResponse); // 使用 JavaMailSender 发送邮件Spring Boot 3.x 标准方式)
return lastReturnCode; javaMailSender.send(mimeMessage);
} catch (MailException | MessagingException e) { log.info("邮件发送成功至: {}", host);
// 记录日志或执行其他补偿逻辑 return 1;
} catch (MailException e) {
log.info("邮件发送失败:{}", e.getMessage()); log.info("邮件发送失败:{}", e.getMessage());
} finally {
// 关闭连接
assert transport != null;
transport.close();
}
return 0; return 0;
} }
}
/** /**
* 创建一封邮件 * 创建一封邮件

View File

@@ -14,6 +14,7 @@ import io.netty.util.internal.StringUtil;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils; import org.apache.commons.io.IOUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -41,6 +42,28 @@ public class MinioUtil {
@Autowired @Autowired
private MinioClient minioClient; private MinioClient minioClient;
@Value("${minio.endpoint}")
private String endpoint;
/**
* 获取MinIO客户端实例
*/
public MinioClient getMinioClient() {
return minioClient;
}
@Autowired
private RedisUtil redisUtil;
/**
* Redis缓存key前缀用于Minio签名URL缓存
*/
private static final String REDIS_MINIO_URL_PREFIX = "minio:url:";
/**
* 签名URL缓存过期时间默认1天
*/
private static final long URL_CACHE_EXPIRE_SECONDS = 24 * 60 * 60;
/** /**
* description: 判断bucket是否存在不存在则创建 * description: 判断bucket是否存在不存在则创建
* *
@@ -381,6 +404,11 @@ public class MinioUtil {
* @return 文件的临时URL如果出现异常则返回null * @return 文件的临时URL如果出现异常则返回null
*/ */
public String getPreSignedUrl(String bucketName, String fileName, int expiry) { public String getPreSignedUrl(String bucketName, String fileName, int expiry) {
String cacheKey = REDIS_MINIO_URL_PREFIX + bucketName + "/" + fileName;
Object cachedUrl = redisUtil.getFromString(cacheKey);
if (cachedUrl != null) {
return cachedUrl.toString();
}
try { try {
String lowerName = fileName.toLowerCase(); String lowerName = fileName.toLowerCase();
@@ -408,8 +436,9 @@ public class MinioUtil {
builder.extraQueryParams(queryParams); builder.extraQueryParams(queryParams);
} }
String presignedObjectUrl = minioClient.getPresignedObjectUrl(builder.build());
return minioClient.getPresignedObjectUrl(builder.build()); redisUtil.addToString(cacheKey, presignedObjectUrl, URL_CACHE_EXPIRE_SECONDS);
return presignedObjectUrl;
} catch (MinioException | InvalidKeyException } catch (MinioException | InvalidKeyException
| IOException | NoSuchAlgorithmException | IllegalArgumentException e) { | IOException | NoSuchAlgorithmException | IllegalArgumentException e) {
e.printStackTrace(); e.printStackTrace();
@@ -951,6 +980,166 @@ public class MinioUtil {
} }
} }
/**
* 检测字符串是否为预签名URL
* 通过检查URL中是否包含minio endpoint来判断
*
* @param str 待检测的字符串
* @return true表示是预签名URLfalse表示不是
*/
public boolean isPresignedUrl(String str) {
if (str == null || str.isEmpty()) {
return false;
}
try {
// 检查字符串是否是一个有效的URL
URL url = new URL(str);
String host = url.getHost();
// 获取endpoint中的主机部分去掉http://或https://
String endpointHost = endpoint;
if (endpointHost.startsWith("http://")) {
endpointHost = endpointHost.substring(7);
} else if (endpointHost.startsWith("https://")) {
endpointHost = endpointHost.substring(8);
}
// 去掉端口号
if (endpointHost.contains(":")) {
endpointHost = endpointHost.substring(0, endpointHost.indexOf(":"));
}
// 检查URL的host是否与endpoint的host匹配
return host.equals(endpointHost);
} catch (Exception e) {
// 不是有效的URL
return false;
}
}
/**
* 检测字符串是否为MinIO逻辑路径bucketName/objectName格式
* 逻辑路径特点:
* 1. 包含 "/"(桶名和对象名之间的分隔符)
* 2. 不是完整的URL不以http://或https://开头)
* 3. 路径中没有查询参数
*
* @param str 待检测的字符串
* @return true表示是MinIO逻辑路径false表示不是
*/
public boolean isMinioLogicalPath(String str) {
if (str == null || str.isEmpty()) {
return false;
}
// 必须是字符串
if (!(str instanceof String)) {
return false;
}
String trimStr = str.trim();
// 不应该以http://或https://开头
if (trimStr.startsWith("http://") || trimStr.startsWith("https://")) {
return false;
}
// 应该包含 "/"bucket/object格式
if (!trimStr.contains("/")) {
return false;
}
// 不应该包含空格或特殊字符
if (trimStr.contains(" ") || trimStr.contains("\n") || trimStr.contains("\t")) {
return false;
}
return true;
}
/**
* 将预签名URL转换为逻辑路径
*
* @param presignedUrl 预签名URL
* @return 逻辑路径格式bucketName/objectName
*/
public String getLogicalPathFromPresignedUrl(String presignedUrl) {
try {
// 解析URL
URL url = new URL(presignedUrl);
// 获取路径部分(去掉开头的/
String path = url.getPath();
if (path.startsWith("/")) {
path = path.substring(1);
}
// 路径格式为 bucketName/objectName
// Minio路径中可能包含多个/,需要正确分割
int firstSlashIndex = path.indexOf("/");
if (firstSlashIndex <= 0) {
throw new MinioException("预签名URL路径格式无效应包含桶名和对象名: " + presignedUrl);
}
String bucketName = path.substring(0, firstSlashIndex);
String objectName = path.substring(firstSlashIndex + 1);
// log.info("预签名URL转换成功桶名: {}, 对象名: {}", bucketName, objectName);
return bucketName + "/" + objectName;
} catch (Exception e) {
log.error("预签名URL解析失败: {}", e.getMessage(), e);
throw new BusinessException("system.error");
}
}
/**
* 处理MinIO资源预签名URL或逻辑路径统一生成预签名URL
*
* @param resource 预签名URL或逻辑路径
* @param expires 过期时间(秒)
* @return 新的预签名URL
*/
public String processMinioResource(String resource, int expires) {
try {
String logicalPath;
if (isPresignedUrl(resource)) {
// 是预签名URL解析为逻辑路径
logicalPath = getLogicalPathFromPresignedUrl(resource);
} else if (isMinioLogicalPath(resource)) {
// 本身就是逻辑路径
logicalPath = resource.trim();
} else {
// 不认识的内容,直接返回原始值
log.warn("未识别的MinIO资源格式: {}", resource);
return resource;
}
// 统一生成预签名URL
return getPreSignedUrl(logicalPath, expires);
} catch (Exception e) {
log.error("处理MinIO资源失败: {}, error: {}", resource, e.getMessage(), e);
// 如果失败,返回原始内容
return resource;
}
}
/**
* 将任意MinIO URL转换为逻辑路径
* 检测URL类型并转换为逻辑路径返回
*
* @param url 预签名URL或逻辑路径
* @return 逻辑路径格式bucketName/objectName
* @throws MinioException 如果不是有效的MinIO资源
*/
public String convertToLogicalPath(String url) {
if (url == null || url.isEmpty()) {
throw new BusinessException("url.cannot.be.empty");
}
if (isMinioLogicalPath(url)) {
// 本身就是逻辑路径,直接返回
return url.trim();
} else if (isPresignedUrl(url)) {
// 是预签名URL转换为逻辑路径
return getLogicalPathFromPresignedUrl(url);
} else {
// 不认识的内容,抛出异常
throw new BusinessException("无法识别的MinIO资源格式: " + url + "请提供有效的预签名URL或逻辑路径");
}
}
} }

View File

@@ -34,6 +34,11 @@ public class RedisUtil {
private RedisTemplate<String, String> redisTemplate; private RedisTemplate<String, String> redisTemplate;
public final static String FLUX_POLLING_URL = "Flux:"; public final static String FLUX_POLLING_URL = "Flux:";
/**
* 登录 token 在 Redis 中的前缀:
* 最终 key 结构为 login:token:{userId}
*/
public final static String LOGIN_TOKEN_KEY = "login:token:";
public Boolean hasKey(String key){ public Boolean hasKey(String key){
return redisTemplate.hasKey(key); return redisTemplate.hasKey(key);
@@ -186,6 +191,40 @@ public class RedisUtil {
redisTemplate.delete(key); redisTemplate.delete(key);
} }
/**
* 保存登录 token
*
* @param userId 用户 ID
* @param token token 字符串
* @param expireMillis 过期时间(毫秒,通常与 JWT 保持一致)
*/
public void setLoginToken(Long userId, String token, long expireMillis) {
if (expireMillis <= 0) {
// 不设置过期时间,直到手动删除(不推荐)
addToString(LOGIN_TOKEN_KEY + userId, token);
return;
}
long expireSeconds = expireMillis / 1000;
if (expireSeconds <= 0) {
expireSeconds = 1;
}
addToString(LOGIN_TOKEN_KEY + userId, token, expireSeconds);
}
/**
* 获取登录 token
*/
public String getLoginToken(Long userId) {
return getFromString(LOGIN_TOKEN_KEY + userId);
}
/**
* 删除登录 token
*/
public void deleteLoginToken(Long userId) {
removeFromString(LOGIN_TOKEN_KEY + userId);
}
public final static String PORTFOLIO_LIKE_KEY = "portfolio:like:"; public final static String PORTFOLIO_LIKE_KEY = "portfolio:like:";
public void likePost(Long portfolioId, Long userId) { public void likePost(Long portfolioId, Long userId) {

View File

@@ -1,32 +0,0 @@
package com.ai.da.common.utils;
import com.ai.da.model.vo.AuthPrincipalVo;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
public class SecurityContextUtils {
public static AuthPrincipalVo getCurrentUser() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication != null && authentication.getPrincipal() != null) {
return (AuthPrincipalVo) authentication.getPrincipal();
}
return null;
}
public static Long getCurrentUserId() {
AuthPrincipalVo currentUser = getCurrentUser();
if (currentUser != null) {
return currentUser.getId();
}
return null;
}
public static String getCurrentUsername() {
AuthPrincipalVo currentUser = getCurrentUser();
if (currentUser != null) {
return currentUser.getUsername();
}
return null;
}
}

View File

@@ -883,8 +883,8 @@ public class SendEmailUtil {
if (!type.equals("cancel") && !type.equals("fail_new")) { if (!type.equals("cancel") && !type.equals("fail_new")) {
// 返回的resp是一个SendEmailResponse的实例与请求对象对应 // 返回的resp是一个SendEmailResponse的实例与请求对象对应
// SendEmailResponse respUser = client.SendEmail(user); SendEmailResponse respUser = client.SendEmail(user);
log.info("邮件主题:{}发送结果toUser###{}, email:{}", user.getSubject(), /*SendEmailResponse.toJsonString(respUser)*/null, receiverAddress); log.info("邮件主题:{}发送结果toUser###{}, email:{}", user.getSubject(), SendEmailResponse.toJsonString(respUser), receiverAddress);
} }
if (!type.startsWith("reminder")) { if (!type.startsWith("reminder")) {
SendEmailResponse respMerchant = client.SendEmail(merchant); SendEmailResponse respMerchant = client.SendEmail(merchant);
@@ -1024,7 +1024,7 @@ public class SendEmailUtil {
log.info("邮件发送结果res###{}", SendEmailResponse.toJsonString(resp)); log.info("邮件发送结果res###{}", SendEmailResponse.toJsonString(resp));
} catch (TencentCloudSDKException e) { } catch (TencentCloudSDKException e) {
log.info("邮件发送失败###{}", e.toString()); log.info("邮件发送失败###{}", e.toString());
throw new BusinessException("failed.to.send.mail"); // throw new BusinessException("failed.to.send.mail");
} }
} }

View File

@@ -88,7 +88,7 @@ public class SendRequestUtil {
} }
} }
public String sendFluxPost(String url, String requestBodyStr){ /*public String sendFluxPost(String url, String requestBodyStr){
int status; int status;
String body; String body;
try (HttpResponse execute = HttpRequest.post(url) try (HttpResponse execute = HttpRequest.post(url)
@@ -103,9 +103,63 @@ public class SendRequestUtil {
if (status == 200) { if (status == 200) {
return body; return body;
} }
if (status == 402 || status == 403) {
SendEmailUtil.commonExceptionReminder("Flux账户积分不足flux生成任务",
new String[]{"xupei3360@163.com, fangjianliao@aidlab.hk, investigation@aidlab.hk"});
}
} }
log.warn("请求失败,状态码为 {}", status); log.warn("请求失败,状态码为 {}", status);
return null; return null;
}*/
public String sendFluxPost(String url, String requestBodyStr) {
// 尝试两个API key
String[] apiKeys = {"84e8f5d5-b0b3-49aa-b244-ab7ba27e7ae7",
"d447a0ac-2291-4f1c-9a36-f7614c385989"};
boolean[] notified = {false, false}; // 记录是否已发送过不足提醒
for (int i = 0; i < apiKeys.length; i++) {
int status;
String body;
try (HttpResponse execute = HttpRequest.post(url)
.header(Header.CONTENT_TYPE, "application/json")
.header("x-key", apiKeys[i])
.body(requestBodyStr)
.timeout(180000)
.execute()) {
status = execute.getStatus();
body = execute.body();
if (status == 200) {
return body;
}
// 余额不足处理
if (status == 402 || status == 403) {
if (!notified[i]) {
SendEmailUtil.commonExceptionReminder(
"Flux账户积分不足flux生成任务失败。key:" + apiKeys[i],
new String[]{"xupei3360@163.com", "fangjianliao@aidlab.hk", "investigation@aidlab.hk"}
);
notified[i] = true;
}
continue; // 尝试下一个key
}
// 其他错误直接返回null
log.warn("请求失败,状态码为:{}使用key{}", status, apiKeys[i]);
return null;
} catch (Exception e) {
log.error("请求异常使用key{}", apiKeys[i], e);
if (i == apiKeys.length - 1) return null; // 最后一个key也失败则返回null
}
}
log.warn("所有API key均余额不足");
return null;
} }
public String sendPost(String url, String requestBodyStr){ public String sendPost(String url, String requestBodyStr){

View File

@@ -0,0 +1,131 @@
package com.ai.da.common.utils;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil;
import com.ai.da.common.constant.CommonConstant;
import com.ai.da.model.vo.AuthPrincipalVo;
import com.alibaba.fastjson.JSONObject;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.crypto.SecretKey;
import java.nio.charset.StandardCharsets;
import java.util.Date;
/**
* Token 生成工具类(仅负责生成,不负责鉴权)。
* 鉴权逻辑已迁移至 GatewayGlobalAuthWebFilter
*/
@Slf4j
@Component
public class TokenGenerateUtils {
private static final String ISSUER = "DWJ";
@Value("${spring.security.jwtSecret:JWTSECRET}")
private String jwtSecret;
@Value("${spring.security.jwtExpiration:8640000000}")
private long jwtExpiration;
@Value("${spring.security.jwtTokenPrefix:Bearer-}")
private String jwtTokenPrefix;
/**
* 生成 JWT Token。
* @param principal 用户信息
* @return 完整的 token含 prefix
*/
public String createToken(AuthPrincipalVo principal) {
SecretKey key = buildSigningKey();
String token = Jwts.builder()
.id(String.valueOf(principal.getId()))
.subject(JSONObject.toJSONString(principal))
.issuedAt(new Date())
.issuer(ISSUER)
.expiration(new Date(System.currentTimeMillis() + jwtExpiration))
.signWith(key)
.compact();
return jwtTokenPrefix + token;
}
/**
* 获取 Token 过期时间(毫秒)。
*/
public long getJwtExpiration() {
return jwtExpiration;
}
/**
* 生成用于邮箱变更的简化 Token。
* @param userId 用户 ID
* @param mailbox 新邮箱
* @return token不含 prefix
*/
public String createMailboxToken(Long userId, String mailbox) {
SecretKey key = buildSigningKey();
return Jwts.builder()
.id(String.valueOf(userId))
.subject(mailbox + "_" + userId)
.issuedAt(new Date())
.issuer(ISSUER)
.expiration(new Date(System.currentTimeMillis() + CommonConstant.CHANGE_MAILBOX_LINK_VALIDITY))
.signWith(key)
.compact();
}
/**
* 验证 Token 是否有效(签名和有效期)。
*/
public boolean validateToken(String token) {
try {
Claims claims = parseTokenBody(token);
return claims != null;
} catch (Exception e) {
return false;
}
}
/**
* 从 Token 中解析用户信息。
*/
public AuthPrincipalVo parserToUser(String token) {
try {
String subject = parseTokenBody(token).getSubject();
if (StrUtil.isNotEmpty(subject)) {
return JSONObject.parseObject(subject, AuthPrincipalVo.class);
}
} catch (Exception e) {
log.error("JWT解析用户信息失败: {}", e.getMessage());
}
return null;
}
/**
* 解析邮箱变更 Token返回 "email_id" 格式字符串。
*/
public String parseMailboxToken(String token) {
return parseTokenBody(token).getSubject();
}
private Claims parseTokenBody(String token) {
SecretKey key = buildSigningKey();
return Jwts.parser()
.verifyWith(key)
.build()
.parseSignedClaims(token)
.getPayload();
}
private SecretKey buildSigningKey() {
byte[] raw = jwtSecret.getBytes(StandardCharsets.UTF_8);
if (raw.length < 32) {
raw = DigestUtil.sha256(raw);
}
return Keys.hmacShaKeyFor(raw);
}
}

View File

@@ -13,25 +13,25 @@ import com.ai.da.model.vo.AccountPreLoginVO;
import com.ai.da.model.vo.BindEmailVO; import com.ai.da.model.vo.BindEmailVO;
import com.ai.da.model.vo.PersonalHomepageVO; import com.ai.da.model.vo.PersonalHomepageVO;
import com.ai.da.service.AccountService; import com.ai.da.service.AccountService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
@Api(tags = "Account模块") @Tag(name = "Account模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/account") @RequestMapping("/api/account")
@@ -40,103 +40,103 @@ public class AccountController {
@Resource @Resource
private AccountService accountService; private AccountService accountService;
@ApiOperation(value = "预先登入") @Operation(summary = "预先登入")
@PostMapping("/preLogin") @PostMapping("/preLogin")
public Response<AccountPreLoginVO> preLogin(@Valid @RequestBody AccountPreLoginDTO accountDTO) { public Response<AccountPreLoginVO> preLogin(@Valid @RequestBody AccountPreLoginDTO accountDTO) {
return Response.success(accountService.preLogin(accountDTO)); return Response.success(accountService.preLogin(accountDTO));
} }
@ApiOperation(value = "登入") @Operation(summary = "登入")
@PostMapping("/login") @PostMapping("/login")
public Response<AccountLoginVO> login(@Valid @RequestBody AccountLoginDTO accountDTO, HttpServletRequest request) { public Response<AccountLoginVO> login(@Valid @RequestBody AccountLoginDTO accountDTO, HttpServletRequest request) {
return Response.success(accountService.login(accountDTO, request)); return Response.success(accountService.login(accountDTO, request));
} }
@ApiOperation(value = "绑定邮箱") @Operation(summary = "绑定邮箱")
@PostMapping("/bindEmail") @PostMapping("/bindEmail")
public Response<BindEmailVO> bindEmail(@Valid @RequestBody AccountBindEmailDTO accountBindEmailDTO, HttpServletRequest request) { public Response<BindEmailVO> bindEmail(@Valid @RequestBody AccountBindEmailDTO accountBindEmailDTO, HttpServletRequest request) {
return Response.success(accountService.bindEmail(accountBindEmailDTO, request)); return Response.success(accountService.bindEmail(accountBindEmailDTO, request));
} }
@ApiOperation(value = "忘记密码") @Operation(summary = "忘记密码")
@PostMapping("/resetPwd") @PostMapping("/resetPwd")
public Response<Boolean> resetPwd(@Valid @RequestBody AccountRegisterDTO accountRegisterDTO) { public Response<Boolean> resetPwd(@Valid @RequestBody AccountRegisterDTO accountRegisterDTO) {
return Response.success(accountService.forgetPwd(accountRegisterDTO)); return Response.success(accountService.forgetPwd(accountRegisterDTO));
} }
@ApiOperation(value = "发送邮件") @Operation(summary = "发送邮件")
@PostMapping("/sendEmail") @PostMapping("/sendEmail")
public Response<Boolean> sendEmail(@Valid @RequestBody EmailSendDTO emailSendDTO) { public Response<Boolean> sendEmail(@Valid @RequestBody EmailSendDTO emailSendDTO) {
return Response.success(accountService.sendEmail(emailSendDTO)); return Response.success(accountService.sendEmail(emailSendDTO));
} }
@ApiOperation(value = "登出") @Operation(summary = "登出")
@PostMapping("/logout") @PostMapping("/logout")
public Response<Boolean> logout(@Valid @RequestBody AccountLogoutDTO accountLogoutDTO) { public Response<Boolean> logout(@Valid @RequestBody AccountLogoutDTO accountLogoutDTO) {
return Response.success(accountService.logout(accountLogoutDTO)); return Response.success(accountService.logout(accountLogoutDTO));
} }
@ApiOperation(value = "是否登入") @Operation(summary = "是否登入")
@PostMapping("/isLogin") @PostMapping("/isLogin")
public Response<Boolean> isLogin(@Valid @RequestBody AccountLogoutDTO accountLogoutDTO) { public Response<Boolean> isLogin(@Valid @RequestBody AccountLogoutDTO accountLogoutDTO) {
return Response.success(accountService.isLogin(accountLogoutDTO)); return Response.success(accountService.isLogin(accountLogoutDTO));
} }
@ApiOperation(value = "获取当前用户语言") @Operation(summary = "获取当前用户语言")
@PostMapping("/getUserLanguage") @PostMapping("/getUserLanguage")
public Response<String> getUserLanguage() { public Response<String> getUserLanguage() {
return Response.success(accountService.getUserLanguage()); return Response.success(accountService.getUserLanguage());
} }
@ApiOperation(value = "切换当前用户语言") @Operation(summary = "切换当前用户语言")
@GetMapping("/changeUserLanguage") @GetMapping("/changeUserLanguage")
public Response<String> changeUserLanguage(String language) { public Response<String> changeUserLanguage(String language) {
return Response.success(accountService.changeUserLanguage(language)); return Response.success(accountService.changeUserLanguage(language));
} }
@ApiOperation(value = "试用用户退出登录") @Operation(summary = "试用用户退出登录")
@GetMapping("/trialUserLogout") @GetMapping("/trialUserLogout")
public Response<Boolean> trialUserLogout() { public Response<Boolean> trialUserLogout() {
return Response.success(accountService.trialUserLogout()); return Response.success(accountService.trialUserLogout());
} }
@ApiOperation(value = "完成新手教程") @Operation(summary = "完成新手教程")
@PostMapping("/completeGuidance") @PostMapping("/completeGuidance")
public Response<Boolean> completeGuidance() { public Response<Boolean> completeGuidance() {
return Response.success(accountService.completeGuidance()); return Response.success(accountService.completeGuidance());
} }
@ApiOperation(value = "试用订单列表") @Operation(summary = "试用订单列表")
@PostMapping("/trialOrderList") @PostMapping("/trialOrderList")
public Response<PageBaseResponse<TrialOrder>> trialOrderList(@Valid @RequestBody TrialOrderDTO trialOrderDTO) { public Response<PageBaseResponse<TrialOrder>> trialOrderList(@Valid @RequestBody TrialOrderDTO trialOrderDTO) {
return Response.success(PageBaseResponse.success(accountService.trialOrderList(trialOrderDTO))); return Response.success(PageBaseResponse.success(accountService.trialOrderList(trialOrderDTO)));
} }
@ApiOperation(value = "通过试用订单审批") @Operation(summary = "通过试用订单审批")
@PostMapping("/trialOrderApproval") @PostMapping("/trialOrderApproval")
public Response<Boolean> trialOrderApproval(@RequestParam("ids") List<Long> ids) { public Response<Boolean> trialOrderApproval(@RequestParam("ids") List<Long> ids) {
return Response.success(accountService.trialOrderApproval(ids)); return Response.success(accountService.trialOrderApproval(ids));
} }
@ApiOperation(value = "拒绝试用订单审批") @Operation(summary = "拒绝试用订单审批")
@PostMapping("/trialOrderRefuse") @PostMapping("/trialOrderRefuse")
public Response<Boolean> trialOrderRefuse(@RequestParam("ids") List<Long> ids) { public Response<Boolean> trialOrderRefuse(@RequestParam("ids") List<Long> ids) {
return Response.success(accountService.trialOrderRefuse(ids)); return Response.success(accountService.trialOrderRefuse(ids));
} }
@ApiOperation(value = "获取是否自动审评") @Operation(summary = "获取是否自动审评")
@PostMapping("/getIsAutoApproval") @PostMapping("/getIsAutoApproval")
public Response<Boolean> getIsAutoApproval() { public Response<Boolean> getIsAutoApproval() {
return Response.success(accountService.getIsAutoApproval()); return Response.success(accountService.getIsAutoApproval());
} }
@ApiOperation(value = "切换是否自动审评") @Operation(summary = "切换是否自动审评")
@PostMapping("/switchIsAutoApproval") @PostMapping("/switchIsAutoApproval")
public Response<Boolean> switchIsAutoApproval() { public Response<Boolean> switchIsAutoApproval() {
return Response.success(accountService.switchIsAutoApproval()); return Response.success(accountService.switchIsAutoApproval());
} }
@ApiOperation(value = "aws状态检测") @Operation(summary = "aws状态检测")
@GetMapping("/healthy") @GetMapping("/healthy")
@ResponseStatus(HttpStatus.OK) @ResponseStatus(HttpStatus.OK)
public Response<Map<String, Integer>> checkStatus() { public Response<Map<String, Integer>> checkStatus() {
@@ -145,34 +145,34 @@ public class AccountController {
return Response.success(returnMap); return Response.success(returnMap);
} }
@ApiOperation(value = "查询账号到期时间") @Operation(summary = "查询账号到期时间")
@PostMapping("/getExpiredTime") @PostMapping("/getExpiredTime")
public Response<Long> getExpiredTime() { public Response<Long> getExpiredTime() {
return Response.success(accountService.getExpiredTime()); return Response.success(accountService.getExpiredTime());
} }
@ApiOperation(value = "免密登录") @Operation(summary = "免密登录")
@PostMapping("/noLoginRequired") @PostMapping("/noLoginRequired")
public Response<AccountLoginVO> noLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) { public Response<AccountLoginVO> noLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) {
return Response.success(accountService.noLoginRequired(noLoginRequiredDTO, request)); return Response.success(accountService.noLoginRequired(noLoginRequiredDTO, request));
} }
@PostMapping("upgradeNotification") @PostMapping("upgradeNotification")
@ApiOperation(value = "升级邮件通知") @Operation(summary = "升级邮件通知")
public Response<Boolean> upgradeNotification() { public Response<Boolean> upgradeNotification() {
accountService.upgradeNotification(); accountService.upgradeNotification();
return Response.success(true); return Response.success(true);
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "广场用户注册") @Operation(summary = "广场用户注册")
@PostMapping("/designWorksRegister") @PostMapping("/designWorksRegister")
public Response<Boolean> designWorksRegister(@Valid @RequestBody AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO) { public Response<Boolean> designWorksRegister(@Valid @RequestBody AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO) {
return Response.success(accountService.designWorksRegister(accountDesignWorksRegisterDTO)); return Response.success(accountService.designWorksRegister(accountDesignWorksRegisterDTO));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "广场用户注册") @Operation(summary = "广场用户注册")
@PostMapping("/designWorksRegisterCode") @PostMapping("/designWorksRegisterCode")
public Response<AccountLoginVO> designWorksRegisterCode(@Valid @RequestBody AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO, public Response<AccountLoginVO> designWorksRegisterCode(@Valid @RequestBody AccountDesignWorksRegisterDTO accountDesignWorksRegisterDTO,
HttpServletRequest request) { HttpServletRequest request) {
@@ -183,7 +183,7 @@ public class AccountController {
* 填写调查问卷 * 填写调查问卷
* @return * @return
*/ */
/* @ApiOperation(value = "填写调查问卷") /* @Operation(summary = "填写调查问卷")
@PostMapping("/questionnaire") @PostMapping("/questionnaire")
public Response<Boolean> questionnaire(@Valid @RequestBody String questionnaireInfo){ public Response<Boolean> questionnaire(@Valid @RequestBody String questionnaireInfo){
return Response.success(accountService.collectQuestionnaires(questionnaireInfo)); return Response.success(accountService.collectQuestionnaires(questionnaireInfo));
@@ -191,22 +191,23 @@ public class AccountController {
/** /**
* 参与活动 获取福利 * 参与活动 获取福利
*
* @return * @return
*/ */
/* @ApiOperation(value = "参与活动 获取福利") /* @Operation(summary = "参与活动 获取福利")
@GetMapping("/activity") @GetMapping("/activity")
public Response<String> getActivityBenefits(){ public Response<String> getActivityBenefits(){
return Response.success(accountService.getActivityBenefits()); return Response.success(accountService.getActivityBenefits());
}*/ }*/
@ApiOperation(value = "将用户账号过期时间设置为过期当天的235959") @Operation(summary = "将用户账号过期时间设置为过期当天的235959")
@GetMapping("/setUserValidToDayEnd") @GetMapping("/setUserValidToDayEnd")
public Response<List<Long>> setUserValidToDayEnd() { public Response<List<Long>> setUserValidToDayEnd() {
return Response.success(accountService.setUserValidToDayEnd()); return Response.success(accountService.setUserValidToDayEnd());
} }
// 用户上传头像 // 用户上传头像
@ApiOperation(value = "上传头像") @Operation(summary = "上传头像")
@PostMapping(path = "/uploadAvatar") @PostMapping(path = "/uploadAvatar")
public Response<String> uploadAvatar(@RequestParam("file") MultipartFile file) { public Response<String> uploadAvatar(@RequestParam("file") MultipartFile file) {
if (null == file || StringUtils.isEmpty(file.getOriginalFilename())) { if (null == file || StringUtils.isEmpty(file.getOriginalFilename())) {
@@ -215,25 +216,25 @@ public class AccountController {
return Response.success(accountService.uploadAvatar(file)); return Response.success(accountService.uploadAvatar(file));
} }
@ApiOperation(value = "个人主页浏览量增加") @Operation(summary = "个人主页浏览量增加")
@GetMapping("/viewsIncrease") @GetMapping("/viewsIncrease")
public Response<Boolean> viewsGet(@RequestParam("id") Long id) { public Response<Boolean> viewsGet(@RequestParam("id") Long id) {
return Response.success(accountService.viewsIncrease(id)); return Response.success(accountService.viewsIncrease(id));
} }
@ApiOperation(value = "获取个人主页信息") @Operation(summary = "获取个人主页信息")
@GetMapping("/personalHomepage") @GetMapping("/personalHomepage")
public Response<PersonalHomepageVO> getPersonalHomepage(@RequestParam("id") Long id) { public Response<PersonalHomepageVO> getPersonalHomepage(@RequestParam("id") Long id) {
return Response.success(accountService.getPersonalHomepage(id)); return Response.success(accountService.getPersonalHomepage(id));
} }
@ApiOperation(value = "getUsernameModifyTimes") @Operation(summary = "getUsernameModifyTimes")
@GetMapping("/getNicknameModifyTimes") @GetMapping("/getNicknameModifyTimes")
public Response<Long> getNicknameModifyTimes() { public Response<Long> getNicknameModifyTimes() {
return Response.success(accountService.getNicknameModifyTimes()); return Response.success(accountService.getNicknameModifyTimes());
} }
@ApiOperation(value = "editUserName") @Operation(summary = "editUserName")
@GetMapping("/editUserName") @GetMapping("/editUserName")
public Response<String> editUserName(@RequestParam("newUserName") String newUserName) { public Response<String> editUserName(@RequestParam("newUserName") String newUserName) {
accountService.editUserName(newUserName); accountService.editUserName(newUserName);
@@ -247,14 +248,14 @@ public class AccountController {
return Response.success("success"); return Response.success("success");
} }
@ApiOperation(value = "changeUserEmail") @Operation(summary = "changeUserEmail")
@GetMapping("/changeUserEmail") @GetMapping("/changeUserEmail")
public Response<String> changeUserEmail(@RequestParam("newMailbox") String newMailbox){ public Response<String> changeUserEmail(@RequestParam("newMailbox") String newMailbox){
accountService.changeUserEmail(newMailbox); accountService.changeUserEmail(newMailbox);
return Response.success("success"); return Response.success("success");
} }
@ApiOperation(value = "activateNewEmail") @Operation(summary = "activateNewEmail")
@GetMapping("/activateNewEmail") @GetMapping("/activateNewEmail")
public Response<String> activateNewEmail(@RequestParam("token") String token){ public Response<String> activateNewEmail(@RequestParam("token") String token){
accountService.activateNewEmail(token); accountService.activateNewEmail(token);
@@ -262,45 +263,45 @@ public class AccountController {
}*/ }*/
@PostMapping("halfPricePromotion") @PostMapping("halfPricePromotion")
@ApiOperation(value = "十月半价活动") @Operation(summary = "十月半价活动")
public Response<Boolean> halfPricePromotion() { public Response<Boolean> halfPricePromotion() {
accountService.halfPricePromotion(); accountService.halfPricePromotion();
return Response.success(true); return Response.success(true);
} }
@PostMapping("temporaryUpgrade") @PostMapping("temporaryUpgrade")
@ApiOperation(value = "临时升级") @Operation(summary = "临时升级")
public Response<Boolean> temporaryUpgrade() { public Response<Boolean> temporaryUpgrade() {
accountService.temporaryUpgrade(); accountService.temporaryUpgrade();
return Response.success(true); return Response.success(true);
} }
@PostMapping("enterpriseLogin") @PostMapping("enterpriseLogin")
@ApiOperation(value = "企业登录") @Operation(summary = "企业登录")
public Response<AccountPreLoginVO> enterpriseLogin(@Valid @RequestBody AccountLoginDTO accountDTO) { public Response<AccountPreLoginVO> enterpriseLogin(@Valid @RequestBody AccountLoginDTO accountDTO) {
return Response.success(accountService.enterpriseLogin(accountDTO)); return Response.success(accountService.enterpriseLogin(accountDTO));
} }
@PostMapping("schoolLogin") @PostMapping("schoolLogin")
@ApiOperation(value = "学校登录") @Operation(summary = "学校登录")
public Response<AccountPreLoginVO> schoolLogin(@Valid @RequestBody AccountLoginDTO accountDTO) { public Response<AccountPreLoginVO> schoolLogin(@Valid @RequestBody AccountLoginDTO accountDTO) {
return Response.success(accountService.schoolLogin(accountDTO)); return Response.success(accountService.schoolLogin(accountDTO));
} }
@PostMapping("organizationNameSearch") @PostMapping("organizationNameSearch")
@ApiOperation(value = "组织名模糊查询") @Operation(summary = "组织名模糊查询")
public Response<Set<String>> organizationNameSearch(@RequestParam("type") String type, @RequestParam("name") String name) { public Response<Set<String>> organizationNameSearch(@RequestParam("type") String type, @RequestParam(value = "name", required = false) String name) {
return Response.success(accountService.organizationNameSearch(type, name)); return Response.success(accountService.organizationNameSearch(type, name));
} }
@PostMapping("addOrUpdateSubAccount") @PostMapping("addOrUpdateSubAccount")
@ApiOperation(value = "子账号新增") @Operation(summary = "子账号新增")
public Response<Boolean> addSubAccount(@Valid @RequestBody AddSubAccountDTO addSubAccountDTO) { public Response<Boolean> addSubAccount(@Valid @RequestBody AddSubAccountDTO addSubAccountDTO) {
return Response.success(accountService.addSubAccount(addSubAccountDTO)); return Response.success(accountService.addSubAccount(addSubAccountDTO));
} }
@PostMapping("deleteSubAccount") @PostMapping("deleteSubAccount")
@ApiOperation(value = "子账号删除") @Operation(summary = "子账号删除")
public Response<Boolean> deleteSubAccount(@Valid @RequestBody AddSubAccountDTO addSubAccountDTO) { public Response<Boolean> deleteSubAccount(@Valid @RequestBody AddSubAccountDTO addSubAccountDTO) {
// return Response.success(accountService.deleteSubAccount(addSubAccountDTO)); // return Response.success(accountService.deleteSubAccount(addSubAccountDTO));
accountService.removeSubAccount(addSubAccountDTO, UserContext.getUserHolder().getId()); accountService.removeSubAccount(addSubAccountDTO, UserContext.getUserHolder().getId());
@@ -308,91 +309,91 @@ public class AccountController {
} }
@PostMapping("subAccountList") @PostMapping("subAccountList")
@ApiOperation(value = "子账号查询") @Operation(summary = "子账号查询")
public Response<PageBaseResponse<Account>> subAccountList(@Valid @RequestBody SubAccountPageDTO subAccountPageDTO) { public Response<PageBaseResponse<Account>> subAccountList(@Valid @RequestBody SubAccountPageDTO subAccountPageDTO) {
return Response.success(accountService.subAccountList(subAccountPageDTO)); return Response.success(accountService.subAccountList(subAccountPageDTO));
} }
@GetMapping("accountDetail") @GetMapping("accountDetail")
@ApiOperation(value = "账号详情") @Operation(summary = "账号详情")
public Response<Account> accountDetail(@RequestParam("id") Long id) { public Response<Account> accountDetail(@RequestParam("id") Long id) {
return Response.success(accountService.accountDetail(id)); return Response.success(accountService.accountDetail(id));
} }
@PostMapping("getAccountDetail") @PostMapping("getAccountDetail")
@ApiOperation(value = "获取账户信息") @Operation(summary = "获取账户信息")
public Response<AccountLoginVO> getAccountDetail() { public Response<AccountLoginVO> getAccountDetail() {
return Response.success(accountService.getAccountDetail()); return Response.success(accountService.getAccountDetail());
} }
@GetMapping("/bindGoogle") @GetMapping("/bindGoogle")
@ApiOperation(value = "绑定谷歌") @Operation(summary = "绑定谷歌")
public Response<AccountExtend> bindGoogle(@RequestParam("credential") String credential) { public Response<AccountExtend> bindGoogle(@RequestParam("credential") String credential) {
return Response.success(accountService.bindGoogle(credential)); return Response.success(accountService.bindGoogle(credential));
} }
@GetMapping("/bindWeChat") @GetMapping("/bindWeChat")
@ApiOperation(value = "绑定微信") @Operation(summary = "绑定微信")
public Response<AccountExtend> bindWeChat(@RequestParam("code") String code) { public Response<AccountExtend> bindWeChat(@RequestParam("code") String code) {
return Response.success(accountService.bindWeChat(code)); return Response.success(accountService.bindWeChat(code));
} }
@GetMapping("/bindEmail") @GetMapping("/bindEmail")
@ApiOperation(value = "绑定邮箱") @Operation(summary = "绑定邮箱")
public Response<BindEmailVO> bindEmail(@RequestParam("email") String email) { public Response<BindEmailVO> bindEmail(@RequestParam("email") String email) {
return Response.success(accountService.bindEmail(email)); return Response.success(accountService.bindEmail(email));
} }
@GetMapping("/unbindWeChat") @GetMapping("/unbindWeChat")
@ApiOperation(value = "解除绑定微信") @Operation(summary = "解除绑定微信")
public Response<Boolean> unbindWeChat() { public Response<Boolean> unbindWeChat() {
return Response.success(accountService.unbindWeChat()); return Response.success(accountService.unbindWeChat());
} }
@GetMapping("/unbindGoogle") @GetMapping("/unbindGoogle")
@ApiOperation(value = "解除绑定谷歌") @Operation(summary = "解除绑定谷歌")
public Response<Boolean> unbindGoogle() { public Response<Boolean> unbindGoogle() {
return Response.success(accountService.unbindGoogle()); return Response.success(accountService.unbindGoogle());
} }
@PostMapping("/updateUserInfo") @PostMapping("/updateUserInfo")
@ApiOperation(value = "更新用户国家、职业信息") @Operation(summary = "更新用户国家、职业信息")
public Response<Boolean> updateUserInfo(@Valid @RequestBody UpdateUserInfoDTO updateUserInfoDTO) { public Response<Boolean> updateUserInfo(@Valid @RequestBody UpdateUserInfoDTO updateUserInfoDTO) {
return Response.success(accountService.updateUserInfo(updateUserInfoDTO)); return Response.success(accountService.updateUserInfo(updateUserInfoDTO));
} }
@GetMapping("/subAccountImportExcelDownload") @GetMapping("/subAccountImportExcelDownload")
@ApiOperation(value = "模板下载") @Operation(summary = "模板下载")
public void subAccountImportExcelDownload(HttpServletResponse response) { public void subAccountImportExcelDownload(HttpServletResponse response) {
accountService.subAccountImportExcelDownload(response); accountService.subAccountImportExcelDownload(response);
} }
@GetMapping("/exportAccountsToExcel") @GetMapping("/exportAccountsToExcel")
@ApiOperation(value = "下载子账号信息") @Operation(summary = "下载子账号信息")
public void exportAccountsToExcel(HttpServletResponse response) { public void exportAccountsToExcel(HttpServletResponse response) {
accountService.exportAccountsToExcel(response); accountService.exportAccountsToExcel(response);
} }
@PostMapping("/subAccountImport") @PostMapping("/subAccountImport")
@ApiOperation(value = "模板导入") @Operation(summary = "模板导入")
public Response<Boolean> subAccountImport(@RequestParam("file") MultipartFile file) { public Response<Boolean> subAccountImport(@RequestParam("file") MultipartFile file) {
return Response.success(accountService.subAccountImport(file)); return Response.success(accountService.subAccountImport(file));
} }
/*@GetMapping("/send618Email") /*@GetMapping("/send618Email")
@ApiOperation(value = "618邮件发送") @Operation(summary = "618邮件发送")
public Response<String> send618PromotionEmailTemp() { public Response<String> send618PromotionEmailTemp() {
accountService.send618PromotionEmailTemp(); accountService.send618PromotionEmailTemp();
return Response.success("success"); return Response.success("success");
}*/ }*/
/*@GetMapping("/refreshCreditsMonthly") /*@GetMapping("/refreshCreditsMonthly")
@ApiOperation(value = "刷新子账号积分") @Operation(summary = "刷新子账号积分")
public void refreshCreditsMonthly() { public void refreshCreditsMonthly() {
accountService.refreshCreditsMonthly(); accountService.refreshCreditsMonthly();
}*/ }*/
/*@GetMapping("/checkEduAdminExpireStatus") /*@GetMapping("/checkEduAdminExpireStatus")
@ApiOperation(value = "检查教育管理员账号到期情况") @Operation(summary = "检查教育管理员账号到期情况")
public void checkEduAdminExpireStatus() { public void checkEduAdminExpireStatus() {
accountService.checkEduAdminExpireStatus(); accountService.checkEduAdminExpireStatus();
}*/ }*/

View File

@@ -12,9 +12,10 @@ import com.ai.da.model.vo.ReferralPageQueryVO;
import com.ai.da.service.AffiliateService; import com.ai.da.service.AffiliateService;
import com.ai.da.service.ReferralService; import com.ai.da.service.ReferralService;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -27,7 +28,7 @@ import java.util.Map;
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/affiliate") @RequestMapping("/api/affiliate")
@Api(tags = "Affiliate模块") @Tag(name = "Affiliate模块")
public class AffiliateController { public class AffiliateController {
@Resource @Resource
@@ -36,31 +37,31 @@ public class AffiliateController {
@Resource @Resource
private ReferralService referralService; private ReferralService referralService;
@ApiOperation(value = "注册成为affiliate") @Operation(summary = "注册成为affiliate")
@GetMapping("/registration") @GetMapping("/registration")
public Response<Boolean> completeGuidance(@RequestParam(value = "promotionMethod", required = false) String promotionMethod) { public Response<Boolean> completeGuidance(@RequestParam(value = "promotionMethod", required = false) String promotionMethod) {
return Response.success(affiliateService.registerAsAnAffiliate(promotionMethod)); return Response.success(affiliateService.registerAsAnAffiliate(promotionMethod));
} }
@ApiOperation(value = "获取affiliate列表") @Operation(summary = "获取affiliate列表")
@PostMapping("/list") @PostMapping("/list")
public Response<PageBaseResponse<AffiliateVO>> getAffiliateList(@Validated @RequestBody AffiliateQueryDTO affiliateQueryDTO) { public Response<PageBaseResponse<AffiliateVO>> getAffiliateList(@Validated @RequestBody AffiliateQueryDTO affiliateQueryDTO) {
return Response.success(affiliateService.getAffiliateList(affiliateQueryDTO)); return Response.success(affiliateService.getAffiliateList(affiliateQueryDTO));
} }
@ApiOperation(value = "获取affiliate个人中心") @Operation(summary = "获取affiliate个人中心")
@GetMapping("/personalCenter") @GetMapping("/personalCenter")
public Response<AffiliateVO> personalAffiliateCenter() { public Response<AffiliateVO> personalAffiliateCenter() {
return Response.success(affiliateService.personalAffiliateCenter()); return Response.success(affiliateService.personalAffiliateCenter());
} }
@ApiOperation(value = "获取个人佣金图表数据") @Operation(summary = "获取个人佣金图表数据")
@GetMapping("/getPersonalMonthlyIncome") @GetMapping("/getPersonalMonthlyIncome")
public Response<BigDecimal[]> getPersonalMonthlyIncome(@RequestParam("year") int year) { public Response<BigDecimal[]> getPersonalMonthlyIncome(@RequestParam("year") int year) {
return Response.success(affiliateService.getPersonalMonthlyIncome(year)); return Response.success(affiliateService.getPersonalMonthlyIncome(year));
} }
@ApiOperation(value = "审批affiliate申请") @Operation(summary = "审批affiliate申请")
@GetMapping("/approval") @GetMapping("/approval")
public Response<Boolean> applicationApproval(@RequestParam("id") Long id, public Response<Boolean> applicationApproval(@RequestParam("id") Long id,
@RequestParam("isApproved") Boolean isApproved, @RequestParam("isApproved") Boolean isApproved,
@@ -68,13 +69,13 @@ public class AffiliateController {
return Response.success(affiliateService.applicationApproval(id, isApproved, commission)); return Response.success(affiliateService.applicationApproval(id, isApproved, commission));
} }
@ApiOperation(value = "编辑affiliate") @Operation(summary = "编辑affiliate")
@GetMapping("/editAffiliate") @GetMapping("/editAffiliate")
public Response<String> editAffiliate(@RequestParam("id") Long id, public Response<String> editAffiliate(@RequestParam("id") Long id,
@ApiParam(value = "佣金比例", example = "25") @Parameter(description = "佣金比例", example = "25")
@RequestParam(value = "commission", required = false) Float commission, @RequestParam(value = "commission", required = false) Float commission,
@ApiParam(value = "操作类型", example = "Active", @Parameter(description = "操作类型", example = "Active",
allowableValues = "Active,Inactive,Delete") schema = @Schema(allowableValues = {"Active", "Inactive", "Delete"}))
@RequestParam(value = "operationType", required = false) String operationType) { @RequestParam(value = "operationType", required = false) String operationType) {
affiliateService.editAffiliate(id, commission, operationType); affiliateService.editAffiliate(id, commission, operationType);
return Response.success("success"); return Response.success("success");
@@ -94,39 +95,39 @@ public class AffiliateController {
return Response.success("success "); return Response.success("success ");
}*/ }*/
@ApiOperation(value = "affiliate链接浏览量增加") @Operation(summary = "affiliate链接浏览量增加")
@GetMapping("/viewsIncrease") @GetMapping("/viewsIncrease")
public Response<Boolean> viewsGet(@RequestParam("id") Long id) { public Response<Boolean> viewsGet(@RequestParam("id") Long id) {
return Response.success(affiliateService.affiliateLinkViewsIncrease(id)); return Response.success(affiliateService.affiliateLinkViewsIncrease(id));
} }
@ApiOperation(value = "获取每个affiliate产生的收入") @Operation(summary = "获取每个affiliate产生的收入")
@PostMapping("/getEachAffiliateGeneratedRevenue") @PostMapping("/getEachAffiliateGeneratedRevenue")
public Response<IPage<AffiliateInvitationDetailsVO>> getEachAffiliateGeneratedRevenue(@Validated @RequestBody AffiliateQueryDTO affiliateQueryDTO) { public Response<IPage<AffiliateInvitationDetailsVO>> getEachAffiliateGeneratedRevenue(@Validated @RequestBody AffiliateQueryDTO affiliateQueryDTO) {
return Response.success(affiliateService.getEachAffiliateGeneratedRevenue(affiliateQueryDTO)); return Response.success(affiliateService.getEachAffiliateGeneratedRevenue(affiliateQueryDTO));
} }
@ApiOperation(value = "分页获取所有的referral") @Operation(summary = "分页获取所有的referral")
@PostMapping("/getReferrals") @PostMapping("/getReferrals")
public Response<IPage<ReferralPageQueryVO>> getReferrals(@RequestBody ReferralPageQueryDTO referralPageQueryDTO) { public Response<IPage<ReferralPageQueryVO>> getReferrals(@RequestBody ReferralPageQueryDTO referralPageQueryDTO) {
return Response.success(referralService.queryByPage(referralPageQueryDTO)); return Response.success(referralService.queryByPage(referralPageQueryDTO));
} }
@ApiOperation(value = "编辑单个referral") @Operation(summary = "编辑单个referral")
@PostMapping("/editReferral") @PostMapping("/editReferral")
public Response<String> editReferral(@Validated @RequestBody EditReferralDTO editReferralDTO) { public Response<String> editReferral(@Validated @RequestBody EditReferralDTO editReferralDTO) {
referralService.editReferral(editReferralDTO); referralService.editReferral(editReferralDTO);
return Response.success(); return Response.success();
} }
@ApiOperation(value = "批量删除referral") @Operation(summary = "批量删除referral")
@PostMapping("/batchDeleteReferral") @PostMapping("/batchDeleteReferral")
public Response<String> batchDeleteReferral(@RequestBody List<Long> idList) { public Response<String> batchDeleteReferral(@RequestBody List<Long> idList) {
referralService.deleteReferral(idList); referralService.deleteReferral(idList);
return Response.success(); return Response.success();
} }
@ApiOperation(value = "获取所有affiliate用户名") @Operation(summary = "获取所有affiliate用户名")
@GetMapping("/getAllAffiliateUsername") @GetMapping("/getAllAffiliateUsername")
public Response<List<Map<String, Object>>> getAllAffiliateUsername() { public Response<List<Map<String, Object>>> getAllAffiliateUsername() {
return Response.success(affiliateService.getAllAffiliateUsername()); return Response.success(affiliateService.getAllAffiliateUsername());

View File

@@ -3,8 +3,8 @@ package com.ai.da.controller;
import com.ai.da.common.response.Response; import com.ai.da.common.response.Response;
import com.ai.da.model.dto.ProductPurchaseDTO; import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.AliPayService; import com.ai.da.service.AliPayService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -16,14 +16,14 @@ import java.util.Map;
@CrossOrigin @CrossOrigin
@RestController @RestController
@RequestMapping("/api/ali-pay") @RequestMapping("/api/ali-pay")
@Api(tags = "网站支付宝支付") @Tag(name = "网站支付宝支付")
@Slf4j @Slf4j
public class AliPayController { public class AliPayController {
@Resource @Resource
private AliPayService aliPayService; private AliPayService aliPayService;
@ApiOperation("统一收单下单并支付页面接口的调用") @Operation(summary = "统一收单下单并支付页面接口的调用")
@PostMapping("/trade/page/pay") @PostMapping("/trade/page/pay")
public Response<String> tradePagePay(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request){ public Response<String> tradePagePay(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request){
log.info("统一收单下单并支付页面接口的调用"); log.info("统一收单下单并支付页面接口的调用");
@@ -35,7 +35,7 @@ public class AliPayController {
return Response.success(formStr); return Response.success(formStr);
} }
@ApiOperation("支付通知") @Operation(summary = "支付通知")
@PostMapping("/trade/notify") @PostMapping("/trade/notify")
public String tradeNotify(@RequestParam Map<String, String> params){ public String tradeNotify(@RequestParam Map<String, String> params){
return aliPayService.tradeNotify(params); return aliPayService.tradeNotify(params);
@@ -46,7 +46,7 @@ public class AliPayController {
* @param orderNo * @param orderNo
* @return * @return
*/ */
@ApiOperation("用户取消订单") @Operation(summary = "用户取消订单")
@PostMapping("/trade/close/{orderNo}") @PostMapping("/trade/close/{orderNo}")
public Response<String> cancel(@PathVariable String orderNo){ public Response<String> cancel(@PathVariable String orderNo){
log.info("取消订单"); log.info("取消订单");
@@ -59,7 +59,7 @@ public class AliPayController {
* @param orderNo * @param orderNo
* @return * @return
*/ */
@ApiOperation("查询订单:测试订单状态用") @Operation(summary = "查询订单:测试订单状态用")
@GetMapping("/trade/query/{orderNo}") @GetMapping("/trade/query/{orderNo}")
public Response<String> queryOrder(@PathVariable String orderNo) { public Response<String> queryOrder(@PathVariable String orderNo) {
log.info("查询订单"); log.info("查询订单");
@@ -74,7 +74,7 @@ public class AliPayController {
* @param reason * @param reason
* @return * @return
*/ */
@ApiOperation("申请退款") @Operation(summary = "申请退款")
@PostMapping("/trade/refund/{orderNo}/{reason}") @PostMapping("/trade/refund/{orderNo}/{reason}")
public Response<String> refunds(@PathVariable String orderNo, @PathVariable String reason){ public Response<String> refunds(@PathVariable String orderNo, @PathVariable String reason){
log.info("申请退款"); log.info("申请退款");
@@ -88,7 +88,7 @@ public class AliPayController {
* @return * @return
* @throws Exception * @throws Exception
*/ */
@ApiOperation("查询退款:测试用") @Operation(summary = "查询退款:测试用")
@GetMapping("/trade/fastpay/refund/{orderNo}") @GetMapping("/trade/fastpay/refund/{orderNo}")
public Response<String> queryRefund(@PathVariable String orderNo) { public Response<String> queryRefund(@PathVariable String orderNo) {
log.info("查询退款"); log.info("查询退款");
@@ -103,7 +103,7 @@ public class AliPayController {
* @param type * @param type
* @return * @return
*/ */
@ApiOperation("获取账单url") @Operation(summary = "获取账单url")
@GetMapping("/bill/downloadurl/query/{billDate}/{type}") @GetMapping("/bill/downloadurl/query/{billDate}/{type}")
public Response<String> queryTradeBill( public Response<String> queryTradeBill(
@PathVariable String billDate, @PathVariable String billDate,

View File

@@ -3,8 +3,8 @@ package com.ai.da.controller;
import com.ai.da.common.response.Response; import com.ai.da.common.response.Response;
import com.ai.da.model.dto.ProductPurchaseDTO; import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.service.AlipayHKService; import com.ai.da.service.AlipayHKService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -15,28 +15,28 @@ import jakarta.validation.Valid;
@CrossOrigin @CrossOrigin
@RestController @RestController
@RequestMapping("/api/alipay-hk") @RequestMapping("/api/alipay-hk")
@Api(tags = "网站支付 香港支付宝") @Tag(name = "网站支付 香港支付宝")
@Slf4j @Slf4j
public class AlipayHKController { public class AlipayHKController {
@Resource @Resource
private AlipayHKService alipayHKService; private AlipayHKService alipayHKService;
@ApiOperation(value = "创建订单") @Operation(summary = "创建订单")
@PostMapping(value = "/createOrder") @PostMapping(value = "/createOrder")
public Response<String> createOrder(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) { public Response<String> createOrder(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) {
String order = alipayHKService.createOrder(productPurchaseDTO, request); String order = alipayHKService.createOrder(productPurchaseDTO, request);
return Response.success(order); return Response.success(order);
} }
@ApiOperation("支付通知") @Operation(summary = "支付通知")
@PostMapping("/trade/notify") @PostMapping("/trade/notify")
public String callback(@RequestBody String paramString){ public String callback(@RequestBody String paramString){
log.info("alipay-hk callback parameter : {}", paramString); log.info("alipay-hk callback parameter : {}", paramString);
return alipayHKService.callback(paramString); return alipayHKService.callback(paramString);
} }
@ApiOperation("订单查询") @Operation(summary = "订单查询")
@PostMapping("/trade/query/{orderRef}") @PostMapping("/trade/query/{orderRef}")
public Response<String> queryOrder(@PathVariable String orderRef){ public Response<String> queryOrder(@PathVariable String orderRef){
String s = alipayHKService.queryDetail(orderRef); String s = alipayHKService.queryDetail(orderRef);

View File

@@ -5,9 +5,8 @@ import com.ai.da.model.dto.ClassificationDTO;
import com.ai.da.model.vo.ClassificationVO; import com.ai.da.model.vo.ClassificationVO;
import com.ai.da.service.ClassificationService; import com.ai.da.service.ClassificationService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiModelProperty; import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -26,7 +25,7 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@RequestMapping("/api/classification") @RequestMapping("/api/classification")
@Api(value = "", tags = "分类") @Tag(name = "分类")
public class ClassificationController { public class ClassificationController {
@Resource @Resource
@@ -37,7 +36,7 @@ public class ClassificationController {
*/ */
@PostMapping("/saveOrUpdate") @PostMapping("/saveOrUpdate")
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@ApiOperation(value = "新增修改", notes = "传入ClassificationDTO") @Operation(summary = "新增修改", description = "传入ClassificationDTO")
public Response<Boolean> saveOrUpdate(@Valid @RequestBody ClassificationDTO classificationDTO) { public Response<Boolean> saveOrUpdate(@Valid @RequestBody ClassificationDTO classificationDTO) {
return Response.success(classificationService.saveOrUpdate(classificationDTO)); return Response.success(classificationService.saveOrUpdate(classificationDTO));
} }
@@ -47,28 +46,28 @@ public class ClassificationController {
*/ */
@PostMapping("/delete") @PostMapping("/delete")
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
@ApiOperation(value = "删除", notes = "传入ClassificationDTO") @Operation(summary = "删除", description = "传入ClassificationDTO")
public Response<Boolean> delete(@Valid @RequestBody ClassificationDTO classificationDTO) { public Response<Boolean> delete(@Valid @RequestBody ClassificationDTO classificationDTO) {
return Response.success(classificationService.delete(classificationDTO)); return Response.success(classificationService.delete(classificationDTO));
} }
@PostMapping("/queryClassification") @PostMapping("/queryClassification")
@ApiOperationSupport(order = 3) @ApiOperationSupport(order = 3)
@ApiModelProperty(value = "查询", notes = "传入ClassificationDTO") @Operation(summary = "查询", description = "传入ClassificationDTO")
public Response<List<ClassificationVO>> queryClassification(@Valid @RequestBody ClassificationDTO classificationDTO) { public Response<List<ClassificationVO>> queryClassification(@Valid @RequestBody ClassificationDTO classificationDTO) {
return Response.success(classificationService.queryClassification(classificationDTO)); return Response.success(classificationService.queryClassification(classificationDTO));
} }
@PostMapping("/relationLibrary") @PostMapping("/relationLibrary")
@ApiOperationSupport(order = 4) @ApiOperationSupport(order = 4)
@ApiModelProperty(value = "关联", notes = "传入ClassificationDTO") @Operation(summary = "关联", description = "传入ClassificationDTO")
public Response<Boolean> relationLibrary(@Valid @RequestBody ClassificationDTO classificationDTO) { public Response<Boolean> relationLibrary(@Valid @RequestBody ClassificationDTO classificationDTO) {
return Response.success(classificationService.relationLibrary(classificationDTO)); return Response.success(classificationService.relationLibrary(classificationDTO));
} }
@PostMapping("/getRelClassificationIdList") @PostMapping("/getRelClassificationIdList")
@ApiOperationSupport(order = 5) @ApiOperationSupport(order = 5)
@ApiModelProperty(value = "获取关联分类IDList", notes = "传入ClassificationDTO") @Operation(summary = "获取关联分类IDList", description = "传入ClassificationDTO")
public Response<List<Long>> getRelClassificationIdList(@Valid @RequestBody ClassificationDTO classificationDTO) { public Response<List<Long>> getRelClassificationIdList(@Valid @RequestBody ClassificationDTO classificationDTO) {
return Response.success(classificationService.getRelClassificationIdList(classificationDTO)); return Response.success(classificationService.getRelClassificationIdList(classificationDTO));
} }
@@ -80,7 +79,7 @@ public class ClassificationController {
*/ */
@PostMapping("/getRelPublicClassificationIdList") @PostMapping("/getRelPublicClassificationIdList")
@ApiOperationSupport(order = 5) @ApiOperationSupport(order = 5)
@ApiModelProperty(value = "获取关联公共分类IDList", notes = "传入ClassificationDTO") @Operation(summary = "获取关联公共分类IDList", description = "传入ClassificationDTO")
public Response<List<Long>> getRelPublicClassificationIdList(@Valid @RequestBody ClassificationDTO classificationDTO) { public Response<List<Long>> getRelPublicClassificationIdList(@Valid @RequestBody ClassificationDTO classificationDTO) {
return Response.success(classificationService.getRelPublicClassificationIdList(classificationDTO)); return Response.success(classificationService.getRelPublicClassificationIdList(classificationDTO));
} }
@@ -92,7 +91,7 @@ public class ClassificationController {
*/ */
@PostMapping("/editRelPublicClassificationIdList") @PostMapping("/editRelPublicClassificationIdList")
@ApiOperationSupport(order = 5) @ApiOperationSupport(order = 5)
@ApiModelProperty(value = "编辑关联公共分类IDList", notes = "传入ClassificationDTO") @Operation(summary = "编辑关联公共分类IDList", description = "传入ClassificationDTO")
public Response<Boolean> editRelPublicClassificationIdList(@Valid @RequestBody ClassificationDTO classificationDTO) { public Response<Boolean> editRelPublicClassificationIdList(@Valid @RequestBody ClassificationDTO classificationDTO) {
return Response.success(classificationService.editRelPublicClassificationIdList(classificationDTO)); return Response.success(classificationService.editRelPublicClassificationIdList(classificationDTO));
} }

View File

@@ -17,9 +17,9 @@ import com.ai.da.service.AccountService;
import com.ai.da.service.ConvenientInquiryService; import com.ai.da.service.ConvenientInquiryService;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import io.netty.util.internal.StringUtil; import io.netty.util.internal.StringUtil;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -30,7 +30,7 @@ import jakarta.validation.Valid;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.*; import java.util.*;
@Api(tags = "便利查询") @Tag(name = "便利查询")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/inquiry") @RequestMapping("/api/inquiry")
@@ -43,13 +43,13 @@ public class ConvenientInquiryController {
private AccountService accountService; private AccountService accountService;
@ApiOperation("获取当前所有试用用户") @Operation(summary = "获取当前所有试用用户")
@PostMapping("/getTrial") @PostMapping("/getTrial")
public Response<IPage<TrialOrder>> getTrial(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) { public Response<IPage<TrialOrder>> getTrial(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) {
return Response.success(convenientInquiryService.getTrial(queryUserConditionsVO)); return Response.success(convenientInquiryService.getTrial(queryUserConditionsVO));
} }
@ApiOperation("获取指定时间区间内所有用户design的使用情况") @Operation(summary = "获取指定时间区间内所有用户design的使用情况")
@GetMapping("/getDesignStatistic") @GetMapping("/getDesignStatistic")
public Response<List<UserDesignStatisticDTO>> getDesignStatistic(@RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime, public Response<List<UserDesignStatisticDTO>> getDesignStatistic(@RequestParam(required = false) String startTime, @RequestParam(required = false) String endTime,
@RequestParam(required = false) List<Long> ids, @RequestParam(required = false) String email, @RequestParam(required = false) List<Long> ids, @RequestParam(required = false) String email,
@@ -81,68 +81,68 @@ public class ConvenientInquiryController {
//调查问卷 //调查问卷
@ApiOperation("获取调查问卷统计详情") @Operation(summary = "获取调查问卷统计详情")
@GetMapping("/getQuestionnaireStatistic") @GetMapping("/getQuestionnaireStatistic")
public Response<QuestionnaireFeedbackVO> getQuestionnaire() { public Response<QuestionnaireFeedbackVO> getQuestionnaire() {
return Response.success(convenientInquiryService.getQuestionnaireInfo()); return Response.success(convenientInquiryService.getQuestionnaireInfo());
} }
@ApiOperation("获取所有调查问卷") @Operation(summary = "获取所有调查问卷")
@GetMapping("/getAllQuestionnaire") @GetMapping("/getAllQuestionnaire")
public Response<List<QuestionnaireVO>> getAllQuestionnaire() { public Response<List<QuestionnaireVO>> getAllQuestionnaire() {
return Response.success(convenientInquiryService.getAllQuestionnaire()); return Response.success(convenientInquiryService.getAllQuestionnaire());
} }
@ApiOperation("获取近期新用户") @Operation(summary = "获取近期新用户")
@PostMapping("/recentNewUser") @PostMapping("/recentNewUser")
public Response<IPage<Account>> recentNewUser(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) { public Response<IPage<Account>> recentNewUser(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) {
return Response.success(convenientInquiryService.recentNewUser(queryUserConditionsVO)); return Response.success(convenientInquiryService.recentNewUser(queryUserConditionsVO));
} }
@ApiOperation("获取近期新用户图表数据") @Operation(summary = "获取近期新用户图表数据")
@GetMapping("/recentNewUserChart") @GetMapping("/recentNewUserChart")
public Response<Map<String, Object>> recentNewUserChart(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime, public Response<Map<String, Object>> recentNewUserChart(@Parameter(description = "startTime") @RequestParam @Nullable String startTime,
@ApiParam(value = "endTime") @RequestParam @Nullable String endTime, @Parameter(description = "endTime") @RequestParam @Nullable String endTime,
@ApiParam("userType") @RequestParam Integer userType) { @Parameter(description = "userType") @RequestParam @Nullable Integer userType) {
return Response.success(convenientInquiryService.recentNewUserChart(startTime, endTime, userType)); return Response.success(convenientInquiryService.recentNewUserChart(startTime, endTime, userType));
} }
@ApiOperation("获取近期活跃用户") @Operation(summary = "获取近期活跃用户")
@PostMapping("/recentActiveUser") @PostMapping("/recentActiveUser")
public Response<IPage<Account>> recentActiveUser(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) { public Response<IPage<Account>> recentActiveUser(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) {
return Response.success(convenientInquiryService.recentActiveUser(queryUserConditionsVO)); return Response.success(convenientInquiryService.recentActiveUser(queryUserConditionsVO));
} }
@ApiOperation("获取近期活跃用户图表数据") @Operation(summary = "获取近期活跃用户图表数据")
@GetMapping("/recentActiveUserChart") @GetMapping("/recentActiveUserChart")
public Response<Integer> recentActiveUserChart(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime, public Response<Integer> recentActiveUserChart(@Parameter(description = "startTime") @RequestParam @Nullable String startTime,
@ApiParam(value = "endTime") @RequestParam @Nullable String endTime) { @Parameter(description = "endTime") @RequestParam @Nullable String endTime) {
return Response.success(convenientInquiryService.recentActiveUserChart(startTime, endTime)); return Response.success(convenientInquiryService.recentActiveUserChart(startTime, endTime));
} }
@ApiOperation("获取用户的各模块功能使用详情") @Operation(summary = "获取用户的各模块功能使用详情")
@GetMapping("/getActiveUserFunc") @GetMapping("/getActiveUserFunc")
public Response<Map<String, List<Object>>> getActiveUserFunc(@ApiParam(value = "startTime") @RequestParam @Nullable String startTime, public Response<Map<String, List<Object>>> getActiveUserFunc(@Parameter(description = "startTime") @RequestParam @Nullable String startTime,
@ApiParam(value = "endTime") @RequestParam @Nullable String endTime, @Parameter(description = "endTime") @RequestParam @Nullable String endTime,
@ApiParam("userIdList") @RequestParam(required = false) @Nullable List<Long> userIdList) { @Parameter(description = "userIdList") @RequestParam(required = false) @Nullable List<Long> userIdList) {
return Response.success(convenientInquiryService.getActiveUserFunc(startTime, endTime, userIdList)); return Response.success(convenientInquiryService.getActiveUserFunc(startTime, endTime, userIdList));
} }
@ApiOperation("试用用户到正式用户的转化率") @Operation(summary = "试用用户到正式用户的转化率")
@GetMapping("/conversionRate") @GetMapping("/conversionRate")
public Response<Map<String, Object>> conversionRate(@ApiParam(value = "startTime") @RequestParam(required = false) @Nullable String startTime, public Response<Map<String, Object>> conversionRate(@Parameter(description = "startTime") @RequestParam(required = false) @Nullable String startTime,
@ApiParam(value = "endTime") @RequestParam(required = false) @Nullable String endTime) { @Parameter(description = "endTime") @RequestParam(required = false) @Nullable String endTime) {
return Response.success(convenientInquiryService.conversionRate(startTime, endTime)); return Response.success(convenientInquiryService.conversionRate(startTime, endTime));
} }
@ApiOperation("试用用户国家/城市分布") @Operation(summary = "试用用户国家/城市分布")
@GetMapping("/trialUserCountry") @GetMapping("/trialUserCountry")
public Response<Map<String, List<Object>>> trialUserCountry(@ApiParam(value = "startTime") @RequestParam(required = false) @Nullable String startTime, public Response<Map<String, List<Object>>> trialUserCountry(@Parameter(description = "startTime") @RequestParam(required = false) @Nullable String startTime,
@ApiParam(value = "endTime") @RequestParam(required = false) @Nullable String endTime) { @Parameter(description = "endTime") @RequestParam(required = false) @Nullable String endTime) {
return Response.success(convenientInquiryService.trialUserCountry(startTime, endTime)); return Response.success(convenientInquiryService.trialUserCountry(startTime, endTime));
} }
@ApiOperation("添加用户") @Operation(summary = "添加用户")
@PostMapping("/addUser") @PostMapping("/addUser")
public Response<Boolean> addUser(@Valid @RequestBody AccountAddDTO accountAddDTO) { public Response<Boolean> addUser(@Valid @RequestBody AccountAddDTO accountAddDTO) {
Long userAccountId = UserContext.getUserHolder().getId(); Long userAccountId = UserContext.getUserHolder().getId();
@@ -155,12 +155,12 @@ public class ConvenientInquiryController {
} }
} }
@ApiOperation("修改用户信息") @Operation(summary = "修改用户信息")
@PostMapping("/modifyUser") @PostMapping("/modifyUser")
public Response<Boolean> modifyUser(@ApiParam(value = "用户id") @RequestParam @Nullable Long accountId, public Response<Boolean> modifyUser(@Parameter(description = "用户id") @RequestParam @Nullable Long accountId,
@ApiParam(value = "有效期截止时间的毫秒级unix格式") @RequestParam @Nullable Long validEndTime, @Parameter(description = "有效期截止时间的毫秒级unix格式") @RequestParam @Nullable Long validEndTime,
@ApiParam(value = "用户类型 1/2/3/0 -> yearly/monthly/trial/visitor") @RequestParam @Nullable Integer systemUser, @Parameter(description = "用户类型 1/2/3/0 -> yearly/monthly/trial/visitor") @RequestParam @Nullable Integer systemUser,
@ApiParam("积分") @RequestParam @Nullable Long credits) { @Parameter(description = "积分") @RequestParam @Nullable Long credits) {
Long userAccountId = UserContext.getUserHolder().getId(); Long userAccountId = UserContext.getUserHolder().getId();
if (userAccountId.equals(31L) || userAccountId.equals(87L) || userAccountId.equals(83L) if (userAccountId.equals(31L) || userAccountId.equals(87L) || userAccountId.equals(83L)
|| userAccountId.equals(6L) || userAccountId.equals(4L) || userAccountId.equals(73L) || userAccountId.equals(6L) || userAccountId.equals(4L) || userAccountId.equals(73L)
@@ -171,56 +171,58 @@ public class ConvenientInquiryController {
} }
} }
@ApiOperation("获取用户信息") @Operation(summary = "获取用户信息")
@PostMapping("/getUserInfo") @PostMapping("/getUserInfo")
public Response<IPage<Account>> getUserInfo(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) { public Response<IPage<Account>> getUserInfo(@Valid @RequestBody QueryUserConditionsVO queryUserConditionsVO) {
return Response.success(convenientInquiryService.getUserInfo(queryUserConditionsVO)); return Response.success(convenientInquiryService.getUserInfo(queryUserConditionsVO));
} }
@ApiOperation("获取所有用户id") @Operation(summary = "获取所有用户id")
@GetMapping("/getAllUserId") @GetMapping("/getAllUserId")
public Response<List<Map<String, Object>>> getAllUsrIdList() { public Response<IPage<Map<String, Object>>> getAllUserIdList(@Parameter(description = "page") @RequestParam Integer page,
return Response.success(convenientInquiryService.getAllUserIdList()); @Parameter(description = "size") @RequestParam Integer size,
@Parameter(description = "email 模糊查询") @RequestParam(required = false) String email) {
return Response.success(convenientInquiryService.getAllUserIdList(page, size, email));
} }
@ApiOperation("获取所有交易信息") @Operation(summary = "获取所有交易信息")
@PostMapping("/queryTransaction") @PostMapping("/queryTransaction")
public Response<PageBaseResponse<PaymentInfoVO>> queryTransactionRecords(@Valid @RequestBody QueryPaymentInfoDTO queryPaymentInfoDTO){ public Response<PageBaseResponse<PaymentInfoVO>> queryTransactionRecords(@Valid @RequestBody QueryPaymentInfoDTO queryPaymentInfoDTO){
return Response.success(convenientInquiryService.queryTransactionRecords(queryPaymentInfoDTO)); return Response.success(convenientInquiryService.queryTransactionRecords(queryPaymentInfoDTO));
} }
@ApiOperation("获取所有国家、城市") @Operation(summary = "获取所有国家、城市")
@GetMapping("/getCities") @GetMapping("/getCities")
public Response<Map<String, List<String>>> getCities(){ public Response<Map<String, List<String>>> getCities(){
return Response.success(convenientInquiryService.getCities()); return Response.success(convenientInquiryService.getCities());
} }
@ApiOperation("下载交易记录") @Operation(summary = "下载交易记录")
@PostMapping("/queryTransaction/download") @PostMapping("/queryTransaction/download")
public Response<String> exportTransactionRecords(@Valid @RequestBody QueryPaymentInfoDTO queryPaymentInfoDTO, HttpServletResponse response){ public Response<String> exportTransactionRecords(@Valid @RequestBody QueryPaymentInfoDTO queryPaymentInfoDTO, HttpServletResponse response){
return Response.success(convenientInquiryService.exportTransactionRecords(queryPaymentInfoDTO, response)); return Response.success(convenientInquiryService.exportTransactionRecords(queryPaymentInfoDTO, response));
} }
@ApiOperation("获取生成功能使用频次") @Operation(summary = "获取生成功能使用频次")
@PostMapping("/getGenerateFrequency") @PostMapping("/getGenerateFrequency")
public Response<PageBaseResponse<AccountCreditsUsageDTO>> getGenerateFrequency(@Valid @RequestBody AccountCreditsUsageQueryDTO queryDTO){ public Response<PageBaseResponse<AccountCreditsUsageDTO>> getGenerateFrequency(@Valid @RequestBody AccountCreditsUsageQueryDTO queryDTO){
return Response.success(convenientInquiryService.getGenerateFrequency(queryDTO)); return Response.success(convenientInquiryService.getGenerateFrequency(queryDTO));
} }
@ApiOperation("获取所有生成功能的名字") @Operation(summary = "获取所有生成功能的名字")
@GetMapping("/getAllGenerateFuncName") @GetMapping("/getAllGenerateFuncName")
public Response<List<String>> getAllGenerateFuncName(){ public Response<List<String>> getAllGenerateFuncName(){
return Response.success(convenientInquiryService.getAllGenerateFuncName()); return Response.success(convenientInquiryService.getAllGenerateFuncName());
} }
@ApiOperation("添加组织机构") @Operation(summary = "添加组织机构")
@GetMapping("/addOrganization") @GetMapping("/addOrganization")
public Response<String> addOrganization(@ApiParam(value = "机构名") @RequestParam String name, @ApiParam(value = "Enterprise || Education") @RequestParam String type){ public Response<String> addOrganization(@Parameter(description = "机构名") @RequestParam String name, @Parameter(description = "Enterprise || Education") @RequestParam String type){
convenientInquiryService.addOrganization(name, type); convenientInquiryService.addOrganization(name, type);
return Response.success(); return Response.success();
} }
@ApiOperation("查询所有企业或教育机构") @Operation(summary = "查询所有企业或教育机构")
@PostMapping("/queryOrganization") @PostMapping("/queryOrganization")
public Response<IPage<Organization>> queryOrganization(@RequestBody QueryOrganizationPageDTO queryOrganizationPageDTO){ public Response<IPage<Organization>> queryOrganization(@RequestBody QueryOrganizationPageDTO queryOrganizationPageDTO){
return Response.success(convenientInquiryService.queryOrganization(queryOrganizationPageDTO)); return Response.success(convenientInquiryService.queryOrganization(queryOrganizationPageDTO));

View File

@@ -6,8 +6,8 @@ import com.ai.da.common.response.Response;
import com.ai.da.mapper.primary.entity.CreditsDetail; import com.ai.da.mapper.primary.entity.CreditsDetail;
import com.ai.da.model.dto.QueryIncomeOrExpenditureDTO; import com.ai.da.model.dto.QueryIncomeOrExpenditureDTO;
import com.ai.da.service.CreditsService; import com.ai.da.service.CreditsService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -17,21 +17,21 @@ import jakarta.validation.Valid;
@CrossOrigin @CrossOrigin
@RestController @RestController
@RequestMapping("/api/credits") @RequestMapping("/api/credits")
@Api(tags = "积分") @Tag(name = "积分")
@Slf4j @Slf4j
public class CreditsController { public class CreditsController {
@Resource @Resource
private CreditsService creditsService; private CreditsService creditsService;
@ApiOperation("获取当前积分") @Operation(summary = "获取当前积分")
@GetMapping("/getCredits") @GetMapping("/getCredits")
public Response<String> getCredits() { public Response<String> getCredits() {
String credits = creditsService.getCredits(UserContext.getUserHolder().getId()); String credits = creditsService.getCredits(UserContext.getUserHolder().getId());
return Response.success(credits); return Response.success(credits);
} }
@ApiOperation("获取积分详细") @Operation(summary = "获取积分详细")
@PostMapping("/getCreditsDetail") @PostMapping("/getCreditsDetail")
public Response<PageBaseResponse<CreditsDetail>> getCreditsDetail(@Valid @RequestBody QueryIncomeOrExpenditureDTO queryPageByTimeDTO) { public Response<PageBaseResponse<CreditsDetail>> getCreditsDetail(@Valid @RequestBody QueryIncomeOrExpenditureDTO queryPageByTimeDTO) {
PageBaseResponse<CreditsDetail> credits = creditsService.queryCreditsDetailsPage(queryPageByTimeDTO); PageBaseResponse<CreditsDetail> credits = creditsService.queryCreditsDetailsPage(queryPageByTimeDTO);

View File

@@ -9,9 +9,9 @@ import com.ai.da.model.dto.*;
import com.ai.da.model.vo.*; import com.ai.da.model.vo.*;
import com.ai.da.service.DesignService; import com.ai.da.service.DesignService;
import com.ai.da.service.UserLikeGroupService; import com.ai.da.service.UserLikeGroupService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -21,7 +21,7 @@ import java.math.BigDecimal;
import java.util.List; import java.util.List;
@Api(tags = "design模块") @Tag(name = "design模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/design") @RequestMapping("/api/design")
@@ -31,98 +31,98 @@ public class DesignController {
@Resource @Resource
private UserLikeGroupService userLikeGroupService; private UserLikeGroupService userLikeGroupService;
@ApiOperation(value = "设计 Conllection") @Operation(summary = "设计 Conllection")
@PostMapping("/designCollection") @PostMapping("/designCollection")
@CrossOrigin @CrossOrigin
public Response<String> designCollection(@Valid @RequestBody DesignCollectionDTO designDTO) { public Response<String> designCollection(@Valid @RequestBody DesignCollectionDTO designDTO) {
return Response.success(designService.designCollection(designDTO)); return Response.success(designService.designCollection(designDTO));
} }
@ApiOperation(value = "design进度条") @Operation(summary = "design进度条")
@GetMapping("/designProcess") @GetMapping("/designProcess")
public Response<Integer> designProcess(@RequestParam("processId") String processId) { public Response<Integer> designProcess(@RequestParam("processId") String processId) {
return Response.success(designService.designProcess(processId)); return Response.success(designService.designProcess(processId));
} }
@ApiOperation(value = "重新设计 Collection") @Operation(summary = "重新设计 Collection")
@PostMapping("/reDesignCollection") @PostMapping("/reDesignCollection")
public Response<String> reDesignCollection(@Valid @RequestBody ReDesignCollectionDTO reDesignDTO) { public Response<String> reDesignCollection(@Valid @RequestBody ReDesignCollectionDTO reDesignDTO) {
return Response.success(designService.reDesignCollection(reDesignDTO)); return Response.success(designService.reDesignCollection(reDesignDTO));
} }
@ApiOperation(value = "designItem list,刷新用") @Operation(summary = "designItem list,刷新用")
@GetMapping("/designItemList") @GetMapping("/designItemList")
public Response<DesignCollectionVO> designItemList(@ApiParam("designId") @RequestParam("designId") Long designId) { public Response<DesignCollectionVO> designItemList(@Parameter(description = "designId") @RequestParam("designId") Long designId) {
return Response.success(designService.designItemList(designId)); return Response.success(designService.designItemList(designId));
} }
@ApiOperation(value = "统计design进度") @Operation(summary = "统计design进度")
@PostMapping("/countDesignProcess") @PostMapping("/countDesignProcess")
public Response<BigDecimal> countDesignProcess() { public Response<BigDecimal> countDesignProcess() {
return Response.success(designService.countDesignProcess()); return Response.success(designService.countDesignProcess());
} }
@ApiOperation(value = "Design Like") @Operation(summary = "Design Like")
@PostMapping("/like") @PostMapping("/like")
public Response<DesignLikeVO> like(@Valid @RequestBody DesignLikeDTO designLikeDTO) { public Response<DesignLikeVO> like(@Valid @RequestBody DesignLikeDTO designLikeDTO) {
return Response.success(designService.like(designLikeDTO)); return Response.success(designService.like(designLikeDTO));
} }
@ApiOperation(value = "Design Dislike") @Operation(summary = "Design Dislike")
@PostMapping("/dislike") @PostMapping("/dislike")
public Response<Boolean> dislike(@Valid @RequestBody DisDesignLikeDTO disDesignLikeDTO) { public Response<Boolean> dislike(@Valid @RequestBody DisDesignLikeDTO disDesignLikeDTO) {
return Response.success(designService.dislike(disDesignLikeDTO)); return Response.success(designService.dislike(disDesignLikeDTO));
} }
@ApiOperation(value = "Design sort") @Operation(summary = "Design sort")
@PostMapping("/sort") @PostMapping("/sort")
public Response<Boolean> sort(@Valid @RequestBody CollectionSortDTO userLikeSortDTO) { public Response<Boolean> sort(@Valid @RequestBody CollectionSortDTO userLikeSortDTO) {
return Response.success(designService.sort(userLikeSortDTO)); return Response.success(designService.sort(userLikeSortDTO));
} }
@ApiOperation(value = "sketchBoard upload generate design前裁剪") @Operation(summary = "sketchBoard upload generate design前裁剪")
@PostMapping("/sketchBoardsBoundingBox") @PostMapping("/sketchBoardsBoundingBox")
public Response<List<CollectionSketchVO>> sketchesBoundingBox(@Valid @RequestBody ReDesignCollectionDTO reDesignCollectionDTO) { public Response<List<CollectionSketchVO>> sketchesBoundingBox(@Valid @RequestBody ReDesignCollectionDTO reDesignCollectionDTO) {
return Response.success(designService.sketchesBoundingBox(reDesignCollectionDTO)); return Response.success(designService.sketchesBoundingBox(reDesignCollectionDTO));
} }
@ApiOperation(value = "通过designItemId获取模特图") @Operation(summary = "通过designItemId获取模特图")
@PostMapping("/getModel") @PostMapping("/getModel")
public Response<List<String>> getModel(@RequestBody List<Long> designItemIdList){ public Response<List<String>> getModel(@RequestBody List<Long> designItemIdList){
return Response.success(designService.getModel(designItemIdList)); return Response.success(designService.getModel(designItemIdList));
} }
@ApiOperation(value = "获取design结果") @Operation(summary = "获取design结果")
@GetMapping("/getDesignResult") @GetMapping("/getDesignResult")
public Response<DesignCollectionVO> getDesignResult(@RequestParam("requestId") String requestId, @RequestParam("objectSignList") List<String> objectSignList){ public Response<DesignCollectionVO> getDesignResult(@RequestParam("requestId") String requestId, @RequestParam("objectSignList") List<String> objectSignList){
return Response.success(designService.getDesignResult(requestId, objectSignList)); return Response.success(designService.getDesignResult(requestId, objectSignList));
} }
@ApiOperation(value = "云生成") @Operation(summary = "云生成")
@PostMapping("/designCloud") @PostMapping("/designCloud")
public Response<String> designCloud(@Valid @RequestBody CloudTaskDTO cloudTaskDTO) { public Response<String> designCloud(@Valid @RequestBody CloudTaskDTO cloudTaskDTO) {
return Response.success(designService.designCloud(cloudTaskDTO)); return Response.success(designService.designCloud(cloudTaskDTO));
} }
@ApiOperation(value = "云生成修改任务名") @Operation(summary = "云生成修改任务名")
@PostMapping("/cloudTaskNameUpdate") @PostMapping("/cloudTaskNameUpdate")
public Response<Boolean> cloudTaskNameUpdate(@Valid @RequestBody CloudTaskDTO cloudTaskDTO) { public Response<Boolean> cloudTaskNameUpdate(@Valid @RequestBody CloudTaskDTO cloudTaskDTO) {
return Response.success(designService.cloudTaskNameUpdate(cloudTaskDTO)); return Response.success(designService.cloudTaskNameUpdate(cloudTaskDTO));
} }
@ApiOperation(value = "云生成删除任务") @Operation(summary = "云生成删除任务")
@PostMapping("/cloudTaskDelete") @PostMapping("/cloudTaskDelete")
public Response<Boolean> cloudTaskDelete(@Valid @RequestBody CloudTaskDTO cloudTaskDTO) { public Response<Boolean> cloudTaskDelete(@Valid @RequestBody CloudTaskDTO cloudTaskDTO) {
return Response.success(designService.cloudTaskDelete(cloudTaskDTO)); return Response.success(designService.cloudTaskDelete(cloudTaskDTO));
} }
@ApiOperation(value = "云生成page") @Operation(summary = "云生成page")
@PostMapping("/cloudPage") @PostMapping("/cloudPage")
public Response<PageBaseResponse<CloudTaskVO>> cloudPage(@Valid @RequestBody CloudPageDTO cloudPageDTO) { public Response<PageBaseResponse<CloudTaskVO>> cloudPage(@Valid @RequestBody CloudPageDTO cloudPageDTO) {
return Response.success(PageBaseResponse.success(designService.cloudPage(cloudPageDTO))); return Response.success(PageBaseResponse.success(designService.cloudPage(cloudPageDTO)));
} }
@ApiOperation(value = "获取design云生成结果") @Operation(summary = "获取design云生成结果")
@PostMapping("/getDesignCloudResult") @PostMapping("/getDesignCloudResult")
public Response<CloudTaskResultVO> getDesignCloudResult(@Valid @RequestBody DesignCloudResultQuery designCloudResultQuery) { public Response<CloudTaskResultVO> getDesignCloudResult(@Valid @RequestBody DesignCloudResultQuery designCloudResultQuery) {
return Response.success(designService.getDesignCloudResult(designCloudResultQuery)); return Response.success(designService.getDesignCloudResult(designCloudResultQuery));

View File

@@ -5,9 +5,9 @@ import com.ai.da.model.dto.*;
import com.ai.da.model.vo.*; import com.ai.da.model.vo.*;
import com.ai.da.service.DesignItemService; import com.ai.da.service.DesignItemService;
import com.ai.da.service.DesignService; import com.ai.da.service.DesignService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -16,7 +16,7 @@ import jakarta.validation.Valid;
import java.io.IOException; import java.io.IOException;
@Api(tags = "design Detail模块") @Tag(name = "design Detail模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/design/detail") @RequestMapping("/api/design/detail")
@@ -26,7 +26,7 @@ public class DesignDetailController {
@Resource @Resource
private DesignItemService designItemService; private DesignItemService designItemService;
@ApiOperation(value = "生成高级design图片") @Operation(summary = "生成高级design图片")
@PostMapping("/generateHighDesign") @PostMapping("/generateHighDesign")
public Response<String> generateHighDesign(@Valid @RequestBody GenerateHighDesignDTO generateHighDesignDTO) { public Response<String> generateHighDesign(@Valid @RequestBody GenerateHighDesignDTO generateHighDesignDTO) {
Response response = new Response(); Response response = new Response();
@@ -34,7 +34,7 @@ public class DesignDetailController {
return response; return response;
} }
@ApiOperation(value = "删除高级design图片") @Operation(summary = "删除高级design图片")
@PostMapping("/deleteHighDesign") @PostMapping("/deleteHighDesign")
public Response<Boolean> deleteHighDesign(@Valid @RequestBody GenerateHighDesignDTO generateHighDesignDTO) { public Response<Boolean> deleteHighDesign(@Valid @RequestBody GenerateHighDesignDTO generateHighDesignDTO) {
Response response = new Response(); Response response = new Response();
@@ -42,28 +42,28 @@ public class DesignDetailController {
return response; return response;
} }
@ApiOperation(value = "查询design详情") @Operation(summary = "查询design详情")
@GetMapping("/getDetail") @GetMapping("/getDetail")
public Response<DesignItemDetailVO> getDetail(@ApiParam("designItemId") @RequestParam("designItemId") Long designItemId, public Response<DesignItemDetailVO> getDetail(@Parameter(description = "designItemId") @RequestParam("designItemId") Long designItemId,
@ApiParam("designPythonOutfitId") @RequestParam(value = "designPythonOutfitId", required = false) Long designPythonOutfitId) { @Parameter(description = "designPythonOutfitId") @RequestParam(value = "designPythonOutfitId", required = false) Long designPythonOutfitId) {
return Response.success(designService.detail(designPythonOutfitId, designItemId)); return Response.success(designService.detail(designPythonOutfitId, designItemId));
} }
@ApiOperation(value = "切换系统的element") @Operation(summary = "切换系统的element")
@GetMapping("/getNextSysElement") @GetMapping("/getNextSysElement")
public Response<GetNextSysElementVO> getNextSysElement(@ApiParam("要切换的系统element 类型") @RequestParam("type") String type, public Response<GetNextSysElementVO> getNextSysElement(@Parameter(description = "要切换的系统element 类型") @RequestParam("type") String type,
@ApiParam("要切换的系统element id") @RequestParam("id") Long id, @Parameter(description = "要切换的系统element id") @RequestParam("id") Long id,
@ApiParam("操作类型 PREV 上一步 NEXT 下一步") @RequestParam("operateType") String operateType) { @Parameter(description = "操作类型 PREV 上一步 NEXT 下一步") @RequestParam("operateType") String operateType) {
return Response.success(designItemService.getNextSysElement(id, type, operateType)); return Response.success(designItemService.getNextSysElement(id, type, operateType));
} }
@ApiOperation(value = "单个design") @Operation(summary = "单个design")
@PostMapping("/designSingle") @PostMapping("/designSingle")
public Response<DesignSingleVO> designSingle(@Valid @RequestBody DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO) { public Response<DesignSingleVO> designSingle(@Valid @RequestBody DesignSingleIncludeLayersDTO designSingleIncludeLayersDTO) {
return Response.success(designItemService.designSingleIncludeLayers(designSingleIncludeLayersDTO)); return Response.success(designItemService.designSingleIncludeLayers(designSingleIncludeLayersDTO));
} }
@ApiOperation(value = "print打点") @Operation(summary = "print打点")
@PostMapping("/printDot") @PostMapping("/printDot")
public Response<String> printDot(@Valid @RequestBody DesignSingleDTO designSingleDTO) { public Response<String> printDot(@Valid @RequestBody DesignSingleDTO designSingleDTO) {
Response<String> response = new Response(); Response<String> response = new Response();
@@ -72,20 +72,20 @@ public class DesignDetailController {
return response; return response;
} }
@ApiOperation(value = "编辑图层大小和位置 废弃") @Operation(summary = "编辑图层大小和位置 废弃")
@PostMapping("/editLayers") @PostMapping("/editLayers")
public Response<ComposeLayersVO> editPositionAndScale(@Valid @RequestBody EditLayersPositionAndScaleVO positionAndScaleVO) throws IOException { public Response<ComposeLayersVO> editPositionAndScale(@Valid @RequestBody EditLayersPositionAndScaleVO positionAndScaleVO) throws IOException {
return Response.success(designItemService.editLayersPositionAndScale(positionAndScaleVO)); return Response.success(designItemService.editLayersPositionAndScale(positionAndScaleVO));
} }
@ApiOperation(value = "mask数据兼容") @Operation(summary = "mask数据兼容")
@GetMapping("/convertWithoutGradient") @GetMapping("/convertWithoutGradient")
public Response<String> convertHistoryMaskWithoutGradient(){ public Response<String> convertHistoryMaskWithoutGradient(){
designItemService.convertHistoryMaskWithoutGradient(); designItemService.convertHistoryMaskWithoutGradient();
return Response.success("success"); return Response.success("success");
} }
@ApiOperation(value = "mask数据库路径更新") @Operation(summary = "mask数据库路径更新")
@GetMapping("/updateMaskUrl") @GetMapping("/updateMaskUrl")
public Response<String> updateMaskUrl(){ public Response<String> updateMaskUrl(){
designItemService.updateMaskUrl(); designItemService.updateMaskUrl();

View File

@@ -8,9 +8,9 @@ import com.ai.da.model.vo.*;
import com.ai.da.service.CollectionElementService; import com.ai.da.service.CollectionElementService;
import com.ai.da.service.PanToneService; import com.ai.da.service.PanToneService;
import com.ai.da.service.SysFileService; import com.ai.da.service.SysFileService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -24,7 +24,7 @@ import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Api(tags = "collection模块") @Tag(name = "collection模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/element") @RequestMapping("/api/element")
@@ -37,7 +37,7 @@ public class ElementController {
@Resource @Resource
private SysFileService sysFileService; private SysFileService sysFileService;
@ApiOperation(value = "初始化系统文件") @Operation(summary = "初始化系统文件")
@PostMapping("/initDefaultSysFile") @PostMapping("/initDefaultSysFile")
public Response<Boolean> initDefaultSysFile(@RequestParam("validate") String validateUse) { public Response<Boolean> initDefaultSysFile(@RequestParam("validate") String validateUse) {
if (validateUse.equals("da_fl_mm_dad88888")) { if (validateUse.equals("da_fl_mm_dad88888")) {
@@ -47,15 +47,15 @@ public class ElementController {
return Response.success(); return Response.success();
} }
@ApiOperation(value = "element文件上传") @Operation(summary = "element文件上传")
@PostMapping("/upload") @PostMapping("/upload")
public Response<CollectionElementVO> upload(@RequestParam("file") MultipartFile file, public Response<CollectionElementVO> upload(@RequestParam("file") MultipartFile file,
@ApiParam("一级类型 Moodboard Printboard Sketchboard MarketingSketch Colorboard") @Parameter(description = "一级类型 Moodboard Printboard Sketchboard MarketingSketch Colorboard")
@RequestParam(value = "level1Type") String level1Type, @RequestParam(value = "level1Type") String level1Type,
@RequestParam(name = "gender", required = false) String gender, @RequestParam(name = "gender", required = false) String gender,
@RequestParam(name = "level2Type", required = false) String level2Type, @RequestParam(name = "level2Type", required = false) String level2Type,
@RequestParam(name = "projectId", required = false) Long projectId, @RequestParam(name = "projectId", required = false) Long projectId,
@ApiParam("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取") @Parameter(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
@RequestParam(value = "timeZone") String timeZone) { @RequestParam(value = "timeZone") String timeZone) {
if (null == file || StringUtils.isEmpty(file.getOriginalFilename())) { if (null == file || StringUtils.isEmpty(file.getOriginalFilename())) {
throw new BusinessException("file.cannot.be.empty"); throw new BusinessException("file.cannot.be.empty");
@@ -64,7 +64,7 @@ public class ElementController {
new CollectionElementUploadDTO(file, projectId, level1Type, level2Type, gender, timeZone, MD5Utils.encryptFile(file)))); new CollectionElementUploadDTO(file, projectId, level1Type, level2Type, gender, timeZone, MD5Utils.encryptFile(file))));
} }
@ApiOperation(value = "element文件删除") @Operation(summary = "element文件删除")
@PostMapping("/delete") @PostMapping("/delete")
public Response<Boolean> delete(@Valid @RequestBody CollectionDeleteFileDTO deleteFileDTO) { public Response<Boolean> delete(@Valid @RequestBody CollectionDeleteFileDTO deleteFileDTO) {
collectionElementService.delete(deleteFileDTO.getId()); collectionElementService.delete(deleteFileDTO.getId());
@@ -73,45 +73,45 @@ public class ElementController {
/** 该功能已删除 */ /** 该功能已删除 */
@Deprecated @Deprecated
@ApiOperation(value = "生成印花") @Operation(summary = "生成印花")
@PostMapping("/generatePrint") @PostMapping("/generatePrint")
public Response<GenerateCollectionItemVO> generatePrint(@Valid @RequestBody CollectionGeneratePrintDTO generatePrintDTO) { public Response<GenerateCollectionItemVO> generatePrint(@Valid @RequestBody CollectionGeneratePrintDTO generatePrintDTO) {
return Response.success(collectionElementService.generatePrint(generatePrintDTO)); return Response.success(collectionElementService.generatePrint(generatePrintDTO));
} }
@ApiOperation(value = "保存印花") @Operation(summary = "保存印花")
@PostMapping("/savePrint") @PostMapping("/savePrint")
public Response<Boolean> savePrint(@Valid @RequestBody CollectionSavePrintDTO savePrintDTO) { public Response<Boolean> savePrint(@Valid @RequestBody CollectionSavePrintDTO savePrintDTO) {
return Response.success(collectionElementService.savePrint(savePrintDTO)); return Response.success(collectionElementService.savePrint(savePrintDTO));
} }
@ApiOperation(value = "通过tcx值获取潘通信息") @Operation(summary = "通过tcx值获取潘通信息")
@GetMapping("/getRgbByTcx") @GetMapping("/getRgbByTcx")
public Response<PantoneVO> getRgbByHsv(@ApiParam("tcx") @RequestParam("tcx") String tcx) { public Response<PantoneVO> getRgbByHsv(@Parameter(description = "tcx") @RequestParam("tcx") String tcx) {
return Response.success(panToneService.getByTCX(tcx)); return Response.success(panToneService.getByTCX(tcx));
} }
@ApiOperation(value = "通过hsv值获取潘通信息") @Operation(summary = "通过hsv值获取潘通信息")
@GetMapping("/getRgbByHsv") @GetMapping("/getRgbByHsv")
public Response<PantoneVO> getRgbByHsv(@RequestParam("h") Integer h, public Response<PantoneVO> getRgbByHsv(@RequestParam("h") Integer h,
@RequestParam("s") Integer s, @RequestParam("v") Integer v) { @RequestParam("s") Integer s, @RequestParam("v") Integer v) {
return Response.success(panToneService.getByHSV(h, s, v)); return Response.success(panToneService.getByHSV(h, s, v));
} }
@ApiOperation(value = "通过hsv值数组批量获取潘通信息") @Operation(summary = "通过hsv值数组批量获取潘通信息")
@PostMapping("/getRgbByHsvBatch") @PostMapping("/getRgbByHsvBatch")
public Response<List<PantoneVO>> getRgbByHsvBatch(@RequestBody @Valid List<GetRgbByHsvBatchDTO> rgbByHsvBatch) { public Response<List<PantoneVO>> getRgbByHsvBatch(@RequestBody @Valid List<GetRgbByHsvBatchDTO> rgbByHsvBatch) {
return Response.success(panToneService.getRgbByHsvBatch(rgbByHsvBatch)); return Response.success(panToneService.getRgbByHsvBatch(rgbByHsvBatch));
} }
@ApiOperation(value = "刷新历史数据") @Operation(summary = "刷新历史数据")
@PostMapping("/refreshHistoryData") @PostMapping("/refreshHistoryData")
public Response<Boolean> refreshHistoryData() { public Response<Boolean> refreshHistoryData() {
collectionElementService.refreshHistoryData(); collectionElementService.refreshHistoryData();
return Response.success(); return Response.success();
} }
@ApiOperation(value = "图片分割") @Operation(summary = "图片分割")
@PostMapping("/imageSegmentation") @PostMapping("/imageSegmentation")
public Response<List<CollectionElementVO>> selectedImageSeg( public Response<List<CollectionElementVO>> selectedImageSeg(
@RequestPart(value = "file", required = false) MultipartFile[] file, @RequestPart(value = "file", required = false) MultipartFile[] file,
@@ -133,7 +133,7 @@ public class ElementController {
return Response.success(collectionElementService.selectedImageSeg(nonEmptyFiles, id, type, sourceType)); return Response.success(collectionElementService.selectedImageSeg(nonEmptyFiles, id, type, sourceType));
} }
@ApiOperation(value = "更新element level2type") @Operation(summary = "更新element level2type")
@GetMapping("/updateElementLevel2Type") @GetMapping("/updateElementLevel2Type")
public Response<String> updateLibraryLevel2Type(@RequestParam(value = "elementId") Long elementId, @RequestParam(value = "level2Type") String level2Type) { public Response<String> updateLibraryLevel2Type(@RequestParam(value = "elementId") Long elementId, @RequestParam(value = "level2Type") String level2Type) {
collectionElementService.updateElementLevel2Type(elementId, level2Type); collectionElementService.updateElementLevel2Type(elementId, level2Type);

View File

@@ -2,7 +2,7 @@ package com.ai.da.controller;
import com.ai.da.service.EmailService; import com.ai.da.service.EmailService;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@@ -12,7 +12,7 @@ import org.thymeleaf.context.Context;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import java.util.Collections; import java.util.Collections;
@Api(tags = "邮件模块") @Tag(name = "邮件模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/email") @RequestMapping("/api/email")

View File

@@ -6,9 +6,9 @@ import com.ai.da.mapper.primary.entity.CollectionSort;
import com.ai.da.model.dto.*; import com.ai.da.model.dto.*;
import com.ai.da.model.vo.*; import com.ai.da.model.vo.*;
import com.ai.da.service.GenerateService; import com.ai.da.service.GenerateService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -22,7 +22,7 @@ import java.util.Map;
/** /**
* @author XP * @author XP
*/ */
@Api(tags = "Generate模块") @Tag(name = "Generate模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/generate") @RequestMapping("/api/generate")
@@ -44,20 +44,20 @@ public class GenerateController {
generateService.generateThroughImageText(generateThroughImageTextDTO); generateService.generateThroughImageText(generateThroughImageTextDTO);
}*/ }*/
@ApiOperation("喜欢生成的图片") @Operation(summary = "喜欢生成的图片")
@PostMapping("/like") @PostMapping("/like")
public Response<GenerateLikeVO> like(@Valid @RequestBody GenerateLikeDTO generateLikeDTO) { public Response<GenerateLikeVO> like(@Valid @RequestBody GenerateLikeDTO generateLikeDTO) {
return Response.success(generateService.generateLike(generateLikeDTO)); return Response.success(generateService.generateLike(generateLikeDTO));
} }
@ApiOperation(value = "取消喜欢") @Operation(summary = "取消喜欢")
@GetMapping("/dislike") @GetMapping("/dislike")
public Response<Boolean> dislike(@ApiParam("generateDetailId") @RequestParam Long generateDetailId, public Response<Boolean> dislike(@Parameter(description = "generateDetailId") @RequestParam Long generateDetailId,
@ApiParam("timeZone") @RequestParam String timeZone) { @Parameter(description = "timeZone") @RequestParam String timeZone) {
return Response.success(generateService.generateDislike(generateDetailId, timeZone)); return Response.success(generateService.generateDislike(generateDetailId, timeZone));
} }
@ApiOperation(value = "发起生成请求,异步获取结果") @Operation(summary = "发起生成请求,异步获取结果")
@PostMapping("/prepare") @PostMapping("/prepare")
public ResponseEntity<Response<PrepareForGenerateVO>> prepareForGenerate(@Valid @RequestBody GenerateThroughImageTextDTO generateThroughImageTextDTO) { public ResponseEntity<Response<PrepareForGenerateVO>> prepareForGenerate(@Valid @RequestBody GenerateThroughImageTextDTO generateThroughImageTextDTO) {
PrepareForGenerateVO prepareForGenerateVO = generateService.prepareForGenerate(generateThroughImageTextDTO); PrepareForGenerateVO prepareForGenerateVO = generateService.prepareForGenerate(generateThroughImageTextDTO);
@@ -69,7 +69,7 @@ public class GenerateController {
} }
} }
@ApiOperation(value = "取消继续生成") @Operation(summary = "取消继续生成")
@GetMapping("/stopWaiting") @GetMapping("/stopWaiting")
public Response<String> stopWaiting(@RequestParam("userId") Long userId, public Response<String> stopWaiting(@RequestParam("userId") Long userId,
@RequestParam("uniqueId") List<String> uniqueId, @RequestParam("uniqueId") List<String> uniqueId,
@@ -86,14 +86,14 @@ public class GenerateController {
return Response.success(generateResult); return Response.success(generateResult);
}*/ }*/
@ApiOperation(value = "获取生成结果") @Operation(summary = "获取生成结果")
@PostMapping("/result") @PostMapping("/result")
public Response<List<GenerateResultVO>> getGenerateResults(@Valid @RequestBody List<String> taskIdList) { public Response<List<GenerateResultVO>> getGenerateResults(@Valid @RequestBody List<String> taskIdList) {
List<GenerateResultVO> generateResult = generateService.getGenerateResultList(taskIdList); List<GenerateResultVO> generateResult = generateService.getGenerateResultList(taskIdList);
return Response.success(generateResult); return Response.success(generateResult);
} }
@ApiOperation(value = "imageToSketch") @Operation(summary = "imageToSketch")
@PostMapping("/imageToSketch") @PostMapping("/imageToSketch")
public Response<String> imageToSketch(@Valid @RequestBody ImageToSketchDTO imageToSketchDTO) { public Response<String> imageToSketch(@Valid @RequestBody ImageToSketchDTO imageToSketchDTO) {
return Response.success(generateService.imageToSketchAsync(imageToSketchDTO, null, null)); return Response.success(generateService.imageToSketchAsync(imageToSketchDTO, null, null));
@@ -101,59 +101,59 @@ public class GenerateController {
} }
// modifySketch // modifySketch
@ApiOperation(value = "modifySketch") @Operation(summary = "modifySketch")
@PostMapping("/modifySketch") @PostMapping("/modifySketch")
public Response<GenerateResultVO> modifySketch(@Valid @RequestBody GenerateModifyDTO generateModifyDTO) { public Response<GenerateResultVO> modifySketch(@Valid @RequestBody GenerateModifyDTO generateModifyDTO) {
return Response.success(generateService.modifySketch(generateModifyDTO)); return Response.success(generateService.modifySketch(generateModifyDTO));
} }
@ApiOperation(value = "请求进行姿势变换") @Operation(summary = "请求进行姿势变换")
@PostMapping("/poseTransform") @PostMapping("/poseTransform")
public Response<ToProductImageResultVO> poseTransform(@Valid @RequestBody PoseTransformDTO poseTransformDTO) { public Response<ToProductImageResultVO> poseTransform(@Valid @RequestBody PoseTransformDTO poseTransformDTO) {
return Response.success(generateService.poseTransform(poseTransformDTO)); return Response.success(generateService.poseTransform(poseTransformDTO));
} }
@ApiOperation(value = "获取姿势变换生成结果") @Operation(summary = "获取姿势变换生成结果")
@PostMapping("/poseTransformResult") @PostMapping("/poseTransformResult")
public Response<List<PoseTransformationVO>> getPoseTransformationResults(@Valid @RequestBody List<String> taskIdList) { public Response<List<PoseTransformationVO>> getPoseTransformationResults(@Valid @RequestBody List<String> taskIdList) {
List<PoseTransformationVO> generateResult = generateService.getPoseTransformationResult(taskIdList, null, null); List<PoseTransformationVO> generateResult = generateService.getPoseTransformationResult(taskIdList, null, null);
return Response.success(generateResult); return Response.success(generateResult);
} }
@ApiOperation("喜欢或取消喜欢姿势变换生成的图片") @Operation(summary = "喜欢或取消喜欢姿势变换生成的图片")
@PostMapping("/likeOrDislike") @PostMapping("/likeOrDislike")
public Response<CollectionSort> likeOrDislike(@ApiParam("id") @RequestParam Long transformedId, @ApiParam("like || dislike") @RequestParam String likeOrDislike, @RequestParam("projectId") Long projectId, @RequestParam(value = "collectionSortParentId", required = false) Long collectionSortParentId) { public Response<CollectionSort> likeOrDislike(@Parameter(description = "id") @RequestParam Long transformedId, @Parameter(description = "like || dislike") @RequestParam String likeOrDislike, @RequestParam("projectId") Long projectId, @RequestParam(value = "collectionSortParentId", required = false) Long collectionSortParentId) {
return Response.success(generateService.disOrLikePose(transformedId, likeOrDislike, projectId, collectionSortParentId)); return Response.success(generateService.disOrLikePose(transformedId, likeOrDislike, projectId, collectionSortParentId));
} }
@ApiOperation(value = "修改模特比例") @Operation(summary = "修改模特比例")
@PostMapping("/modifyProportion") @PostMapping("/modifyProportion")
public Response<String> modifyModelProportion(@Valid @RequestBody ModifyModelProportionDTO proportionDTO){ public Response<String> modifyModelProportion(@Valid @RequestBody ModifyModelProportionDTO proportionDTO){
String path = generateService.modifyModelProportion(proportionDTO); String path = generateService.modifyModelProportion(proportionDTO);
return Response.success(path); return Response.success(path);
} }
@ApiOperation(value = "拼贴图生成线稿") @Operation(summary = "拼贴图生成线稿")
@PostMapping("/genSketchRecon") @PostMapping("/genSketchRecon")
public Response<GenerateResultVO> sketchReconstructionGenerate(@Valid @RequestBody SketchReconstructionDTO sketchReconstructionDTO){ public Response<GenerateResultVO> sketchReconstructionGenerate(@Valid @RequestBody SketchReconstructionDTO sketchReconstructionDTO){
GenerateResultVO generateResultVO = generateService.sketchReconstructionGenerate(sketchReconstructionDTO); GenerateResultVO generateResultVO = generateService.sketchReconstructionGenerate(sketchReconstructionDTO);
return Response.success(generateResultVO); return Response.success(generateResultVO);
} }
@ApiOperation(value = "获取拼贴图最后一次生成结果") @Operation(summary = "获取拼贴图最后一次生成结果")
@GetMapping("/getReconLastResult") @GetMapping("/getReconLastResult")
public Response<SketchReconstructionVO> getSketchReconstruction(@RequestParam("projectId") Long projectId){ public Response<SketchReconstructionVO> getSketchReconstruction(@RequestParam("projectId") Long projectId){
SketchReconstructionVO sketchReconstruction = generateService.getSketchReconstruction(projectId); SketchReconstructionVO sketchReconstruction = generateService.getSketchReconstruction(projectId);
return Response.success(sketchReconstruction); return Response.success(sketchReconstruction);
} }
@ApiOperation(value = "获取pose transfer的所有pose") @Operation(summary = "获取pose transfer的所有pose")
@GetMapping("/getAllPose") @GetMapping("/getAllPose")
public Response<List<Map<String, String>>> getAllPose(){ public Response<List<Map<String, String>>> getAllPose(){
return Response.success(generateService.getAllPose()); return Response.success(generateService.getAllPose());
} }
@ApiOperation(value = "删除pose transfer的结果") @Operation(summary = "删除pose transfer的结果")
@GetMapping("/deleteResult") @GetMapping("/deleteResult")
public Response<String> deleteToProductRelightResult(@RequestParam("projectId") @NotNull Long projectId, public Response<String> deleteToProductRelightResult(@RequestParam("projectId") @NotNull Long projectId,
@RequestParam("id") @NotNull Long id){ @RequestParam("id") @NotNull Long id){
@@ -171,31 +171,31 @@ public class GenerateController {
return Response.success(generateService.createAsyncTask(87L, prompt, "")); return Response.success(generateService.createAsyncTask(87L, prompt, ""));
} }
@ApiOperation(value = "万象 t2i 获取异步任务结果") @Operation(summary = "万象 t2i 获取异步任务结果")
@GetMapping("/waitAsyncTask") @GetMapping("/waitAsyncTask")
public Response<GenerateResultVO> waitAsyncTask(@RequestParam("taskId") String taskId){ public Response<GenerateResultVO> waitAsyncTask(@RequestParam("taskId") String taskId){
return Response.success(generateService.getAsyncTaskResult(taskId)); return Response.success(generateService.getAsyncTaskResult(taskId));
} }
@ApiOperation(value = "万象 图生动图") @Operation(summary = "万象 图生动图")
@GetMapping("/animateAnyone") @GetMapping("/animateAnyone")
public Response<String> animateAnyone(@Valid @RequestBody PoseTransformDTO poseTransformDTO){ public Response<String> animateAnyone(@Valid @RequestBody PoseTransformDTO poseTransformDTO){
return Response.success(generateService.animateAnyone(poseTransformDTO, null)); return Response.success(generateService.animateAnyone(poseTransformDTO, null));
} }
@ApiOperation(value = "万象 获取动图模板id") @Operation(summary = "万象 获取动图模板id")
@GetMapping("/getVideoTemplateId") @GetMapping("/getVideoTemplateId")
public Response<String> getVideoTemplateId(@RequestParam("videoPath") String videoPath){ public Response<String> getVideoTemplateId(@RequestParam("videoPath") String videoPath){
return Response.success(generateService.getVideoTemplateId(videoPath)); return Response.success(generateService.getVideoTemplateId(videoPath));
} }
@ApiOperation(value = "万象 获取动图结果") @Operation(summary = "万象 获取动图结果")
@GetMapping("/getAnimateResult") @GetMapping("/getAnimateResult")
public Response<PoseTransformationVO> getAnimateResult(@RequestParam("taskId") String taskId){ public Response<PoseTransformationVO> getAnimateResult(@RequestParam("taskId") String taskId){
return Response.success(generateService.getAnimateResult(taskId)); return Response.success(generateService.getAnimateResult(taskId));
} }
@ApiOperation(value = "freepik toProductImage") @Operation(summary = "freepik toProductImage")
@GetMapping("/reimagineFreePik") @GetMapping("/reimagineFreePik")
public Response<String> reimagineFreePik(@RequestParam("path") String path, public Response<String> reimagineFreePik(@RequestParam("path") String path,
@RequestParam("prompt") String prompt, @RequestParam("prompt") String prompt,
@@ -203,13 +203,13 @@ public class GenerateController {
return Response.success(generateService.reimagineFreePik(path, prompt, style)); return Response.success(generateService.reimagineFreePik(path, prompt, style));
} }
@ApiOperation(value = "获取图片描述") @Operation(summary = "获取图片描述")
@GetMapping("/getImageDescription") @GetMapping("/getImageDescription")
public Response<String> getImageDescription(@RequestParam("path") String path) { public Response<String> getImageDescription(@RequestParam("path") String path) {
return Response.success(generateService.getImageDescription(path)); return Response.success(generateService.getImageDescription(path));
}*/ }*/
// @ApiOperation(value = "试用flux") // @Operation(summary = "试用flux")
// @GetMapping("/flux") // @GetMapping("/flux")
public Response<String> flux(@RequestParam(value = "path", required = false) String path, public Response<String> flux(@RequestParam(value = "path", required = false) String path,
@RequestParam("type") int type, @RequestParam("type") int type,
@@ -229,7 +229,7 @@ public class GenerateController {
return Response.success(generateService.flux(typeEnum, prompt, path, false)); return Response.success(generateService.flux(typeEnum, prompt, path, false));
} }
// @ApiOperation(value = "获取flux结果") // @Operation(summary = "获取flux结果")
// @GetMapping("/fluxResult") // @GetMapping("/fluxResult")
public Response<String> fluxResult(@RequestParam("taskId") String taskId){ public Response<String> fluxResult(@RequestParam("taskId") String taskId){
return Response.success(generateService.getFluxResult(taskId, "87/" + taskId + ".png")); return Response.success(generateService.getFluxResult(taskId, "87/" + taskId + ".png"));

View File

@@ -0,0 +1,203 @@
package com.ai.da.controller;
import com.ai.da.common.response.Response;
import com.ai.da.model.dto.*;
import com.ai.da.model.dto.ContestantDTO;
import com.ai.da.model.vo.CheckOTPVO;
import com.ai.da.model.vo.ContestantCountVO;
import com.ai.da.service.GlobalAwardService;
import com.ai.da.service.upload.UploadService;
import com.ai.da.service.upload.UploadTask;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import jakarta.annotation.Resource;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Map;
@RestController
@RequestMapping("/api/global-award")
@Api(tags = "全球奖项API", description = "全球奖项大赛管理和文件上传")
public class GlobalAwardController {
@Resource
private GlobalAwardService globalAwardService;
@Resource
private UploadService uploadService;
// @PostMapping("/uploads/pdf")
// public Response<String> uploadPdf(@RequestParam("file") MultipartFile file,
// @RequestParam(value = "email", required = false) String email) throws Exception {
// return Response.success(globalAwardService.uploadPdf(file, email));
// }
//
// @PostMapping("/uploads/video")
// public Response<String> uploadVideo(@RequestParam("file") MultipartFile file,
// @RequestParam(value = "email", required = false) String email) throws Exception {
// return Response.success(globalAwardService.uploadVideo(file, email));
// }
// ===== 新增分片上传接口 =====
// ===== PDF分片上传接口 =====
/** 初始化PDF上传任务 */
@PostMapping("/uploads/pdf/init")
@ApiOperation(value = "初始化PDF上传", notes = "创建新的PDF上传任务并返回上传参数")
public Response<UploadInitResponse> initPdfUpload(@ApiParam(value = "PDF上传初始化请求", required = true) @RequestBody UploadInitRequest request) {
UploadTask uploadTask = uploadService.initPdfUpload(request);
return Response.success(UploadInitResponse.builder()
.uploadId(uploadTask.getUploadId())
.chunkSize(uploadTask.getChunkSize())
.totalChunks(uploadTask.getTotalChunks())
.expiresAt(uploadTask.getExpiresAt())
.build());
}
/** 上传PDF分片 */
@PostMapping("/uploads/pdf/chunk")
@ApiOperation(value = "上传PDF分片", notes = "上传PDF文件的单个分片")
public Response<UploadChunkResponse> uploadPdfChunk(
@ApiParam(value = "PDF文件分片", required = true) @RequestParam("chunk") MultipartFile chunk,
@ApiParam(value = "上传任务ID", required = true) @RequestParam("uploadId") String uploadId,
@ApiParam(value = "分片索引(从0开始)", required = true) @RequestParam("chunkIndex") int chunkIndex,
@ApiParam(value = "分片总数", required = true) @RequestParam("totalChunks") int totalChunks) {
UploadChunkResponse uploadChunkResponse = uploadService.uploadPdfChunk(uploadId, chunk, chunkIndex, totalChunks);
return Response.success(uploadChunkResponse);
}
/** 完成PDF上传 */
@PostMapping("/uploads/pdf/complete")
@ApiOperation(value = "完成PDF上传", notes = "完成PDF上传并合并所有分片")
public Response<UploadCompleteResponse> completePdfUpload(@ApiParam(value = "PDF上传完成请求", required = true) @RequestBody UploadCompleteRequest request) {
UploadCompleteResponse uploadCompleteResponse = uploadService.completePdfUpload(
request.getUploadId(),
request.getFileName(),
request.getTotalSize(),
request.getEmail(),
request.getSecureToken());
return Response.success(uploadCompleteResponse);
}
/** 查询PDF上传状态 */
@GetMapping("/uploads/pdf/status/{uploadId}")
@ApiOperation(value = "查询PDF上传状态", notes = "获取PDF上传任务的当前状态")
public Response<UploadStatusResponse> getPdfUploadStatus(@ApiParam(value = "上传任务ID", required = true) @PathVariable String uploadId) {
UploadStatusResponse pdfUploadStatus = uploadService.getPdfUploadStatus(uploadId);
return Response.success(pdfUploadStatus);
}
// ===== 视频分片上传接口 =====
/** 初始化视频上传任务 */
@PostMapping("/uploads/video/init")
@ApiOperation(value = "初始化视频上传", notes = "创建新的视频上传任务并返回上传参数")
public Response<UploadInitResponse> initVideoUpload(@ApiParam(value = "视频上传初始化请求", required = true) @RequestBody UploadInitRequest request) {
UploadTask uploadTask = uploadService.initVideoUpload(request);
return Response.success(UploadInitResponse.builder()
.uploadId(uploadTask.getUploadId())
.chunkSize(uploadTask.getChunkSize())
.totalChunks(uploadTask.getTotalChunks())
.expiresAt(uploadTask.getExpiresAt())
.build());
}
/** 上传视频分片 */
@PostMapping("/uploads/video/chunk")
@ApiOperation(value = "上传视频分片", notes = "上传视频文件的单个分片")
public Response<UploadChunkResponse> uploadVideoChunk(
@ApiParam(value = "视频文件分片", required = true) @RequestParam("chunk") MultipartFile chunk,
@ApiParam(value = "上传任务ID", required = true) @RequestParam("uploadId") String uploadId,
@ApiParam(value = "分片索引(从0开始)", required = true) @RequestParam("chunkIndex") int chunkIndex,
@ApiParam(value = "分片总数", required = true) @RequestParam("totalChunks") int totalChunks) {
UploadChunkResponse uploadChunkResponse = uploadService.uploadVideoChunk(uploadId, chunk, chunkIndex, totalChunks);
return Response.success(uploadChunkResponse);
}
/** 完成视频上传 */
@PostMapping("/uploads/video/complete")
@ApiOperation(value = "完成视频上传", notes = "完成视频上传并合并所有分片")
public Response<UploadCompleteResponse> completeVideoUpload(@ApiParam(value = "视频上传完成请求", required = true) @RequestBody UploadCompleteRequest request) {
UploadCompleteResponse uploadCompleteResponse = uploadService.completeVideoUpload(
request.getUploadId(),
request.getFileName(),
request.getTotalSize(),
request.getEmail(),
request.getSecureToken());
return Response.success(uploadCompleteResponse);
}
/** 查询视频上传状态 */
@GetMapping("/uploads/video/status/{uploadId}")
@ApiOperation(value = "查询视频上传状态", notes = "获取视频上传任务的当前状态")
public Response<UploadStatusResponse> getVideoUploadStatus(@ApiParam(value = "上传任务ID", required = true) @PathVariable String uploadId) {
UploadStatusResponse videoUploadStatus = uploadService.getVideoUploadStatus(uploadId);
return Response.success(videoUploadStatus);
}
@PostMapping("/contestants/save")
@ApiOperation(value = "保存参赛者信息", notes = "保存或更新参赛者信息及已上传的文件")
public Response<Map<String,Object>> submit(@ApiParam(value = "参赛者信息", required = true) @RequestBody ContestantDTO request) {
return Response.success(globalAwardService.saveContestant(request));
}
@GetMapping("/contestants/{id}")
@ApiOperation(value = "根据id查询参赛者", notes = "根据id获取参赛者信息")
public Response<ContestantDTO> getContestantByID(@ApiParam(value = "参赛者id", required = true) @PathVariable("id") String id) {
ContestantDTO dto = globalAwardService.getContestantByID(id);
return Response.success(dto);
}
@GetMapping("/checkEmail")
public Response<String> checkEmail(@RequestParam("email") String email) {
globalAwardService.checkEmail(email);
return Response.success();
}
@GetMapping("/checkCode")
public Response<CheckOTPVO> checkCode(@RequestParam("email") String email, @RequestParam("code") String code) {
return Response.success(globalAwardService.checkCode(email, code));
}
@GetMapping("/contestants/export")
@ApiOperation(value = "导出参赛者列表为Excel", notes = "导出所有参赛者信息为xlsx并触发下载")
public void exportContestants(HttpServletResponse response) throws Exception {
byte[] data = globalAwardService.exportContestants();
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=\"contestants.xlsx\"");
response.setContentLength(data.length);
response.getOutputStream().write(data);
response.getOutputStream().flush();
}
@PostMapping("/contestants/export/files")
@ApiOperation(value = "导出参赛者文件为ZIP", notes = "根据参赛者编号范围导出PDF、视频和信息文件为ZIP直接响应给浏览器")
public void exportContestantFiles(@ApiParam(value = "参赛者文件导出请求", required = true) @RequestBody ContestantExportRequest request, HttpServletResponse response) throws Exception {
byte[] zipData = globalAwardService.exportContestantFilesAsZip(request.getMinContestantNumber(), request.getMaxContestantNumber());
if (zipData.length == 0) {
response.setStatus(HttpServletResponse.SC_NOT_FOUND);
response.getWriter().write("No contestants found in the specified range.");
return;
}
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment; filename=\"contestants.zip\"");
response.setContentLength(zipData.length);
response.getOutputStream().write(zipData);
response.getOutputStream().flush();
}
@GetMapping("/contestants/count")
@ApiOperation(value = "查询参赛者总数", notes = "查询数据库中参赛者的总数量和最大参赛者编号")
public Response<ContestantCountVO> getContestantCount() {
return Response.success(globalAwardService.getContestantCount());
}
}

View File

@@ -5,8 +5,8 @@ import com.ai.da.common.response.Response;
import com.ai.da.mapper.primary.entity.ChatMessage; import com.ai.da.mapper.primary.entity.ChatMessage;
import com.ai.da.model.dto.*; import com.ai.da.model.dto.*;
import com.ai.da.service.LLMService; import com.ai.da.service.LLMService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -17,7 +17,7 @@ import jakarta.annotation.Resource;
import java.util.*; import java.util.*;
@Api(tags = "llm模块") @Tag(name = "llm模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/llm") @RequestMapping("/api/llm")
@@ -26,7 +26,7 @@ public class LLMController {
@Resource @Resource
private LLMService llmService; private LLMService llmService;
@ApiOperation(value = "对话") @Operation(summary = "对话")
@CrossOrigin @CrossOrigin
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE) @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter streamPrompt(@RequestParam String prompt, public SseEmitter streamPrompt(@RequestParam String prompt,
@@ -39,7 +39,7 @@ public class LLMController {
return llmService.stream(prompt, projectId, fileUrl, imageUrlList, token, enableThinking, process); return llmService.stream(prompt, projectId, fileUrl, imageUrlList, token, enableThinking, process);
} }
@ApiOperation(value = "对话") @Operation(summary = "对话")
@CrossOrigin @CrossOrigin
@GetMapping(value = "/streamNew", produces = MediaType.TEXT_EVENT_STREAM_VALUE) @GetMapping(value = "/streamNew", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter streamNew(@RequestParam String prompt, public SseEmitter streamNew(@RequestParam String prompt,
@@ -52,7 +52,7 @@ public class LLMController {
return llmService.streamNew(prompt, projectId, fileUrl, imageUrlList, token, enableThinking, process); return llmService.streamNew(prompt, projectId, fileUrl, imageUrlList, token, enableThinking, process);
} }
@ApiOperation(value = "对话创建项目") @Operation(summary = "对话创建项目")
@GetMapping(value = "/chatCreateProject") @GetMapping(value = "/chatCreateProject")
public Response<Long> chatCreateProject(@RequestParam String prompt, @RequestParam String process, public Response<Long> chatCreateProject(@RequestParam String prompt, @RequestParam String process,
@RequestParam(required = false) String fileUrl, @RequestParam(required = false) String fileUrl,
@@ -60,13 +60,13 @@ public class LLMController {
return Response.success(llmService.chatCreateProject(prompt, process, fileUrl, imageUrlList)); return Response.success(llmService.chatCreateProject(prompt, process, fileUrl, imageUrlList));
} }
@ApiOperation(value = "上传文件") @Operation(summary = "上传文件")
@PostMapping(value = "/uploadFile") @PostMapping(value = "/uploadFile")
public Response<List<String>> uploadFile(@RequestParam("file") MultipartFile file) { public Response<List<String>> uploadFile(@RequestParam("file") MultipartFile file) {
return Response.success(llmService.uploadFile(file)); return Response.success(llmService.uploadFile(file));
} }
@ApiOperation(value = "获取历史聊天记录") @Operation(summary = "获取历史聊天记录")
@PostMapping(value = "/getChatHistory") @PostMapping(value = "/getChatHistory")
public Response<PageBaseResponse<ChatMessage>> getChatHistory(@RequestBody ChatHistoryDTO chatHistoryDTO) { public Response<PageBaseResponse<ChatMessage>> getChatHistory(@RequestBody ChatHistoryDTO chatHistoryDTO) {
return Response.success(llmService.getChatHistory(chatHistoryDTO)); return Response.success(llmService.getChatHistory(chatHistoryDTO));

View File

@@ -14,9 +14,9 @@ import com.ai.da.model.vo.*;
import com.ai.da.service.LibraryModelPointService; import com.ai.da.service.LibraryModelPointService;
import com.ai.da.service.LibraryService; import com.ai.da.service.LibraryService;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@@ -31,7 +31,7 @@ import java.text.ParseException;
import java.util.*; import java.util.*;
@Api(tags = "library模块") @Tag(name = "library模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/library") @RequestMapping("/api/library")
@@ -49,26 +49,26 @@ public class LibraryController {
@Value("${minio.bucketName.sysImage}") @Value("${minio.bucketName.sysImage}")
private String sysImage; private String sysImage;
@ApiOperation(value = "Library分页列表") @Operation(summary = "Library分页列表")
@PostMapping("/queryLibraryPage") @PostMapping("/queryLibraryPage")
public Response<PageBaseResponse<QueryLibraryPageVO>> queryLibraryPage(@Valid @RequestBody QueryLibraryPageDTO query) { public Response<PageBaseResponse<QueryLibraryPageVO>> queryLibraryPage(@Valid @RequestBody QueryLibraryPageDTO query) {
return Response.success(libraryService.queryLibraryPage(CopyUtil.copyObject(query, QueryLibraryPageServiceDTO.class))); return Response.success(libraryService.queryLibraryPage(CopyUtil.copyObject(query, QueryLibraryPageServiceDTO.class)));
} }
@ApiOperation(value = "Library分页列表(查询top和bottom)") @Operation(summary = "Library分页列表(查询top和bottom)")
@PostMapping("/queryLibraryTopAndBottomPage") @PostMapping("/queryLibraryTopAndBottomPage")
public Response<PageBaseResponse<QueryLibraryPageVO>> queryLibraryTopAndBottomPage(@Valid @RequestBody QueryLibraryTopPageDTO query) { public Response<PageBaseResponse<QueryLibraryPageVO>> queryLibraryTopAndBottomPage(@Valid @RequestBody QueryLibraryTopPageDTO query) {
return Response.success(libraryService.queryLibraryPage(CopyUtil.copyObject(query, QueryLibraryPageServiceDTO.class))); return Response.success(libraryService.queryLibraryPage(CopyUtil.copyObject(query, QueryLibraryPageServiceDTO.class)));
} }
@ApiOperation(value = "Library文件上传") @Operation(summary = "Library文件上传")
@PostMapping("/upload") @PostMapping("/upload")
public Response<LibraryUpdateVo> upload(@RequestParam("file") MultipartFile file, public Response<LibraryUpdateVo> upload(@RequestParam("file") MultipartFile file,
@ApiParam("一级类型 Moodboard Printboard Sketchboard MarketingSketch Models") @Parameter(description = "一级类型 Moodboard Printboard Sketchboard MarketingSketch Models")
@RequestParam(value = "level1Type") String level1Type, @RequestParam(value = "level1Type") String level1Type,
@ApiParam("二级类型 争对 Sketchboard; 有 Outwear Dress Blouse Skirt Trousers") @Parameter(description = "二级类型 争对 Sketchboard; 有 Outwear Dress Blouse Skirt Trousers")
@RequestParam(value = "level2Type", required = false) String level2Type, @RequestParam(value = "level2Type", required = false) String level2Type,
@ApiParam("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取") @Parameter(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
@RequestParam(value = "timeZone") String timeZone, @RequestParam(value = "timeZone") String timeZone,
@RequestParam(value = "modelType") String modelType, @RequestParam(value = "modelType") String modelType,
@RequestParam(value = "sex") String sex, @RequestParam(value = "sex") String sex,
@@ -102,20 +102,20 @@ public class LibraryController {
timeZone, md5, high, width, modelType, sex, ageGroup))); timeZone, md5, high, width, modelType, sex, ageGroup)));
} }
@ApiOperation(value = "保存或者编辑template打点") @Operation(summary = "保存或者编辑template打点")
@PostMapping("/saveOrEditTemplatePoint") @PostMapping("/saveOrEditTemplatePoint")
public Response<LibraryModelPointVO> saveOrEditTemplatePoint(@Valid @RequestBody LibraryModelPointDTO libraryModelPoint) { public Response<LibraryModelPointVO> saveOrEditTemplatePoint(@Valid @RequestBody LibraryModelPointDTO libraryModelPoint) {
return Response.success(libraryModelPointService.saveOrEditTemplatePoint(libraryModelPoint)); return Response.success(libraryModelPointService.saveOrEditTemplatePoint(libraryModelPoint));
} }
@ApiOperation(value = "批量Library修改用户文件名") @Operation(summary = "批量Library修改用户文件名")
@PostMapping("/batchUpdateLibraryName") @PostMapping("/batchUpdateLibraryName")
public Response<Boolean> batchUpdateLibraryName(@Valid @RequestBody LibraryUpdateDTO libraryUpdateDTO) { public Response<Boolean> batchUpdateLibraryName(@Valid @RequestBody LibraryUpdateDTO libraryUpdateDTO) {
libraryService.updateLibraryName(libraryUpdateDTO); libraryService.updateLibraryName(libraryUpdateDTO);
return Response.success(Boolean.TRUE); return Response.success(Boolean.TRUE);
} }
@ApiOperation(value = "批量删除library") @Operation(summary = "批量删除library")
@PostMapping("/batchDeleteLibrary") @PostMapping("/batchDeleteLibrary")
public Response<Boolean> batchDeleteLibrary(@Valid @RequestBody LibraryDeleteDTO deleteDTO) { public Response<Boolean> batchDeleteLibrary(@Valid @RequestBody LibraryDeleteDTO deleteDTO) {
libraryService.batchDeleteLibrary(deleteDTO); libraryService.batchDeleteLibrary(deleteDTO);
@@ -123,10 +123,10 @@ public class LibraryController {
} }
@ApiOperation(value = "Models打点预览") @Operation(summary = "Models打点预览")
@PostMapping("/modelsDot") @PostMapping("/modelsDot")
public Response<String> modelsDot(@ApiParam("file") @RequestPart(value = "file", required = false) MultipartFile file, public Response<String> modelsDot(@Parameter(description = "file") @RequestPart(value = "file", required = false) MultipartFile file,
@ApiParam("models对象") @RequestPart("models") ModelsDotDTO modelsDotDTO) { @Parameter(description = "models对象") @RequestPart("models") ModelsDotDTO modelsDotDTO) {
if (Objects.nonNull(file)) { if (Objects.nonNull(file)) {
if (StringUtils.isEmpty(file.getOriginalFilename())) { if (StringUtils.isEmpty(file.getOriginalFilename())) {
throw new BusinessException("file.cannot.be.empty"); throw new BusinessException("file.cannot.be.empty");
@@ -167,7 +167,7 @@ public class LibraryController {
return response; return response;
} }
@ApiOperation(value = "更新sketchboard level2type") @Operation(summary = "更新sketchboard level2type")
@PostMapping("/updateLibraryLevel2Type") @PostMapping("/updateLibraryLevel2Type")
public Response<Boolean> updateLibraryLevel2Type(@Validated @RequestBody LibraryLevel2TypeUpdateDTO libraryLevel2TypeUpdateDTO) { public Response<Boolean> updateLibraryLevel2Type(@Validated @RequestBody LibraryLevel2TypeUpdateDTO libraryLevel2TypeUpdateDTO) {
return Response.success(libraryService.updateLibraryLevel2Type(libraryLevel2TypeUpdateDTO)); return Response.success(libraryService.updateLibraryLevel2Type(libraryLevel2TypeUpdateDTO));
@@ -196,21 +196,21 @@ public class LibraryController {
} }
@PostMapping("moveLibraryData") @PostMapping("moveLibraryData")
@ApiOperation(value = "用户library数据迁移") @Operation(summary = "用户library数据迁移")
public Response<Boolean> moveLibraryDate() throws ParseException { public Response<Boolean> moveLibraryDate() throws ParseException {
libraryService.moveLibraryDate(); libraryService.moveLibraryDate();
return Response.success(true); return Response.success(true);
} }
@ApiOperation(value = "将系统模特添加到个人library") @Operation(summary = "将系统模特添加到个人library")
@GetMapping("addSysModelToLib") @GetMapping("addSysModelToLib")
public Response<Map<String, String>> addSysModelToLib(@ApiParam("系统模特id") @RequestParam("sysModelId")long sysModelId){ public Response<Map<String, String>> addSysModelToLib(@Parameter(description = "系统模特id") @RequestParam("sysModelId")long sysModelId){
return Response.success(libraryService.addSysModelToLib(sysModelId)); return Response.success(libraryService.addSysModelToLib(sysModelId));
} }
@ApiOperation(value = "将个人library元素添加到公共库") @Operation(summary = "将个人library元素添加到公共库")
@GetMapping("addToPublicLibrary") @GetMapping("addToPublicLibrary")
public Response<String> addToPublicLibrary(@ApiParam("元素的libraryId") @RequestParam("libraryId") Long libraryId){ public Response<String> addToPublicLibrary(@Parameter(description = "元素的libraryId") @RequestParam("libraryId") Long libraryId){
boolean b = libraryService.saveToOrganizationLibrary(libraryId); boolean b = libraryService.saveToOrganizationLibrary(libraryId);
if (b){ if (b){
return Response.success("success"); return Response.success("success");
@@ -219,31 +219,31 @@ public class LibraryController {
} }
} }
@ApiOperation(value = "将个人library元素从公共库中删除") @Operation(summary = "将个人library元素从公共库中删除")
@GetMapping("deleteFromPublicLib") @GetMapping("deleteFromPublicLib")
public Response<String> deleteFromPublicLib(@ApiParam("元素的libraryId") @RequestParam("libraryId") Long libraryId){ public Response<String> deleteFromPublicLib(@Parameter(description = "元素的libraryId") @RequestParam("libraryId") Long libraryId){
libraryService.deleteFromPublicLib(libraryId); libraryService.deleteFromPublicLib(libraryId);
return Response.success("success"); return Response.success("success");
} }
@ApiOperation(value = "获取公共库") @Operation(summary = "获取公共库")
@GetMapping("getPublicLib") @GetMapping("getPublicLib")
public Response<PageBaseResponse<Library>> getPublicLib(@ApiParam("排序" ) @RequestParam(value = "order", defaultValue = "DESC", required = false) String order, public Response<PageBaseResponse<Library>> getPublicLib(@Parameter(description = "排序" ) @RequestParam(value = "order", defaultValue = "DESC", required = false) String order,
@ApiParam("page") @RequestParam(value = "page", defaultValue = "1", required = false) Long page, @Parameter(description = "page") @RequestParam(value = "page", defaultValue = "1", required = false) Long page,
@ApiParam("size") @RequestParam(value = "size", defaultValue = "20", required = false) Long size){ @Parameter(description = "size") @RequestParam(value = "size", defaultValue = "20", required = false) Long size){
return Response.success(libraryService.getPublicLib(order, page, size)); return Response.success(libraryService.getPublicLib(order, page, size));
} }
@ApiOperation(value = "管理员获取所有子账号lib元素") @Operation(summary = "管理员获取所有子账号lib元素")
@GetMapping("getAllSubAccLib") @GetMapping("getAllSubAccLib")
public Response<PageBaseResponse<Library>> getAllSubAccLib(@ApiParam("排序") @RequestParam(value = "order", defaultValue = "DESC", required = false) String order, public Response<PageBaseResponse<Library>> getAllSubAccLib(@Parameter(description = "排序") @RequestParam(value = "order", defaultValue = "DESC", required = false) String order,
@ApiParam("page") @RequestParam(value = "page", defaultValue = "1", required = false) Long page, @Parameter(description = "page") @RequestParam(value = "page", defaultValue = "1", required = false) Long page,
@ApiParam("size") @RequestParam(value = "size", defaultValue = "20", required = false) Long size){ @Parameter(description = "size") @RequestParam(value = "size", defaultValue = "20", required = false) Long size){
return Response.success(libraryService.getAllSubAccLib(order, page, size)); return Response.success(libraryService.getAllSubAccLib(order, page, size));
} }
@ApiOperation(value = "将系统sketch添加到library") @Operation(summary = "将系统sketch添加到library")
@GetMapping("addSysSketchToLibrary") @GetMapping("addSysSketchToLibrary")
public Response<String> addSysSketchToLibrary(Long clothId, String path) { public Response<String> addSysSketchToLibrary(Long clothId, String path) {
return Response.success(libraryService.addSysSketchToLibrary(clothId, path)); return Response.success(libraryService.addSysSketchToLibrary(clothId, path));

View File

@@ -6,8 +6,8 @@ import com.ai.da.model.dto.GetNotificationDTO;
import com.ai.da.model.vo.NotificationVO; import com.ai.da.model.vo.NotificationVO;
import com.ai.da.model.dto.PublishSysNotificationDTO; import com.ai.da.model.dto.PublishSysNotificationDTO;
import com.ai.da.service.MessageCenterService; import com.ai.da.service.MessageCenterService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -16,7 +16,7 @@ import jakarta.validation.Valid;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@Api(tags = "消息中心模块") @Tag(name = "消息中心模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/message") @RequestMapping("/api/message")
@@ -26,35 +26,35 @@ public class MessageCenterController {
private MessageCenterService messageCenterService; private MessageCenterService messageCenterService;
// 获取未读消息总数 // 获取未读消息总数
@ApiOperation(value = "获取未读消息数") @Operation(summary = "获取未读消息数")
@GetMapping("/getUnreadCount") @GetMapping("/getUnreadCount")
public Response<Map<String, Long>> getUnreadMessage(){ public Response<Map<String, Long>> getUnreadMessage(){
return Response.success(messageCenterService.getAllTypeMessageUnreadCount()); return Response.success(messageCenterService.getAllTypeMessageUnreadCount());
} }
// 获取历史消息 // 获取历史消息
@ApiOperation(value = "获取历史消息") @Operation(summary = "获取历史消息")
@PostMapping("/getHistoryNotification") @PostMapping("/getHistoryNotification")
public Response<PageBaseResponse<NotificationVO>> getHistoryNotification(@Valid @RequestBody GetNotificationDTO getNotificationDTO) { public Response<PageBaseResponse<NotificationVO>> getHistoryNotification(@Valid @RequestBody GetNotificationDTO getNotificationDTO) {
return Response.success(messageCenterService.getHistoryNotification(getNotificationDTO)); return Response.success(messageCenterService.getHistoryNotification(getNotificationDTO));
} }
// 已读消息 // 已读消息
@ApiOperation(value = "设置消息状态为已读") @Operation(summary = "设置消息状态为已读")
@PostMapping("/setReadStatus") @PostMapping("/setReadStatus")
public Response<Boolean> setReadStatus(@RequestParam("notificationIdList") List<Long> notificationIdList, @RequestParam("type") String type) { public Response<Boolean> setReadStatus(@RequestParam("notificationIdList") List<Long> notificationIdList, @RequestParam("type") String type) {
return Response.success(messageCenterService.setReadStatus(notificationIdList, type)); return Response.success(messageCenterService.setReadStatus(notificationIdList, type));
} }
// 发布系统消息 // 发布系统消息
@ApiOperation(value = "发布系统消息") @Operation(summary = "发布系统消息")
@PostMapping("/publishSysMessage") @PostMapping("/publishSysMessage")
public Response<String> publishSysMessage(@Valid @RequestBody PublishSysNotificationDTO message) { public Response<String> publishSysMessage(@Valid @RequestBody PublishSysNotificationDTO message) {
messageCenterService.publishSystemNotification(message); messageCenterService.publishSystemNotification(message);
return Response.success("success"); return Response.success("success");
} }
@ApiOperation(value = "一键已读") @Operation(summary = "一键已读")
@PostMapping("/oneClickRead") @PostMapping("/oneClickRead")
public Response<String> setReadAll(@RequestParam("type") String type) { public Response<String> setReadAll(@RequestParam("type") String type) {
messageCenterService.setReadAll(type); messageCenterService.setReadAll(type);

View File

@@ -7,15 +7,15 @@ import com.ai.da.model.dto.QueryPageByTimeDTO;
import com.ai.da.model.vo.OrderListVO; import com.ai.da.model.vo.OrderListVO;
import com.ai.da.service.OrderInfoService; import com.ai.da.service.OrderInfoService;
import com.ai.da.service.PaymentInfoService; import com.ai.da.service.PaymentInfoService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
@CrossOrigin //开放前端的跨域访问 @CrossOrigin //开放前端的跨域访问
@Api(tags = "商品订单管理") @Tag(name = "商品订单管理")
@RestController @RestController
@RequestMapping("/api/order-info") @RequestMapping("/api/order-info")
public class OrderInfoController { public class OrderInfoController {
@@ -26,7 +26,7 @@ public class OrderInfoController {
@Resource @Resource
private PaymentInfoService paymentInfoService; private PaymentInfoService paymentInfoService;
@ApiOperation("订单列表") @Operation(summary = "订单列表")
@PostMapping("/list") @PostMapping("/list")
public Response<PageBaseResponse<OrderListVO>> list(@Valid @RequestBody QueryPageByTimeDTO queryPageByTimeDTO){ public Response<PageBaseResponse<OrderListVO>> list(@Valid @RequestBody QueryPageByTimeDTO queryPageByTimeDTO){
PageBaseResponse<OrderListVO> orderByAccountId = paymentInfoService.getPaymentInfo(queryPageByTimeDTO); PageBaseResponse<OrderListVO> orderByAccountId = paymentInfoService.getPaymentInfo(queryPageByTimeDTO);
@@ -39,7 +39,7 @@ public class OrderInfoController {
* @param orderNo * @param orderNo
* @return * @return
*/ */
@ApiOperation("查询本地订单状态") @Operation(summary = "查询本地订单状态")
@GetMapping("/query-order-status/{orderNo}") @GetMapping("/query-order-status/{orderNo}")
public Response<String> queryOrderStatus(@PathVariable String orderNo){ public Response<String> queryOrderStatus(@PathVariable String orderNo){
String orderStatus = orderInfoService.getOrderStatus(orderNo); String orderStatus = orderInfoService.getOrderStatus(orderNo);

View File

@@ -7,8 +7,8 @@ import com.paypal.http.HttpResponse;
import com.paypal.http.exceptions.SerializeException; import com.paypal.http.exceptions.SerializeException;
import com.paypal.orders.Order; import com.paypal.orders.Order;
import com.paypal.payments.Refund; import com.paypal.payments.Refund;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@@ -20,21 +20,21 @@ import java.io.IOException;
import java.util.HashMap; import java.util.HashMap;
@RestController @RestController
@Api(tags = "PayPalCheckout接口") @Tag(name = "PayPalCheckout接口")
@RequestMapping("/api/paypal") @RequestMapping("/api/paypal")
public class PayPalCheckoutController { public class PayPalCheckoutController {
@Resource @Resource
private PayPalCheckoutService payPalCheckoutService; private PayPalCheckoutService payPalCheckoutService;
@ApiOperation(value = "创建订单") @Operation(summary = "创建订单")
@PostMapping(value = "/trade") @PostMapping(value = "/trade")
public Response<HashMap<String, String>> createOrder(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) throws SerializeException { public Response<HashMap<String, String>> createOrder(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) throws SerializeException {
HashMap<String, String> approvalUrl = payPalCheckoutService.createOrder(productPurchaseDTO, request); HashMap<String, String> approvalUrl = payPalCheckoutService.createOrder(productPurchaseDTO, request);
return Response.success(approvalUrl); return Response.success(approvalUrl);
} }
@ApiOperation(value = "ipn异步回调") @Operation(summary = "ipn异步回调")
@PostMapping(value = "/ipn/back") @PostMapping(value = "/ipn/back")
public Response<String> callback(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { public Response<String> callback(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Boolean result = payPalCheckoutService.doPost(request, response); Boolean result = payPalCheckoutService.doPost(request, response);
@@ -45,7 +45,7 @@ public class PayPalCheckoutController {
} }
} }
@ApiOperation(value = "查询指定订单") @Operation(summary = "查询指定订单")
@PostMapping(value = "/trade/query/{orderNo}") @PostMapping(value = "/trade/query/{orderNo}")
public Response<Order> queryOrder(@PathVariable String orderNo) throws SerializeException { public Response<Order> queryOrder(@PathVariable String orderNo) throws SerializeException {
Order s = payPalCheckoutService.queryOrder(orderNo); Order s = payPalCheckoutService.queryOrder(orderNo);
@@ -53,7 +53,7 @@ public class PayPalCheckoutController {
} }
/** 不提供退款接口 */ /** 不提供退款接口 */
@ApiOperation("申请退款") @Operation(summary = "申请退款")
@PostMapping("/trade/refund/{orderNo}/{reason}") @PostMapping("/trade/refund/{orderNo}/{reason}")
public Response<HttpResponse<Refund>> refund(@PathVariable String orderNo, @PathVariable String reason) throws IOException { public Response<HttpResponse<Refund>> refund(@PathVariable String orderNo, @PathVariable String reason) throws IOException {
Boolean response = payPalCheckoutService.refundOrder(orderNo,reason); Boolean response = payPalCheckoutService.refundOrder(orderNo,reason);
@@ -64,7 +64,7 @@ public class PayPalCheckoutController {
} }
} }
@ApiOperation("执行扣款") @Operation(summary = "执行扣款")
@PostMapping("/trade/capture/{orderNo}") @PostMapping("/trade/capture/{orderNo}")
public Response<com.paypal.orders.Order> captureOrder(@PathVariable String orderNo) throws IOException { public Response<com.paypal.orders.Order> captureOrder(@PathVariable String orderNo) throws IOException {
Order response = payPalCheckoutService.captureOrder(orderNo); Order response = payPalCheckoutService.captureOrder(orderNo);

View File

@@ -9,8 +9,8 @@ import com.ai.da.model.vo.CommentVO;
import com.ai.da.model.vo.PortfolioVO; import com.ai.da.model.vo.PortfolioVO;
import com.ai.da.service.PortfolioService; import com.ai.da.service.PortfolioService;
import com.ai.da.service.UserFollowService; import com.ai.da.service.UserFollowService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
@@ -19,7 +19,7 @@ import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import java.util.List; import java.util.List;
@Api(tags = "Portfolio模块") @Tag(name = "Portfolio模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/portfolio") @RequestMapping("/api/portfolio")
@@ -31,133 +31,133 @@ public class PortfolioController {
@Resource @Resource
private UserFollowService userFollowService; private UserFollowService userFollowService;
@ApiOperation(value = "发布作品集") @Operation(summary = "发布作品集")
@PostMapping("/publish") @PostMapping("/publish")
public Response<Long> publish(@RequestParam("file") MultipartFile canvas, @RequestParam("data") String data) { public Response<Long> publish(@RequestParam("file") MultipartFile canvas, @RequestParam("data") String data) {
return Response.success(portfolioService.publish(canvas, data)); return Response.success(portfolioService.publish(canvas, data));
} }
@ApiOperation(value = "删除作品集") @Operation(summary = "删除作品集")
@GetMapping("/delete") @GetMapping("/delete")
public Response<Boolean> delete(@RequestParam("id") Long id) { public Response<Boolean> delete(@RequestParam("id") Long id) {
return Response.success(portfolioService.delete(id)); return Response.success(portfolioService.delete(id));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "作品集page") @Operation(summary = "作品集page")
@PostMapping("/page") @PostMapping("/page")
public Response<PageBaseResponse<PortfolioVO>> page(@Valid @RequestBody QueryPortfolioPageDTO query) { public Response<PageBaseResponse<PortfolioVO>> page(@Valid @RequestBody QueryPortfolioPageDTO query) {
return Response.success(portfolioService.page(query)); return Response.success(portfolioService.page(query));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "作品详情") @Operation(summary = "作品详情")
@PostMapping("/detail") @PostMapping("/detail")
public Response<PortfolioVO> detail(@Valid @RequestBody PortfolioDTO portfolioDTO) { public Response<PortfolioVO> detail(@Valid @RequestBody PortfolioDTO portfolioDTO) {
return Response.success(portfolioService.detail(portfolioDTO)); return Response.success(portfolioService.detail(portfolioDTO));
} }
@ApiOperation(value = "选择作品") @Operation(summary = "选择作品")
@PostMapping("/choose") @PostMapping("/choose")
public Response<ProjectChooseVO> choose(@Valid @RequestBody PortfolioDTO portfolioDTO) { public Response<ProjectChooseVO> choose(@Valid @RequestBody PortfolioDTO portfolioDTO) {
return Response.success(portfolioService.choose(portfolioDTO)); return Response.success(portfolioService.choose(portfolioDTO));
} }
@ApiOperation(value = "更新作品") @Operation(summary = "更新作品")
@PostMapping("/update") @PostMapping("/update")
public Response<PortfolioVO> update(@Valid @RequestBody PortfolioDTO portfolioDTO) { public Response<PortfolioVO> update(@Valid @RequestBody PortfolioDTO portfolioDTO) {
return Response.success(portfolioService.update(portfolioDTO)); return Response.success(portfolioService.update(portfolioDTO));
} }
@ApiOperation(value = "广场用户注册") @Operation(summary = "广场用户注册")
@PostMapping("/designWorksRegister") @PostMapping("/designWorksRegister")
public Response<Boolean> designWorksRegister(@Valid @RequestBody DesignWorksRegisterDTO designWorksRegisterDTO) { public Response<Boolean> designWorksRegister(@Valid @RequestBody DesignWorksRegisterDTO designWorksRegisterDTO) {
return Response.success(portfolioService.designWorksRegister(designWorksRegisterDTO)); return Response.success(portfolioService.designWorksRegister(designWorksRegisterDTO));
} }
@ApiOperation(value = "喜欢") @Operation(summary = "喜欢")
@GetMapping("/like") @GetMapping("/like")
public Response<Boolean> like(@RequestParam("id") Long id) { public Response<Boolean> like(@RequestParam("id") Long id) {
return Response.success(portfolioService.like(id)); return Response.success(portfolioService.like(id));
} }
@ApiOperation(value = "不喜欢") @Operation(summary = "不喜欢")
@GetMapping("/unlike") @GetMapping("/unlike")
public Response<Boolean> unlike(@RequestParam("id") Long id) { public Response<Boolean> unlike(@RequestParam("id") Long id) {
return Response.success(portfolioService.unlike(id)); return Response.success(portfolioService.unlike(id));
} }
@ApiOperation(value = "获取点赞数") @Operation(summary = "获取点赞数")
@GetMapping("/getLikeCount") @GetMapping("/getLikeCount")
public Response<Long> getLikeCount(@RequestParam("id") Long id) { public Response<Long> getLikeCount(@RequestParam("id") Long id) {
return Response.success(portfolioService.getLikeCount(id)); return Response.success(portfolioService.getLikeCount(id));
} }
@ApiOperation(value = "评论") @Operation(summary = "评论")
@PostMapping("/comment") @PostMapping("/comment")
public Response<Boolean> comment(@Valid @RequestBody CommentDTO commentDTO) { public Response<Boolean> comment(@Valid @RequestBody CommentDTO commentDTO) {
return Response.success(portfolioService.comment(commentDTO)); return Response.success(portfolioService.comment(commentDTO));
} }
@ApiOperation(value = "评论列表") @Operation(summary = "评论列表")
@PostMapping("/commentPage") @PostMapping("/commentPage")
public Response<PageBaseResponse<CommentVO>> commentPage(@Valid @RequestBody CommentPageDTO commentPageDTO) { public Response<PageBaseResponse<CommentVO>> commentPage(@Valid @RequestBody CommentPageDTO commentPageDTO) {
return Response.success(portfolioService.commentPage(commentPageDTO)); return Response.success(portfolioService.commentPage(commentPageDTO));
} }
@ApiOperation(value = "增加浏览量") @Operation(summary = "增加浏览量")
@GetMapping("/viewsIncrease") @GetMapping("/viewsIncrease")
public Response<Boolean> viewsIncrease(@RequestParam("id") Long id) { public Response<Boolean> viewsIncrease(@RequestParam("id") Long id) {
return Response.success(portfolioService.viewsIncrease(id)); return Response.success(portfolioService.viewsIncrease(id));
} }
@ApiOperation(value = "浏览量获取") @Operation(summary = "浏览量获取")
@GetMapping("/viewsGet") @GetMapping("/viewsGet")
public Response<Long> viewsGet(@RequestParam("id") Long id) { public Response<Long> viewsGet(@RequestParam("id") Long id) {
return Response.success(portfolioService.viewsGet(id)); return Response.success(portfolioService.viewsGet(id));
} }
@ApiOperation(value = "删除评论") @Operation(summary = "删除评论")
@PostMapping("/commentDelete") @PostMapping("/commentDelete")
public Response<Boolean> commentDelete(@Valid @RequestBody CommentDTO commentDTO) { public Response<Boolean> commentDelete(@Valid @RequestBody CommentDTO commentDTO) {
return Response.success(portfolioService.commentDelete(commentDTO)); return Response.success(portfolioService.commentDelete(commentDTO));
} }
@ApiOperation(value = "关注") @Operation(summary = "关注")
@GetMapping("/follow") @GetMapping("/follow")
public Response<String> follow(@RequestParam("followeeId") Long followeeId) { public Response<String> follow(@RequestParam("followeeId") Long followeeId) {
portfolioService.follow(followeeId); portfolioService.follow(followeeId);
return Response.success(BusinessException.getMessageFromResource("subscription.success")); return Response.success(BusinessException.getMessageFromResource("subscription.success"));
} }
@ApiOperation(value = "取消关注") @Operation(summary = "取消关注")
@GetMapping("/cancelFollow") @GetMapping("/cancelFollow")
public Response<String> cancelFollow(@RequestParam("followeeId") Long followeeId) { public Response<String> cancelFollow(@RequestParam("followeeId") Long followeeId) {
portfolioService.cancelFollow(followeeId); portfolioService.cancelFollow(followeeId);
return Response.success(BusinessException.getMessageFromResource("unsubscribe.success")); return Response.success(BusinessException.getMessageFromResource("unsubscribe.success"));
} }
@ApiOperation(value = "获取关注列表") @Operation(summary = "获取关注列表")
@PostMapping("/getFolloweeList") @PostMapping("/getFolloweeList")
public Response<List<AccountFollowVO>> getFolloweeList(@Valid @RequestBody GetFollowListDTO getFollowListDTO) { public Response<List<AccountFollowVO>> getFolloweeList(@Valid @RequestBody GetFollowListDTO getFollowListDTO) {
return Response.success(userFollowService.getFolloweeList(getFollowListDTO)); return Response.success(userFollowService.getFolloweeList(getFollowListDTO));
} }
@ApiOperation(value = "获取粉丝列表") @Operation(summary = "获取粉丝列表")
@PostMapping("/getFollowerList") @PostMapping("/getFollowerList")
public Response<List<AccountFollowVO>> getFollowerList(@Valid @RequestBody GetFollowListDTO getFollowListDTO) { public Response<List<AccountFollowVO>> getFollowerList(@Valid @RequestBody GetFollowListDTO getFollowListDTO) {
return Response.success(userFollowService.getFollowerList(getFollowListDTO)); return Response.success(userFollowService.getFollowerList(getFollowListDTO));
} }
/* @ApiOperation(value = "按标签名查询作品") /* @Operation(summary = "按标签名查询作品")
@GetMapping("/queryPortfolioByTag") @GetMapping("/queryPortfolioByTag")
public Response<List<PortfolioVO>> queryPortfolioByTag(@RequestParam(value = "tagName", required = false) String tagName, public Response<List<PortfolioVO>> queryPortfolioByTag(@RequestParam(value = "tagName", required = false) String tagName,
@RequestParam(value = "tagId", required = false) Long tagId) { @RequestParam(value = "tagId", required = false) Long tagId) {
return Response.success(portfolioService.queryPortfolioByTag(tagName, tagId)); return Response.success(portfolioService.queryPortfolioByTag(tagName, tagId));
}*/ }*/
@ApiOperation(value = "将企业或教育版中的作品发布到公共gallery") @Operation(summary = "将企业或教育版中的作品发布到公共gallery")
@GetMapping("/toPublic") @GetMapping("/toPublic")
public Response<String> setPortfolioToPublic(@RequestParam("portfolioId") Long portfolioId) { public Response<String> setPortfolioToPublic(@RequestParam("portfolioId") Long portfolioId) {
portfolioService.setPortfolioToPublic(portfolioId); portfolioService.setPortfolioToPublic(portfolioId);

View File

@@ -4,8 +4,8 @@ package com.ai.da.controller;
import com.ai.da.common.response.Response; import com.ai.da.common.response.Response;
import com.ai.da.mapper.primary.entity.Product; import com.ai.da.mapper.primary.entity.Product;
import com.ai.da.service.ProductService; import com.ai.da.service.ProductService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
@@ -16,7 +16,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
@CrossOrigin //开放前端的跨域访问 @CrossOrigin //开放前端的跨域访问
@Api(tags = "商品管理") @Tag(name = "商品管理")
@RestController @RestController
@RequestMapping("/api/product") @RequestMapping("/api/product")
public class ProductController { public class ProductController {
@@ -24,14 +24,14 @@ public class ProductController {
@Resource @Resource
private ProductService productService; private ProductService productService;
@ApiOperation("测试接口") @Operation(summary = "测试接口")
@GetMapping("/test") @GetMapping("/test")
public Response<String> test(){ public Response<String> test(){
return Response.success("now" + new Date()); return Response.success("now" + new Date());
} }
@ApiOperation("商品列表") @Operation(summary = "商品列表")
@GetMapping("/list") @GetMapping("/list")
public Response<List<Product>> list(){ public Response<List<Product>> list(){

View File

@@ -10,8 +10,8 @@ import com.ai.da.service.UserLikeGroupService;
import com.ai.da.service.WorkspaceService; import com.ai.da.service.WorkspaceService;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import io.minio.errors.MinioException; import io.minio.errors.MinioException;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -20,7 +20,7 @@ import jakarta.servlet.http.HttpServletResponse;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import java.io.IOException; import java.io.IOException;
@Api(tags = "Project模块") @Tag(name = "Project模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/project") @RequestMapping("/api/project")
@@ -37,14 +37,14 @@ public class ProjectController {
@PostMapping("/saveOrUpdate") @PostMapping("/saveOrUpdate")
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@ApiOperation(value = "新增或编辑", notes = "传入project") @Operation(summary = "新增或编辑", description = "传入project")
public Response<SaveOrUpdateProjectVO> saveOrUpdateProject(@Valid @RequestBody ProjectDTO projectDTO) { public Response<SaveOrUpdateProjectVO> saveOrUpdateProject(@Valid @RequestBody ProjectDTO projectDTO) {
return Response.success(workspaceService.saveOrUpdateProject(projectDTO)); return Response.success(workspaceService.saveOrUpdateProject(projectDTO));
} }
@PostMapping("/page") @PostMapping("/page")
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
@ApiOperation(value = "分页查询", notes = "传入project") @Operation(summary = "分页查询", description = "传入project")
public Response<PageBaseResponse<ProjectVO>> page(@Valid @RequestBody ProjectQueryDTO projectQueryDTO) { public Response<PageBaseResponse<ProjectVO>> page(@Valid @RequestBody ProjectQueryDTO projectQueryDTO) {
return Response.success(PageBaseResponse.success(userLikeGroupService.getPage(projectQueryDTO))); return Response.success(PageBaseResponse.success(userLikeGroupService.getPage(projectQueryDTO)));
} }
@@ -58,21 +58,21 @@ public class ProjectController {
// //
@PostMapping("/choose") @PostMapping("/choose")
@ApiOperationSupport(order = 4) @ApiOperationSupport(order = 4)
@ApiOperation(value = "选择", notes = "传入project") @Operation(summary = "选择", description = "传入project")
public Response<ProjectChooseVO> choose(@Valid @RequestBody ProjectDTO projectDTO) { public Response<ProjectChooseVO> choose(@Valid @RequestBody ProjectDTO projectDTO) {
return Response.success(userLikeGroupService.choose(projectDTO)); return Response.success(userLikeGroupService.choose(projectDTO));
} }
@PostMapping("/getModuleContent") @PostMapping("/getModuleContent")
@ApiOperationSupport(order = 5) @ApiOperationSupport(order = 5)
@ApiOperation(value = "获取模块内容", notes = "传入project") @Operation(summary = "获取模块内容", description = "传入project")
public Response<ModuleChooseVO> getModuleContent(@Valid @RequestBody ProjectDTO projectDTO) { public Response<ModuleChooseVO> getModuleContent(@Valid @RequestBody ProjectDTO projectDTO) {
return Response.success(userLikeGroupService.getModuleContent(projectDTO)); return Response.success(userLikeGroupService.getModuleContent(projectDTO));
} }
@PostMapping("/saveModuleContent") @PostMapping("/saveModuleContent")
@ApiOperationSupport(order = 6) @ApiOperationSupport(order = 6)
@ApiOperation(value = "存储模块内容", notes = "传入project") @Operation(summary = "存储模块内容", description = "传入project")
public Response<ModuleChooseVO> saveModuleContent(@Valid @RequestBody ModuleSaveDTO moduleSaveDTO) { public Response<ModuleChooseVO> saveModuleContent(@Valid @RequestBody ModuleSaveDTO moduleSaveDTO) {
return Response.success(userLikeGroupService.saveModuleContent(moduleSaveDTO)); return Response.success(userLikeGroupService.saveModuleContent(moduleSaveDTO));
} }
@@ -86,50 +86,49 @@ public class ProjectController {
@PostMapping("/getMannequinDetail") @PostMapping("/getMannequinDetail")
@ApiOperationSupport(order = 7) @ApiOperationSupport(order = 7)
@ApiOperation(value = "获取模特详情", notes = "传入mannequinId") @Operation(summary = "获取模特详情", description = "传入mannequinId")
public Response<QueryLibraryPageVO> getMannequinDetail(@Valid @RequestBody MannequinDTO mannequinDTO) { public Response<QueryLibraryPageVO> getMannequinDetail(@Valid @RequestBody MannequinDTO mannequinDTO) {
return Response.success(userLikeGroupService.getMannequinDetail(mannequinDTO)); return Response.success(userLikeGroupService.getMannequinDetail(mannequinDTO));
} }
@PostMapping("/threeDPage") @PostMapping("/threeDPage")
@ApiOperationSupport(order = 8) @ApiOperationSupport(order = 8)
@ApiOperation(value = "获取3Dpage", notes = "传入ThreeDLayoutQueryDTO") @Operation(summary = "获取3Dpage", description = "传入ThreeDLayoutQueryDTO")
public Response<PageBaseResponse<ThreeDLayoutVO>> threeDPage(@Valid @RequestBody ThreeDLayoutQueryDTO threeDLayoutQueryDTO) { public Response<PageBaseResponse<ThreeDLayoutVO>> threeDPage(@Valid @RequestBody ThreeDLayoutQueryDTO threeDLayoutQueryDTO) {
return Response.success(PageBaseResponse.success(userLikeGroupService.getThreeDLayoutPage(threeDLayoutQueryDTO))); return Response.success(PageBaseResponse.success(userLikeGroupService.getThreeDLayoutPage(threeDLayoutQueryDTO)));
} }
@PostMapping("/getLayoutDetail") @PostMapping("/getLayoutDetail")
@ApiOperationSupport(order = 9) @ApiOperationSupport(order = 9)
@ApiOperation(value = "获取3D详情", notes = "传入project") @Operation(summary = "获取3D详情", description = "传入project")
public Response<ThreeDVO> getLayoutDetail(@RequestParam(value = "threeDSimpleId") Long threeDSimpleId) { public Response<ThreeDVO> getLayoutDetail(@RequestParam(value = "threeDSimpleId") Long threeDSimpleId) {
return Response.success(userLikeGroupService.getLayoutDetail(threeDSimpleId)); return Response.success(userLikeGroupService.getLayoutDetail(threeDSimpleId));
} }
@PostMapping("/getThreeDSize") @PostMapping("/getThreeDSize")
@ApiOperationSupport(order = 10) @ApiOperationSupport(order = 10)
@ApiOperation(value = "获取尺码", notes = "传入project") @Operation(summary = "获取尺码", description = "传入project")
public Response<ThreeDSizeVO> getThreeDSize(@RequestParam(value = "threeDSimpleId") Long threeDSimpleId) { public Response<ThreeDSizeVO> getThreeDSize(@RequestParam(value = "threeDSimpleId") Long threeDSimpleId) {
return Response.success(userLikeGroupService.getThreeDSize(threeDSimpleId)); return Response.success(userLikeGroupService.getThreeDSize(threeDSimpleId));
} }
@GetMapping("/getThreeDGlb") @GetMapping("/getThreeDGlb")
@ApiOperationSupport(order = 11) @ApiOperationSupport(order = 11)
@ApiOperation(value = "获取GLB", notes = "传入project") @Operation(summary = "获取GLB", description = "传入project")
public void getThreeDGlb(@RequestParam(value = "threeDSimpleId") Long threeDSimpleId, HttpServletResponse response) throws MinioException, IOException { public void getThreeDGlb(@RequestParam(value = "threeDSimpleId") Long threeDSimpleId, HttpServletResponse response) throws MinioException, IOException {
userLikeGroupService.getThreeDGlb(threeDSimpleId, response); userLikeGroupService.getThreeDGlb(threeDSimpleId, response);
} }
@GetMapping("/downloadZip") @GetMapping("/downloadZip")
@ApiOperationSupport(order = 11) @ApiOperationSupport(order = 11)
@ApiOperation(value = "下载", notes = "传入project") @Operation(summary = "下载", description = "传入project")
public Response<String> downloadZip(@RequestParam(value = "threeDSimpleId") Long threeDSimpleId, @RequestParam(value = "sizeType") String sizeType, @RequestParam(value = "size") String size, HttpServletResponse response) throws MinioException, IOException { public Response<String> downloadZip(@RequestParam(value = "threeDSimpleId") Long threeDSimpleId, @RequestParam(value = "sizeType") String sizeType, @RequestParam(value = "size") String size, HttpServletResponse response) throws MinioException, IOException {
return Response.success(userLikeGroupService.downloadZip(threeDSimpleId, sizeType, size, response)); return Response.success(userLikeGroupService.downloadZip(threeDSimpleId, sizeType, size, response));
} }
@PostMapping("/delete") @PostMapping("/delete")
@ApiOperationSupport(order = 12) @ApiOperationSupport(order = 12)
@ApiOperation(value = "删除", notes = "传入project") @Operation(summary = "删除", description = "传入project")
public Response<Boolean> delete(@RequestParam("projectId") Long projectId) { public Response<Boolean> delete(@RequestParam("projectId") Long projectId) {
return Response.success(userLikeGroupService.delete(projectId)); return Response.success(userLikeGroupService.delete(projectId));
} }

View File

@@ -16,13 +16,16 @@ import com.ai.da.service.ChatRobotService;
import com.ai.da.service.LibraryService; import com.ai.da.service.LibraryService;
import com.ai.da.service.SuperResolutionService; import com.ai.da.service.SuperResolutionService;
import com.ai.da.service.SysFileService; import com.ai.da.service.SysFileService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Collections; import java.util.Collections;
@@ -31,7 +34,7 @@ import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Api(tags = "python对接模块") @Tag(name = "python对接模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/python") @RequestMapping("/api/python")
@@ -49,17 +52,17 @@ public class PythonController {
@Resource @Resource
private SuperResolutionService superResolutionService; private SuperResolutionService superResolutionService;
@ApiOperation(value = "python服务保存图片到java服务") @Operation(summary = "python服务保存图片到java服务")
@PostMapping("/saveGeneratePicture") @PostMapping("/saveGeneratePicture")
public Response<String> upload(@RequestParam("file") MultipartFile file, public Response<String> upload(@RequestParam("file") MultipartFile file,
@ApiParam("操作类型 generatePrint ->生成印花 " + @Parameter(description = "操作类型 generatePrint ->生成印花 " +
"designCollection ->设计collection generateAdvancedDesign ->生成高级design" + "designCollection ->设计collection generateAdvancedDesign ->生成高级design" +
"generateSketch -> 生成草图") "generateSketch -> 生成草图")
@RequestParam(value = "operateType") String operateType) { @RequestParam(value = "operateType") String operateType) {
return Response.success(pythonService.upload(file, operateType)); return Response.success(pythonService.upload(file, operateType));
} }
// @ApiOperation(value = "python服务保存多张图片到java服务") // @Operation(summary = "python服务保存多张图片到java服务")
// @PostMapping("/saveMultiGeneratePicture") // @PostMapping("/saveMultiGeneratePicture")
// public Response<List<String>> uploadMultiple(@RequestParam("files") MultipartFile[] files, // public Response<List<String>> uploadMultiple(@RequestParam("files") MultipartFile[] files,
// @ApiParam("操作类型 generatePrint ->生成印花 " + // @ApiParam("操作类型 generatePrint ->生成印花 " +
@@ -69,13 +72,13 @@ public class PythonController {
// return Response.success(pythonService.upload(files, operateType)); // return Response.success(pythonService.upload(files, operateType));
// } // }
@ApiOperation(value = "通过文件类型获取系统文件") @Operation(summary = "通过文件类型获取系统文件")
@GetMapping("/getSysFileByLevel2Type") @GetMapping("/getSysFileByLevel2Type")
public Response<List<SysFileVO>> getSysFileByLevel2Type(/*@RequestParam(value = "level2Type",required = false) String level2Type*/) { public Response<List<SysFileVO>> getSysFileByLevel2Type(/*@RequestParam(value = "level2Type",required = false) String level2Type*/) {
return Response.success(sysFileService.getByLevel2Type("All")); return Response.success(sysFileService.getByLevel2Type("All"));
} }
@ApiOperation(value = "通过用户id获取library") @Operation(summary = "通过用户id获取library")
@GetMapping("/getLibraryByUserId") @GetMapping("/getLibraryByUserId")
public Response<Map<String, List<String>>> getLibraryByUserId(@RequestParam(value = "userId") Long userId) { public Response<Map<String, List<String>>> getLibraryByUserId(@RequestParam(value = "userId") Long userId) {
List<PythonLibraryVo> response = CopyUtil.copyList(libraryService.selectByAccountIdAnd1TypeList(userId, List<PythonLibraryVo> response = CopyUtil.copyList(libraryService.selectByAccountIdAnd1TypeList(userId,
@@ -86,37 +89,47 @@ public class PythonController {
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "发送用户输入消息") @Operation(summary = "发送用户输入消息")
@PostMapping("/chatStream") @PostMapping("/chatStream")
public Response<ChatRobotVO> MessageToPythonChatStream(@RequestBody ChatSendDTO chatSendDTO) { public Response<ChatRobotVO> MessageToPythonChatStream(@RequestBody ChatSendDTO chatSendDTO) {
log.info(chatSendDTO.toString()); log.info(chatSendDTO.toString());
return Response.success(chatRobotService.sendMessageToChatRobot(chatSendDTO)); return Response.success(chatRobotService.sendMessageToChatRobot(chatSendDTO));
} }
@ApiOperation(value = "血条") @Operation(summary = "血条")
@GetMapping("/getBloodBars") @GetMapping("/getBloodBars")
public Response<BigDecimal> getBloodBars(@RequestParam(value = "userId") Long userId) { public Response<BigDecimal> getBloodBars(@RequestParam(value = "userId") Long userId) {
return Response.success(chatRobotService.getBloodBars(userId)); return Response.success(chatRobotService.getBloodBars(userId));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "likeOrUnlike") @Operation(summary = "likeOrUnlike")
@PostMapping("/pictureLikeOrUnLike") @PostMapping("/pictureLikeOrUnLike")
public Response<Library> pictureLikeOrUnLike(@RequestBody ChatRobotLibraryDTO chatRobotLibraryDTO) { public Response<Library> pictureLikeOrUnLike(@RequestBody ChatRobotLibraryDTO chatRobotLibraryDTO) {
return Response.success(chatRobotService.pictureLikeOrUnLike(chatRobotLibraryDTO)); return Response.success(chatRobotService.pictureLikeOrUnLike(chatRobotLibraryDTO));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "刷新会话缓存") @Operation(summary = "刷新会话缓存")
@PostMapping("/flush") @PostMapping("/flush")
public Response<String> ChatBufferFlush(@RequestBody ChatFlushDTO chatFlushDTO) { public Response<String> ChatBufferFlush(@RequestBody ChatFlushDTO chatFlushDTO) {
return Response.success(chatRobotService.chatBufferFlush(chatFlushDTO)); return Response.success(chatRobotService.chatBufferFlush(chatFlushDTO));
} }
@ApiOperation(value = "超分辨率") @Operation(summary = "超分辨率")
@PostMapping("/prepareForSR") @PostMapping("/prepareForSR")
public Response<List<String>> superResolution(@RequestBody List<SuperResolutionDTO> superResolutionDTO) { public Response<List<String>> superResolution(@RequestBody List<SuperResolutionDTO> superResolutionDTO) {
return Response.success(superResolutionService.prepareForSR(superResolutionDTO)); return Response.success(superResolutionService.prepareForSR(superResolutionDTO));
} }
@CrossOrigin
@Operation(summary = "Seg Anything 转发接口")
@PostMapping("/segAnything")
public Response<String> segAnything(@RequestBody Map<String, Object> payload) {
// 将前端传来的 Map 转为 fastjson JSONObject 并转发给 python 服务
JSONObject requestJson = (JSONObject) JSON.toJSON(payload);
String url = pythonService.segAnything(requestJson);
return Response.success(url);
}
} }

View File

@@ -17,9 +17,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.google.common.base.Function; import com.google.common.base.Function;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
@@ -35,7 +36,7 @@ import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@Api(tags = "History模块(saved Collection)") @Tag(name = "History模块(saved Collection)")
@Slf4j @Slf4j
@RestController @RestController
@Validated @Validated
@@ -56,7 +57,7 @@ public class SavedCollectionController {
@Resource @Resource
private PortfolioService portfolioService; private PortfolioService portfolioService;
@ApiOperation(value = "History用户分页分组列表") @Operation(summary = "History用户分页分组列表")
@PostMapping("/queryUserGroup") @PostMapping("/queryUserGroup")
public Response<PageBaseResponse<UserLikeGroupVO>> queryUserGroup(@Valid @RequestBody QueryHistoryPageDTO query) { public Response<PageBaseResponse<UserLikeGroupVO>> queryUserGroup(@Valid @RequestBody QueryHistoryPageDTO query) {
AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder(); AuthPrincipalVo authPrincipalVo = UserContext.getUserHolder();
@@ -147,21 +148,21 @@ public class SavedCollectionController {
return Response.success(PageBaseResponse.success(convert)); return Response.success(PageBaseResponse.success(convert));
} }
@ApiOperation(value = "History用户分组详情,目前弃用 ") @Operation(summary = "History用户分组详情,目前弃用 ")
@GetMapping("/getUserGroupDetail") @GetMapping("/getUserGroupDetail")
public Response<List<UserLikeVO>> getUserGroupDetail( public Response<List<UserLikeVO>> getUserGroupDetail(
@ApiParam("用户分组id") @RequestParam("userGroupId") Long userGroupId) { @Parameter(description = "用户分组id") @RequestParam("userGroupId") Long userGroupId) {
return Response.success(userLikeService.getGroupDetail(userGroupId)); return Response.success(userLikeService.getGroupDetail(userGroupId));
} }
@ApiOperation(value = "History修改用户分组名") @Operation(summary = "History修改用户分组名")
@PostMapping("/updateUserGroupName") @PostMapping("/updateUserGroupName")
public Response<HistoryUpdateVO> updateUserGroupName(@Valid @RequestBody HistoryUpdateDTO historyUpdateDTO) { public Response<HistoryUpdateVO> updateUserGroupName(@Valid @RequestBody HistoryUpdateDTO historyUpdateDTO) {
return Response.success(userLikeGroupService.updateUserGroupName(historyUpdateDTO.getUserGroupId() return Response.success(userLikeGroupService.updateUserGroupName(historyUpdateDTO.getUserGroupId()
, historyUpdateDTO.getUserGroupName(), historyUpdateDTO.getTimeZone())); , historyUpdateDTO.getUserGroupName(), historyUpdateDTO.getTimeZone()));
} }
@ApiOperation(value = "History删除用户分组") @Operation(summary = "History删除用户分组")
@PostMapping("/deleteUserGroup") @PostMapping("/deleteUserGroup")
public Response<Boolean> deleteUserGroup(@Valid @RequestBody HistoryDeleteDTO deleteDTO) { public Response<Boolean> deleteUserGroup(@Valid @RequestBody HistoryDeleteDTO deleteDTO) {
userLikeGroupService.deleteUserGroup(deleteDTO.getUserGroupId()); userLikeGroupService.deleteUserGroup(deleteDTO.getUserGroupId());
@@ -169,106 +170,106 @@ public class SavedCollectionController {
return Response.success(Boolean.TRUE); return Response.success(Boolean.TRUE);
} }
@ApiOperation(value = "History choose") @Operation(summary = "History choose")
@GetMapping("/choose") @GetMapping("/choose")
public Response<UserLikeChooseVO> choose( public Response<UserLikeChooseVO> choose(
@ApiParam("用户分组id") @RequestParam("userGroupId") Long userGroupId) { @Parameter(description = "用户分组id") @RequestParam("userGroupId") Long userGroupId) {
return Response.success(userLikeGroupService.choose(userGroupId)); return Response.success(userLikeGroupService.choose(userGroupId));
} }
@ApiOperation(value = "exportSave") @Operation(summary = "exportSave")
@PostMapping("/exportSave") @PostMapping("/exportSave")
public Response<Long> exportSave(@RequestParam("file") MultipartFile file, @RequestParam(value = "projectId", required = false) Long projectId, public Response<Long> exportSave(@RequestParam("file") MultipartFile file, @RequestParam(value = "projectId", required = false) Long projectId,
@RequestParam("module") String module, @RequestParam(value = "designItemDetailId", required = false) Long designItemDetailId) { @RequestParam("module") String module, @RequestParam(value = "designItemDetailId", required = false) Long designItemDetailId) {
return Response.success(userLikeGroupService.exportSave(file, projectId, module, designItemDetailId)); return Response.success(userLikeGroupService.exportSave(file, projectId, module, designItemDetailId));
} }
@ApiOperation(value = "exportSearch") @Operation(summary = "exportSearch")
@PostMapping("/exportSearch") @PostMapping("/exportSearch")
public Response<JSONObject> exportSearch(@Valid @RequestBody ExportSearchDTO exportSearchDTO) { public Response<JSONObject> exportSearch(@Valid @RequestBody ExportSearchDTO exportSearchDTO) {
return Response.success(userLikeGroupService.exportSearch(exportSearchDTO)); return Response.success(userLikeGroupService.exportSearch(exportSearchDTO));
} }
@ApiOperation(value = "toProduct") @Operation(summary = "toProduct")
@PostMapping("/toProduct") @PostMapping("/toProduct")
public Response<List<ToProductImageResultVO>> toProduct(@Valid @RequestBody ToProductImageDTO toProductImageDTO) { public Response<List<ToProductImageResultVO>> toProduct(@Valid @RequestBody ToProductImageDTO toProductImageDTO) {
return Response.success(userLikeGroupService.toProduct(toProductImageDTO)); return Response.success(userLikeGroupService.toProduct(toProductImageDTO));
} }
@ApiOperation(value = "toProductImageElementUpload") @Operation(summary = "toProductImageElementUpload")
@PostMapping("/toProductImageElementUpload") @PostMapping("/toProductImageElementUpload")
public Response<ToProductElementVO> toProductImageElementUpload(@RequestParam("file") MultipartFile file, public Response<ToProductElementVO> toProductImageElementUpload(@RequestParam("file") MultipartFile file,
@RequestParam(value = "projectId", required = false) Long projectId, @RequestParam(value = "projectId", required = false) Long projectId,
@ApiParam(value = "首尾帧", example = "first", @Parameter(description = "首尾帧", example = "first",
allowableValues = "first,last") schema = @Schema(allowableValues = {"first", "last"}))
@RequestParam(value = "type", required = false) String type) { @RequestParam(value = "type", required = false) String type) {
return Response.success(userLikeGroupService.toProductImageElementUpload(file, projectId, type)); return Response.success(userLikeGroupService.toProductImageElementUpload(file, projectId, type));
} }
@ApiOperation(value = "toProductImageElementDelete") @Operation(summary = "toProductImageElementDelete")
@PostMapping("/toProductImageElementDelete") @PostMapping("/toProductImageElementDelete")
public Response<Boolean> toProductImageElementDelete(@RequestParam(value = "id") Long id) { public Response<Boolean> toProductImageElementDelete(@RequestParam(value = "id") Long id) {
return Response.success(userLikeGroupService.toProductImageElementDelete(id)); return Response.success(userLikeGroupService.toProductImageElementDelete(id));
} }
@ApiOperation(value = "productImageLike") @Operation(summary = "productImageLike")
@PostMapping("/productImageLike") @PostMapping("/productImageLike")
public Response<CollectionSort> productImageLike(@Valid @RequestBody ProductImageLikeDTO productImageLikeDTO) { public Response<CollectionSort> productImageLike(@Valid @RequestBody ProductImageLikeDTO productImageLikeDTO) {
CollectionSort collectionSort = userLikeGroupService.productImageLike(productImageLikeDTO); CollectionSort collectionSort = userLikeGroupService.productImageLike(productImageLikeDTO);
return Response.success(collectionSort); return Response.success(collectionSort);
} }
@ApiOperation(value = "collectionLikeUpdate") @Operation(summary = "collectionLikeUpdate")
@PostMapping("/collectionLikeUpdate") @PostMapping("/collectionLikeUpdate")
public Response<Boolean> collectionLikeUpdate(@Valid @RequestBody CollectionLikeUpdateDTO collectionLikeUpdateDTO) { public Response<Boolean> collectionLikeUpdate(@Valid @RequestBody CollectionLikeUpdateDTO collectionLikeUpdateDTO) {
return Response.success(userLikeGroupService.collectionLikeUpdate(collectionLikeUpdateDTO)); return Response.success(userLikeGroupService.collectionLikeUpdate(collectionLikeUpdateDTO));
} }
@ApiOperation(value = "productImageUnLike") @Operation(summary = "productImageUnLike")
@PostMapping("/productImageUnLike") @PostMapping("/productImageUnLike")
public Response<Boolean> productImageUnLike(@Valid @RequestBody ProductImageLikeDTO productImageLikeDTO) { public Response<Boolean> productImageUnLike(@Valid @RequestBody ProductImageLikeDTO productImageLikeDTO) {
return Response.success(userLikeGroupService.productImageUnLike(productImageLikeDTO)); return Response.success(userLikeGroupService.productImageUnLike(productImageLikeDTO));
} }
@ApiOperation(value = "获取生成结果") @Operation(summary = "获取生成结果")
@PostMapping("/toProductImageResult") @PostMapping("/toProductImageResult")
public Response<List<MagicToolResultVO>> getToProductImageResult(@Valid @RequestBody List<String> taskIdList) { public Response<List<MagicToolResultVO>> getToProductImageResult(@Valid @RequestBody List<String> taskIdList) {
List<MagicToolResultVO> magicToolResultVOList = userLikeGroupService.getToProductImageResultList(taskIdList); List<MagicToolResultVO> magicToolResultVOList = userLikeGroupService.getToProductImageResultList(taskIdList);
return Response.success(magicToolResultVOList); return Response.success(magicToolResultVOList);
} }
@ApiOperation(value = "画布用户上传元素") @Operation(summary = "画布用户上传元素")
@PostMapping("/canvasElementUpload") @PostMapping("/canvasElementUpload")
public Response<CanvasElementUpload> canvasElementUpload(@RequestParam("file") MultipartFile file) { public Response<CanvasElementUpload> canvasElementUpload(@RequestParam("file") MultipartFile file) {
return Response.success(userLikeGroupService.canvasElementUpload(file)); return Response.success(userLikeGroupService.canvasElementUpload(file));
} }
@ApiOperation("productImageLikeList") @Operation(summary = "productImageLikeList")
@PostMapping("/productImageLikeList") @PostMapping("/productImageLikeList")
public Response<List<ToProductImageResultVO>> productImageLikeList(@Valid @RequestBody ToProductImageDTO toProductImageDTO) { public Response<List<ToProductImageResultVO>> productImageLikeList(@Valid @RequestBody ToProductImageDTO toProductImageDTO) {
return Response.success(userLikeGroupService.productImageLikeList(toProductImageDTO)); return Response.success(userLikeGroupService.productImageLikeList(toProductImageDTO));
} }
@ApiOperation(value = "relight") @Operation(summary = "relight")
@PostMapping("/relight") @PostMapping("/relight")
public Response<List<ToProductImageResultVO>> relight(@Valid @RequestBody ToProductImageDTO toProductImageDTO) { public Response<List<ToProductImageResultVO>> relight(@Valid @RequestBody ToProductImageDTO toProductImageDTO) {
return Response.success(userLikeGroupService.relight(toProductImageDTO)); return Response.success(userLikeGroupService.relight(toProductImageDTO));
} }
@ApiOperation(value = "转relight元素") @Operation(summary = "转relight元素")
@PostMapping("/convertRelightElement") @PostMapping("/convertRelightElement")
public Response<ToProductElementVO> convertRelightElement(@RequestParam("id") Long id) { public Response<ToProductElementVO> convertRelightElement(@RequestParam("id") Long id) {
return Response.success(userLikeGroupService.convertRelightElement(id)); return Response.success(userLikeGroupService.convertRelightElement(id));
} }
@ApiOperation(value = "获取relight结果") @Operation(summary = "获取relight结果")
@PostMapping("/relightResult") @PostMapping("/relightResult")
public Response<List<MagicToolResultVO>> getRelightResult(@Valid @RequestBody List<String> taskIdList) { public Response<List<MagicToolResultVO>> getRelightResult(@Valid @RequestBody List<String> taskIdList) {
List<MagicToolResultVO> magicToolResultVOList = userLikeGroupService.getRelightResult(taskIdList); List<MagicToolResultVO> magicToolResultVOList = userLikeGroupService.getRelightResult(taskIdList);
return Response.success(magicToolResultVOList); return Response.success(magicToolResultVOList);
} }
@ApiOperation(value = "删除toProduct Relight的结果") @Operation(summary = "删除toProduct Relight的结果")
@GetMapping("/deleteResult") @GetMapping("/deleteResult")
public Response<String> deleteResult(@RequestParam("id") Long id, public Response<String> deleteResult(@RequestParam("id") Long id,
@RequestParam("projectId") Long projectId, @RequestParam("projectId") Long projectId,
@@ -281,61 +282,61 @@ public class SavedCollectionController {
} }
} }
@ApiOperation(value = "likeHistoryRelSketch") @Operation(summary = "likeHistoryRelSketch")
@PostMapping("/likeHistoryRelSketch") @PostMapping("/likeHistoryRelSketch")
public Response<String> likeHistoryRelSketch() { public Response<String> likeHistoryRelSketch() {
return Response.success(userLikeGroupService.likeHistoryRelSketch()); return Response.success(userLikeGroupService.likeHistoryRelSketch());
} }
@ApiOperation(value = "download") @Operation(summary = "download")
@PostMapping("/download") @PostMapping("/download")
public Response<String> download() { public Response<String> download() {
return Response.success(userLikeGroupService.download()); return Response.success(userLikeGroupService.download());
} }
@ApiOperation(value = "productImageInitialize") @Operation(summary = "productImageInitialize")
@PostMapping("/productImageInitialize") @PostMapping("/productImageInitialize")
public Response<Boolean> productImageUpload(@Valid @RequestBody ProductImageInitializeDTO productImageInitializeDTO) { public Response<Boolean> productImageUpload(@Valid @RequestBody ProductImageInitializeDTO productImageInitializeDTO) {
return Response.success(userLikeGroupService.productImageInitialize(productImageInitializeDTO)); return Response.success(userLikeGroupService.productImageInitialize(productImageInitializeDTO));
} }
@ApiOperation(value = "getInitializeProgress") @Operation(summary = "getInitializeProgress")
@PostMapping("/getInitializeProgress") @PostMapping("/getInitializeProgress")
public Response<InitializeProgressVO> getInitializeProgress(@Valid @RequestBody ProductImageInitializeDTO productImageInitializeDTO) { public Response<InitializeProgressVO> getInitializeProgress(@Valid @RequestBody ProductImageInitializeDTO productImageInitializeDTO) {
return Response.success(userLikeGroupService.getInitializeProgress(productImageInitializeDTO)); return Response.success(userLikeGroupService.getInitializeProgress(productImageInitializeDTO));
} }
@ApiOperation(value = "brandDNASaveOrUpdate") @Operation(summary = "brandDNASaveOrUpdate")
@PostMapping("/brandDNASaveOrUpdate") @PostMapping("/brandDNASaveOrUpdate")
public Response<Boolean> brandDNASaveOrUpdate(@Valid @RequestBody BrandDNADTO brandDNADTO) { public Response<Boolean> brandDNASaveOrUpdate(@Valid @RequestBody BrandDNADTO brandDNADTO) {
return Response.success(userLikeGroupService.brandDNASaveOrUpdate(brandDNADTO)); return Response.success(userLikeGroupService.brandDNASaveOrUpdate(brandDNADTO));
} }
@ApiOperation(value = "brandDNADelete") @Operation(summary = "brandDNADelete")
@PostMapping("/brandDNADelete") @PostMapping("/brandDNADelete")
public Response<Boolean> brandDNADelete(@Valid @RequestBody BrandDNADTO brandDNADTO) { public Response<Boolean> brandDNADelete(@Valid @RequestBody BrandDNADTO brandDNADTO) {
return Response.success(userLikeGroupService.brandDNADelete(brandDNADTO)); return Response.success(userLikeGroupService.brandDNADelete(brandDNADTO));
} }
@ApiOperation(value = "brandDNAPage") @Operation(summary = "brandDNAPage")
@PostMapping("/brandDNAPage") @PostMapping("/brandDNAPage")
public Response<PageBaseResponse<BrandDNAVO>> brandDNAPage(@Valid @RequestBody BrandDNAQueryDTO brandDNAQueryDTO) { public Response<PageBaseResponse<BrandDNAVO>> brandDNAPage(@Valid @RequestBody BrandDNAQueryDTO brandDNAQueryDTO) {
return Response.success(userLikeGroupService.brandDNAPage(brandDNAQueryDTO)); return Response.success(userLikeGroupService.brandDNAPage(brandDNAQueryDTO));
} }
@ApiOperation(value = "brandLogoUpload") @Operation(summary = "brandLogoUpload")
@PostMapping("/brandLogoUpload") @PostMapping("/brandLogoUpload")
public Response<BrandLogoUploadVO> brandDNASaveOrUpdate(@RequestParam("file") MultipartFile file) { public Response<BrandLogoUploadVO> brandDNASaveOrUpdate(@RequestParam("file") MultipartFile file) {
return Response.success(userLikeGroupService.brandLogoUpload(file)); return Response.success(userLikeGroupService.brandLogoUpload(file));
} }
@ApiOperation(value = "brandDNAUpload") @Operation(summary = "brandDNAUpload")
@PostMapping("/brandDNAUpload") @PostMapping("/brandDNAUpload")
public Response<LibraryUpdateVo> brandDNAUpload(@RequestParam("file") MultipartFile file, @RequestParam("brandId") Long brandId) throws IOException { public Response<LibraryUpdateVo> brandDNAUpload(@RequestParam("file") MultipartFile file, @RequestParam("brandId") Long brandId) throws IOException {
return Response.success(userLikeGroupService.brandDNAUpload(file, brandId)); return Response.success(userLikeGroupService.brandDNAUpload(file, brandId));
} }
@ApiOperation(value = "brandDNAGenerate") @Operation(summary = "brandDNAGenerate")
@PostMapping("/brandDNAGenerate") @PostMapping("/brandDNAGenerate")
public Response<BrandDNAGenerateVO> brandDNAGenerate(@RequestParam("prompt") String prompt) { public Response<BrandDNAGenerateVO> brandDNAGenerate(@RequestParam("prompt") String prompt) {
return Response.success(userLikeGroupService.brandDNAGenerate(prompt)); return Response.success(userLikeGroupService.brandDNAGenerate(prompt));

View File

@@ -14,8 +14,8 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import com.paypal.http.HttpResponse; import com.paypal.http.HttpResponse;
import com.paypal.payments.Refund; import com.paypal.payments.Refund;
import com.stripe.exception.StripeException; import com.stripe.exception.StripeException;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -29,7 +29,7 @@ import java.io.IOException;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@Api(tags = "Stripe模块") @Tag(name = "Stripe模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/stripe") @RequestMapping("/api/stripe")
@@ -41,7 +41,7 @@ public class StripeController {
@Resource @Resource
private RedisUtil redisUtil; private RedisUtil redisUtil;
@ApiOperation("创建支付链接") @Operation(summary = "创建支付链接")
@PostMapping("/createOrder") @PostMapping("/createOrder")
public Response<String> pay(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) { public Response<String> pay(@Valid @RequestBody ProductPurchaseDTO productPurchaseDTO, HttpServletRequest request) {
return Response.success(stripeService.pay(productPurchaseDTO, request)); return Response.success(stripeService.pay(productPurchaseDTO, request));
@@ -50,7 +50,7 @@ public class StripeController {
@Value("${stripe.webhook.fail.reminder}") @Value("${stripe.webhook.fail.reminder}")
private String webhookReminderFlag; private String webhookReminderFlag;
@ApiOperation("支付通知") @Operation(summary = "支付通知")
@PostMapping("/trade/notify") @PostMapping("/trade/notify")
public void callback(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { public void callback(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{ try{
@@ -70,13 +70,13 @@ public class StripeController {
Long size = redisUtil.getSize(key_1); Long size = redisUtil.getSize(key_1);
// 给我发送邮件 // 给我发送邮件
if (webhookReminderFlag.equals("1") && size == 3){ if (webhookReminderFlag.equals("1") && size == 3){
SendEmailUtil.commonExceptionReminder("Stripe Webhook 回调", new String[]{"xupei3360@163.com"}); SendEmailUtil.commonExceptionReminder("Stripe Webhook 回调处理出现异常", new String[]{"xupei3360@163.com"});
} }
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
} }
} }
@ApiOperation("申请退款") @Operation(summary = "申请退款")
@GetMapping("/trade/refund/{orderNo}/{reason}") @GetMapping("/trade/refund/{orderNo}/{reason}")
public Response<HttpResponse<Refund>> refund(@PathVariable String orderNo, @PathVariable String reason) throws IOException { public Response<HttpResponse<Refund>> refund(@PathVariable String orderNo, @PathVariable String reason) throws IOException {
String response = stripeService.refund(null,orderNo,reason); String response = stripeService.refund(null,orderNo,reason);
@@ -87,7 +87,7 @@ public class StripeController {
} }
} }
@ApiOperation("获取订阅") @Operation(summary = "获取订阅")
@GetMapping("/getSubscription") @GetMapping("/getSubscription")
public Response<List<String>> getSubscription(@RequestParam String name, @RequestParam String email) { public Response<List<String>> getSubscription(@RequestParam String name, @RequestParam String email) {
try { try {
@@ -97,44 +97,44 @@ public class StripeController {
} }
} }
@ApiOperation("取消订阅") @Operation(summary = "取消订阅")
@GetMapping("/cancelSubscription") @GetMapping("/cancelSubscription")
public Response<String> cancelSubscription(@RequestParam String subscriptionId, @RequestParam(required = false) String reason) { public Response<String> cancelSubscription(@RequestParam String subscriptionId, @RequestParam(required = false) String reason) {
stripeService.cancelSubscription(subscriptionId, reason); stripeService.cancelSubscription(subscriptionId, reason);
return Response.success("success"); return Response.success("success");
} }
@ApiOperation("创建推广码") @Operation(summary = "创建推广码")
@PostMapping("/createCoupon") @PostMapping("/createCoupon")
public Response<String> createCoupon(@Valid @RequestBody CreateCouponDTO createCouponDTO){ public Response<String> createCoupon(@Valid @RequestBody CreateCouponDTO createCouponDTO){
return Response.success(stripeService.createCoupon(createCouponDTO)); return Response.success(stripeService.createCoupon(createCouponDTO));
} }
@ApiOperation("检查推广码") @Operation(summary = "检查推广码")
@GetMapping("/checkCoupon") @GetMapping("/checkCoupon")
public Response<CheckCouponsVO> checkCoupon(@RequestParam String promotionCode, @RequestParam Long price){ public Response<CheckCouponsVO> checkCoupon(@RequestParam String promotionCode, @RequestParam Long price){
return Response.success(stripeService.checkProductCoupon(promotionCode, price)); return Response.success(stripeService.checkProductCoupon(promotionCode, price));
} }
@ApiOperation("获取所有推广码") @Operation(summary = "获取所有推广码")
@PostMapping("/getAllCoupons") @PostMapping("/getAllCoupons")
public Response<IPage<ProductCoupons>> getAllCoupons(@RequestBody QueryCouponsPageDTO queryCouponsPageDTO){ public Response<IPage<ProductCoupons>> getAllCoupons(@RequestBody QueryCouponsPageDTO queryCouponsPageDTO){
return Response.success(stripeService.getAllCoupons(queryCouponsPageDTO)); return Response.success(stripeService.getAllCoupons(queryCouponsPageDTO));
} }
@ApiOperation("检索优惠券") @Operation(summary = "检索优惠券")
@GetMapping("/retrieveCoupon") @GetMapping("/retrieveCoupon")
public Response<String> retrieveCoupon(@RequestParam String couponId){ public Response<String> retrieveCoupon(@RequestParam String couponId){
return Response.success(stripeService.retrieveCoupon(couponId)); return Response.success(stripeService.retrieveCoupon(couponId));
} }
@ApiOperation("检索推广码") @Operation(summary = "检索推广码")
@GetMapping("/retrievePromotionCode") @GetMapping("/retrievePromotionCode")
public Response<String> retrievePromotionCode(@RequestParam String retrievePromotionCode){ public Response<String> retrievePromotionCode(@RequestParam String retrievePromotionCode){
return Response.success(stripeService.retrievePromotionCode(retrievePromotionCode)); return Response.success(stripeService.retrievePromotionCode(retrievePromotionCode));
} }
@ApiOperation("更新推广码信息") @Operation(summary = "更新推广码信息")
@GetMapping("/updatePromCodeInfo") @GetMapping("/updatePromCodeInfo")
public Response<ProductCoupons> updateCouponsInfo(@RequestParam Long id, @RequestParam(required = false) String paidCommission, public Response<ProductCoupons> updateCouponsInfo(@RequestParam Long id, @RequestParam(required = false) String paidCommission,
@RequestParam(required = false) String cooperator, @RequestParam(required = false) String cooperator,
@@ -143,7 +143,7 @@ public class StripeController {
return Response.success(stripeService.updateCouponsInfo(id, paidCommission, cooperator, remark, startTime)); return Response.success(stripeService.updateCouponsInfo(id, paidCommission, cooperator, remark, startTime));
} }
@ApiOperation("删除推广码") @Operation(summary = "删除推广码")
@GetMapping("/deletePromCode") @GetMapping("/deletePromCode")
public Response<String> deleteCoupon(@RequestParam Long id){ public Response<String> deleteCoupon(@RequestParam Long id){
stripeService.deleteCoupon(id); stripeService.deleteCoupon(id);
@@ -157,31 +157,31 @@ public class StripeController {
return Response.success("success"); return Response.success("success");
} }
@ApiOperation("创建订阅 临时") @Operation(summary = "创建订阅 临时")
@GetMapping("/createSubscriptionTemp") @GetMapping("/createSubscriptionTemp")
public Response<String> createSubscriptionTemp(@RequestParam String name, @RequestParam String email) { public Response<String> createSubscriptionTemp(@RequestParam String name, @RequestParam String email) {
return Response.success(stripeService.createSubscriptionTemp(name, email)); return Response.success(stripeService.createSubscriptionTemp(name, email));
} }
@ApiOperation("修改用户默认支付方式 临时") @Operation(summary = "修改用户默认支付方式 临时")
@GetMapping("/changeCustomerPayment") @GetMapping("/changeCustomerPayment")
public Response<String> changeCustomerPayment(@RequestParam String name, @RequestParam String email) { public Response<String> changeCustomerPayment(@RequestParam String name, @RequestParam String email) {
return Response.success(stripeService.changeCustomerPayment(name, email)); return Response.success(stripeService.changeCustomerPayment(name, email));
} }
@ApiOperation("临时 发送续订失败邮件") @Operation(summary = "临时 发送续订失败邮件")
@GetMapping("/sendRenewalFailEmail") @GetMapping("/sendRenewalFailEmail")
public Response<Boolean> sendRenewalFailEmail(@RequestParam String invoiceId, @RequestParam String subscriptionId, @RequestParam String orderNo) { public Response<Boolean> sendRenewalFailEmail(@RequestParam String invoiceId, @RequestParam String subscriptionId, @RequestParam String orderNo) {
return Response.success(stripeService.sendRenewalFailEmail(invoiceId, subscriptionId,orderNo)); return Response.success(stripeService.sendRenewalFailEmail(invoiceId, subscriptionId,orderNo));
} }
@ApiOperation("临时 查询指定用户绑定的付款方式") @Operation(summary = "临时 查询指定用户绑定的付款方式")
@GetMapping("/getCustomerPaymentMethod") @GetMapping("/getCustomerPaymentMethod")
public Response<List<Map<String,String>>> getCustomerPaymentMethod(@RequestParam String name, @RequestParam String email) { public Response<List<Map<String,String>>> getCustomerPaymentMethod(@RequestParam String name, @RequestParam String email) {
return Response.success(stripeService.getCustomerPaymentMethod(name, email)); return Response.success(stripeService.getCustomerPaymentMethod(name, email));
} }
@ApiOperation("临时 解绑指定用户绑定的所有付款方式") @Operation(summary = "临时 解绑指定用户绑定的所有付款方式")
@GetMapping("/detachCustomerAllPaymentMethod") @GetMapping("/detachCustomerAllPaymentMethod")
public Response<String> detachCustomerAllPaymentMethod(@RequestParam String name, @RequestParam String email) { public Response<String> detachCustomerAllPaymentMethod(@RequestParam String name, @RequestParam String email) {
return Response.success(stripeService.detachCustomerAllPaymentMethod(name, email)); return Response.success(stripeService.detachCustomerAllPaymentMethod(name, email));

View File

@@ -0,0 +1,112 @@
package com.ai.da.controller;
import com.ai.da.common.response.Response;
import com.ai.da.common.task.SubscriptionReminderTask;
import com.ai.da.mapper.primary.entity.SubscriptionPlan;
import com.ai.da.model.dto.SubscriptionPlanDTO;
import com.ai.da.model.dto.SubscriptionPlanPageQuery;
import com.ai.da.model.dto.UpdateSubscriptionPlanDTO;
import com.ai.da.model.vo.SubscriptionPlanVO;
import com.ai.da.service.SubscriptionPlanService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Tag(name = "订阅计划模块")
@Slf4j
@RequiredArgsConstructor
@RestController
@RequestMapping("/api/subscription_plan")
public class SubscriptionPlanController {
private final SubscriptionPlanService subscriptionPlanService;
private final SubscriptionReminderTask subscriptionReminderTask;
@Operation(summary = "创建订阅计划")
@PostMapping("/createPlan")
public Response<String> createPlan(@Valid @RequestBody SubscriptionPlanDTO subscriptionPlanDTO) {
subscriptionPlanService.createPlan(subscriptionPlanDTO);
return Response.success();
}
@Operation(summary = "更新订阅计划")
@PostMapping("/updatePlan")
public Response<String> updatePlan(@Valid @RequestBody UpdateSubscriptionPlanDTO updateDTO) {
subscriptionPlanService.updatePlan(updateDTO);
return Response.success();
}
@Operation(summary = "搜索订阅计划")
@PostMapping("/searchByOrganizationIdAndStatus")
public Response<List<SubscriptionPlan>> searchByOrganizationIdAndStatus(@Valid @RequestBody SubscriptionPlanPageQuery subscriptionPlanPageQuery) {
return Response.success(subscriptionPlanService.searchByOrganizationIdAndStatus(subscriptionPlanPageQuery));
}
@Operation(summary = "分页搜索订阅计划")
@PostMapping("/searchByPage")
public Response<IPage<SubscriptionPlanVO>> searchByPage(@Valid @RequestBody SubscriptionPlanPageQuery subscriptionPlanPageQuery) {
IPage<SubscriptionPlanVO> subscriptionPlanVOIPage = subscriptionPlanService.searchByPage(subscriptionPlanPageQuery);
return Response.success(subscriptionPlanVOIPage);
}
@Operation(summary = "删除订阅计划")
@GetMapping("/deletePlan")
public Response<String> deletePlan(@RequestParam Long id) {
subscriptionPlanService.deletePlan(id);
return Response.success();
}
@Operation(summary = "管理员切换订阅计划")
@GetMapping("/switchSubscriptionPlan")
public Response<String> switchSubscriptionPlan(@RequestParam Long targetSubscriptionPlanId, @RequestParam(required = false) Long adminAccId) {
subscriptionPlanService.switchSubscriptionPlan(targetSubscriptionPlanId, adminAccId);
return Response.success();
}
@Operation(summary = "子账号切换订阅计划")
@GetMapping("/switchSubAccSubscriptionPlan")
public Response<String> switchSubAccSubscriptionPlan(@RequestParam Long targetSubscriptionPlanId, @RequestParam Long subAccId) {
subscriptionPlanService.switchSubAccSubscriptionPlan(targetSubscriptionPlanId, subAccId);
return Response.success();
}
// @Hidden
@Operation(summary = "activeSubscriptionPlan")
@GetMapping("/activeSubscriptionPlan")
public Response<String> activeSubscriptionPlan() {
subscriptionPlanService.activeSubscriptionPlan(null);
return Response.success();
}
// @Hidden
@Operation(summary = "expireSubscription")
@GetMapping("/expireSubscription")
public Response<String> expireSubscription() {
subscriptionPlanService.expireSubscription();
return Response.success();
}
@Operation(summary = "subscriptionReminder")
@GetMapping("/subscriptionReminder")
public Response<String> subscriptionReminder() {
subscriptionReminderTask.subscriptionReminder();
return Response.success();
}
@Operation(summary = "trialReminder")
@GetMapping("/trialReminder")
public Response<String> trialReminder() {
subscriptionReminderTask.trialReminder();
return Response.success();
}
}

View File

@@ -6,8 +6,8 @@ import com.ai.da.mapper.primary.entity.Product;
import com.ai.da.mapper.primary.entity.Tags; import com.ai.da.mapper.primary.entity.Tags;
import com.ai.da.service.ProductService; import com.ai.da.service.ProductService;
import com.ai.da.service.TagsService; import com.ai.da.service.TagsService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
@@ -15,7 +15,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
@CrossOrigin //开放前端的跨域访问 @CrossOrigin //开放前端的跨域访问
@Api(tags = "标签管理") @Tag(name = "标签管理")
@RestController @RestController
@RequestMapping("/api/tags") @RequestMapping("/api/tags")
public class TagsController { public class TagsController {
@@ -23,7 +23,7 @@ public class TagsController {
@Resource @Resource
private TagsService tagsService; private TagsService tagsService;
@ApiOperation("获取标签") @Operation(summary = "获取标签")
@GetMapping("/getTags") @GetMapping("/getTags")
public Response<List<Tags>> getTags(@RequestParam(value = "userInput", required = false) String userInput) { public Response<List<Tags>> getTags(@RequestParam(value = "userInput", required = false) String userInput) {
return Response.success(tagsService.getTags(userInput)); return Response.success(tagsService.getTags(userInput));

View File

@@ -7,8 +7,8 @@ import com.ai.da.model.dto.SuperResolutionDTO;
import com.ai.da.model.dto.TaskDTO; import com.ai.da.model.dto.TaskDTO;
import com.ai.da.model.vo.TaskVO; import com.ai.da.model.vo.TaskVO;
import com.ai.da.service.TaskListService; import com.ai.da.service.TaskListService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@@ -16,7 +16,7 @@ import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import java.util.List; import java.util.List;
@Api(tags = "任务列表模块") @Tag(name = "任务列表模块")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/tasks") @RequestMapping("/api/tasks")
@@ -26,13 +26,13 @@ public class TaskListController {
private TaskListService taskListService; private TaskListService taskListService;
@PostMapping("/getList") @PostMapping("/getList")
@ApiOperation("获取未执行完的任务") @Operation(summary = "获取未执行完的任务")
public Response<List<TaskDTO<SuperResolutionDTO>>> getTaskList(@Valid @RequestBody List<String> taskIdList) { public Response<List<TaskDTO<SuperResolutionDTO>>> getTaskList(@Valid @RequestBody List<String> taskIdList) {
return Response.success(taskListService.getExecTask(taskIdList)); return Response.success(taskListService.getExecTask(taskIdList));
} }
@PostMapping("/getAllTask") @PostMapping("/getAllTask")
@ApiOperation("获取所有任务") @Operation(summary = "获取所有任务")
public Response<PageBaseResponse<TaskVO>> getAllTask(@Valid @RequestBody QueryTaskHistoryDTO queryTaskHistoryDTO) { public Response<PageBaseResponse<TaskVO>> getAllTask(@Valid @RequestBody QueryTaskHistoryDTO queryTaskHistoryDTO) {
return Response.success(taskListService.getAllTask(queryTaskHistoryDTO)); return Response.success(taskListService.getAllTask(queryTaskHistoryDTO));
} }

View File

@@ -10,8 +10,8 @@ import com.ai.da.model.vo.DesignCollectionVO;
import com.ai.da.service.AccountService; import com.ai.da.service.AccountService;
import com.ai.da.service.DesignService; import com.ai.da.service.DesignService;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.security.core.annotation.AuthenticationPrincipal;
@@ -25,7 +25,7 @@ import jakarta.validation.Valid;
import java.security.cert.X509Certificate; import java.security.cert.X509Certificate;
@Api(tags = "Third Party Modules") @Tag(name = "Third Party Modules")
@Slf4j @Slf4j
@RestController @RestController
@RequestMapping("/api/third/party") @RequestMapping("/api/third/party")
@@ -46,35 +46,35 @@ public class ThirdPartyController {
return Response.success(accountService.addUser(accountAddDTO)); return Response.success(accountService.addUser(accountAddDTO));
}*/ }*/
@ApiOperation(value = "Edit user information") @Operation(summary = "Edit user information")
@PostMapping("/editUser") @PostMapping("/editUser")
public Response<Boolean> editUser(@RequestBody AccountEditDTO accountEditDTO) { public Response<Boolean> editUser(@RequestBody AccountEditDTO accountEditDTO) {
return Response.success(accountService.editUser(accountEditDTO)); return Response.success(accountService.editUser(accountEditDTO));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "Add user information") @Operation(summary = "Add user information")
@PostMapping("/addTrialUser") @PostMapping("/addTrialUser")
public Response<Boolean> addTrialUser(@RequestBody AccountTrialDTO accountTrialDTO, HttpServletRequest request) { public Response<Boolean> addTrialUser(@RequestBody AccountTrialDTO accountTrialDTO, HttpServletRequest request) {
return Response.success(accountService.addTrialUser(accountTrialDTO, request)); return Response.success(accountService.addTrialUser(accountTrialDTO, request));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @Operation(summary = "add No Login Required")
@PostMapping("/addNoLoginRequired") @PostMapping("/addNoLoginRequired")
public Response<Boolean> addNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO) { public Response<Boolean> addNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO) {
return Response.success(accountService.addNoLoginRequired(noLoginRequiredDTO)); return Response.success(accountService.addNoLoginRequired(noLoginRequiredDTO));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @Operation(summary = "add No Login Required")
@PostMapping("/deleteNoLoginRequired") @PostMapping("/deleteNoLoginRequired")
public Response<Boolean> deleteNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO) { public Response<Boolean> deleteNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO) {
return Response.success(accountService.deleteNoLoginRequired(noLoginRequiredDTO)); return Response.success(accountService.deleteNoLoginRequired(noLoginRequiredDTO));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @Operation(summary = "add No Login Required")
@PostMapping("/existNoLoginRequired") @PostMapping("/existNoLoginRequired")
public Response<Boolean> existNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) { public Response<Boolean> existNoLoginRequired(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) {
return Response.success(accountService.existNoLoginRequired(noLoginRequiredDTO, request)); return Response.success(accountService.existNoLoginRequired(noLoginRequiredDTO, request));
@@ -99,14 +99,14 @@ public class ThirdPartyController {
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @Operation(summary = "add No Login Required")
@PostMapping("/addNoLoginRequiredNew") @PostMapping("/addNoLoginRequiredNew")
public Response<String> addNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) { public Response<String> addNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) {
return Response.success(accountService.addNoLoginRequiredNew(noLoginRequiredDTO, request)); return Response.success(accountService.addNoLoginRequiredNew(noLoginRequiredDTO, request));
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @Operation(summary = "add No Login Required")
@PostMapping("/deleteNoLoginRequiredNew") @PostMapping("/deleteNoLoginRequiredNew")
public Response<Boolean> deleteNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) { public Response<Boolean> deleteNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) {
return Response.success(accountService.deleteNoLoginRequiredNew(noLoginRequiredDTO, request)); return Response.success(accountService.deleteNoLoginRequiredNew(noLoginRequiredDTO, request));
@@ -115,14 +115,14 @@ public class ThirdPartyController {
@Value("${redirect_url}") @Value("${redirect_url}")
private String REDIRECT_URL; private String REDIRECT_URL;
@CrossOrigin @CrossOrigin
@ApiOperation(value = "add No Login Required") @Operation(summary = "add No Login Required")
@PostMapping("/getRedirectUrl") @PostMapping("/getRedirectUrl")
public Response<String> getRedirectUrl() { public Response<String> getRedirectUrl() {
return Response.success(REDIRECT_URL); return Response.success(REDIRECT_URL);
} }
@CrossOrigin @CrossOrigin
@ApiOperation(value = "updateNoLoginRequiredNew") @Operation(summary = "updateNoLoginRequiredNew")
@PostMapping("/updateNoLoginRequiredNew") @PostMapping("/updateNoLoginRequiredNew")
public Response<String> updateNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) { public Response<String> updateNoLoginRequiredNew(@RequestBody NoLoginRequiredDTO noLoginRequiredDTO, HttpServletRequest request) {
return Response.success(accountService.updateNoLoginRequiredNew(noLoginRequiredDTO, request)); return Response.success(accountService.updateNoLoginRequiredNew(noLoginRequiredDTO, request));
@@ -145,21 +145,21 @@ public class ThirdPartyController {
return Response.success(accountService.parseWeChatCode(code, type)); return Response.success(accountService.parseWeChatCode(code, type));
} }
@ApiOperation(value = "接收Design结果") @Operation(summary = "接收Design结果")
@PostMapping("/receiveDesignResults") @PostMapping("/receiveDesignResults")
@CrossOrigin @CrossOrigin
public Response<Boolean> receiveDesignResults(@Valid @RequestBody JSONObject responseObject) { public Response<Boolean> receiveDesignResults(@Valid @RequestBody JSONObject responseObject) {
return Response.success(designService.receiveDesignResults(responseObject)); return Response.success(designService.receiveDesignResults(responseObject));
} }
@ApiOperation(value = "接收Design入参") @Operation(summary = "接收Design入参")
@PostMapping("/receiveDesignParams") @PostMapping("/receiveDesignParams")
@CrossOrigin @CrossOrigin
public Response<Boolean> receiveDesignParams(@Valid @RequestBody ReceiveDesignParam receiveDesignParam) { public Response<Boolean> receiveDesignParams(@Valid @RequestBody ReceiveDesignParam receiveDesignParam) {
return Response.success(designService.receiveDesignParams(receiveDesignParam)); return Response.success(designService.receiveDesignParams(receiveDesignParam));
} }
@ApiOperation(value = "刷新minio预签名地址") @Operation(summary = "刷新minio预签名地址")
@GetMapping("/refreshMinioUrl") @GetMapping("/refreshMinioUrl")
public Response<String> refreshMinioUrl(@RequestParam("path") String path){ public Response<String> refreshMinioUrl(@RequestParam("path") String path){
return Response.success(minioUtil.getPreSignedUrl(path, CommonConstant.MINIO_IMAGE_EXPIRE_TIME)); return Response.success(minioUtil.getPreSignedUrl(path, CommonConstant.MINIO_IMAGE_EXPIRE_TIME));

View File

@@ -11,9 +11,9 @@ import com.ai.da.model.vo.ModelsVO;
import com.ai.da.model.vo.StyleVO; import com.ai.da.model.vo.StyleVO;
import com.ai.da.model.vo.WorkspaceVO; import com.ai.da.model.vo.WorkspaceVO;
import com.ai.da.service.WorkspaceService; import com.ai.da.service.WorkspaceService;
import io.swagger.annotations.Api; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.annotations.ApiOperation; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.annotations.ApiParam; import io.swagger.v3.oas.annotations.tags.Tag;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@@ -36,7 +36,7 @@ import java.util.List;
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@RequestMapping("/api/workspace") @RequestMapping("/api/workspace")
@Api(value = "", tags = "工作空间") @Tag(name = "工作空间")
public class WorkspaceController { public class WorkspaceController {
@Resource @Resource
@@ -47,8 +47,8 @@ public class WorkspaceController {
*/ */
@GetMapping("/detail") @GetMapping("/detail")
@ApiOperationSupport(order = 1) @ApiOperationSupport(order = 1)
@ApiOperation(value = "详情", notes = "传入workspace") @Operation(summary = "详情", description = "传入workspace")
public Response<WorkspaceVO> detail(@ApiParam(value = "主键集合", required = true) @RequestParam Long id) { public Response<WorkspaceVO> detail(@Parameter(description = "主键集合", required = true) @RequestParam Long id) {
WorkspaceVO detail = workspaceService.getByIdNew(id); WorkspaceVO detail = workspaceService.getByIdNew(id);
return Response.success(detail); return Response.success(detail);
} }
@@ -58,7 +58,7 @@ public class WorkspaceController {
*/ */
@PostMapping("/list") @PostMapping("/list")
@ApiOperationSupport(order = 2) @ApiOperationSupport(order = 2)
@ApiOperation(value = "分页", notes = "传入workspace") @Operation(summary = "分页", description = "传入workspace")
public Response<WorkspaceVO> list(@Valid @RequestBody WorkspaceDTO query) { public Response<WorkspaceVO> list(@Valid @RequestBody WorkspaceDTO query) {
WorkspaceVO response = workspaceService.getPage(query); WorkspaceVO response = workspaceService.getPage(query);
return Response.success(response); return Response.success(response);
@@ -69,7 +69,7 @@ public class WorkspaceController {
*/ */
@PostMapping("/saveOrUpdate") @PostMapping("/saveOrUpdate")
@ApiOperationSupport(order = 3) @ApiOperationSupport(order = 3)
@ApiOperation(value = "新增或编辑", notes = "传入workspace") @Operation(summary = "新增或编辑", description = "传入workspace")
public Response saveOrUpdate(@Valid @RequestBody WorkspaceSaveDTO workspaceDTO) { public Response saveOrUpdate(@Valid @RequestBody WorkspaceSaveDTO workspaceDTO) {
return Response.success(workspaceService.saveOrUpdate(workspaceDTO)); return Response.success(workspaceService.saveOrUpdate(workspaceDTO));
} }
@@ -80,14 +80,14 @@ public class WorkspaceController {
*/ */
@DeleteMapping("/remove") @DeleteMapping("/remove")
@ApiOperationSupport(order = 4) @ApiOperationSupport(order = 4)
@ApiOperation(value = "删除", notes = "传入id") @Operation(summary = "删除", description = "传入id")
public Response<List<Long>> remove(@Valid @RequestBody List<Workspace> workspaceList) { public Response<List<Long>> remove(@Valid @RequestBody List<Workspace> workspaceList) {
return Response.success(workspaceService.delete(workspaceList)); return Response.success(workspaceService.delete(workspaceList));
} }
@GetMapping("/enumValues") @GetMapping("/enumValues")
@ApiOperationSupport(order = 5) @ApiOperationSupport(order = 5)
@ApiOperation(value = "获取枚举类值") @Operation(summary = "获取枚举类值")
public Response<List<BizJson>> enumValues(@RequestParam("enumName") String enumName) { public Response<List<BizJson>> enumValues(@RequestParam("enumName") String enumName) {
List<BizJson> bizJsonList = workspaceService.getEnumValues(enumName); List<BizJson> bizJsonList = workspaceService.getEnumValues(enumName);
return Response.success(bizJsonList); return Response.success(bizJsonList);
@@ -95,7 +95,7 @@ public class WorkspaceController {
@GetMapping("/getMannequins") @GetMapping("/getMannequins")
@ApiOperationSupport(order = 6) @ApiOperationSupport(order = 6)
@ApiOperation(value = "获取模特") @Operation(summary = "获取模特")
public Response<List<ModelsVO>> getMannequins(@RequestParam("sex") String sex, @RequestParam("style") String style, @RequestParam("ageGroup") String ageGroup) { public Response<List<ModelsVO>> getMannequins(@RequestParam("sex") String sex, @RequestParam("style") String style, @RequestParam("ageGroup") String ageGroup) {
List<ModelsVO> modelsVO = workspaceService.getMannequins(sex, style, ageGroup); List<ModelsVO> modelsVO = workspaceService.getMannequins(sex, style, ageGroup);
return Response.success(modelsVO); return Response.success(modelsVO);
@@ -104,7 +104,7 @@ public class WorkspaceController {
@PostMapping("system_file_copy") @PostMapping("system_file_copy")
@ApiOperationSupport(order = 7) @ApiOperationSupport(order = 7)
@ApiOperation(value = "minio数据迁移") @Operation(summary = "minio数据迁移")
public Response<Boolean> systemFileCopy() { public Response<Boolean> systemFileCopy() {
workspaceService.systemFileCopy(); workspaceService.systemFileCopy();
return Response.success(true); return Response.success(true);
@@ -112,7 +112,7 @@ public class WorkspaceController {
@PostMapping("moveFile") @PostMapping("moveFile")
@ApiOperationSupport(order = 7) @ApiOperationSupport(order = 7)
@ApiOperation(value = "增加一级性别路径") @Operation(summary = "增加一级性别路径")
public Response<Boolean> moveFile() { public Response<Boolean> moveFile() {
workspaceService.moveFile(); workspaceService.moveFile();
return Response.success(true); return Response.success(true);
@@ -120,7 +120,7 @@ public class WorkspaceController {
@GetMapping("/maleDataInsert") @GetMapping("/maleDataInsert")
@ApiOperationSupport(order = 8) @ApiOperationSupport(order = 8)
@ApiOperation(value = "男装数据入库入minio") @Operation(summary = "男装数据入库入minio")
public Response<Boolean> maleDataInsert() throws FileNotFoundException { public Response<Boolean> maleDataInsert() throws FileNotFoundException {
// workspaceService.maleDataInsert(); // workspaceService.maleDataInsert();
return Response.success(true); return Response.success(true);
@@ -128,14 +128,14 @@ public class WorkspaceController {
@PostMapping("styleList") @PostMapping("styleList")
@ApiOperationSupport(order = 9) @ApiOperationSupport(order = 9)
@ApiOperation(value = "获取style列表") @Operation(summary = "获取style列表")
public Response<List<StyleVO>> styleList() { public Response<List<StyleVO>> styleList() {
return Response.success(workspaceService.styleList()); return Response.success(workspaceService.styleList());
} }
@PostMapping("/saveOrUpdateProject") @PostMapping("/saveOrUpdateProject")
@ApiOperationSupport(order = 3) @ApiOperationSupport(order = 3)
@ApiOperation(value = "新增或编辑", notes = "传入project") @Operation(summary = "新增或编辑", description = "传入project")
public Response saveOrUpdateProject(@Valid @RequestBody ProjectDTO projectDTO) { public Response saveOrUpdateProject(@Valid @RequestBody ProjectDTO projectDTO) {
return Response.success(workspaceService.saveOrUpdateProject(projectDTO)); return Response.success(workspaceService.saveOrUpdateProject(projectDTO));
} }

View File

@@ -0,0 +1,21 @@
package com.ai.da.feign.gateway;
import com.ai.da.common.response.Response;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* 调用 Gateway 黑名单接口,将指定用户的 token 加入黑名单。
* 替代原来的 SellerFeignClient.clearTokenCache。
*/
@FeignClient(name = "aida-gateway", path = "/internal")
public interface GatewayFeignClient {
/**
* 将用户 token 加入黑名单。
* 后续 Gateway 会拒绝携带该用户 token 的请求。
*/
@PostMapping("/logout")
Response<Void> logout(@RequestParam("userId") Long userId);
}

View File

@@ -0,0 +1,20 @@
package com.ai.da.feign.seller;
import com.ai.da.common.response.Response;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
/**
* 调用 aida-seller 设计师相关接口的 Feign 客户端
*/
@FeignClient(name = "aida-seller", path = "/api/designer")
public interface SellerFeignClient {
@GetMapping("/check")
Response<Boolean> checkDesignerQualification(@RequestParam("userId") Long userId);
@PostMapping("/cache/clear")
Response<Void> clearTokenCache(@RequestParam("userId") Long userId);
}

View File

@@ -0,0 +1,12 @@
package com.ai.da.mapper.primary;
import com.ai.da.mapper.primary.entity.Contestant;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ContestantMapper extends BaseMapper<Contestant> {
}

View File

@@ -19,7 +19,7 @@ public interface DesignMapper extends CommonMapper<Design> {
Long insertDesign(Design design); Long insertDesign(Design design);
List<UserDesignStatisticDTO> getDesignStatistic(String startTime, String endTime, List<Long> ids, String email, List<UserDesignStatisticDTO> getDesignStatistic(String startTime, String endTime, List<Long> ids, String email,
String role, String organizationName); String role, String organizationName, boolean filterBySecond);
List<Design> selectDeleteList(); List<Design> selectDeleteList();
} }

View File

@@ -4,6 +4,7 @@ import com.ai.da.common.config.mybatis.plus.CommonMapper;
import com.ai.da.mapper.primary.entity.Notification; import com.ai.da.mapper.primary.entity.Notification;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -20,5 +21,5 @@ public interface NotificationMapper extends CommonMapper<Notification> {
void setPersonalNotificationAllRead(String type, Long receiverId, LocalDateTime time); void setPersonalNotificationAllRead(String type, Long receiverId, LocalDateTime time);
List<Long> getUnreadSysNotification(Long accountId); List<Long> getUnreadSysNotification(Long accountId, Date createTime);
} }

View File

@@ -0,0 +1,29 @@
package com.ai.da.mapper.primary;
import com.ai.da.mapper.primary.entity.SubscriptionPlan;
import com.ai.da.model.vo.SubscriptionPlanVO;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
public interface SubscriptionPlanMapper extends BaseMapper<SubscriptionPlan> {
/**
* 关联查询订阅计划信息(包含管理员邮箱)- 分页
*/
@Select("""
SELECT sp.*,
a.user_email AS adminAccEmail,
a.user_name AS adminAccName,
o.name AS organizationName
FROM t_subscription_plan sp
LEFT JOIN t_account a ON sp.admin_acc_id = a.id
LEFT JOIN t_organization o on sp.organization_id = o.id
${ew.customSqlSegment}
""")
Page<SubscriptionPlanVO> selectWithEmailPage(Page<SubscriptionPlanVO> page,
@Param(Constants.WRAPPER) Wrapper<?> wrapper);
}

View File

@@ -0,0 +1,7 @@
package com.ai.da.mapper.primary;
import com.ai.da.common.config.mybatis.plus.CommonMapper;
import com.ai.da.mapper.primary.entity.UserPreference;
public interface UserPreferenceMapper extends CommonMapper<UserPreference> {
}

View File

@@ -3,6 +3,8 @@ package com.ai.da.mapper.primary;
import com.ai.da.common.config.mybatis.plus.CommonMapper; import com.ai.da.common.config.mybatis.plus.CommonMapper;
import com.ai.da.mapper.primary.entity.WorkspaceRelStyle; import com.ai.da.mapper.primary.entity.WorkspaceRelStyle;
import java.util.List;
/** /**
* Mapper 接口 * Mapper 接口
* *
@@ -11,5 +13,11 @@ import com.ai.da.mapper.primary.entity.WorkspaceRelStyle;
*/ */
public interface WorkspaceRelStyleMapper extends CommonMapper<WorkspaceRelStyle> { public interface WorkspaceRelStyleMapper extends CommonMapper<WorkspaceRelStyle> {
/**
* 根据projectId查询workspaceRelStyles
* @param projectId 项目ID
* @return workspaceRelStyles列表
*/
List<WorkspaceRelStyle> selectByProjectId(Long projectId);
} }

View File

@@ -1,14 +1,14 @@
package com.ai.da.mapper.primary.entity; package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@Data @Data
@TableName("t_api_generate") @TableName("t_api_generate")
@ApiModel("调用第三方api的所有记录") @Schema(description = "调用第三方api的所有记录")
public class APIGenerate extends BaseEntity{ public class APIGenerate extends BaseEntity{
// 用户id // 用户id
private Long accountId; private Long accountId;

View File

@@ -1,12 +1,13 @@
package com.ai.da.mapper.primary.entity; package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import java.io.Serializable; import java.io.Serializable;
@@ -132,12 +133,36 @@ public class Account implements Serializable {
private String invitationCode; private String invitationCode;
@ApiModelProperty("title") @Schema(description = "title")
private String title; private String title;
@ApiModelProperty("surname") @Schema(description = "surname")
private String surname; private String surname;
@ApiModelProperty("givenName") @Schema(description = "givenName")
private String givenName; private String givenName;
private Long subscriptionPlanId;
// 在类内部定义的枚举
@Getter
public enum SystemRole {
VISITOR("游客", 0),
YEARLY("年付用户", 1),
MONTHLY("月付用户", 2),
TRIAL("试用用户", 3),
EVENT_USER("参加活动获取30天有效期和6000个积分的用户", 4),
ENTERPRISE_ADMIN("企业管理员账号", 5),
ENTERPRISE_SUB("企业子账号", 6),
EDUCATION_ADMIN("学校管理员", 7),
EDUCATION_SUB("学校子账号", 8);
private final String desc;
private final int code;
SystemRole(String desc, int code) {
this.desc = desc;
this.code = code;
}
}
} }

View File

@@ -1,9 +1,9 @@
package com.ai.da.mapper.primary.entity; package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -27,16 +27,16 @@ public class Canvas implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty("ID") @Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;
@ApiModelProperty("url") @Schema(description = "url")
private String url; private String url;
@ApiModelProperty("accountId") @Schema(description = "accountId")
private Long accountId; private Long accountId;
@ApiModelProperty("createTime") @Schema(description = "createTime")
private LocalDateTime createTime; private LocalDateTime createTime;
} }

View File

@@ -1,9 +1,9 @@
package com.ai.da.mapper.primary.entity; package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -22,22 +22,22 @@ public class ChatMessage implements Serializable {
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;
@ApiModelProperty("项目ID") @Schema(description = "项目ID")
private Long projectId; private Long projectId;
@ApiModelProperty("角色system/user") @Schema(description = "角色system/user")
private String role; private String role;
@ApiModelProperty("排序") @Schema(description = "排序")
private Integer seq; private Integer seq;
@ApiModelProperty("内容") @Schema(description = "内容")
private String content; private String content;
@ApiModelProperty("用户ID") @Schema(description = "用户ID")
private Long accountId; private Long accountId;
@ApiModelProperty("0对话内容1颜色2图片") @Schema(description = "0对话内容1颜色2图片")
private Integer isImage; private Integer isImage;
/** /**
* 输入 * 输入
@@ -56,6 +56,6 @@ public class ChatMessage implements Serializable {
*/ */
private String totalCost; private String totalCost;
@ApiModelProperty("创建时间") @Schema(description = "创建时间")
private LocalDateTime createTime; private LocalDateTime createTime;
} }

View File

@@ -1,9 +1,9 @@
package com.ai.da.mapper.primary.entity; package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -20,7 +20,7 @@ public class ChatRobot implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty("ID") @Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;

View File

@@ -1,9 +1,9 @@
package com.ai.da.mapper.primary.entity; package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -18,22 +18,22 @@ import java.time.LocalDateTime;
public class Classification implements Serializable { public class Classification implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ID") @Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;
@ApiModelProperty(value = "分类名称") @Schema(description = "分类名称")
private String classificationName; private String classificationName;
@ApiModelProperty(value = "分类类型") @Schema(description = "分类类型")
private String type; private String type;
@ApiModelProperty(value = "父菜单ID") @Schema(description = "父菜单ID")
private Long parentId; private Long parentId;
@ApiModelProperty(value = "用户ID") @Schema(description = "用户ID")
private Long userId; private Long userId;
@ApiModelProperty(value = "创建时间") @Schema(description = "创建时间")
private LocalDateTime createTime; private LocalDateTime createTime;
@ApiModelProperty(value = "更新时间") @Schema(description = "更新时间")
private LocalDateTime updateTime; private LocalDateTime updateTime;
@ApiModelProperty(value = "是否删除1:是0:否") @Schema(description = "是否删除1:是0:否")
private Integer isDeleted = 0; private Integer isDeleted = 0;
} }

View File

@@ -1,9 +1,9 @@
package com.ai.da.mapper.primary.entity; package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -18,20 +18,20 @@ import java.time.LocalDateTime;
public class ClassificationRelLibrary implements Serializable { public class ClassificationRelLibrary implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ID") @Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;
@ApiModelProperty(value = "分类名称") @Schema(description = "分类名称")
private Long classificationId; private Long classificationId;
@ApiModelProperty(value = "分类名称") @Schema(description = "分类名称")
private Long libraryId; private Long libraryId;
@ApiModelProperty(value = "用户ID") @Schema(description = "用户ID")
private Long userId; private Long userId;
@ApiModelProperty(value = "创建时间") @Schema(description = "创建时间")
private LocalDateTime createTime; private LocalDateTime createTime;
@ApiModelProperty(value = "更新时间") @Schema(description = "更新时间")
private LocalDateTime updateTime; private LocalDateTime updateTime;
@ApiModelProperty(value = "是否删除1:是0:否") @Schema(description = "是否删除1:是0:否")
private Integer isDeleted; private Integer isDeleted;
} }

View File

@@ -1,9 +1,9 @@
package com.ai.da.mapper.primary.entity; package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
@@ -19,52 +19,52 @@ import java.time.LocalDateTime;
public class CloudTask implements Serializable { public class CloudTask implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ID") @Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;
@ApiModelProperty("任务名") @Schema(description = "任务名")
private String name; private String name;
@ApiModelProperty("项目ID") @Schema(description = "项目ID")
private Long projectId; private Long projectId;
@ApiModelProperty("collectionId") @Schema(description = "collectionId")
private Long collectionId; private Long collectionId;
@ApiModelProperty("designId") @Schema(description = "designId")
private Long designId; private Long designId;
@ApiModelProperty("任务类型") @Schema(description = "任务类型")
private String buildType; private String buildType;
@ApiModelProperty("生成数量") @Schema(description = "生成数量")
private Integer nums; private Integer nums;
@ApiModelProperty("完成数量") @Schema(description = "完成数量")
private Integer completedNum; private Integer completedNum;
@ApiModelProperty("消耗积分") @Schema(description = "消耗积分")
private Integer costCredits; private Integer costCredits;
@ApiModelProperty("状态1完成0未完成") @Schema(description = "状态1完成0未完成")
private Integer status; private Integer status;
@ApiModelProperty("批处理ID") @Schema(description = "批处理ID")
private String taskId; private String taskId;
@ApiModelProperty("创建时间") @Schema(description = "创建时间")
private LocalDateTime createTime; private LocalDateTime createTime;
@ApiModelProperty("任务开始时间") @Schema(description = "任务开始时间")
private LocalDateTime startTime; private LocalDateTime startTime;
@ApiModelProperty("任务更新时间") @Schema(description = "任务更新时间")
private LocalDateTime updateTime; private LocalDateTime updateTime;
@ApiModelProperty("用户ID") @Schema(description = "用户ID")
private Long accountId; private Long accountId;
@ApiModelProperty("任务序号") @Schema(description = "任务序号")
private Long sequence; private Long sequence;
} }

View File

@@ -0,0 +1,82 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
/**
* submissions 表对应实体 — 参赛选手信息 (Contestant)
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@TableName("contestants")
public class Contestant {
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
private String email;
@TableField("contestant_number")
private Integer contestantNumber;
@TableField("first_name")
private String firstName;
@TableField("last_name")
private String lastName;
private String gender;
private String occupation;
private Integer age;
@TableField("country_region_city")
private String countryRegionCity;
@TableField("phone_number")
private String phoneNumber;
@TableField("design_title")
private String designTitle;
@TableField("design_description")
private String designDescription;
@TableField("pdf_path")
private String pdfPath;
@TableField("video_path")
private String videoPath;
@TableField("video_duration")
private Integer videoDuration;
@TableField("video_size")
private Long videoSize;
@TableField("pdf_size")
private Long pdfSize;
@TableField("portfolio_url")
private String portfolioUrl;
@TableField("created_at")
private LocalDateTime createdAt;
@TableField("updated_at")
private LocalDateTime updatedAt;
}

View File

@@ -62,4 +62,9 @@ public class DesignItemDetailPrint {
* 更新时间 * 更新时间
*/ */
private LocalDateTime updateDate; private LocalDateTime updateDate;
/**
* 对象信息JSON格式
*/
private String object;
} }

View File

@@ -3,50 +3,49 @@ package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import java.io.Serializable; import java.io.Serializable;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@Data @Data
@ApiModel(value = "Portfolio对象", description = "作品集") @Schema(description = "作品集")
@TableName("portfolio") @TableName("portfolio")
public class Portfolio implements Serializable { public class Portfolio implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ID") @Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;
@ApiModelProperty(value = "collection ID") @Schema(description = "collection ID")
private Long collectionId; private Long collectionId;
private Long projectId; private Long projectId;
@ApiModelProperty(value = "userLikeGroup源") @Schema(description = "userLikeGroup源")
private Long userLikeGroupSourceId; private Long userLikeGroupSourceId;
@ApiModelProperty(value = "作品名称") @Schema(description = "作品名称")
private String portfolioName; private String portfolioName;
@ApiModelProperty(value = "作品描述") @Schema(description = "作品描述")
private String portfolioDes; private String portfolioDes;
@ApiModelProperty(value = "作品类型") @Schema(description = "作品类型")
private String portfolioType; private String portfolioType;
@ApiModelProperty(value = "画布ID") @Schema(description = "画布ID")
private Long canvasId; private Long canvasId;
@ApiModelProperty(value = "封面ID") @Schema(description = "封面ID")
private Long coverId; private Long coverId;
@ApiModelProperty(value = "作品状态1公开0隐藏") @Schema(description = "作品状态1公开0隐藏")
private Integer status; private Integer status;
@ApiModelProperty(value = "是否允许二次创作1允许0不允许") @Schema(description = "是否允许二次创作1允许0不允许")
private Integer openSource; private Integer openSource;
private Integer original; private Integer original;
@@ -57,7 +56,7 @@ public class Portfolio implements Serializable {
private String snapshot; private String snapshot;
@ApiModelProperty(value = "作品集作者ID") @Schema(description = "作品集作者ID")
private Long accountId; private Long accountId;
// 学校/企业id // 学校/企业id
@@ -66,12 +65,12 @@ public class Portfolio implements Serializable {
// 该条作品是否在该组织公开 默认公开 10为不公开 // 该条作品是否在该组织公开 默认公开 10为不公开
private Integer isPublic; private Integer isPublic;
@ApiModelProperty(value = "创建时间") @Schema(description = "创建时间")
private LocalDateTime createDate; private LocalDateTime createDate;
@ApiModelProperty(value = "更新时间") @Schema(description = "更新时间")
private LocalDateTime updateDate; private LocalDateTime updateDate;
@ApiModelProperty(value = "是否删除") @Schema(description = "是否删除")
private Integer isDeleted; private Integer isDeleted;
} }

View File

@@ -0,0 +1,92 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
@TableName("t_subscription_plan")
public class SubscriptionPlan extends BaseEntity{
/**
* 组织id
*/
private Long organizationId;
/**
* 订阅命名
*/
private String name;
/**
* 当前订阅开始时间
*/
private Long currentPeriodStart;
/**
* 当前订阅结束时间
*/
private Long currentPeriodEnd;
/**
* 当前订阅总的子账号数量
*/
private Integer accountNum;
/**
* 当前订阅可用积分上限
*/
private BigDecimal creditLimit;
/**
* 当前订阅已使用积分
*/
private BigDecimal creditUsage;
/**
* 管理员账户id
*/
private Long adminAccId;
@TableLogic(value = "0", delval = "1")
private Integer isDeleted;
/**
* 删除人的用户id
*/
private Long deleteBy;
/**
* 状态
*/
private String status;
/**
* 国家或地区
*/
private String countryOrRegion;
// 在类内部定义的枚举
@Getter
public enum SubscriptionStatus {
PENDING("待激活", 0),
ACTIVE("已激活", 1),
EXPIRED("已过期", 2),
CANCELLED("已取消", 3);
private final String desc;
private final int code;
SubscriptionStatus(String desc, int code) {
this.desc = desc;
this.code = code;
}
}
}

View File

@@ -1,10 +1,9 @@
package com.ai.da.mapper.primary.entity; package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.*; import lombok.*;
import lombok.experimental.Accessors; import lombok.experimental.Accessors;
import io.swagger.v3.oas.annotations.media.Schema;
import java.io.Serializable; import java.io.Serializable;
import java.util.Date; import java.util.Date;
@@ -25,22 +24,22 @@ import java.util.Date;
@Setter @Setter
@Accessors(chain = true) @Accessors(chain = true)
@TableName("t_collection_element_relation") @TableName("t_collection_element_relation")
@ApiModel(value = "TCollectionElementRelation对象", description = "collection和element的关联表") @Schema(description = "collection和element的关联表")
public class TCollectionElementRelation implements Serializable { public class TCollectionElementRelation implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty("ID") @Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;
@ApiModelProperty("element ID") @Schema(description = "element ID")
private Long elementId; private Long elementId;
@ApiModelProperty("colletion ID class类型为COLLECTION 存 其他默认是0") @Schema(description = "colletion ID class类型为COLLECTION 存 其他默认是0")
private Long collectionId; private Long collectionId;
@ApiModelProperty("创建时间") @Schema(description = "创建时间")
private Date createDate; private Date createDate;

View File

@@ -2,6 +2,7 @@
package com.ai.da.mapper.primary.entity; package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime; import java.time.LocalDateTime;
@@ -9,9 +10,6 @@ import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data; import lombok.Data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/** /**
* design item表 存对应design的8张图片实体类 * design item表 存对应design的8张图片实体类
* *
@@ -20,7 +18,7 @@ import io.swagger.annotations.ApiModelProperty;
*/ */
@Data @Data
@TableName("t_design_python_outfit") @TableName("t_design_python_outfit")
@ApiModel(value = "TDesignPythonOutfit对象", description = "design item表 存对应design的8张图片") @Schema(description = "design item表 存对应design的8张图片")
public class TDesignPythonOutfit implements Serializable { public class TDesignPythonOutfit implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@@ -28,48 +26,48 @@ public class TDesignPythonOutfit implements Serializable {
/** /**
* ID * ID
*/ */
@ApiModelProperty(value = "ID") @Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO) @TableId(value = "id", type = IdType.AUTO)
private Long id; private Long id;
/** /**
* designItemId * designItemId
*/ */
@ApiModelProperty(value = "designItemId") @Schema(description = "designItemId")
private Long designItemId; private Long designItemId;
/** /**
* 关联的design ID * 关联的design ID
*/ */
@ApiModelProperty(value = "关联的design ID") @Schema(description = "关联的design ID")
private Long designId; private Long designId;
/** /**
* 关联的collection ID * 关联的collection ID
*/ */
@ApiModelProperty(value = "关联的collection ID") @Schema(description = "关联的collection ID")
private Long collectionId; private Long collectionId;
/** /**
* design后的用户文件地址(python 返回) * design后的用户文件地址(python 返回)
*/ */
@ApiModelProperty(value = "design后的用户文件地址(python 返回)") @Schema(description = "design后的用户文件地址(python 返回)")
private String designUrl; private String designUrl;
/** /**
* 保存用户ID * 保存用户ID
*/ */
@ApiModelProperty(value = "保存用户ID") @Schema(description = "保存用户ID")
private Long userId; private Long userId;
/** /**
* 创建时间 * 创建时间
*/ */
@ApiModelProperty(value = "创建时间") @Schema(description = "创建时间")
private LocalDateTime createDate; private LocalDateTime createDate;
/** /**
* 更新时间 * 更新时间
*/ */
@ApiModelProperty(value = "更新时间") @Schema(description = "更新时间")
private LocalDateTime updateDate; private LocalDateTime updateDate;
/** /**
* 是否删除 * 是否删除
*/ */
@ApiModelProperty(value = "是否删除") @Schema(description = "是否删除")
private String isDeleted; private String isDeleted;

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