283 Commits

Author SHA1 Message Date
a8c1261c89 BUGFIX:印花优先级不从1开始传导致数组越界 2026-05-13 23:54:29 +08:00
ltx
c35e60dcde 更新 src/main/java/com/ai/da/service/impl/GenerateServiceImpl.java 2026-05-13 20:35:57 +08:00
ltx
ad3bc69e5c 更新 src/main/java/com/ai/da/common/constant/ModelConstants.java 2026-05-13 20:34:45 +08:00
bb682e56fa TASK:Global Award记录访客量 2026-05-13 16:26:47 +08:00
9a4a5d5504 BUGFIX 2026-05-13 13:49:56 +08:00
b4354d5975 配合测试 2026-05-13 11:12:00 +08:00
635d913084 BUGFIX:将发送邮件中,原订单页链接替换为发票链接 2026-05-12 13:19:23 +08:00
61e8901bb1 BUGFIX:将发送邮件中,原订单页链接替换为发票链接 2026-05-08 17:06:52 +08:00
1680debd4b BUGFIX: 续订失败没有发送邮件 2026-05-07 11:45:49 +08:00
bd6ba95a25 BUGFIX: 续订没有更新账号到期时间 2026-05-07 11:20:08 +08:00
75efc341be DEBUG:添加日志打印 2026-05-07 11:14:07 +08:00
921de43b08 DEBUG:添加日志打印 2026-05-07 10:55:09 +08:00
c558ebb3d0 TASK:优化订阅收件人列表创建方式 2026-05-05 11:22:17 +08:00
d20bb27244 BUGFIX:新订阅没发送邮件 2026-05-04 16:16:30 +08:00
6e98f295c5 Merge branch 'dev/3.1_release_merge' into temp_PromotionCode 2026-05-04 11:07:26 +08:00
cf02b59722 TASK:Stripe支付模块重构-逻辑优化与完善、Stripe版本升级 2026-04-29 17:16:48 +08:00
838a8a13b3 TO DEV 2026-04-28 13:19:10 +08:00
c95f3accb9 Merge branch 'release/3.1' into dev/3.1_release_merge 2026-04-28 13:12:26 +08:00
65cde0b8f5 TASK:admin-organization plan优化 2026-04-28 13:11:57 +08:00
b66877425e BUGFIX:为下载flux图片添加重试机制 2026-04-21 17:33:39 +08:00
f6d28fec07 BUGFIX:为下载flux图片添加重试功能 2026-04-21 17:21:41 +08:00
litianxiang
f53fca9a09 Merge remote-tracking branch 'origin/dev/3.1_release_merge' into release/3.1 2026-04-15 15:07:04 +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
litianxiang
d73442d1dd Merge remote-tracking branch 'origin/release/3.1' into release/3.1 2026-04-13 22:05:59 +08:00
litianxiang
c8164cb997 TO PROD 2026-04-13 22:05:31 +08:00
981fc35be4 BUGFIX:design 没有使用printboard中的元素 2026-04-13 18:04:30 +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
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
4c0edf09bd Merge branch 'dev/dev_xp' into dev/3.1_release_merge 2025-12-03 14:14:11 +08:00
bd69793a72 TASK:订阅到期通知或续订通知(暂时关闭邮件发送) 2025-12-03 13:55:52 +08:00
fab0c7b372 更新 .gitea/workflows/develop_build_manual.yaml 2025-12-02 14:48:23 +08:00
fc0867d9b1 Merge branch 'dev/3.1_release_merge' into dev/dev_xp 2025-12-02 14:46:23 +08:00
c36ba6211a DEV 数据库切换 2025-12-02 14:34:12 +08:00
01e82b4c23 Merge branch 'dev/3.1_release_merge' into dev/dev_xp 2025-12-01 17:11:03 +08:00
b023a68f83 Merge remote-tracking branch 'origin/dev/dev_xp' into dev/dev_xp 2025-12-01 16:02:20 +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
276 changed files with 15797 additions and 8220 deletions

View File

@@ -99,6 +99,8 @@ jobs:
volumes:
# 数据挂载
- ./log:/log
- ./temp:/temp
- ./uploads:/temp/uploads
ports:
- '10090:5567'
restart: always
@@ -133,8 +135,6 @@ jobs:
cd ${{ env.REMOTE_DEPLOY_PATH }}
echo "停止旧容器..."
docker compose down || true
echo "清理Docker资源..."
docker system prune -f
echo "构建镜像..."
docker compose build --no-cache
echo "启动服务..."
@@ -157,7 +157,7 @@ jobs:
password: ${{ secrets.MAIL_PASSWORD }} # 存储在Secrets中的邮箱密码
subject: 'Gitea Actions 构建通知: ${{ job.status }} - AiDA back-java Develop'
# 收件人列表,可以根据需要更改
to: 'xupei3360@163.com,txli@aidlab.hk,cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
to: 'cgzhou@aidlab.hk,zchengrong@yeah.net' # 替换为实际收件人邮箱
# --- 邮件正文内容 ---
body: |

View File

@@ -240,7 +240,7 @@
<dependency>
<groupId>com.stripe</groupId>
<artifactId>stripe-java</artifactId>
<version>26.2.0</version>
<version>32.0.0</version>
</dependency>
<!-- aws s3 -->
@@ -427,6 +427,11 @@
<artifactId>bcpkix-jdk18on</artifactId>
<version>1.78.1</version>
</dependency>
<!-- AOP -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
<build>

View File

@@ -636,26 +636,26 @@ public class GenerateConsumer {
public void getPoseTransformationResult(Message msg, Channel channel) {
processPoseTransformResult(msg, channel);
}
@RabbitListener(queues = "#{rabbitMQProperties.queues.designBatch}")
@RabbitHandler
public void getDesignBatchResult(Message msg, Channel channel) {
processDesignBatchResult(msg, channel);
}
@RabbitListener(queues = "#{rabbitMQProperties.queues.toProductImageBatch}")
@RabbitHandler
public void getToProductImageBatchResult(Message msg, Channel channel) {
processToProductImageBatchResult(msg, channel);
}
@RabbitListener(queues = "#{rabbitMQProperties.queues.relightBatch}")
@RabbitHandler
public void getRelightBatchResult(Message msg, Channel channel) {
processRelightBatchResult(msg, channel);
}
@RabbitListener(queues = "#{rabbitMQProperties.queues.poseTransformBatch}")
@RabbitHandler
public void getPoseTransformBatchResult(Message msg, Channel channel) {
processPoseTransformBatchResult(msg, channel);
}
// @RabbitListener(queues = "#{rabbitMQProperties.queues.designBatch}")
// @RabbitHandler
// public void getDesignBatchResult(Message msg, Channel channel) {
// processDesignBatchResult(msg, channel);
// }
// @RabbitListener(queues = "#{rabbitMQProperties.queues.toProductImageBatch}")
// @RabbitHandler
// public void getToProductImageBatchResult(Message msg, Channel channel) {
// processToProductImageBatchResult(msg, channel);
// }
//
// @RabbitListener(queues = "#{rabbitMQProperties.queues.relightBatch}")
// @RabbitHandler
// public void getRelightBatchResult(Message msg, Channel channel) {
// processRelightBatchResult(msg, channel);
// }
//
// @RabbitListener(queues = "#{rabbitMQProperties.queues.poseTransformBatch}")
// @RabbitHandler
// public void getPoseTransformBatchResult(Message msg, Channel channel) {
// processPoseTransformBatchResult(msg, channel);
// }
}

View File

@@ -28,6 +28,11 @@ public class MQPublisher {
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 含有的字段

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

@@ -202,7 +202,7 @@ public class MyTaskScheduler {
}
}
// @Scheduled(cron = "0 0 9 * * ?")
// @Scheduled(cron = "0 0 9 * * ?")
public void sendTrialOrderExcelToManagements() {
// 获取前一天日期
LocalDate yesterday = LocalDate.now().minusDays(1);
@@ -308,7 +308,7 @@ public class MyTaskScheduler {
private MinioUtil minioUtil;
@Resource
private UserLikeService userLikeService;
public void clearMinio() {
/* public void clearMinio() {
List<CollectionElement> collectionElements = collectionElementMapper.selectDeleteList();
for (CollectionElement collectionElement : collectionElements) {
String url = collectionElement.getUrl();
@@ -472,7 +472,7 @@ public class MyTaskScheduler {
// }
// String preSignedUrl = minioUtil.getPreSignedUrl("aida-clothing/image/image_1698374859.3031476.png", 10000);
// System.out.println(preSignedUrl);
}
}*/
@Resource
private AttributeRetrievalMapper attributeRetrievalMapper;

View File

@@ -13,8 +13,9 @@ public class CommonConstant {
public static final Integer MINIO_IMAGE_EXPIRE_TIME = 24 * 60;
// 单位 秒 一天过期 in redis
public static final Long GENERATE_RESULT_EXPIRE_TIME = 24 * 60 * 60L;
// 单位 秒 7天过期
public static final Long REDIS_SET_EXPIRE_TIME = 24 * 60 * 60 * 7L;
// 单位 秒 7天过期 todo 测试状态下 3小时过期
// public static final Long REDIS_SET_EXPIRE_TIME = 24 * 60 * 60 * 7L;
public static final Long REDIS_SET_EXPIRE_TIME = 3 * 60 * 60L;
public static class Numbers{
public static final Integer NUMBER_10 = 10;
@@ -23,6 +24,7 @@ public class CommonConstant {
}
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";

View File

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

View File

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

View File

@@ -30,7 +30,7 @@ public enum CreditsEventsEnum {
INIT_QUARTERLY("init_quarterly", "12000"),
INIT_MONTHLY_EDU("init_monthly_edu", "3500"),
INIT_TRIAL("init_trial", "100"),
INIT_WEEKLY("init_weekly","6000"),
INIT_DAILY("init_daily","100"),
RESET_YEAR_CREDITS("reset_year_credits","6000"),
// SUPER_RESOLUTION("Super Resolution","30"),

View File

@@ -34,6 +34,11 @@ public enum OrderStatusEnum {
* 已退款
*/
REFUND_SUCCESS("已退款"),
/**
* 已部分退款
*/
PARTIAL_REFUND_SUCCESS("已部分退款"),
/**
* 退款异常
*/

View File

@@ -0,0 +1,19 @@
package com.ai.da.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
@Getter
@AllArgsConstructor
public enum PaymentInfoType {
NEW("new"),
RENEWAL("renewal"),
CREDIT("credit"),
MANUAL("manual");
private final String type;
}

View File

@@ -3,6 +3,8 @@ package com.ai.da.common.enums;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
@Getter
@AllArgsConstructor
public enum ProductEnum {
@@ -23,11 +25,27 @@ public enum ProductEnum {
;
/**
* 类型
* 显示名称(用于与 orderInfo.title 匹配)
*/
private final String name;
private final Long price;
private final Long credits;
/**
* 根据显示名称获取枚举
*
* @param name 显示名称(与 orderInfo.title 匹配)
* @return 对应的枚举,未找到返回 null
*/
public static ProductEnum getByName(String name) {
if (name == null) {
return null;
}
return Arrays.stream(values())
.filter(pe -> pe.name.equals(name))
.findFirst()
.orElse(null);
}
}

View File

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

View File

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

View File

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

View File

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

View File

@@ -6,6 +6,7 @@ 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.RedisUtil;
import com.ai.da.common.utils.MultiReadHttpServletRequest;
import com.ai.da.common.utils.MultiReadHttpServletResponse;
import com.ai.da.common.utils.RequestInfoUtil;
@@ -40,6 +41,8 @@ public class AuthenticationFilter extends OncePerRequestFilter {
private JWTTokenHelper jwtTokenHelper;
@Resource
private SecurityProperties properties;
@Resource
private RedisUtil redisUtil;
private static final List<String> FILTER_URL =
Arrays.asList("/favicon.ico", "/doc.html", "/swagger-ui.html",
@@ -56,7 +59,9 @@ public class AuthenticationFilter extends OncePerRequestFilter {
"/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"
"/api/llm/stream",
//GlobalAwardController
"/api/global-award"
);
@Override
@@ -132,12 +137,19 @@ public class AuthenticationFilter extends OncePerRequestFilter {
UserContext.delete();
//存取用户信息到缓存
UserContext.setUserHolder(principal);
//校验token
String cacheToken = LocalCacheUtils.getTokenCache(String.valueOf(principal.getId()));
// 校验 token:先查本地缓存,再查 Redis保证服务重启后仍然有效
String userIdStr = String.valueOf(principal.getId());
String cacheToken = LocalCacheUtils.getTokenCache(userIdStr);
if(StringUtils.isEmpty(cacheToken)){
// throw new RuntimeException("TOKEN已过期请重新登录");
throw new TokenMissingOrExpiredException("TOKEN已过期请重新登录(local cache empty)");
if (StringUtils.isEmpty(cacheToken)) {
// 本地缓存为空时,尝试从 Redis 读取
cacheToken = redisUtil.getLoginToken(principal.getId());
if (StringUtils.isEmpty(cacheToken)) {
// throw new RuntimeException("TOKEN已过期请重新登录");
throw new TokenMissingOrExpiredException("TOKEN已过期请重新登录(cache & redis empty)");
}
// 将 Redis 中的 token 回填到本地缓存,减少后续 Redis 访问
LocalCacheUtils.setTokenCache(userIdStr, cacheToken);
}
if(!cacheToken.equals(jwtToken) ){
// throw new RuntimeException("TOKEN已过期请重新登录");

View File

@@ -3,6 +3,7 @@ package com.ai.da.common.task;
import com.ai.da.common.utils.RedisUtil;
import com.ai.da.mapper.primary.entity.Account;
import com.ai.da.service.AccountService;
import com.ai.da.service.SubscriptionPlanService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@@ -18,6 +19,8 @@ public class AccountTask {
private AccountService accountService;
@Resource
private RedisUtil redisUtil;
@Resource
private SubscriptionPlanService subscriptionPlanService;
/**
* 每周日晚上刷新 年付用户、月付用户的积分
@@ -31,14 +34,14 @@ public class AccountTask {
accountService.refreshCreditsMonthly();
}
// @Scheduled(cron = "0 */5 * * * *") // Run every 5 minutes
// @Scheduled(cron = "0 */5 * * * *") // Run every 5 minutes
public void getPaidUser() {
// 获取code-create 表中 指定日期之后 订单状态为wc-processing的订单
accountService.extendValidityForCC();
}
// 每天凌晨0点执行一次
@Scheduled(cron = "0 0 0 * * ?")
// 每天凌晨0点执行一次 目前已没有角色类型为4的用户
/*@Scheduled(cron = "0 0 0 * * ?")
public void cancelActivityBenefits() {
// 1、查询当前所有参与了活动且过期的用户
List<Account> accountList = accountService.getExpiredUserBySystemUser(4);
@@ -48,7 +51,7 @@ public class AccountTask {
log.info("参与活动的用户{} : {} 于 {} 账号有效期到期,置为游客", account.getId(), account.getUserEmail(), account.getValidEndTime());
accountService.toVisitor(account);
}
}
}*/
// 每天检测正式用户到期情况每天凌晨0点执行
@Scheduled(cron = "0 0 0 * * ?")
@@ -86,4 +89,14 @@ public class AccountTask {
public void 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

@@ -45,7 +45,7 @@ public class PaymentTask {
@Resource
private PayPalCheckoutService payPalCheckoutService;
// @Scheduled(cron = "0/30 * * * * ?")
// @Scheduled(cron = "0/30 * * * * ?")
public void orderConfirmForPaypal() throws SerializeException {
// log.info("PayPal orderConfirm 被执行......");
@@ -97,7 +97,7 @@ public class PaymentTask {
//
}
@Scheduled(cron = "0 */5 * * * *") // Run every 5 minutes
@Scheduled(cron = "0 */5 * * * *") // Run every 5 minutes
public void updateAffiliateInfoWithPayment(){
// log.info("佣金计算定时器");
affiliateService.updateAffiliateInfoWithPayment();
@@ -109,7 +109,7 @@ public class PaymentTask {
affiliateService.syncLinkViewCountToDB();
}
// @Scheduled(cron = "0 0 8 28-31 * ?")
// @Scheduled(cron = "0 0 8 28-31 * ?")
public void commissionSummaryReminder(){
// 每个月末的最后一天的早上八点执行
LocalDate today = LocalDate.now();

View File

@@ -10,8 +10,11 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import io.netty.util.internal.StringUtil;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.util.ArrayList;
import java.util.HashMap;
@@ -19,6 +22,7 @@ import java.util.List;
import java.util.Map;
@Slf4j
@Component
@RequiredArgsConstructor
public class SubscriptionReminderTask {
@@ -32,10 +36,11 @@ public class SubscriptionReminderTask {
private static final Map<String, Integer> REMINDER_DAYS_CONFIG = new HashMap<>();
static {
REMINDER_DAYS_CONFIG.put("monthly", 7);
REMINDER_DAYS_CONFIG.put("yearly", 14);
REMINDER_DAYS_CONFIG.put("month", 7);
REMINDER_DAYS_CONFIG.put("year", 14);
}
// @Scheduled(cron = "0 0 9 * * ?")
public void subscriptionReminder() {
// 获取所有需要通知的订阅
List<SubscriptionInfo> subscriptionInfos = getDueSubscriptions();
@@ -52,7 +57,7 @@ public class SubscriptionReminderTask {
continue;
}
boolean success = stripeService.sendEmail(subscriptionInfo.getSubscriptionId(), "reminder_subscriber", null);
boolean success = stripeService.sendEmail(subscriptionInfo.getSubscriptionId(), emailType, subscriptionInfo.getOrderNo());
if (success) {
log.info("提前{}天向用户 {} 发送续订通知邮件,订阅类型: {}",
daysBefore, subscriptionInfo.getAccountId(), subscriptionInfo.getType());
@@ -78,26 +83,30 @@ public class SubscriptionReminderTask {
LocalDateTime startOfDay = targetDate.toLocalDate().atStartOfDay();
LocalDateTime endOfDay = targetDate.toLocalDate().atTime(23, 59, 59);
long startTimestamp = startOfDay.toEpochSecond(ZoneOffset.UTC);
long endTimestamp = endOfDay.toEpochSecond(ZoneOffset.UTC);
// 使用系统默认时区
ZoneId zoneId = ZoneId.systemDefault();
long startTimestamp = startOfDay.atZone(zoneId).toEpochSecond();
long endTimestamp = endOfDay.atZone(zoneId).toEpochSecond();
QueryWrapper<SubscriptionInfo> qw = new QueryWrapper<>();
qw.ge("current_period_end", startTimestamp);
qw.lt("current_period_end", endTimestamp);
qw.lambda().ge(SubscriptionInfo::getCurrentPeriodEnd, startTimestamp);
qw.lambda().lt(SubscriptionInfo::getCurrentPeriodEnd, endTimestamp);
// qw.eq("status", "active");
qw.eq("subscription_type", subscriptionType);
qw.lambda().eq(SubscriptionInfo::getType, subscriptionType);
return subscriptionInfoMapper.selectList(qw);
}
// @Scheduled(cron = "0 0 9 * * ?")
public void trialReminder() {
// 今天的 00:00:00 和 23:59:59
LocalDateTime startOfDay = LocalDateTime.now().toLocalDate().atStartOfDay();
LocalDateTime endOfDay = LocalDateTime.now().toLocalDate().atTime(23, 59, 59);
// 转为时间戳
long startTimestamp = startOfDay.toEpochSecond(ZoneOffset.UTC);
long endTimestamp = endOfDay.toEpochSecond(ZoneOffset.UTC);
// 使用系统默认时区
ZoneId zoneId = ZoneId.systemDefault();
long startTimestamp = startOfDay.atZone(zoneId).toEpochSecond() * 1000;
long endTimestamp = endOfDay.atZone(zoneId).toEpochSecond() * 1000;
QueryWrapper<Account> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().gt(Account::getValidEndTime, startTimestamp)

View File

@@ -41,6 +41,13 @@ public class MinioUtil {
@Autowired
private MinioClient minioClient;
/**
* 获取MinIO客户端实例
*/
public MinioClient getMinioClient() {
return minioClient;
}
/**
* description: 判断bucket是否存在不存在则创建
*

File diff suppressed because it is too large Load Diff

View File

@@ -17,16 +17,38 @@ import com.tencentcloudapi.ses.v20201002.models.SendEmailRequest;
import com.tencentcloudapi.ses.v20201002.models.SendEmailResponse;
import com.tencentcloudapi.ses.v20201002.models.Template;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import jakarta.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.Base64;
import java.util.Date;
import java.util.List;
import java.util.Objects;
/**
* 邮件发送类
*/
@Slf4j
@Component
public class SendEmailUtil {
@Value("${merchant.email:}")
private String merchantEmailInstance;
@Value("${developer.email: xupei@code-create.com.hk}")
private String developerEmailInstance;
private static String merchantEmail;
private static String developerEmail;
@PostConstruct
public void init() {
merchantEmail = merchantEmailInstance;
developerEmail = developerEmailInstance;
}
/**
* 秘钥id
*/
@@ -764,9 +786,7 @@ public class SendEmailUtil {
public static boolean subscriptionEmailReminder(String type, SubscriptionEmailParamsDTO subscriptionEmailParamsDTO, String language, String receiverAddress) {
try {
String merchantEmail = "kimwong@code-create.com.hk";
String developer = "xupei3360@163.com";
String[] receiverEmail = {/*merchantEmail,*/ developer};
String[] receiverEmail = buildMerchantReceiverEmail();
Credential cred = new Credential(SECRET_ID, SECRET_KEy);
// 实例化一个http选项可选的没有特殊需求可以跳过
HttpProfile httpProfile = new HttpProfile();
@@ -832,7 +852,7 @@ public class SendEmailUtil {
if (language.equals("ENGLISH")) {
user.setSubject("[Code-Create] AiDA Subscription Renewal Reminder");
templateUser.setTemplateID(156072L);
} else if (language.equals("CHINESE")){
} else if (language.equals("CHINESE_SIMPLIFIED")){
user.setSubject("[Code-Create] AiDA续订提醒");
templateUser.setTemplateID(156073L);
} else {
@@ -844,7 +864,7 @@ public class SendEmailUtil {
if (language.equals("ENGLISH")) {
user.setSubject("[Code-Create] AiDA account is about to expire");
templateUser.setTemplateID(156749L);
} else if (language.equals("CHINESE")){
} else if (language.equals("CHINESE_SIMPLIFIED")){
user.setSubject("[Code-Create] 您的AiDA账号即将到期");
templateUser.setTemplateID(156750L);
} else {
@@ -856,7 +876,7 @@ public class SendEmailUtil {
if (language.equals("ENGLISH")) {
user.setSubject("[Code-Create] AiDA — Free Trial Ending");
templateUser.setTemplateID(156075L);
} else if (language.equals("CHINESE")){
} else if (language.equals("CHINESE_SIMPLIFIED")){
user.setSubject("[Code-Create] AiDA — 免费试用结束提醒");
templateUser.setTemplateID(156076L);
} else {
@@ -874,14 +894,16 @@ public class SendEmailUtil {
templateUser.setTemplateData(JSON.toJSONString(subscriptionEmailParamsDTO));
user.setTemplate(templateUser);
subscriptionEmailParamsDTO.setEndDate("When cancelled");
if (Objects.nonNull(subscriptionEmailParamsDTO)) {
subscriptionEmailParamsDTO.setEndDate("When cancelled");
}
templateMerchant.setTemplateData(JSON.toJSONString(subscriptionEmailParamsDTO));
merchant.setTemplate(templateMerchant);
if (!type.equals("cancel") && !type.equals("fail_new")) {
// 返回的resp是一个SendEmailResponse的实例与请求对象对应
SendEmailResponse respUser = client.SendEmail(user);
log.info("邮件主题:{}发送结果toUser###{}", user.getSubject(), SendEmailResponse.toJsonString(respUser));
log.info("邮件主题:{}发送结果toUser###{}, email:{}", user.getSubject(), SendEmailResponse.toJsonString(respUser), receiverAddress);
}
if (!type.startsWith("reminder")) {
SendEmailResponse respMerchant = client.SendEmail(merchant);
@@ -963,9 +985,7 @@ public class SendEmailUtil {
// 实例化一个请求对象,每个接口都会对应一个request对象
SendEmailRequest req = new SendEmailRequest();
req.setFromEmailAddress(SEND_ADDRESS);
String merchantEmail = "kimwong@code-create.com.hk";
String developerEmail = "xupei@code-create.com.hk";
req.setDestination(new String[]{/*merchantEmail,*/ developerEmail});
req.setDestination(buildMerchantReceiverEmail());
Template template = new Template();
req.setSubject("New Credit Purchase Order");
template.setTemplateID(CREDITS_PURCHASE_MERCHANT);
@@ -1021,7 +1041,7 @@ public class SendEmailUtil {
log.info("邮件发送结果res###{}", SendEmailResponse.toJsonString(resp));
} catch (TencentCloudSDKException e) {
log.info("邮件发送失败###{}", e.toString());
throw new BusinessException("failed.to.send.mail");
// throw new BusinessException("failed.to.send.mail");
}
}
@@ -1073,4 +1093,25 @@ public class SendEmailUtil {
}
public static String[] buildMerchantReceiverEmail() {
List<String> emails = new ArrayList<>();
if (!StringUtils.isEmpty(merchantEmail)) {
for (String e : merchantEmail.split(",")) {
String trimmed = e.trim();
if (!trimmed.isEmpty()) {
emails.add(trimmed);
}
}
}
if (!StringUtils.isEmpty(developerEmail)) {
for (String e : developerEmail.split(",")) {
String trimmed = e.trim();
if (!trimmed.isEmpty()) {
emails.add(trimmed);
}
}
}
return emails.toArray(new String[0]);
}
}

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;
String body;
try (HttpResponse execute = HttpRequest.post(url)
@@ -103,9 +103,63 @@ public class SendRequestUtil {
if (status == 200) {
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);
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){

View File

@@ -15,16 +15,16 @@ import com.ai.da.model.vo.PersonalHomepageVO;
import com.ai.da.service.AccountService;
import io.swagger.v3.oas.annotations.Operation;
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 org.springframework.http.HttpStatus;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.*;
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.List;
import java.util.Map;
@@ -139,21 +139,21 @@ public class AccountController {
@Operation(summary = "aws状态检测")
@GetMapping("/healthy")
@ResponseStatus(HttpStatus.OK)
public Response<Map<String,Integer>> checkStatus(){
Map<String,Integer> returnMap = new HashMap<>();
returnMap.put("code",200);
public Response<Map<String, Integer>> checkStatus() {
Map<String, Integer> returnMap = new HashMap<>();
returnMap.put("code", 200);
return Response.success(returnMap);
}
@Operation(summary = "查询账号到期时间")
@PostMapping("/getExpiredTime")
public Response<Long> getExpiredTime(){
public Response<Long> getExpiredTime() {
return Response.success(accountService.getExpiredTime());
}
@Operation(summary = "免密登录")
@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));
}
@@ -191,6 +191,7 @@ public class AccountController {
/**
* 参与活动 获取福利
*
* @return
*/
/* @Operation(summary = "参与活动 获取福利")
@@ -201,7 +202,7 @@ public class AccountController {
@Operation(summary = "将用户账号过期时间设置为过期当天的235959")
@GetMapping("/setUserValidToDayEnd")
public Response<List<Long>> setUserValidToDayEnd(){
public Response<List<Long>> setUserValidToDayEnd() {
return Response.success(accountService.setUserValidToDayEnd());
}
@@ -223,19 +224,19 @@ public class AccountController {
@Operation(summary = "获取个人主页信息")
@GetMapping("/personalHomepage")
public Response<PersonalHomepageVO> getPersonalHomepage(@RequestParam("id") Long id){
public Response<PersonalHomepageVO> getPersonalHomepage(@RequestParam("id") Long id) {
return Response.success(accountService.getPersonalHomepage(id));
}
@Operation(summary = "getUsernameModifyTimes")
@GetMapping("/getNicknameModifyTimes")
public Response<Long> getNicknameModifyTimes(){
public Response<Long> getNicknameModifyTimes() {
return Response.success(accountService.getNicknameModifyTimes());
}
@Operation(summary = "editUserName")
@GetMapping("/editUserName")
public Response<String> editUserName(@RequestParam("newUserName") String newUserName){
public Response<String> editUserName(@RequestParam("newUserName") String newUserName) {
accountService.editUserName(newUserName);
return Response.success("success");
}
@@ -289,7 +290,7 @@ public class AccountController {
@PostMapping("organizationNameSearch")
@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));
}

View File

@@ -103,7 +103,7 @@ public class ConvenientInquiryController {
@GetMapping("/recentNewUserChart")
public Response<Map<String, Object>> recentNewUserChart(@Parameter(description = "startTime") @RequestParam @Nullable String startTime,
@Parameter(description = "endTime") @RequestParam @Nullable String endTime,
@Parameter(description = "userType") @RequestParam Integer userType) {
@Parameter(description = "userType") @RequestParam @Nullable Integer userType) {
return Response.success(convenientInquiryService.recentNewUserChart(startTime, endTime, userType));
}
@@ -179,8 +179,10 @@ public class ConvenientInquiryController {
@Operation(summary = "获取所有用户id")
@GetMapping("/getAllUserId")
public Response<List<Map<String, Object>>> getAllUsrIdList() {
return Response.success(convenientInquiryService.getAllUserIdList());
public Response<IPage<Map<String, Object>>> getAllUserIdList(@Parameter(description = "page") @RequestParam Integer page,
@Parameter(description = "size") @RequestParam Integer size,
@Parameter(description = "email 模糊查询") @RequestParam(required = false) String email) {
return Response.success(convenientInquiryService.getAllUserIdList(page, size, email));
}
@Operation(summary = "获取所有交易信息")

View File

@@ -0,0 +1,217 @@
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.model.vo.PageVisitCountVO;
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());
}
@PostMapping("/page/visit")
@ApiOperation(value = "记录比赛页面访问量", notes = "记录比赛页面的访问量,包含两种统计方式:每次访问/刷新计一次以及5秒内刷新只计一次")
public Response<Void> recordPageVisit(@ApiParam(value = "会话ID用于5秒内去重判断", required = false) @RequestParam(value = "sessionId", required = false) String sessionId) {
globalAwardService.recordPageVisit(sessionId);
return Response.success();
}
@GetMapping("/page/visit/count")
@ApiOperation(value = "获取比赛页面访问量", notes = "获取比赛页面的两种访问量rawVisitCount每次访问/刷新计一次)和 uniqueVisitCount5秒内刷新只计一次")
public Response<PageVisitCountVO> getPageVisitCount() {
return Response.success(globalAwardService.getPageVisitCount());
}
}

View File

@@ -23,6 +23,9 @@ import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import jakarta.annotation.Resource;
import java.math.BigDecimal;
import java.util.Collections;
@@ -119,4 +122,14 @@ public class PythonController {
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

@@ -1,5 +1,6 @@
package com.ai.da.controller;
import com.ai.da.common.context.UserContext;
import com.ai.da.common.response.Response;
import com.ai.da.common.utils.DateUtil;
import com.ai.da.common.utils.RedisUtil;
@@ -10,6 +11,7 @@ import com.ai.da.model.dto.ProductPurchaseDTO;
import com.ai.da.model.dto.QueryCouponsPageDTO;
import com.ai.da.model.vo.CheckCouponsVO;
import com.ai.da.service.StripeService;
import com.ai.da.service.StripeSubscriptionService;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.paypal.http.HttpResponse;
import com.paypal.payments.Refund;
@@ -40,6 +42,8 @@ public class StripeController {
private StripeService stripeService;
@Resource
private RedisUtil redisUtil;
@Resource
private StripeSubscriptionService stripeSubscriptionService;
@Operation(summary = "创建支付链接")
@PostMapping("/createOrder")
@@ -53,30 +57,29 @@ public class StripeController {
@Operation(summary = "支付通知")
@PostMapping("/trade/notify")
public void callback(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
try{
Boolean result = stripeService.notify(request);
if (result){
response.setStatus(HttpServletResponse.SC_OK);
}else {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}catch (Exception e){
log.error("Stripe Controller层异常捕捉, {}", e.getMessage());
e.printStackTrace();
boolean result;
try {
result = stripeService.notify(request);
} catch (Exception e) {
log.error("Stripe Controller层异常捕捉, {}", e.getMessage(), e);
String key_1 = RedisUtil.STRIPE_EXCEPTION_LOG + DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD_HH);
String key_2 = key_1 + ":" + DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD_hh_mm_ss);
String key_2 = key_1 + ":" + DateUtil.dateToStr(new Date(), DateUtil.YYYY_MM_DD_HH_MM_SS);
String stackTrace = stripeService.getStackTrace(e, 10);
redisUtil.addToString(key_2, stackTrace);
Long size = redisUtil.getSize(key_1);
// 给我发送邮件
if (webhookReminderFlag.equals("1") && size == 3){
SendEmailUtil.commonExceptionReminder("Stripe Webhook 回调", new String[]{"xupei3360@163.com"});
if ("1".equals(webhookReminderFlag) && size == 3) {
SendEmailUtil.commonExceptionReminder("Stripe Webhook 回调处理出现异常", new String[]{"xupei3360@163.com"});
}
result = false;
}
if (result) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
}
}
@Operation(summary = "申请退款")
/* @Operation(summary = "申请退款")
@GetMapping("/trade/refund/{orderNo}/{reason}")
public Response<HttpResponse<Refund>> refund(@PathVariable String orderNo, @PathVariable String reason) throws IOException {
String response = stripeService.refund(null,orderNo,reason);
@@ -85,7 +88,7 @@ public class StripeController {
}else {
return Response.fail("Request for refund failed.");
}
}
}*/
@Operation(summary = "获取订阅")
@GetMapping("/getSubscription")
@@ -100,7 +103,8 @@ public class StripeController {
@Operation(summary = "取消订阅")
@GetMapping("/cancelSubscription")
public Response<String> cancelSubscription(@RequestParam String subscriptionId, @RequestParam(required = false) String reason) {
stripeService.cancelSubscription(subscriptionId, reason);
Long accountId = UserContext.getUserHolder().getId();
stripeSubscriptionService.cancelSubscription(subscriptionId, reason, accountId);
return Response.success("success");
}

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

@@ -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);
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();
}

View File

@@ -4,6 +4,7 @@ import com.ai.da.common.config.mybatis.plus.CommonMapper;
import com.ai.da.mapper.primary.entity.Notification;
import java.time.LocalDateTime;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -20,5 +21,5 @@ public interface NotificationMapper extends CommonMapper<Notification> {
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.mapper.primary.entity.WorkspaceRelStyle;
import java.util.List;
/**
* Mapper 接口
*
@@ -11,5 +13,11 @@ import com.ai.da.mapper.primary.entity.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;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@TableName("t_api_generate")
@ApiModel("调用第三方api的所有记录")
@Schema(description = "调用第三方api的所有记录")
public class APIGenerate extends BaseEntity{
// 用户id
private Long accountId;

View File

@@ -1,12 +1,13 @@
package com.ai.da.mapper.primary.entity;
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.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.Getter;
import lombok.experimental.Accessors;
import java.io.Serializable;
@@ -76,13 +77,13 @@ public class Account implements Serializable {
/**
* 创建时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createDate;
/**
* 更新时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date updateDate;
private Integer isTrial;
@@ -132,12 +133,36 @@ public class Account implements Serializable {
private String invitationCode;
@ApiModelProperty("title")
@Schema(description = "title")
private String title;
@ApiModelProperty("surname")
@Schema(description = "surname")
private String surname;
@ApiModelProperty("givenName")
@Schema(description = "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;
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.TableName;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -27,16 +27,16 @@ public class Canvas implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty("ID")
@Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty("url")
@Schema(description = "url")
private String url;
@ApiModelProperty("accountId")
@Schema(description = "accountId")
private Long accountId;
@ApiModelProperty("createTime")
@Schema(description = "createTime")
private LocalDateTime createTime;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -23,8 +23,6 @@ public class OrderInfo extends BaseEntity{
private String note;
private byte autoRenewal;
private String paymentType;//支付方式
// 可用于标记用户订单是否首次订阅

View File

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

View File

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

View File

@@ -2,6 +2,7 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
@@ -9,9 +10,6 @@ import java.io.Serializable;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* design item详情表实体类
*
@@ -20,7 +18,7 @@ import io.swagger.annotations.ApiModelProperty;
*/
@Data
@TableName("t_design_python_outfit_detail")
@ApiModel(value = "TDesignPythonOutfitDetail对象", description = "design item详情表")
@Schema(description = "design item详情表")
public class TDesignPythonOutfitDetail implements Serializable {
private static final long serialVersionUID = 1L;
@@ -28,84 +26,97 @@ public class TDesignPythonOutfitDetail implements Serializable {
/**
* ID
*/
@ApiModelProperty(value = "ID")
@Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 关联的design ID
*/
@ApiModelProperty(value = "关联的design ID")
@Schema(description = "关联的design ID")
private Long designId;
/**
* 关联的design_item ID
*/
@ApiModelProperty(value = "关联的design_item ID")
@Schema(description = "关联的design_item ID")
private Long designPythonOutfitId;
/**
* 关联的elementId 没有为null
*/
@ApiModelProperty(value = "关联的elementId 没有为null")
@Schema(description = "关联的elementId 没有为null")
private Long collectionElementId;
/**
* 图层
*/
@ApiModelProperty(value = "图层")
@Schema(description = "图层")
private String imageCategory;
/**
* imageSize
*/
@ApiModelProperty(value = "imageSize")
@Schema(description = "imageSize")
private String imageSize;
/**
* 对应的图片的绝对路径
*/
@ApiModelProperty(value = "对应的图片的绝对路径")
@Schema(description = "对应的图片的绝对路径")
private String imageUrl;
/**
* mask_url
*/
@ApiModelProperty(value = "mask_url")
@Schema(description = "mask_url")
private String maskUrl;
/**
* 位置
*/
@ApiModelProperty(value = "位置")
@Schema(description = "位置")
private String position;
/**
* 偏移量
*/
@ApiModelProperty(value = "偏移量")
@Schema(description = "偏移量")
private String offset;
/**
* 图层缩放大小
*/
@ApiModelProperty(value = "图层缩放大小")
@Schema(description = "图层缩放大小")
private String scale;
/**
* 用户ID
*/
@ApiModelProperty(value = "用户ID")
@Schema(description = "用户ID")
private Long userId;
/**
* 图层优先级
*/
@ApiModelProperty(value = "图层优先级")
@Schema(description = "图层优先级")
private Integer priority;
/**
* 镜像模式
*/
@Schema(description = "镜像模式")
private String transpose;
/**
* 旋转角度
*/
@Schema(description = "旋转角度")
private Double rotate;
/**
* 创建时间
*/
@ApiModelProperty(value = "创建时间")
@Schema(description = "创建时间")
private LocalDateTime createDate;
/**
* 更新时间
*/
@ApiModelProperty(value = "更新时间")
@Schema(description = "更新时间")
private LocalDateTime updateDate;
/**
* 是否删除
*/
@ApiModelProperty(value = "是否删除")
@Schema(description = "是否删除")
private Integer isDeleted;

View File

@@ -1,8 +1,8 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@@ -12,22 +12,22 @@ import java.time.LocalDateTime;
public class ToProductElement implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ID")
@Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "userLikeGroupId")
@Schema(description = "userLikeGroupId")
private Long userLikeGroupId;
@ApiModelProperty(value = "项目id")
@Schema(description = "项目id")
private Long projectId;
@ApiModelProperty(value = "url")
@Schema(description = "url")
private String url;
@ApiModelProperty(value = "首尾帧 first | last")
@Schema(description = "首尾帧 first | last")
private String frameType;
@ApiModelProperty(value = "createTime")
@Schema(description = "createTime")
private LocalDateTime createTime;
}

View File

@@ -1,8 +1,8 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@@ -12,18 +12,18 @@ import java.time.LocalDateTime;
public class ToProductImageRecord implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ID")
@Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "userLikeGroupId")
@Schema(description = "userLikeGroupId")
private Long userLikeGroupId;
private Long projectId;
@ApiModelProperty(value = "prompt")
@Schema(description = "prompt")
private String prompt;
@ApiModelProperty(value = "createTime")
@Schema(description = "createTime")
private LocalDateTime createTime;
}

View File

@@ -1,9 +1,9 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import io.swagger.v3.oas.annotations.media.Schema;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
@@ -14,11 +14,11 @@ import java.time.LocalDateTime;
public class ToProductImageResult implements Serializable {
private static final long serialVersionUID = 1L;
@ApiModelProperty(value = "ID")
@Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty(value = "elementId")
@Schema(description = "elementId")
private Long elementId;
/**
@@ -26,28 +26,28 @@ public class ToProductImageResult implements Serializable {
* ProductElement 上传的图片
* ToProductImage 以to product image的结果作为图片来源(relight)
*/
@ApiModelProperty(value = "elementType 图片来源DesignOutfit(design的结果) | ProductElement(上传的图片) | ToProductImage(生成的结果)")
@Schema(description = "elementType 图片来源DesignOutfit(design的结果) | ProductElement(上传的图片) | ToProductImage(生成的结果)")
private String elementType;
@ApiModelProperty(value = "url")
@Schema(description = "url")
private String url;
@ApiModelProperty(value = "isLike 1是0否")
@Schema(description = "isLike 1是0否")
private Integer isLike;
@ApiModelProperty(value = "createTime")
@Schema(description = "createTime")
private LocalDateTime createTime;
@ApiModelProperty(value = "toProductImageRecordId")
@Schema(description = "toProductImageRecordId")
private Long toProductImageRecordId;
@ApiModelProperty(value = "taskId")
@Schema(description = "taskId")
private String taskId;
@ApiModelProperty(value = "userLikeGroupId")
@Schema(description = "userLikeGroupId")
private Long userLikeGroupId;
@ApiModelProperty(value = "generate 结果类型")
@Schema(description = "generate 结果类型")
private String resultType;
private Double brightenValue;
@@ -64,7 +64,7 @@ public class ToProductImageResult implements Serializable {
private String status;
@ApiModelProperty(value = "是否删除1:是 0:否")
@Schema(description = "是否删除1:是 0:否")
@TableField
private byte isDeleted = 0;
}

View File

@@ -1,10 +1,10 @@
package com.ai.da.mapper.primary.entity;
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.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
@@ -26,25 +26,25 @@ public class TrialOrder implements Serializable {
@TableId(value = "id", type = IdType.AUTO)
private Long id;
@ApiModelProperty("title")
@Schema(description = "title")
private String title;
@ApiModelProperty("surname")
@Schema(description = "surname")
private String surname;
@ApiModelProperty("givenName")
@Schema(description = "givenName")
private String givenName;
@ApiModelProperty("userName")
@Schema(description = "userName")
private String userName;
@ApiModelProperty("email")
@Schema(description = "email")
private String email;
@ApiModelProperty("country")
@Schema(description = "country")
private String country;
@ApiModelProperty("occupation")
@Schema(description = "occupation")
private String occupation;
/**

View File

@@ -0,0 +1,31 @@
package com.ai.da.mapper.primary.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.time.LocalDateTime;
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("user_preference")
public class UserPreference implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
private Long id;
private Long accountId;
private String path;
private LocalDateTime dataTime;
private String category;
private String style;
private Long workspaceRelStyleId;
private Long projectId;
private Long designItemId;
}

View File

@@ -23,5 +23,8 @@ public class UserPreferenceLogTest implements Serializable {
private Long accountId;
private String path;
private LocalDateTime dataTime;
private String category;
private String style;
private Long sysFileId;
}

View File

@@ -7,8 +7,7 @@ import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* 实体类
@@ -17,7 +16,7 @@ import io.swagger.annotations.ApiModelProperty;
* @since 2023-08-01
*/
@Data
@ApiModel(value = "Workspace对象", description = "Workspace对象")
@Schema(description = "Workspace对象")
@TableName("workspace")
public class Workspace implements Serializable {
@@ -26,23 +25,23 @@ public class Workspace implements Serializable {
/**
* ID
*/
@ApiModelProperty(value = "ID")
@Schema(description = "ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 工作空间名称
*/
@ApiModelProperty(value = "工作空间名称")
@Schema(description = "工作空间名称")
private String workSpaceName;
/**
* 用户名
*/
@ApiModelProperty(value = "用户名")
@Schema(description = "用户名")
private String userName;
/**
* 用户ID
*/
@ApiModelProperty(value = "用户ID")
@Schema(description = "用户ID")
private Long accountId;
/**
* 年龄段 Adult || Child
@@ -51,54 +50,54 @@ public class Workspace implements Serializable {
/**
* 性别
*/
@ApiModelProperty(value = "性别")
@Schema(description = "性别")
private String sex;
/**
* 服装部位
*/
@ApiModelProperty(value = "服装部位")
@Schema(description = "服装部位")
private String position;
/**
* SYSTEM_DESIGNER占比
*/
@ApiModelProperty(value = "SYSTEM_DESIGNER占比")
@Schema(description = "SYSTEM_DESIGNER占比")
private Integer systemDesignerPercentage;
/**
* 人体模型
*/
@ApiModelProperty(value = "人体模型ID")
@Schema(description = "人体模型ID")
private Long mannequinFemaleId;
private Long mannequinMaleId;
private Long mannequinChildId;
/**
* 人体模型
*/
@ApiModelProperty(value = "人体模型类型")
@Schema(description = "人体模型类型")
private String mannequinFemaleType;
private String mannequinMaleType;
private String mannequinChildType;
/**
* 最后使用的工作空间标识
*/
@ApiModelProperty(value = "最后使用的工作空间标识")
@Schema(description = "最后使用的工作空间标识")
private Integer isLastIndex;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
@ApiModelProperty(value = "创建时间")
@Schema(description = "创建时间")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField(fill = FieldFill.INSERT_UPDATE)
@ApiModelProperty(value = "更新时间")
@Schema(description = "更新时间")
private LocalDateTime updateTime;
/**
* 是否删除
*/
@TableLogic
@ApiModelProperty(value = "是否删除")
@Schema(description = "是否删除")
private Integer isDeleted;
private Long projectId;

View File

@@ -1,7 +1,7 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -10,42 +10,42 @@ import jakarta.validation.constraints.NotBlank;
import java.math.BigDecimal;
@Data
@ApiModel("AccountAddDTO")
@Schema(description = "AccountAddDTO")
@NoArgsConstructor
@AllArgsConstructor
public class AccountAddDTO {
@NotBlank(message = "email.cannot.be.empty")
@ApiModelProperty("userEmail")
@Schema(description = "userEmail")
private String userEmail;
@NotBlank(message = "userName.cannot.be.empty")
@ApiModelProperty("userName")
@Schema(description = "userName")
private String userName;
private String country;
@NotBlank(message = "validStartTime.cannot.be.empty")
@ApiModelProperty("Start time of account validity ")
@Schema(description = "Start time of account validity ")
private String validStartTime;
@NotBlank(message = "validEndTime.cannot.be.empty")
@ApiModelProperty("End time of account validity ")
@Schema(description = "End time of account validity ")
private String validEndTime;
@ApiModelProperty("是否是试用用户 0 否 | 1 是")
@Schema(description = "是否是试用用户 0 否 | 1 是")
private Integer isTrial;
@ApiModelProperty("分配积分")
@Schema(description = "分配积分")
private BigDecimal credits;
@ApiModelProperty("用户角色")
@Schema(description = "用户角色")
private Integer systemUser;
@ApiModelProperty("学校名称 | 企业名称")
@Schema(description = "学校名称 | 企业名称")
private String organizationName;
@ApiModelProperty("可分配子账号总数(仅适用于学校或教育管理员)")
@Schema(description = "可分配子账号总数(仅适用于学校或教育管理员)")
private Integer subAccountNum;
public AccountAddDTO(String userEmail, String userName, String country, String validStartTime, String validEndTime, Integer isTrial, BigDecimal credits, Integer systemUser) {

View File

@@ -1,39 +1,39 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
@Data
@ApiModel("绑定邮箱")
@Schema(description = "绑定邮箱")
public class AccountBindEmailDTO {
// @NotNull(message = "userId.cannot.be.empty")
// @ApiModelProperty("用户id")
// @Schema(description = "用户id")
// private Long userId;
@NotBlank(message = "email.cannot.be.empty")
@ApiModelProperty("邮箱")
@Schema(description = "邮箱")
private String userEmail;
@NotBlank(message = "emailVerifyCode.cannot.be.empty")
@ApiModelProperty("邮箱验证码")
@Schema(description = "邮箱验证码")
private String emailVerifyCode;
// @ApiModelProperty("国家")
// @Schema(description = "国家")
// private String country;
//
// @ApiModelProperty("职业")
// @Schema(description = "职业")
// private String occupation;
//
// @ApiModelProperty("title")
// @Schema(description = "title")
// private String title;
//
// @ApiModelProperty("surname")
// @Schema(description = "surname")
// private String surname;
//
// @ApiModelProperty("givenName")
// @Schema(description = "givenName")
// private String givenName;
}

View File

@@ -1,35 +1,35 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@ApiModel("AccountEdit")
@Schema(description = "AccountEdit")
public class AccountEditDTO {
@ApiModelProperty("Old user email")
@Schema(description = "Old user email")
private String oldEmail;
@ApiModelProperty("New user email")
@Schema(description = "New user email")
private String newEmail;
@ApiModelProperty("Old user name")
@Schema(description = "Old user name")
private String oldUserName;
@ApiModelProperty("New user name")
@Schema(description = "New user name")
private String newUserName;
@ApiModelProperty("Start time of the new account validity period")
@Schema(description = "Start time of the new account validity period")
private String newValidStartTime;
@ApiModelProperty("Start time of the old account validity period")
@Schema(description = "Start time of the old account validity period")
private String oldValidStartTime;
@ApiModelProperty("End time of the new account validity period")
@Schema(description = "End time of the new account validity period")
private String newValidEndTime;
@ApiModelProperty("End time of the old account validity period")
@Schema(description = "End time of the old account validity period")
private String oldValidEndTime;
}

View File

@@ -1,32 +1,32 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@ApiModel("登入")
@Schema(description = "登入")
public class AccountLoginDTO {
@ApiModelProperty("userId")
@Schema(description = "userId")
private Long userId;
@ApiModelProperty("邮箱")
@Schema(description = "邮箱")
private String email;
@ApiModelProperty("用户名")
@Schema(description = "用户名")
private String userName;
@ApiModelProperty("密码")
@Schema(description = "密码")
private String password;
@ApiModelProperty("登入类型 EMAIL - >邮箱 , PASSWORD ->密码")
@Schema(description = "登入类型 EMAIL - >邮箱 , PASSWORD ->密码")
private String loginType;
@ApiModelProperty("邮箱验证码")
@Schema(description = "邮箱验证码")
private String emailVerifyCode;
@ApiModelProperty("组织名")
@Schema(description = "组织名")
private String organizationName;
}

View File

@@ -1,17 +1,17 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotNull;
@Data
@ApiModel("登出")
@Schema(description = "登出")
public class AccountLogoutDTO {
@NotNull(message = "userId.cannot.be.empty")
@ApiModelProperty("userId")
@Schema(description = "userId")
private Long userId;
}

View File

@@ -1,32 +1,31 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
@Data
@ApiModel("预先登入")
@Schema(description = "预先登入")
public class AccountPreLoginDTO {
@NotBlank(message = "userName.cannot.be.empty")
@ApiModelProperty("用户名")
@Schema(description = "用户名")
private String userName;
/*新增字段*/
@NotBlank(message = "email.cannot.be.empty")
@ApiModelProperty("邮箱")
@Schema(description = "邮箱")
private String email;
@NotBlank(message = "password.cannot.be.empty")
@ApiModelProperty("密码")
@Schema(description = "密码")
private String password;
@NotBlank(message = "operationType.cannot.be.empty")
@ApiModelProperty("操作类型 LOGIN 注册 FORGET_PWD 忘记密码 BIND_MAILBOX 绑定邮箱")
@Schema(description = "操作类型 LOGIN 注册 FORGET_PWD 忘记密码 BIND_MAILBOX 绑定邮箱")
private String operationType;
@ApiModelProperty("异常ip")
@Schema(description = "异常ip")
private String ip;
}

View File

@@ -1,26 +1,25 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
@Data
@ApiModel("账户")
@Schema(description = "账户")
public class AccountRegisterDTO {
@NotBlank(message = "email.cannot.be.empty")
@ApiModelProperty("邮箱")
@Schema(description = "邮箱")
private String email;
private Boolean verifyEmail;
// @NotBlank(message = "password.cannot.be.empty")
@ApiModelProperty("密码")
@Schema(description = "密码")
private String password;
@NotBlank(message = "emailVerifyCode.cannot.be.empty")
@ApiModelProperty("邮箱验证码")
@Schema(description = "邮箱验证码")
private String emailVerifyCode;
}

View File

@@ -1,13 +1,14 @@
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import com.ai.da.mapper.primary.entity.TrialOrder;
import io.swagger.annotations.ApiModel;
import lombok.Data;
import lombok.EqualsAndHashCode;
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("AccountTrial")
@Schema(description = "AccountTrial")
public class AccountTrialDTO extends TrialOrder {
private String ref;
}

View File

@@ -1,7 +1,6 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -9,19 +8,19 @@ import jakarta.validation.constraints.Pattern;
@EqualsAndHashCode(callSuper = true)
@Data
@ApiModel("查询affiliate列表")
@Schema(description = "查询affiliate列表")
public class AffiliateQueryDTO extends TimeQueryBaseDTO{
@ApiModelProperty("Active活跃 || Inactive过期 || Pending待审批 || Refused(拒绝)")
@Schema(description = "Active活跃 || Inactive过期 || Pending待审批 || Refused(拒绝)")
private String status;
@ApiModelProperty("推广者id")
@Schema(description = "推广者id")
private Long affiliateId;
@Pattern(regexp = "id|createTime|totalIncome|", message = "允许排序字段只有id|createTime|totalIncome")
@ApiModelProperty("目前允许按id, createTime, totalIncome进行排序")
@Schema(description = "目前允许按id, createTime, totalIncome进行排序")
private String orderBy = "id";
@ApiModelProperty("按时间 DESC 降序 || ASC 升序")
@Schema(description = "按时间 DESC 降序 || ASC 升序")
private String order = "ASC";
@Override

View File

@@ -1,6 +1,6 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
@@ -17,11 +17,11 @@ import jakarta.validation.constraints.NotNull;
@Data
public class ChatFlushDTO {
@NotNull(message = "user_id.cannot.be.empty")
@ApiModelProperty("用户id")
@Schema(description = "用户id")
private String user_id;
@NotBlank(message = "session_id.cannot.be.empty")
@ApiModelProperty("会话ID")
@Schema(description = "会话ID")
private String session_id;
}

View File

@@ -1,7 +1,6 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
@@ -16,23 +15,23 @@ import jakarta.validation.constraints.NotNull;
*/
@Data
@ApiModel("chatRobot 对话")
@Schema(description = "chatRobot 对话")
public class ChatSendDTO {
@NotNull(message = "userId.cannot.be.empty")
@ApiModelProperty("用户id")
@Schema(description = "用户id")
private Long user_id;
@NotBlank(message = "sessionId.cannot.be.empty")
@ApiModelProperty("会话ID")
@Schema(description = "会话ID")
private String session_id;
@NotBlank(message = "message.cannot.be.empty")
@ApiModelProperty("消息")
@Schema(description = "消息")
private String message;
@NotBlank(message = "gender.cannot.be.empty")
@ApiModelProperty("性别")
@Schema(description = "性别")
private String gender;
}

View File

@@ -1,7 +1,8 @@
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import com.ai.da.mapper.primary.entity.Classification;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -12,10 +13,10 @@ import java.util.List;
public class ClassificationDTO extends Classification {
private static final long serialVersionUID = 1L;
@ApiModelProperty("分类ID列表")
@Schema(description = "分类ID列表")
private List<Long> classificationIdList;
@ApiModelProperty("LibraryID")
@Schema(description = "LibraryID")
private List<Long> libraryIdList;
@ApiModelProperty("分类删除校验1校验0不校验")
@Schema(description = "分类删除校验1校验0不校验")
private Integer deleteConfirm;
}

View File

@@ -1,16 +1,17 @@
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import com.ai.da.mapper.primary.entity.CloudTask;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
public class CloudTaskDTO extends CloudTask {
@ApiModelProperty("toProduct/relight入参")
@Schema(description = "toProduct/relight入参")
private ToProductImageDTO toProductImage;
@ApiModelProperty("posetransfer入参")
@Schema(description = "posetransfer入参")
private List<PoseTransformBatchDTO> poseTransform;

View File

@@ -1,27 +1,27 @@
package com.ai.da.model.dto;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import com.ai.da.mapper.primary.entity.Gradient;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
@Data
@ApiModel("设计Collection颜色板 入参")
@Schema(description = "设计Collection颜色板 入参")
public class CollectionColorDTO {
@ApiModelProperty("潘通id")
@Schema(description = "潘通id")
private Integer id;
@ApiModelProperty("潘通名字")
@Schema(description = "潘通名字")
private String name;
@ApiModelProperty("tcx值")
@Schema(description = "tcx值")
private String tcx;
@NotBlank(message = "rgbValue.cannot.be.empty")
@ApiModelProperty("潘通RGB值")
@Schema(description = "潘通RGB值")
private String rgbValue;
private Gradient gradient;

View File

@@ -1,16 +1,15 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotNull;
@Data
@ApiModel("删除文件")
@Schema(description = "删除文件")
public class CollectionDeleteFileDTO {
@NotNull(message = "file id cannot be empty!")
@ApiModelProperty("文件id")
@Schema(description = "文件id")
private Long id;
}

View File

@@ -1,7 +1,6 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.web.multipart.MultipartFile;
@@ -11,28 +10,28 @@ import jakarta.validation.constraints.NotNull;
import java.util.Date;
@Data
@ApiModel("文件上传")
@Schema(description = "文件上传")
@AllArgsConstructor
public class CollectionElementUploadDTO {
@NotNull(message = "file.cannot.be.empty")
private MultipartFile file;
@ApiModelProperty("项目id")
@Schema(description = "项目id")
private Long projectId;
@ApiModelProperty("一级类型")
@Schema(description = "一级类型")
private String level1Type;
@ApiModelProperty("二级类型")
@Schema(description = "二级类型")
private String level2Type;
@ApiModelProperty("性别")
@Schema(description = "性别")
private String gender;
@ApiModelProperty("时区")
@Schema(description = "时区")
private String timeZone;
@ApiModelProperty("md5")
@Schema(description = "md5")
private String md5;
}

View File

@@ -1,25 +1,24 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
@Data
@ApiModel("生成印花")
@Schema(description = "生成印花")
public class CollectionGeneratePrintDTO {
@NotNull(message = "select1Id.cannot.be.empty")
@ApiModelProperty("选择的第一个print文件id")
@Schema(description = "选择的第一个print文件id")
private Long select1Id;
@NotNull(message = "select2Id.cannot.be.empty")
@ApiModelProperty("选择的第一个print文件id")
@Schema(description = "选择的第一个print文件id")
private Long select2Id;
@NotBlank(message = "timeZone.cannot.be.empty")
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
@Schema(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
}

View File

@@ -1,7 +1,6 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
@@ -10,16 +9,16 @@ import jakarta.validation.constraints.Size;
import java.util.List;
@Data
@ApiModel("印花保存")
@Schema(description = "印花保存")
public class CollectionSavePrintDTO {
@ApiModelProperty("生成的印花绝对路径")
@Schema(description = "生成的印花绝对路径")
@Size(max = 15, message = "Save up to 15 prints at a time!")
@NotEmpty(message = "printId.cannot.be.empty")
private List<String> printId;
@NotBlank(message = "timeZone.cannot.be.empty")
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
@Schema(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
}

View File

@@ -1,29 +1,28 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
@Data
@ApiModel("设计Collection Sketch 入参")
@Schema(description = "设计Collection Sketch 入参")
public class CollectionSketchDTO {
@ApiModelProperty("sketchBoardId 元素id")
@Schema(description = "sketchBoardId 元素id")
private Long sketchBoardId;
@NotNull(message = "isPin.cannot.be.empty")
@ApiModelProperty("是否pin 1 pin 0 不pin")
@Schema(description = "是否pin 1 pin 0 不pin")
private Byte isPin;
@NotBlank(message = "level2Type.cannot.be.empty")
@ApiModelProperty("二级类型 Outwear Dress Blouse Skirt Trousers")
@Schema(description = "二级类型 Outwear Dress Blouse Skirt Trousers")
private String level2Type;
@NotBlank(message = "designType.cannot.be.empty")
@ApiModelProperty("design类型 用户design生成时候区别library和collection")
@Schema(description = "design类型 用户design生成时候区别library和collection")
private String designType;
}

View File

@@ -1,7 +1,8 @@
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import com.ai.da.mapper.primary.entity.CollectionSort;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@@ -9,9 +10,9 @@ import java.util.List;
@Data
public class CollectionSortDTO{
@ApiModelProperty("userLikeGroupId")
@Schema(description = "userLikeGroupId")
private Long userLikeGroupId;
@ApiModelProperty("排序数组")
@Schema(description = "排序数组")
List<CollectionSort> userLikeSortList;
}

View File

@@ -0,0 +1,74 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import jakarta.validation.constraints.NotBlank;
import lombok.Data;
/**
* Contestant request DTO for Global Award
*/
@Data
@ApiModel(value = "参赛者信息", description = "全球奖项大赛参赛者信息数据传输对象")
public class ContestantDTO {
@ApiModelProperty(value = "邮箱地址", required = true, example = "user@example.com")
private String email;
@ApiModelProperty(value = "名字", required = true, example = "John")
private String firstName;
@ApiModelProperty(value = "姓氏", required = true, example = "Doe")
private String lastName;
@ApiModelProperty(value = "性别", required = true, example = "Male", allowableValues = "Male,Female,Other")
private String gender;
@ApiModelProperty(value = "职业", required = true, example = "Designer")
private String occupation;
@ApiModelProperty(value = "年龄", required = true, example = "25")
private Integer age;
@ApiModelProperty(value = "国家/地区/城市", required = true, example = "China/Shanghai/Shanghai")
private String countryRegionCity;
@ApiModelProperty(value = "电话号码", required = true, example = "+86 138 0000 0000")
private String phoneNumber;
@ApiModelProperty(value = "作品集链接", required = false, example = "https://portfolio.example.com")
private String portfolioUrl;
@ApiModelProperty(value = "设计作品标题", required = true, example = "Modern Office Building Design")
private String designTitle;
@ApiModelProperty(value = "设计作品描述", required = true, example = "A modern office building design featuring sustainable materials...")
private String designDescription;
@ApiModelProperty(value = "PDF文件路径", required = false, example = "contestants/user@example.com/2024/01/design_1234567890.pdf")
private String pdfPath;
@ApiModelProperty(value = "视频文件路径", required = false, example = "contestants/user@example.com/2024/01/video_1234567890.mp4")
private String videoPath;
@ApiModelProperty(value = "视频时长(秒)", required = false, example = "120")
private Integer videoDuration;
@ApiModelProperty(value = "视频大小(字节)", required = false, example = "10485760")
private Long videoSize;
@ApiModelProperty(value = "PDF 文件大小(字节)", required = false, example = "524288")
private Long pdfSize;
// /**
// * 是否确认覆盖已存在记录false 表示发现已有记录时仅返回 existingRecord不覆盖
// */
// @ApiModelProperty(value = "是否确认覆盖已存在记录", required = false, example = "false")
// private Boolean confirm = false;
@NotBlank
private String secureToken;
}

View File

@@ -0,0 +1,19 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 参赛者文件导出请求DTO
*/
@Data
@ApiModel(value = "参赛者文件导出请求", description = "用于导出指定范围的参赛者文件")
public class ContestantExportRequest {
@ApiModelProperty(value = "最小参赛者编号", required = true, example = "10000")
private Integer minContestantNumber;
@ApiModelProperty(value = "最大参赛者编号", required = true, example = "10010")
private Integer maxContestantNumber;
}

View File

@@ -1,26 +1,26 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotNull;
@Data
public class CreateCouponDTO {
@ApiModelProperty("折扣率")
@Schema(description = "折扣率")
@NotNull(message = "Please set the percentOff")
private Float percentOff;
@ApiModelProperty("佣金比例")
@Schema(description = "佣金比例")
@NotNull(message = "Please set the commissionRate.")
private Float commissionRate;
@ApiModelProperty("推广码到期时间 秒级时间戳")
@Schema(description = "推广码到期时间 秒级时间戳")
private Long endTime;
@ApiModelProperty("推广码开始时间 秒级时间戳")
@Schema(description = "推广码开始时间 秒级时间戳")
private Long startTime;
@ApiModelProperty("推广码最大使用次数")
@Schema(description = "推广码最大使用次数")
private Long maxRedemptions;
@ApiModelProperty("合作者/机构名")
@Schema(description = "合作者/机构名")
private String cooperator;
@ApiModelProperty("备注")
@Schema(description = "备注")
private String remark;
}

View File

@@ -1,19 +1,19 @@
package com.ai.da.model.dto;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import com.google.common.collect.Lists;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel("DesignAttributeRetrievalDTO 入参")
@Schema(description = "DesignAttributeRetrievalDTO 入参")
public class DesignAttributeRetrievalDTO {
@ApiModelProperty("library图片 数组")
@Schema(description = "library图片 数组")
private List<String> libraryUrls = Lists.newArrayList();
@ApiModelProperty("sysFile图片 数组")
@Schema(description = "sysFile图片 数组")
private List<String> sysFileUrlS = Lists.newArrayList();
}

View File

@@ -1,85 +1,84 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
@Data
@ApiModel("设计Collection 入参")
public class DesignCollectionDTO {
private Long projectId;
private Long collectionId;
@ApiModelProperty("情绪板图片 数组")
private List<DesignCollectionElementDTO> moodBoards;
@ApiModelProperty("印花板图片 数组")
private List<DesignCollectionPrintElementDTO> printBoards;
// @NotEmpty(message = "colorBoards.cannot.be.empty")
@ApiModelProperty("颜色板RGB值 数组")
private List<CollectionColorDTO> colorBoards;
@ApiModelProperty("手稿板图片id 数组")
private List<CollectionSketchDTO> sketchBoards;
@ApiModelProperty("模特 数组")
private List<MannequinDTO> mannequins;
@NotNull(message = "systemScale.cannot.be.empty")
@ApiModelProperty("系统取图比列")
private BigDecimal systemScale;
// @NotNull(message = "templateId.cannot.be.empty")
@ApiModelProperty("模特ID")
private Long templateId;
// @NotBlank(message = "modelType.cannot.be.empty")
@ApiModelProperty("模特类型:System,Library")
private String modelType;
@NotBlank(message = "modelSex.cannot.be.empty")
@ApiModelProperty("模特性别")
private String modelSex;
@ApiModelProperty("mood版本id 没有传null")
private String moodTemplateId;
@NotBlank(message = "singleOverall.cannot.be.empty")
@ApiModelProperty("控制生成类型的参数两个选项outfit时候传 single , 另外一个传 overall")
private String singleOverall;
@ApiModelProperty("single模式下的类别选择参数 选项有outwear,dress,blouse,skirt,trousers")
private String switchCategory;
@NotBlank(message = "timeZone.cannot.be.empty")
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
@NotBlank(message = "processId.cannot.be.empty")
@ApiModelProperty("python端design进程ID")
private String processId;
@ApiModelProperty("moodboard 位置信息")
private String moodboardPosition;
@ApiModelProperty("获取结果标识数组")
private List<String> requestIdList;
@ApiModelProperty("design数量")
private Integer designNum;
@ApiModelProperty("品牌ID")
private Long brandId;
@ApiModelProperty("品牌占比")
private Double brandScale;
}
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import java.math.BigDecimal;
import java.util.List;
@Data
@Schema(description = "设计Collection 入参")
public class DesignCollectionDTO {
private Long projectId;
private Long collectionId;
@Schema(description = "情绪板图片 数组")
private List<DesignCollectionElementDTO> moodBoards;
@Schema(description = "印花板图片 数组")
private List<DesignCollectionPrintElementDTO> printBoards;
// @NotEmpty(message = "colorBoards.cannot.be.empty")
@Schema(description = "颜色板RGB值 数组")
private List<CollectionColorDTO> colorBoards;
@Schema(description = "手稿板图片id 数组")
private List<CollectionSketchDTO> sketchBoards;
@Schema(description = "模特 数组")
private List<MannequinDTO> mannequins;
@NotNull(message = "systemScale.cannot.be.empty")
@Schema(description = "系统取图比列")
private BigDecimal systemScale;
// @NotNull(message = "templateId.cannot.be.empty")
@Schema(description = "模特ID")
private Long templateId;
// @NotBlank(message = "modelType.cannot.be.empty")
@Schema(description = "模特类型:System,Library")
private String modelType;
@NotBlank(message = "modelSex.cannot.be.empty")
@Schema(description = "模特性别")
private String modelSex;
@Schema(description = "mood版本id 没有传null")
private String moodTemplateId;
@NotBlank(message = "singleOverall.cannot.be.empty")
@Schema(description = "控制生成类型的参数两个选项outfit时候传 single , 另外一个传 overall")
private String singleOverall;
@Schema(description = "single模式下的类别选择参数 选项有outwear,dress,blouse,skirt,trousers")
private String switchCategory;
@NotBlank(message = "timeZone.cannot.be.empty")
@Schema(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
@NotBlank(message = "processId.cannot.be.empty")
@Schema(description = "python端design进程ID")
private String processId;
@Schema(description = "moodboard 位置信息")
private String moodboardPosition;
@Schema(description = "获取结果标识数组")
private List<String> requestIdList;
@Schema(description = "design数量")
private Integer designNum;
@Schema(description = "品牌ID")
private Long brandId;
@Schema(description = "品牌占比")
private Double brandScale;
}

View File

@@ -1,17 +1,16 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@ApiModel("设计Collection element other 入参")
@Schema(description = "设计Collection element other 入参")
public class DesignCollectionElementDTO {
@ApiModelProperty("元素id")
@Schema(description = "元素id")
private Long id;
@ApiModelProperty("design类型 用户design生成时候区别library和collection")
@Schema(description = "design类型 用户design生成时候区别library和collection")
private String designType;
}

View File

@@ -1,22 +1,21 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@ApiModel("设计Collection element print 入参")
@Schema(description = "设计Collection element print 入参")
public class DesignCollectionPrintElementDTO {
@ApiModelProperty("元素id")
@Schema(description = "元素id")
private Long id;
@ApiModelProperty("design类型 用户design生成时候区别library和collection")
@Schema(description = "design类型 用户design生成时候区别library和collection")
private String designType;
private String level2Type;
@ApiModelProperty("是否pin 1 pin 0 不pin")
@Schema(description = "是否pin 1 pin 0 不pin")
private Byte isPin;
}

View File

@@ -1,29 +1,28 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
@Data
@ApiModel("Design like 入参")
@Schema(description = "Design like 入参")
public class DesignLikeDTO {
@NotNull(message = "designItemId.cannot.be.empty")
@ApiModelProperty("like图片对应的designItemId")
@Schema(description = "like图片对应的designItemId")
private Long designItemId;
@NotNull(message = "designPythonOutfitId.cannot.be.empty")
@ApiModelProperty("like图片对应的designItemId")
@Schema(description = "like图片对应的designItemId")
private Long designPythonOutfitId;
@ApiModelProperty("like design到对应collection 对应的userGroupId,不传表示selected collection 为null")
@Schema(description = "like design到对应collection 对应的userGroupId,不传表示selected collection 为null")
private Long userGroupId;
@NotBlank(message = "timeZone.cannot.be.empty")
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
@Schema(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
private Long projectId;

View File

@@ -1,38 +1,38 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.util.List;
@Data
public class DesignSingleDTO {
@ApiModelProperty("designItemId")
@NotNull(message = "designItemId.cannot.be.empty")
private Long designItemId;
@ApiModelProperty("priority 数组,列表中包含服饰的顺序,越右边的表示越外层的衣服 例如[\"Outwear\", \"Dress\"]表示outwear在dress里面")
@NotEmpty(message = "priority.cannot.be.empty")
private List<String> priority;
@NotEmpty(message = "clothes.cannot.be.empty")
@ApiModelProperty("clothes 元素")
private List<DesignSingleItemDTO> clothes;
@ApiModelProperty("others 元素")
private List<DesignSingleItemDTO> others;
private DesignSingleItemDTO designSingleItem;
@ApiModelProperty("preview -> true submit -> false")
private Boolean isPreview;
@NotBlank(message = "timeZone.cannot.be.empty")
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
}
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.util.List;
@Data
public class DesignSingleDTO {
@Schema(description = "designItemId")
@NotNull(message = "designItemId.cannot.be.empty")
private Long designItemId;
@Schema(description = "priority 数组,列表中包含服饰的顺序,越右边的表示越外层的衣服 例如[\"Outwear\", \"Dress\"]表示outwear在dress里面")
@NotEmpty(message = "priority.cannot.be.empty")
private List<String> priority;
@NotEmpty(message = "clothes.cannot.be.empty")
@Schema(description = "clothes 元素")
private List<DesignSingleItemDTO> clothes;
@Schema(description = "others 元素")
private List<DesignSingleItemDTO> others;
private DesignSingleItemDTO designSingleItem;
@Schema(description = "preview -> true submit -> false")
private Boolean isPreview;
@NotBlank(message = "timeZone.cannot.be.empty")
@Schema(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
}

View File

@@ -1,6 +1,6 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
@@ -11,38 +11,42 @@ import java.util.List;
@Data
public class DesignSingleIncludeLayersDTO implements Serializable {
@ApiModelProperty("designItemId")
@Schema(description = "designItemId")
@NotNull(message = "designItemId.cannot.be.empty")
private Long designItemId;
@NotNull
@ApiModelProperty("designSingleItemDTOList")
@Schema(description = "designSingleItemDTOList")
private List<DesignSingleItemDTO> designSingleItemDTOList;
@NotNull(message = "isPreview.cannot.be.empty")
@ApiModelProperty("preview -> true submit -> false")
@Schema(description = "preview -> true submit -> false")
private Boolean isPreview;
@NotNull(message = "processId.cannot.be.empty")
@ApiModelProperty("进度")
@Schema(description = "进度")
private String processId;
@ApiModelProperty("性别")
@Schema(description = "性别")
private String gender;
@NotBlank(message = "timeZone.cannot.be.empty")
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
@Schema(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
@ApiModelProperty("模特id 每套衣服允许有一个单独的模特")
@Schema(description = "模特id 每套衣服允许有一个单独的模特")
private Long modelId;
@ApiModelProperty("模特类型 System || Library")
@Schema(description = "模特类型 System || Library")
private String modelType;
@ApiModelProperty("项目id")
@Schema(description = "项目id")
private Long projectId;
@NotBlank(message = "designType cannot be empty")
@Schema(description = "default -> 新增sketch || merge")
private String designType;
@Override
public String toString() {
return "DesignSingleIncludeLayersDTO{" +

View File

@@ -1,69 +1,85 @@
package com.ai.da.model.dto;
import com.ai.da.mapper.primary.entity.Gradient;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@Data
public class DesignSingleItemDTO implements Serializable {
@NotNull(message = "id.cannot.be.empty")
@ApiModelProperty("切换图片对应的id")
private Long id;
@NotEmpty(message = "changed cannot be empty")
@ApiModelProperty("当前服装的id是否被添加随机数")
private Boolean changed;
@NotBlank(message = "designType cannot be empty")
@ApiModelProperty("当前图片来源于用户上传还是从library选择 Collection/Library")
private String designType;
@NotBlank(message = "type.cannot.be.empty")
@ApiModelProperty("生成item实际对应的类型 有:Outwear,Dress,Blouse,Skirt,Trousers Shoes Hairstyle Earring")
private String type;
@ApiModelProperty("对应的图片的minIO路径")
private String path;
@ApiModelProperty("颜色 存 RGB值 中间空格分隔 比如 \"58 58 169\"")
private String color;
@ApiModelProperty("对应的print图片对象")
// private DesignPythonItemPrint printObject;
private DesignSinglePrintDTO printObject;
@ApiModelProperty("图层位置")
private List<Long> offset;
@ApiModelProperty("图层缩放比例")
private Float[] scale;
@NotNull(message = "priority.cannot.be.empty")
@ApiModelProperty("图层优先级")
private Integer priority;
@ApiModelProperty("渐变 颜色")
private Gradient gradient;
@ApiModelProperty("画笔修改过的sketch图片的base64格式的数据")
private String sketchString;
@ApiModelProperty("衣服上的装饰")
private DesignSinglePrintDTO trims;
@ApiModelProperty("标注后的mask 的base64")
private String maskUrl;
@ApiModelProperty("mask 的minio地址")
private String maskMinioUrl;
private PartialDesignDTO partialDesign;
}
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.media.Schema;
import com.ai.da.mapper.primary.entity.Gradient;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.List;
@Data
public class DesignSingleItemDTO implements Serializable {
@NotNull(message = "id.cannot.be.empty")
@Schema(description = "切换图片对应的id")
private Long id;
@NotEmpty(message = "changed cannot be empty")
@Schema(description = "当前服装的id是否被添加随机数")
private Boolean changed;
@NotBlank(message = "designType cannot be empty")
@Schema(description = "当前图片来源于用户上传还是从library选择 Collection/Library")
private String designType;
@NotBlank(message = "type.cannot.be.empty")
@Schema(description = "生成item实际对应的类型 有:Outwear,Dress,Blouse,Skirt,Trousers Shoes Hairstyle Earring")
private String type;
@Schema(description = "对应的图片的minIO路径")
private String path;
@Schema(description = "颜色 存 RGB值 中间空格分隔 比如 \"58 58 169\"")
private String color;
@Schema(description = "对应的print图片对象")
// private DesignPythonItemPrint printObject;
private DesignSinglePrintDTO printObject;
@Schema(description = "图层位置")
private List<Long> offset;
@Schema(description = "图层缩放比例")
private Float[] scale;
@NotNull(message = "priority.cannot.be.empty")
@Schema(description = "图层优先级")
private Integer priority;
@Schema(description = "渐变 颜色")
private Gradient gradient;
@Schema(description = "画笔修改过的sketch图片的base64格式的数据")
private String sketchString;
@Schema(description = "衣服上的装饰")
private DesignSinglePrintDTO trims;
@Schema(description = "标注后的mask 的base64")
private String maskUrl;
@Schema(description = "mask 的minio地址")
private String maskMinioUrl;
private PartialDesignDTO partialDesign;
@Schema(description = "镜像模式 ")
private int[] transpose;
@Schema(description = "45")
private double rotate;
@Hidden
@Schema(description = "带overall印花未分割图片")
private String undividedLayerBase64;
@Hidden
@Schema(description = "带overall/single印花未分割图片")
private String undividedLayerWithSinglePrintBase64;
}

View File

@@ -1,24 +1,24 @@
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import com.ai.da.model.vo.DesignSinglePrint;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
@ApiModel("design single 印花请求信息")
@Schema(description = "design single 印花请求信息")
public class DesignSinglePrintDTO implements Serializable {
// @ApiModelProperty("印花url")
// @Schema(description = "印花url")
// private String path;
/*@ApiModelProperty("single -> true,overall -> false")
/*@Schema(description = "single -> true,overall -> false")
private Boolean ifSingle;*/
@ApiModelProperty("印花详细")
@Schema(description = "印花详细")
private List<DesignSinglePrint> prints;
public DesignSinglePrintDTO() {

View File

@@ -1,28 +1,27 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
@Data
@ApiModel("Design dislike 入参")
@Schema(description = "Design dislike 入参")
public class DisDesignLikeDTO {
@NotNull(message = "groupDetailId.cannot.be.empty")
@ApiModelProperty("dislike图片对应的分组详情id")
@Schema(description = "dislike图片对应的分组详情id")
private Long groupDetailId;
@NotNull(message = "designId.cannot.be.empty")
@ApiModelProperty("dislike图片到对应的designId中")
@Schema(description = "dislike图片到对应的designId中")
private Long designId;
@NotBlank(message = "timeZone.cannot.be.empty")
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
@Schema(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
@ApiModelProperty("项目ID")
@Schema(description = "项目ID")
private Long projectId;
}

View File

@@ -1,7 +1,6 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotNull;
@@ -9,16 +8,16 @@ import jakarta.validation.constraints.Pattern;
import java.math.BigDecimal;
@Data
@ApiModel
@Schema(description = "编辑推荐")
public class EditReferralDTO {
@NotNull(message = "referral id cannot be empty")
@ApiModelProperty("指定需要修改的referral的id")
@Schema(description = "指定需要修改的referral的id")
private Long id;
@ApiModelProperty("修改佣金金额")
@Schema(description = "修改佣金金额")
private BigDecimal commission;
@ApiModelProperty("referral状态 取值Paid/Unpaid/Accept/Rejected")
@Schema(description = "referral状态 取值Paid/Unpaid/Accept/Rejected")
@Pattern(regexp = "Paid|Unpaid|Accept|Rejected", message = "状态必须是Paid/Unpaid/Accept/Rejected")
private String status;
}

View File

@@ -1,38 +1,37 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
@Data
@ApiModel("邮箱发送")
public class EmailSendDTO {
@ApiModelProperty("用户id")
private Long userId;
@NotBlank(message = "email.cannot.be.empty")
@ApiModelProperty("邮箱")
private String email;
@NotBlank(message = "operationType.cannot.be.empty")
@ApiModelProperty("操作类型 LOGIN 登录 FORGET_PWD 忘记密码 BIND_MAILBOX 绑定邮箱 " +
"CHANGE_MAILBOX 更改邮箱 UPDATE_USERINFO 仅填写国家、职业(不发送邮件) REGISTER 注册")
private String operationType;
@ApiModelProperty("异常ip")
private String ip;
@ApiModelProperty("国家")
private String country;
@ApiModelProperty("职业")
private String occupation;
private String title;
private String surname;
private String givenName;
}
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
@Data
@Schema(description = "邮箱发送")
public class EmailSendDTO {
@Schema(description = "用户id")
private Long userId;
@NotBlank(message = "email.cannot.be.empty")
@Schema(description = "邮箱")
private String email;
@NotBlank(message = "operationType.cannot.be.empty")
@Schema(description = "操作类型 LOGIN 登录 FORGET_PWD 忘记密码 BIND_MAILBOX 绑定邮箱 " +
"CHANGE_MAILBOX 更改邮箱 UPDATE_USERINFO 仅填写国家、职业(不发送邮件) REGISTER 注册")
private String operationType;
@Schema(description = "异常ip")
private String ip;
@Schema(description = "国家")
private String country;
@Schema(description = "职业")
private String occupation;
private String title;
private String surname;
private String givenName;
}

View File

@@ -1,18 +1,17 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
@ApiModel("查询画布详细")
@Schema(description = "查询画布详细")
public class ExportSearchDTO {
// private Long userLikeGroupId;
@ApiModelProperty("画布文件id")
@Schema(description = "画布文件id")
private Long id;
@ApiModelProperty("画布关联项目id")
@Schema(description = "画布关联项目id")
private Long projectId;
@ApiModelProperty("画布所属模块。canvas | deReconstruction | designItemDetail")
@Schema(description = "画布所属模块。canvas | deReconstruction | designItemDetail")
private String module;
}

View File

@@ -1,21 +1,20 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
package com.ai.da.model.dto;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
@Data
@ApiModel("生成高级design 入参")
@Schema(description = "生成高级design 入参")
public class GenerateHighDesignDTO {
@NotNull(message = "designItemId.cannot.be.empty")
@ApiModelProperty("design的designItemId")
@Schema(description = "design的designItemId")
private Long designItemId;
@NotBlank(message = "timeZone.cannot.be.empty")
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
@Schema(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
}

View File

@@ -1,34 +1,33 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
@Data
@ApiModel("Generate like入参")
@Schema(description = "Generate like入参")
public class GenerateLikeDTO {
@NotNull(message = "generateDetailId.cannot.be.empty")
@ApiModelProperty("generateDetailId")
@Schema(description = "generateDetailId")
private Long generateDetailId;
@NotBlank(message = "level1Type.cannot.be.empty")
@ApiModelProperty("一级类型 Sketchboard Printboard")
@Schema(description = "一级类型 Sketchboard Printboard")
private String level1Type;
@ApiModelProperty("当一级类型为Sketchboard时二级类型 Outwear Dress Blouse Skirt Trousers当一级类型为Printboard时二级类型 Slogan Logo Pattern")
@Schema(description = "当一级类型为Sketchboard时二级类型 Outwear Dress Blouse Skirt Trousers当一级类型为Printboard时二级类型 Slogan Logo Pattern")
private String level2Type;
@ApiModelProperty("年龄段")
@Schema(description = "年龄段")
private String ageGroup;
@ApiModelProperty("性别")
@Schema(description = "性别")
private String gender;
@NotBlank(message = "timeZone.cannot.be.empty")
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
@Schema(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
}

View File

@@ -1,42 +1,41 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Pattern;
@ApiModel("修改imageToSketch提取出的sketch")
@Schema(description = "修改imageToSketch提取出的sketch")
@Data
public class GenerateModifyDTO {
@NotBlank(message = "image cannot be empty")
@ApiModelProperty(value = "需要保存的图片的base64格式", required = true)
@Schema(description = "需要保存的图片的base64格式", required = true)
private String base64;
@NotBlank(message = "gender cannot be empty")
@ApiModelProperty(value = "sketch所属性别", required = true)
@Schema(description = "sketch所属性别", required = true)
private String gender;
@NotBlank(message = "category cannot be empty")
@ApiModelProperty(value = "sketch所属分类", required = true)
@Schema(description = "sketch所属分类", required = true)
private String category;
@NotNull(message = "id cannot be empty")
@ApiModelProperty(value = "原图id", required = true)
@Schema(description = "原图id", required = true)
private Long originalId;
@NotBlank(message = "original Id Source cannot be empty")
@ApiModelProperty(value = "原图id的来源 Library || Generate || Collection", required = true)
@Schema(description = "原图id的来源 Library || Generate || Collection", required = true)
private String originalIdSource;
@NotNull(message = "isOverride cannot be empty")
@ApiModelProperty("是否覆盖原图")
@Schema(description = "是否覆盖原图")
private Boolean isOverride;
@NotBlank(message = "type cannot be empty")
@ApiModelProperty("类型 Sketchboard || Printboard")
@Schema(description = "类型 Sketchboard || Printboard")
@Pattern(regexp = "Sketchboard|Printboard", message = "type只能填入Sketchboard 或 Printboard")
private String type;
}

View File

@@ -1,64 +1,63 @@
package com.ai.da.model.dto;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;
@Data
@ApiModel("GenerateThroughImageTextDTO")
@Schema(description = "GenerateThroughImageTextDTO")
public class GenerateThroughImageTextDTO {
@NotNull(message = "userId cannot be empty")
@ApiModelProperty("用户id")
@Schema(description = "用户id")
private Long userId;
@ApiModelProperty("caption | prompt")
@Schema(description = "caption | prompt")
private String text;
@ApiModelProperty("图片在t_collection_element表中的id")
@Schema(description = "图片在t_collection_element表中的id")
private Long collectionElementId;
// todo 后续取消这个字段的传输,由后端自行判断相关参数是否有值
// @NotBlank(message = "you have to choose the generate type")
@ApiModelProperty("text image text-image")
@Schema(description = "text image text-image")
private String generateType;
@ApiModelProperty("图片来源update从library中选择,从toProductImage结果中选择 collection || library || productImage")
@Schema(description = "图片来源update从library中选择,从toProductImage结果中选择 collection || library || productImage")
private String designType;
@NotBlank(message = "level1Type cannot be empty!")
@ApiModelProperty("Moodboard Printboard Sketchboard MarketingSketch")
@Schema(description = "Moodboard Printboard Sketchboard MarketingSketch")
private String level1Type;
@ApiModelProperty("Outwear Dress Blouse Skirt Trousers || Logo Slogan Pattern")
@Schema(description = "Outwear Dress Blouse Skirt Trousers || Logo Slogan Pattern")
private String level2Type;
@ApiModelProperty("性别")
@Schema(description = "性别")
private String gender;
@ApiModelProperty("选择的模型名 high || fast || wx || fp")
@Schema(description = "选择的模型名 high || fast || wx || fp")
private String modelName;
@NotBlank(message = "timeZone cannot be empty!")
@ApiModelProperty("本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
@Schema(description = "本地时区,比如 'Asia/Tokyo' 东京时间 , 'Asia/Shanghai' 北京时间 由js本地获取")
private String timeZone;
@ApiModelProperty("唯一id用于保持消息唯一性")
@Schema(description = "唯一id用于保持消息唯一性")
private String uniqueId;
@NotNull(message = "Please check if the required fields are empty.(isTestUser)")
@ApiModelProperty("是否是测试用户")
@Schema(description = "是否是测试用户")
private Boolean isTestUser;
@ApiModelProperty("页面上用户设计的slogan所截的图片")
@Schema(description = "页面上用户设计的slogan所截的图片")
private String sloganBase64;
@ApiModelProperty("种子 取值范围 0~500")
@Schema(description = "种子 取值范围 0~500")
private String seed;
@ApiModelProperty("年龄区间 Adult || Child")
@Schema(description = "年龄区间 Adult || Child")
private String ageGroup = "Adult";
}

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