Compare commits

...

435 Commits

Author SHA1 Message Date
yang 5eb778c21c Merge branch 'refs/heads/preview' into feature/community-center 2025-04-22 17:07:35 +08:00
yang 43b79969ee feat(communityCenter): 新增社区通知功能并调整收益信息相关代码 2025-04-22 17:07:15 +08:00
Diyu0904 8dca878499 Merge branch 'master' into preview 2025-04-22 16:25:17 +08:00
Diyu0904 4e09f1055e 更改正式环境配置文件 2025-04-22 13:31:03 +08:00
Diyu0904 5d3857506d 更改正式环境配置文件 2025-04-22 11:54:43 +08:00
yang e3a27c5199 Merge remote-tracking branch 'origin/feature/community-center' into feature/community-center
# Conflicts:
#	mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/domain/vo/PublishVo.java
#	mcwl-communityCenter/src/main/java/com/mcwl/communityCenter/service/impl/PublishServiceImpl.java
2025-04-21 16:22:35 +08:00
yang 9c7e6ea4a1 feat(communityCenter): 增加是否点赞 2025-04-21 16:21:30 +08:00
yang c3d1fba84a feat(communityCenter): 社区详情、编辑社区、社区文件下载 2025-04-21 15:35:55 +08:00
yang 906a56c431 feat(community): 发布收藏 2025-04-16 13:46:13 +08:00
Diyu0904 74ac63338a 更改正式环境配置文件 支付宝回调 2025-04-15 15:58:54 +08:00
Diyu0904 d71f75bfe7 更改正式环境配置文件 2025-04-15 13:36:18 +08:00
yang 70d3d32bc5 feat(communityCenter): 社区收益功能、用户拉黑 2025-04-15 10:57:53 +08:00
Diyu0904 81cfc52881 更改正式环境配置文件 2025-04-14 15:58:47 +08:00
Diyu0904 23c8fb7410 更改正式环境配置文件 2025-04-14 15:40:49 +08:00
Diyu0904 4b5187f5dc 更改测试环境文件 2025-04-14 15:37:23 +08:00
yang 8734ca0502 Merge branch 'refs/heads/feature/community-center' into preview
# Conflicts:
#	mcwl-admin/src/main/resources/application-druid.yml
2025-04-14 15:33:36 +08:00
yang 67d1f6cc19 refactor(mcwl): 调整 2025-04-14 15:31:37 +08:00
yang 1f85f77ca3 refactor(mcwl): 重构代码并添加新功能
- 修改了 AddBenefitNameDto 和 EditBenefitNameDto 中的注解- 添加了 AdviceConstant 类用于定义通知类型常量
- 在 BenefitController 中添加了根据权益名称 ID 查询权益的接口
- 在 CommunityServiceImpl 中实现了社区通知的发送- 移除了与 MQTT 相关的代码和接口
2025-04-14 15:30:45 +08:00
Diyu0904 5083e455ab 更新配置文件 2025-04-14 14:58:58 +08:00
yang a74e6412e0 feat(memberCenter): 重构权益相关功能 2025-04-11 14:59:43 +08:00
yang 502fcb3072 feat(communityCenter): 社区文件下载记录功能 2025-04-10 17:44:57 +08:00
yang f90bc03b48 Merge branch 'feature/community-center' into preview 2025-04-10 17:13:53 +08:00
yang 5357e25635 feat(memberCenter): 重构会员权益功能并添加社区文件管理 2025-04-10 17:13:17 +08:00
Diyu0904 93655e9f63 修改通过举报列表后不封禁作品问题 2025-04-10 17:12:33 +08:00
yang 4d50a05ed7 feat(memberCenter): 重构会员权益功能并添加社区文件管理 2025-04-10 17:02:15 +08:00
yang 0005e1da6b Merge branch 'refs/heads/feature/community-center' into preview 2025-04-10 15:15:20 +08:00
yang f3e5e93173 fix(system): 修复用户数据统计问题 2025-04-10 15:14:30 +08:00
Diyu0904 76e7619eac 修改通过举报列表后不封禁作品问题 2025-04-08 17:33:45 +08:00
Diyu0904 44af6d3b60 修改举报列表空指针异常 2025-04-08 17:00:42 +08:00
Diyu0904 2ab7a54774 Merge remote-tracking branch 'origin/preview' into preview 2025-04-08 13:34:38 +08:00
yang 1479666516 Merge branch 'feature/community-center' into preview 2025-04-08 13:33:44 +08:00
yang 6b42b596de feat(memberCenter): 添加会员等级和相关功能 2025-04-08 13:33:13 +08:00
Diyu0904 700ded15ec Merge branch 'feature/admin' into preview 2025-04-08 13:32:10 +08:00
Diyu0904 23d1028e13 优化字典表
字典表新增二级联动
2025-04-08 13:30:54 +08:00
Diyu0904 d5ff1265d7 Merge remote-tracking branch 'origin/preview' into preview 2025-04-05 14:38:11 +08:00
Diyu0904 56402b081b Merge branch 'feature/admin' into preview 2025-04-05 14:37:42 +08:00
Diyu0904 23a0c7fd48 修改工作流评论区名字展示nickname 2025-04-05 14:36:09 +08:00
yang 17edba85e5 feat(community): 增加我加入的社区功能并优化社区相关操作 2025-04-01 15:34:35 +08:00
yang 5f5b9ec9ab Merge branch 'feature/community-center' into preview 2025-03-31 16:55:17 +08:00
yang c755d11609 refactor(mcwl-pay): 优化订单交易服务和用户支付账户日志服务 2025-03-31 16:54:19 +08:00
Diyu0904 f02c000855 Merge branch 'feature/admin' into preview 2025-03-31 16:23:49 +08:00
Diyu0904 2ba4ab57b0 邀请人不能填写自己 2025-03-31 16:23:14 +08:00
yang 60949dfa90 refactor(mcwl-pay): 优化订单交易服务和用户支付账户日志服务 2025-03-31 16:21:26 +08:00
yang 447cd262ad feat(payment): 添加用户支付宝提现日志并优化查询功能 2025-03-31 15:32:33 +08:00
yang 0f7743abb1 Merge branch 'feature/community-center' into preview 2025-03-31 15:23:32 +08:00
yang ccd4372a68 fix(mcwl-pay): 修复支付宝提现功能 2025-03-31 15:21:54 +08:00
Diyu0904 7150bcf495 修改配置文件 2025-03-31 14:08:09 +08:00
yang 196ba38b15 feat(payment): 支持支付宝多种身份类型绑定 2025-03-31 13:30:15 +08:00
yang 0d29d79af6 Merge branch 'feature/community-center' into preview 2025-03-29 18:01:55 +08:00
yang 43f11e5db2 perf(payment): 优化支付宝提现流程并缓存佣金比例 2025-03-29 18:01:37 +08:00
Diyu0904 fca80acccb 修改模型点赞bug
模型/工作流新增下载次数
2025-03-29 17:54:37 +08:00
yang ef36122845 Merge branch 'feature/community-center' into preview 2025-03-29 15:54:02 +08:00
yang d8e55d9021 feat(myInvitation): 添加金币收入记录功能 2025-03-29 15:52:34 +08:00
Diyu0904 dbabbb686e 修改商品购买
文件下载新增购买校验
2025-03-29 14:55:23 +08:00
Diyu0904 61d8a0ca88 修改商品购买
文件下载新增购买校验
2025-03-29 14:55:11 +08:00
Diyu0904 54b79c03ca Merge branch 'feature/admin' into preview 2025-03-28 16:53:21 +08:00
Diyu0904 50e410eb54 修改商品购买
修改自定义状态吗
2025-03-28 16:52:28 +08:00
yang b74323dfcc Merge branch 'feature/community-center' into preview 2025-03-28 16:51:34 +08:00
yang f1acb5c183 feat(community): 新增我创建的社区和我加入的社区接口 2025-03-28 16:51:11 +08:00
Diyu0904 085e852f19 Merge branch 'feature/admin' into preview 2025-03-28 14:45:59 +08:00
Diyu0904 f6ed1d4982 修改文件校验为POST请求 2025-03-28 14:44:21 +08:00
yang 71b034673e feat(community): 增加社区发布数量统计并优化会员查询功能 2025-03-28 13:43:42 +08:00
yang 14f6021416 feat(mcwl-admin): 增加模型、工作流和图片的购买判断逻辑 2025-03-27 17:14:30 +08:00
yang a97285ba3c fix(mcwl-pay): 修复订单问题 2025-03-27 16:24:01 +08:00
yang a87d8c2295 Merge branch 'feature/community-center' into preview 2025-03-27 11:38:29 +08:00
yang 53fcee7ada refactor(resource): 重构资源模块点赞功能 2025-03-27 11:37:59 +08:00
Diyu0904 619bc45f17 修改文件校验为POST请求 2025-03-24 09:22:42 +08:00
Diyu0904 502a10efe3 Merge branch 'feature/admin' into preview 2025-03-24 09:22:07 +08:00
Diyu0904 c9637b5ae6 模型广场新增下载
我的收藏列表新增参数
更改新增下载记录
2025-03-22 17:55:07 +08:00
Diyu0904 96141843ef 修改查询文件为POST请求 2025-03-22 15:36:29 +08:00
Diyu0904 500ff7f3d3 修改重复提交状态码为12202 2025-03-21 16:12:22 +08:00
Diyu0904 7fd5caec09 模型版本擦除敏感数据 2025-03-21 15:28:05 +08:00
Diyu0904 a9b0d8806c 更新根据名字查询秘钥接口 2025-03-21 14:41:43 +08:00
Diyu0904 156d3c18c2 修改加密接口路径 2025-03-21 14:32:00 +08:00
Diyu0904 9b675ab620 修改校验文件名字 2025-03-21 14:11:02 +08:00
Diyu0904 a3a0435850 更新文件解密查询名字 2025-03-21 14:06:44 +08:00
Diyu0904 0bfcbe9f0e Merge branch 'feature/admin' into preview 2025-03-21 13:54:55 +08:00
Diyu0904 37800e7f03 修改comfyui更细数据库字段名
新增加密后文件大小
新增触发词默认标志
2025-03-21 13:54:17 +08:00
Diyu0904 598c353014 Merge branch 'feature/admin' into preview 2025-03-21 09:28:47 +08:00
Diyu0904 e5e70950ae 模型新增加密后新名字 2025-03-21 09:27:42 +08:00
Diyu0904 9b4f92beed 删除修改时校验文件 2025-03-21 09:17:58 +08:00
yang d0238c2320 Merge branch 'feature/community-center' into preview 2025-03-20 16:03:25 +08:00
yang 7ce5ac3965 feat(community): 社区加入,调整社区列表 2025-03-20 16:03:07 +08:00
Diyu0904 c5ecdac49d 修改发布实名制null判断 2025-03-20 11:53:29 +08:00
yang a2090eecb8 Merge branch 'feature/community-center' into preview 2025-03-19 17:33:12 +08:00
yang ef826ce25f feat(resource): 调整点赞 2025-03-19 17:29:36 +08:00
Diyu0904 7cf4de3530 模型新增加密
调用加密接口路径配置在配置文件
2025-03-19 17:01:57 +08:00
Diyu0904 3db4b4d000 修改秘钥获取不到bug 2025-03-19 15:22:15 +08:00
Diyu0904 de0f0fc2f9 加密后修改数据接口新增日志 2025-03-19 15:08:35 +08:00
Diyu0904 84f274bbc6 修改时间为东八区格式 2025-03-18 16:18:13 +08:00
Diyu0904 5726a63ec7 新增修改工作流/模型文件校验 2025-03-18 14:28:46 +08:00
Diyu0904 ed9cad897f 用户头像与背景放置在环境文件 2025-03-18 13:55:48 +08:00
Diyu0904 6f3ba08098 修改模型文件key丢失
修改工作流文件参数丢失
新增发布工作流/模型文件以及hash校验
2025-03-18 13:37:22 +08:00
Diyu0904 6794ef4e10 Merge branch 'preview' into feature/admin 2025-03-17 18:13:12 +08:00
Diyu0904 8753c08c4a 模型/图片/工作流实名制后才可发布 2025-03-17 18:12:51 +08:00
yang 940b6b4125 Merge branch 'refs/heads/feature/community-center' into preview 2025-03-17 17:31:26 +08:00
yang a547800d96 feat(resource): 获取官方通知 2025-03-17 17:30:33 +08:00
Diyu0904 0dcf869ce3 修改重复提交接口时间间隔为1秒 2025-03-17 16:42:00 +08:00
Diyu0904 20b74ebdcd 新增文件测试 2025-03-17 16:24:27 +08:00
Diyu0904 00693ef802 修改查看收藏列表接口
修改配置为新测试环境
2025-03-15 14:12:11 +08:00
Diyu0904 8ca5ff3290 恢复支付宝 2025-03-15 10:10:49 +08:00
yang dc5ea06789 refactor(mcwl): 取消注释 2025-03-15 10:05:20 +08:00
yang 2ab3f8a7c6 Merge branch 'feature/community-center' into preview
# Conflicts:
#	mcwl-admin/src/main/resources/application-dev.yml
2025-03-15 09:41:45 +08:00
yang c556b006b7 build(mcwl-admin): 调整 2025-03-15 09:39:15 +08:00
Diyu0904 14576812ae 注销支付宝 2025-03-15 09:35:03 +08:00
Diyu0904 4ebcb60f17 修改证书 2025-03-14 18:48:32 +08:00
Diyu0904 90bed7d0b0 Merge branch 'feature/admin' into preview 2025-03-14 18:45:06 +08:00
Diyu0904 888ac7f8f4 修改加密为异步
新增通过ID修改加密后数据
2025-03-14 18:44:31 +08:00
yang 387b3a0e68 feat(resource): 增加下载数 2025-03-14 18:07:15 +08:00
yang 2ef2fabc66 fix(mcwl): 调整 2025-03-14 17:53:13 +08:00
yang 35ec6d7485 refactor(mcwl-admin): 调整 2025-03-14 15:23:48 +08:00
yang 5cb6952434 Merge branch 'feature/community-center' into preview 2025-03-14 13:44:30 +08:00
yang 43944084c2 refactor(mcwl-resource): 调整 MQTT 消息处理机制 2025-03-14 13:44:13 +08:00
yang 41d617b26f refactor(mcwl-resource): 调整 MQTT 消息处理机制 2025-03-14 13:43:21 +08:00
Diyu0904 eaf4a778dd 修改我的模型库数据连表逻辑
模型广场新增空版本数据过滤
2025-03-13 16:36:09 +08:00
yang 335aaccdbb feat(resource): 添加 MQTT 消息推送 2025-03-13 14:54:21 +08:00
Diyu0904 c34fe50549 修改是否收藏逻辑
新增查询个人收藏
新增本地下载查询详情接口
2025-03-12 19:47:01 +08:00
Diyu0904 eeae4fb8ef 删除加密测试
新增分段上传日志
收藏新增作品类型
2025-03-12 14:04:47 +08:00
Diyu0904 416e64f859 证书新增本地路径 2025-03-12 13:08:05 +08:00
Diyu0904 4523a29c53 Merge branch 'feature/admin' into preview 2025-03-12 11:28:12 +08:00
Diyu0904 ad6ca564c5 新增PC端资源中心 2025-03-12 11:27:23 +08:00
yang a503ef5112 fix(mcwl-framework): 处理Redis连接超时 2025-03-12 11:27:03 +08:00
yang f94104bf55 fix(memberCenter): 调整 2025-03-12 10:58:16 +08:00
yang 94e74096d0 refactor(mcwl-admin): 调整 2025-03-11 18:09:46 +08:00
yang 9f0e8ae5f9 refactor(mcwl-admin): 调整 2025-03-11 17:57:16 +08:00
yang 2ad2c4eb96 refactor: 统一错误消息返回格式 2025-03-11 17:35:44 +08:00
yang ec0c8aa32a refactor(mcwl): 调整作品点赞功能和异常处理 2025-03-11 17:27:20 +08:00
yang b27884e889 Merge branch 'feature/community-center' into preview 2025-03-11 16:42:48 +08:00
Diyu0904 942c72937f 修改证书路径 2025-03-11 16:42:17 +08:00
yang ff14025812 feat(resource): 调整查询功能和数据统计 2025-03-11 16:42:07 +08:00
Diyu0904 36644813b4 Merge branch 'feature/admin' into preview 2025-03-11 16:41:44 +08:00
Diyu0904 752b3b0418 修改个人点赞不展示封面图bug 2025-03-11 16:40:49 +08:00
Diyu0904 6c7e09065c Merge branch 'feature/admin' into preview 2025-03-11 15:19:30 +08:00
Diyu0904 6810cd2270 模型新增objectKey 2025-03-11 15:18:58 +08:00
yang 3fb4d72bfe feat(memberCenter): 添加获取用户有效会员信息 2025-03-11 15:10:05 +08:00
yang c48498e441 Merge branch 'feature/community-center' into preview 2025-03-11 15:08:40 +08:00
yang f8004e0fb2 feat(memberCenter): 添加获取用户有效会员信息 2025-03-11 15:08:24 +08:00
Diyu0904 09b3e8f7d2 Merge branch 'feature/admin' into preview 2025-03-11 13:06:36 +08:00
Diyu0904 703664701b 新增大文件分段上传 2025-03-11 13:03:54 +08:00
yang aebc53b950 refactor(mcwl-memberCenter): 会员订阅状态更新 2025-03-11 09:55:20 +08:00
yang 5a684c3829 refactor(mcwl-pay): 调整支付状态查询逻辑 2025-03-11 09:48:33 +08:00
yang ed5909b837 refactor(mcwl-pay): 优化支付宝证书路径加载方式 2025-03-10 18:09:15 +08:00
yang 794702fd6a Merge branch 'feature/community-center' into preview
# Conflicts:
#	mcwl-admin/src/main/resources/application-dev.yml
2025-03-10 18:06:37 +08:00
yang b1b991631b refactor(mcwl-pay): 优化支付宝证书路径加载方式 2025-03-10 18:06:08 +08:00
Diyu0904 ba58dbc613 修改支付宝配置 2025-03-10 18:01:10 +08:00
Diyu0904 dcd28a33c2 修改支付宝配置 2025-03-10 17:58:10 +08:00
Diyu0904 d142c9b5f2 Merge remote-tracking branch 'origin/preview' into preview
# Conflicts:
#	mcwl-admin/src/main/resources/application-dev.yml
2025-03-10 17:37:25 +08:00
Diyu0904 1d39e93585 修改支付宝配置 2025-03-10 17:34:24 +08:00
yang 4341a990db Merge branch 'feature/community-center' into preview 2025-03-10 17:34:14 +08:00
yang 50acc32060 refactor(mcwl-pay): 优化支付宝证书路径加载方式 2025-03-10 17:33:24 +08:00
Diyu0904 e15c52df80 Merge branch 'feature/admin' into preview 2025-03-10 17:20:25 +08:00
yang 743865c050 refactor(mcwl-pay): 优化支付宝证书路径加载方式 2025-03-10 17:19:29 +08:00
Diyu0904 bf7fa5accc 修改redis超时时间 2025-03-10 17:18:46 +08:00
yang f458e9e3cb refactor(mcwl-pay): 优化支付宝证书路径加载方式 2025-03-10 17:16:23 +08:00
Diyu0904 9483cc91ae 修改实名认证
用户新增默认头像与背景图
2025-03-10 17:15:45 +08:00
yang 4c90ed1bb8 refactor(mcwl): 使用昵称替代用户名 2025-03-10 16:46:29 +08:00
yang 8cff519d1c Merge branch 'feature/community-center' into preview 2025-03-10 16:25:48 +08:00
yang 8077d0bd12 feat: 调整 2025-03-10 16:25:27 +08:00
Diyu0904 79bb17e7f5 Merge branch 'feature/admin' into preview 2025-03-10 14:53:09 +08:00
Diyu0904 07011fef2a 修改个人中心获取用户名 2025-03-10 14:52:31 +08:00
Diyu0904 e93acf0421 Merge branch 'feature/admin' into preview 2025-03-10 13:53:54 +08:00
Diyu0904 56e2ecb00f 新增个人中心开放接口 2025-03-10 13:52:56 +08:00
yang 405262f1d0 Merge branch 'feature/community-center' into preview 2025-03-10 13:19:22 +08:00
yang fc88d6fcfc refactor(mcwl-framework): 调整 2025-03-10 13:19:04 +08:00
Diyu0904 e51d11402c 新增openid去掉符号 2025-03-08 20:58:17 +08:00
Diyu0904 da5c462a33 新增openid去掉符号 2025-03-08 20:53:13 +08:00
Diyu0904 472a82d7cc 修改扫码登录bug
添加登录日志打印
2025-03-08 20:36:24 +08:00
Diyu0904 29bedd38f4 修改微信扫码登录配置 2025-03-08 19:22:41 +08:00
Diyu0904 ecf2d4d66f 修改二维码请求类型/删除参数 2025-03-08 18:45:28 +08:00
Diyu0904 fe85a885b2 Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PlaFormController.java
#	mcwl-admin/src/main/resources/application-dev.yml
2025-03-08 18:40:16 +08:00
Diyu0904 158066bc9d 修改配置文件
新增文件下载
联调工作流
2025-03-08 18:38:01 +08:00
yang eb011a2634 refactor(mcwl): 放行/app/list 2025-03-08 17:56:42 +08:00
yang f22bb0dde2 refactor(mcwl): 调整平台数据统计 2025-03-08 17:50:48 +08:00
yang 4369932fa7 refactor(mcwl-pay): 调整收入接口返回数据精度 2025-03-08 16:06:33 +08:00
yang 39059b6f4c feat(platform): 平台数据统计 2025-03-08 15:18:42 +08:00
yang d419eb53a7 fix(payment): 调整支付宝绑定和查询功能 2025-03-08 10:22:34 +08:00
yang 337a72b06c refactor(communityCenter): 调整平台官方联系 2025-03-08 09:40:09 +08:00
yang af07e353ee Merge branch 'feature/community-center' into preview 2025-03-07 18:52:06 +08:00
yang 864002567b refactor(mcwl-admin): 绑定页面的移动设备适配 2025-03-07 18:51:43 +08:00
Diyu0904 0e2c6e6e7d Merge branch 'feature/admin' into preview 2025-03-07 18:42:33 +08:00
Diyu0904 b24626ee9b 联调举报功能 2025-03-07 18:42:01 +08:00
yang a5c21b391b perf(payment): 更新url 2025-03-07 18:36:50 +08:00
yang 40eb64b043 refactor(payment): 支付宝绑定相关功能 2025-03-07 18:32:42 +08:00
yang 32a50b8394 feat(pay): 添加支付宝绑定状态查询 2025-03-07 16:15:48 +08:00
yang 1a56de7de0 Merge branch 'feature/community-center' into preview 2025-03-07 15:31:20 +08:00
yang 3f915a7ac8 refactor(pay): 提现校验 2025-03-07 15:31:01 +08:00
ChenYan 206d13ef24 Merge branch 'preview' of https://gitea.qinmian.online/CY/mcwl-ai into preview 2025-03-07 15:29:55 +08:00
ChenYan af4c617408 feat: 平台官方联系方式 2025-03-07 15:29:34 +08:00
yang 583d90f42d refactor(pay): 提现 2025-03-07 15:24:42 +08:00
yang a17b4667db feat(myInvitation): 定时任务调整 2025-03-07 14:32:21 +08:00
yang 78020b38c1 Merge branch 'feature/community-center' into preview 2025-03-07 13:51:27 +08:00
yang 489db2410d feat(myInvitation): 调整 2025-03-07 13:51:04 +08:00
Diyu0904 6d9976e0e6 Merge branch 'feature/admin' into preview 2025-03-07 13:22:24 +08:00
Diyu0904 daa17a6caa 联调工作流/模型
新增下载记录
新增查看下载记录
新增批量删除下载记录
联调收藏模型/工作流
2025-03-07 13:21:43 +08:00
yang 535b175fab feat(myInvitation): 调整 2025-03-07 13:19:56 +08:00
yang ff6b2cdf30 refactor(mcwl): 调整促销活动 2025-03-07 10:56:47 +08:00
yang f5037353d9 feat(memberCenter): 调整 2025-03-06 17:30:27 +08:00
yang 2d8ee1bb8e feat(memberCenter): 调整 2025-03-06 13:54:28 +08:00
yang 13f5f5f52a Merge remote-tracking branch 'origin/preview' into preview 2025-03-06 13:34:11 +08:00
yang a044b8c367 feat(memberCenter): 积分消费和充值记录的分页 2025-03-06 13:33:52 +08:00
Diyu0904 87cc661a7f Merge branch 'feature/admin' into preview 2025-03-06 11:31:40 +08:00
Diyu0904 54c6eb463b 修改对接审核
测试加密/解密文件
2025-03-06 11:30:00 +08:00
yang c69d7e032f feat(myInvitation): 金币消费记录查询 2025-03-06 10:55:07 +08:00
yang 2f4d335c33 feat(memberCenter): redis心跳 2025-03-05 18:45:44 +08:00
yang c13fcadc1f Merge branch 'feature/community-center' into preview 2025-03-05 18:34:38 +08:00
yang 212dd4f1da feat(memberCenter): 调整 2025-03-05 18:34:13 +08:00
Diyu0904 8500650f8e Merge branch 'feature/admin' into preview 2025-03-05 18:31:53 +08:00
yang 8ee438d3c3 Merge branch 'feature/community-center' into preview 2025-03-05 18:31:31 +08:00
yang 63fcfc941d feat(memberCenter): 调整积分 2025-03-05 18:31:05 +08:00
Diyu0904 083b94232d 新增收藏
删除加密测试
2025-03-05 18:30:56 +08:00
yang 1350eb52f5 feat(memberCenter): 积分调整 2025-03-05 17:03:26 +08:00
Diyu0904 214d933b70 Merge branch 'feature/admin' into preview 2025-03-05 13:10:56 +08:00
Diyu0904 adf6cc178d 新增工作流下载文件
新增模型下载文件
新增修改邀请码
新增模型名字唯一校验
2025-03-05 13:09:36 +08:00
yang 7d3c43a1e8 refactor(myInvitation): 放行 2025-03-05 11:36:56 +08:00
Diyu0904 078fa26c7f 新增模型校验名字 2025-03-04 18:43:58 +08:00
yang 1b7b096f50 refactor(myInvitation): 调整邀请功能模块 2025-03-04 18:04:51 +08:00
ChenYan e813ee9dff feat: 平台官方联系方式 2025-03-04 17:01:06 +08:00
ChenYan 103cac2670 Merge remote-tracking branch 'origin/preview' into preview 2025-03-04 16:59:11 +08:00
ChenYan 0a5801a116 feat: 平台官方联系方式 2025-03-04 16:58:47 +08:00
yang 1f10b247b9 Merge branch 'feature/community-center' into preview 2025-03-04 16:02:46 +08:00
yang 52bac53e6c refactor(mcwl-admin): 个人中心 2025-03-04 16:02:05 +08:00
Diyu0904 59e1e87b2a Merge branch 'feature/admin' into preview 2025-03-04 15:51:05 +08:00
Diyu0904 0ea4df338e 调用加密接口
调用ui拉取文件接口
新增远程调用工具类
新增华为云obs接口
与前端联调工作流和模型
2025-03-04 15:50:09 +08:00
yang 33d27fdedc feat: ai调整 2025-03-04 15:48:45 +08:00
yang 38d47a0bca feat(payment): 证书调整 2025-03-03 17:54:23 +08:00
yang a9a2fb5d68 feat(communityCenter): ai窗口 2025-03-03 17:21:50 +08:00
yang 572ea22d4e feat: 接口放行 2025-02-22 15:21:11 +08:00
Diyu0904 59b59a06f8 Merge branch 'feature/admin' into preview 2025-02-22 15:07:06 +08:00
Diyu0904 1f584d5e9d 新增白名单 2025-02-22 15:06:42 +08:00
yang 303999e3e7 feat: 接口放行 2025-02-22 14:07:42 +08:00
yang ba510ac671 config:调整 token 2025-02-22 13:25:48 +08:00
yang 2bcef6635e Merge branch 'feature/community-center' into preview 2025-02-22 13:13:32 +08:00
yang 34962cae82 feat(task): 调整 2025-02-22 13:13:07 +08:00
Diyu0904 e39f863f6c 粉丝列表,关注列表新增是否关注 2025-02-22 11:23:14 +08:00
Diyu0904 f2c09097fe 粉丝列表,关注列表新增是否关注 2025-02-22 10:15:56 +08:00
Diyu0904 e19f77a6d0 Merge remote-tracking branch 'origin/preview' into preview 2025-02-21 18:02:00 +08:00
yang b30a70cbae 联调粉丝,关注列表 2025-02-21 18:01:43 +08:00
yang e1aa7302a9 feat(security): 接口放行 2025-02-21 17:03:15 +08:00
yang 0e114c87c0 Merge branch 'feature/community-center' into preview
# Conflicts:
#	mcwl-framework/src/main/java/com/mcwl/framework/config/SecurityConfig.java
2025-02-21 16:30:11 +08:00
yang 1bf1ab1619 feat(mcwl): 接口放行 2025-02-21 16:28:32 +08:00
yang 41bdbfaa81 Merge branch 'feature/community-center' into preview 2025-02-21 15:36:16 +08:00
Diyu0904 4b60032c5e 新增白名单 2025-02-21 15:35:47 +08:00
yang 3f19cd60ea refactor(resource): 接口放行 2025-02-21 15:35:29 +08:00
yang ecc03229bd refactor(resource): 接口放行 2025-02-20 15:35:18 +08:00
yang 477d1c0dea refactor(resource): 调整用户身份获取方法 2025-02-20 14:47:33 +08:00
Diyu0904 7597e9d74d 修改bug 2025-02-20 14:43:11 +08:00
Diyu0904 cb2f059fff 新增obs配置文件 2025-02-20 14:32:17 +08:00
Diyu0904 097ecfa023 修改token过期时间 2025-02-20 14:21:45 +08:00
Diyu0904 91b2ade9f8 Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-admin/src/main/resources/application-druid.yml
#	mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageLikeServiceImpl.java
2025-02-20 14:20:37 +08:00
Diyu0904 97a9ebdf56 新增obs文件对接
封装获取userId
新增白名单
2025-02-20 14:14:06 +08:00
yang e26568d0df feat(resource): 用户作品数量统计、配置文件调整 2025-02-20 09:33:11 +08:00
yang cecfc17172 build(mcwl-admin): 更新数据库配置和证书 2025-02-18 17:46:23 +08:00
yang deabcf1b37 refactor(mcwl-pay): 重构支付宝支付功能,由秘钥改为证书 2025-02-18 16:09:42 +08:00
Diyu0904 aacf29a3db Merge remote-tracking branch 'origin/preview' into preview 2025-02-18 13:17:54 +08:00
Diyu0904 cb5dbc7919 联调工作流
新增上传文件接口
新增举报api文档
2025-02-18 13:16:31 +08:00
yang af0638438c feat(resource): 已读和一键已读 2025-02-18 09:12:55 +08:00
yang 2efdbfe773 refactor(resource): 调整消息通知 2025-02-17 10:06:09 +08:00
yang afc35ca586 feat(resource): 关注消息 2025-02-16 10:53:36 +08:00
yang 5a5ab268dd feat(resource): 点赞消息 2025-02-15 23:21:57 +08:00
yang 7e40833bb7 feat(resource): 评论通知功能 2025-02-15 18:01:24 +08:00
Diyu0904 461b75cce2 Merge branch 'feature/admin' into preview 2025-02-15 14:57:33 +08:00
Diyu0904 05f8858b6c 新增模型广场,工作流,作品灵感 2025-02-15 14:56:34 +08:00
yang da5366bc6f Merge branch 'feature/community-center' into preview 2025-02-15 14:37:10 +08:00
yang c363c0c6d9 feat(payment): 更新支付宝支付功能并添加证书 2025-02-15 14:36:29 +08:00
Diyu0904 57fffd4e27 修改文件查询bug 2025-02-14 17:56:35 +08:00
Diyu0904 69d3b7cdc4 修改文件查询bug 2025-02-14 17:37:53 +08:00
Diyu0904 2b8c8abd5a 联调工作流+模型
新增文件查询接口
2025-02-14 17:27:53 +08:00
Diyu0904 3859feb21d 删除工作流版本审核相关属性 2025-02-14 15:38:09 +08:00
Diyu0904 57bdbdca3b Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductController.java
#	mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelVersionController.java
2025-02-14 13:41:14 +08:00
Diyu0904 7891130482 联调工作流+模型 2025-02-14 13:36:17 +08:00
ChenYan cc295c0512 feat:用户协议/隐私政策 2025-02-14 10:55:39 +08:00
ChenYan efff0788aa feat:用户协议/隐私政策 2025-02-14 10:35:47 +08:00
ChenYan 27fac6cf9c Merge remote-tracking branch 'origin/preview' into preview 2025-02-14 10:34:24 +08:00
ChenYan 367c359b5e feat:用户协议/隐私政策 2025-02-14 10:33:56 +08:00
yang 295316619c refactor(mcwl-pay): 调整支付宝提现逻辑和异常处理 2025-02-13 17:55:51 +08:00
yang f9f7361a16 refactor(mcwl): 重构项目中的返回结果封装 2025-02-13 14:48:54 +08:00
yang 5b359ed6a3 refactor(resource): 调整评论排序逻辑和查询条件 2025-02-13 11:21:34 +08:00
Diyu0904 b4ae47cf28 Merge branch 'feature/admin' into preview 2025-02-13 10:38:49 +08:00
yang 89ff879055 refactor(resource): 调整评论和点赞功能 2025-02-13 10:37:15 +08:00
Diyu0904 f8034850cb 修改工作流回显 2025-02-13 10:36:58 +08:00
yang dd16eb0106 feat(resource): 添加获取评论数量,增加排序 2025-02-12 22:21:05 +08:00
yang 570c7bb656 feat(resource): 调整评论和回复 2025-02-12 18:15:09 +08:00
yang e679fd847e feat(resource): 调整评论和回复 2025-02-12 16:59:30 +08:00
Diyu0904 7c3621ac2d Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-admin/src/main/java/com/mcwl/web/controller/resource/MallProductController.java
#	mcwl-system/src/main/java/com/mcwl/system/mapper/SysUserMapper.java
#	mcwl-system/src/main/resources/mapper/system/SysUserMapper.xml
2025-02-12 13:20:19 +08:00
Diyu0904 bd23402389 联调工作流
修改文件上传
2025-02-12 13:16:35 +08:00
yang 1c014c13d1 feat(pay): 金币充值 2025-02-12 11:19:45 +08:00
yang c78b731816 feat(pay): 金币充值 2025-02-12 10:49:37 +08:00
yang be124c92fa feat(system): 新增用户批量查询 2025-02-12 10:18:26 +08:00
yang 103a6e7db7 refactor(payment): 调整支付宝支付和订单状态 2025-02-11 13:56:17 +08:00
yang 63f14ce3d1 refactor(payment): 调整支付宝支付和订单状态 2025-02-11 10:42:17 +08:00
yang 00385906c3 refactor(pay): 调整支付宝支付流程 2025-02-10 22:49:00 +08:00
yang d2e1697e4e feat(payment): 支付功能调整和订单状态查询 2025-02-10 18:59:15 +08:00
yang da69a15cb9 feat(payment): 支付功能调整和订单状态查询 2025-02-10 18:44:44 +08:00
yang 13d4e21691 refactor: 调整支付宝支付流程和会员相关功能 2025-02-10 13:54:14 +08:00
yang f4e4ef40c1 feat(payment): 调整订单信息 2025-02-08 18:01:07 +08:00
yang e97b6492b2 refactor(payment): 调整支付宝支付 2025-02-08 17:35:16 +08:00
yang 79bf09e235 refactor: 调整支付宝支付相关代码并修改会员权益相关功能 2025-02-08 09:46:31 +08:00
Diyu0904 74c13643a8 Merge branch 'preview' into feature/admin
# Conflicts:
#	mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ToActivityServiceImpl.java
2025-02-07 15:28:16 +08:00
Diyu0904 25efe0d49a 修改bug 2025-02-07 15:27:29 +08:00
yang 7e0540104f feat(payment): 支付宝余额查询 2025-02-07 15:27:03 +08:00
Diyu0904 415e25cdd7 Merge branch 'feature/admin' into preview 2025-02-07 13:59:02 +08:00
Diyu0904 7b99089c67 工作流新增校验
文件加密/解密
文件加密上传oss
2025-02-07 13:55:53 +08:00
yang e44f6b8a0f feat(payment): 支付宝转账集成邮件通知 2025-02-07 12:29:45 +08:00
yang e09584800a refactor(mcwl-pay): 支付宝转账 2025-02-06 17:57:37 +08:00
yang 47717bae9c feat: 支付宝提现 2025-02-06 17:34:43 +08:00
yang 2672fc9e33 feat: 支付宝提现 2025-02-06 17:27:00 +08:00
yang 61ac03de38 feat(payment): 支付宝账号绑定 2025-02-06 16:34:14 +08:00
yang 8d04847cd2 refactor: 新增AliPayController,重构AliPayIntegration类,改为实现 AliPayService 接口 2025-02-06 11:41:44 +08:00
yang ee27b542cd feat(resource): 更新 ModelLike 2025-02-06 09:47:32 +08:00
yang e559b6d04d feat(resource): 更新 ModelLike 2025-02-05 16:47:14 +08:00
yang 0d9a485c19 feat(resource): 增加模型类型字段 2025-02-05 15:20:45 +08:00
yang bb64605dc4 refactor(mcwl): 重构删除接口并添加参数校验 2025-02-05 13:28:58 +08:00
yang c7a59a0d99 fix(resource): 修复用户信息为空时的异常处理 2025-02-05 11:28:33 +08:00
Diyu0904 6dedc5a170 Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowLikeServiceImpl.java
2025-02-05 11:20:05 +08:00
Diyu0904 32dd0de4cb 联调修复bug
编写dockerfile
测试文件加密
2025-02-05 11:17:27 +08:00
yang 821d852b5b fix(mcwl-admin): 余额查询功能并优化工作流点赞列表 2025-02-05 11:16:53 +08:00
yang 7c527151b0 feat: 提问评论多租户 2025-01-24 13:37:15 +08:00
yang 200e5c1d32 Merge branch 'feature/community-center' into preview 2025-01-23 13:37:39 +08:00
yang 999616a0cd feat: 采纳评论修复 2025-01-23 13:36:47 +08:00
Diyu0904 dfeabe5897 Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-resource/src/main/resources/mapper/resource/ModelLikeMapper.xml
2025-01-22 18:40:14 +08:00
Diyu0904 bd4998b73d Merge remote-tracking branch 'origin/feature/admin' into feature/admin 2025-01-22 18:37:47 +08:00
yang 789cf9f3d9 修复模型点赞bug 2025-01-22 18:37:08 +08:00
yang f5309a6759 feat: 修改 2025-01-22 18:36:25 +08:00
yang 70aa6a6b27 feat: 接受评论 2025-01-22 17:34:20 +08:00
yang 09dfd88a12 feat: 排序 2025-01-22 16:17:46 +08:00
Diyu0904 c6a92b1e62 Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelServiceImpl.java
2025-01-22 16:05:30 +08:00
Diyu0904 628c9e57bb 修复查看个人发布模型bug 2025-01-22 16:01:17 +08:00
yang bcf7cb7e3d Merge branch 'feature/community-center' into preview 2025-01-22 15:53:11 +08:00
yang 1594bc4a74 feat: 个人中心 2025-01-22 15:52:30 +08:00
ChenYan 019ff6943f Merge remote-tracking branch 'origin/preview' into preview 2025-01-21 19:34:50 +08:00
ChenYan 8316bd1e76 feat 2025-01-21 19:34:12 +08:00
yang 93efb588e2 feat: 图片审核 2025-01-21 18:09:29 +08:00
yang 3cd55dbbb9 Merge branch 'feature/community-center' into preview
# Conflicts:
#	mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageServiceImpl.java
2025-01-21 17:37:58 +08:00
yang cf6dcdee4c feat: 提问和提问评论 2025-01-21 17:36:44 +08:00
Diyu0904 7a742d7338 修复图片审核 2025-01-21 17:30:38 +08:00
ChenYan 382f32de5f Merge remote-tracking branch 'origin/preview' into preview
# Conflicts:
#	mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelServiceImpl.java
2025-01-21 17:27:10 +08:00
ChenYan 02c090a971 feat 是否置顶 2025-01-21 17:25:46 +08:00
Diyu0904 2b791a875a 合并分支 图片审核+模型审核待合并 2025-01-21 17:15:45 +08:00
Diyu0904 cb5af5202f Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelImage.java
#	mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageServiceImpl.java
2025-01-21 17:05:14 +08:00
Diyu0904 71f1c01674 修复工作流审核bug
新增图片审核
2025-01-21 17:01:59 +08:00
ChenYan 7b0c1f6fbf Merge branch 'preview' of https://gitea.qinmian.online/CY/mcwl-ai into preview
# Conflicts:
#	mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelServiceImpl.java
2025-01-21 16:55:15 +08:00
ChenYan d8c964f98b feat 是否置顶 2025-01-21 16:45:00 +08:00
yang b2a3596f20 feat: 会员和邀请添加swagger注解 2025-01-21 13:07:58 +08:00
yang f77029ead8 Merge branch 'feature/community-center' into preview 2025-01-20 16:43:29 +08:00
yang e34ce61003 feat: 图片、文件筛选 2025-01-20 16:43:00 +08:00
Diyu0904 b2dd5112c4 Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-resource/src/main/java/com/mcwl/resource/domain/ModelVersion.java
2025-01-20 15:49:03 +08:00
Diyu0904 4bb2498fc8 新增举报功能
新增审核举报功能
新增工作流添加审核
新增工作流修改审核
新增模型添加审核
新增模型修改审核
2025-01-20 15:42:46 +08:00
yang f5f2693e8e Merge branch 'feature/community-center' into preview 2025-01-20 14:30:59 +08:00
yang 5f4404ae1d feat: 图片模块调整 2025-01-20 14:30:26 +08:00
ChenYan 746742ed14 feat 2025-01-20 11:48:15 +08:00
ChenYan aabccf6d99 Merge branches 'preview' and 'preview' of https://gitea.qinmian.online/CY/mcwl-ai into preview 2025-01-20 11:47:11 +08:00
ChenYan c7b780d2ef feat 2025-01-20 11:46:42 +08:00
yang dc2b5c9daa Merge branch 'feature/community-center' into preview 2025-01-19 20:01:04 +08:00
yang b30dbfbe2e feat: 提问 2025-01-19 20:00:40 +08:00
ChenYan dbc9381724 Merge branch 'feature/resource' of https://gitea.qinmian.online/CY/mcwl-ai into preview 2025-01-19 18:18:17 +08:00
ChenYan b164460829 feat 2025-01-19 18:12:01 +08:00
yang d5acfb00ae feat: 提问 2025-01-19 17:12:48 +08:00
yang 84f3caf7af feat: 社区、邀请、发布调整 2025-01-19 15:20:52 +08:00
yang 8fda8397f2 feat: 提问 2025-01-18 20:03:04 +08:00
yang d5157ce481 Merge branch 'feature/community-center' into preview 2025-01-18 19:04:15 +08:00
yang c59ab0d20a feat: 社区、社区发布 2025-01-18 19:03:46 +08:00
Diyu0904 a8bf9b7390 Merge remote-tracking branch 'origin/preview' into preview 2025-01-18 15:01:24 +08:00
ChenYan 925705caaa Merge remote-tracking branch 'origin/preview' into preview 2025-01-18 15:00:19 +08:00
Diyu0904 f2c3d73071 Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-resource/src/main/java/com/mcwl/resource/domain/WorkFlow.java
#	mcwl-resource/src/main/java/com/mcwl/resource/domain/WorkFlowVersion.java
2025-01-18 15:00:05 +08:00
ChenYan 0fc813f3a0 feat 2025-01-18 14:58:53 +08:00
Diyu0904 b5ca5718f6 新增线程池异步审核工作流
新增工作流的名称审核
新增工作流版本得名称+内容+图片审核
修复工作流修改时间丢失bug
2025-01-18 14:55:28 +08:00
yang 3fed564e38 feat: 社区调整 2025-01-17 20:07:24 +08:00
yang d97050a4ef feat: 社区 2025-01-17 19:10:20 +08:00
yang 484c99504a Merge branch 'feature/community-center' into preview
# Conflicts:
#	mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/QuestionController.java
2025-01-17 19:09:25 +08:00
yang 5ef3c1bcd3 feat: 社区 2025-01-17 19:07:56 +08:00
ChenYan ab147addea feat 2025-01-17 19:06:10 +08:00
ChenYan 88c9a15fed Merge remote-tracking branch 'origin/preview' into preview
# Conflicts:
#	mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/QuestionController.java
2025-01-17 19:05:41 +08:00
ChenYan ba0cc48174 feat 2025-01-17 19:04:35 +08:00
yang 2ba9f440d3 Merge branch 'feature/community-center' into preview 2025-01-17 16:31:38 +08:00
yang 7d05307a4c fix: 添加提问 2025-01-17 16:31:12 +08:00
ChenYan 3c13cafd86 feat 2025-01-17 16:28:17 +08:00
ChenYan b265f24f81 feat(communityCenter): 添加评论区 点赞功能 2025-01-17 15:59:21 +08:00
yang 1ef75e6bda fix: 修复接受邀请时的异常 2025-01-17 10:48:16 +08:00
yang b1b884a82e Merge branch 'feature/community-center' into preview 2025-01-16 19:32:06 +08:00
yang c1b6dac662 Merge remote-tracking branch 'origin/feature/community-center' into feature/community-center 2025-01-16 19:31:35 +08:00
yang 436ff6877c feat:社区邀请 2025-01-16 19:31:24 +08:00
ChenYan d09410bee7 Merge branch 'feature/community-center' of https://gitea.qinmian.online/CY/mcwl-ai into preview
# Conflicts:
#	mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PublishController.java
2025-01-16 19:06:04 +08:00
ChenYan e31b12fd39 feat 2025-01-16 19:04:11 +08:00
ChenYan 537997deab Merge remote-tracking branch 'origin/preview' into preview
# Conflicts:
#	mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PublishController.java
2025-01-16 19:02:56 +08:00
ChenYan 170ca3da7e feat:feat(resource): 添加模型版本高清修复功能 2025-01-16 19:01:56 +08:00
Diyu0904 6ae9eca9b6 Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-admin/src/main/java/com/mcwl/web/controller/pay/AliPay/AliPayIntegration.java
#	mcwl-admin/src/main/java/com/mcwl/web/controller/resource/ModelVersionController.java
2025-01-16 18:58:49 +08:00
Diyu0904 f88c68ac0a 新增文本审核
新增图片审核
规范配置文件
完善短信验证码发送
2025-01-16 18:55:49 +08:00
ChenYan aecbdb60e1 Merge branch 'preview' of https://gitea.qinmian.online/CY/mcwl-ai into feature/community-center
# Conflicts:
#	mcwl-admin/src/main/java/com/mcwl/web/controller/communityCenter/PublishController.java
2025-01-16 17:30:37 +08:00
ChenYan 6fee8248de feat:feat(resource): 添加模型版本高清修复功能 2025-01-16 17:27:55 +08:00
yang 9dcf061dcb Merge remote-tracking branch 'origin/feature/community-center' into feature/community-center 2025-01-16 17:26:23 +08:00
yang 02d8dc45dd feat:社区 2025-01-16 17:26:12 +08:00
ChenYan 83b07054a1 feat:feat(resource): 添加模型版本高清修复功能 2025-01-15 19:00:30 +08:00
yang 7efb7973ef feat:多租户 2025-01-15 18:49:40 +08:00
yang 58839f1f12 Merge branch 'feature/community-center' of https://gitea.qinmian.online/CY/mcwl-ai into preview 2025-01-15 16:54:05 +08:00
yang 1398011ee5 feat:调整 2025-01-15 16:53:36 +08:00
yang fa542d1569 feat:社区中心 2025-01-15 16:51:08 +08:00
Diyu0904 f93986f743 修正分支合并 2025-01-15 15:24:17 +08:00
Diyu0904 5f6844dc29 Merge branch 'feature/admin' into preview 2025-01-15 15:23:03 +08:00
Diyu0904 f41ab7b899 新增点赞/取消工作流
新增发布工作流评论
新增点赞/取消工作流评论
新增删除工作流评论
2025-01-15 15:21:55 +08:00
yang 09a7640d6e feat: 知识星球 2025-01-15 13:22:25 +08:00
yang 171100a643 feat: 知识星球 2025-01-15 11:53:22 +08:00
yang c2f0ada4f1 fix(resource): 修复模型图片标签显示问题
- 修正图片标签的字典常量名称
- 实现图片标签的字典值转换
- 初始化图片标签列表
2025-01-14 19:06:07 +08:00
yang 3ebcf6e07e Merge branch 'feature/my-invitation' into preview 2025-01-14 18:54:57 +08:00
yang ab5cc03786 refactor(mcwl): 重构获取模型图片详情接口
- 新增 ModelImageService 接口的 getDetail 方法
- 实现 getDetail 方法,封装模型图片详情信息- 更新 ModelImageController 中的 detail 方法,使用新的 getDetail 接口
- 修改 ModelImageVo 中的 tags 字段类型,从 String 改为 List<String>
2025-01-14 18:53:46 +08:00
ChenYan 6a5ad7403a Merge branch 'feature/resource' of https://gitea.qinmian.online/CY/mcwl-ai into preview 2025-01-14 18:47:09 +08:00
ChenYan d49115ec61 feat(resource): 2025-01-14 18:45:52 +08:00
yang 40d37e42be refactor(resource): 重构图片相关接口
- 新增 ModelImageCommentController 专门处理图片评论相关功能
- 从 ModelImageController 中移除图片评论相关的代码
- 删除了 ModelImageController 中未使用的上传功能
- 调整了 ModelImageController 的路由前缀
2025-01-14 18:28:20 +08:00
ChenYan 90de149f8f Merge branch 'feature/my-invitation' of https://gitea.qinmian.online/CY/mcwl-ai into feature/resource
# Conflicts:
#	mcwl-resource/src/main/java/com/mcwl/resource/service/impl/WorkFlowServiceImpl.java
2025-01-14 18:13:40 +08:00
ChenYan 421ca7dc9d feat(resource): 新增模型产品和工作流相关功能 2025-01-14 18:11:39 +08:00
yang bd42786571 feat(resource): 实现工作流分页查询功能
- 新增 WorkFlowService 接口的 listByPage 方法
- 实现 WorkFlowServiceImpl 类的 listByPage 方法- 添加 ModelImagePageRes 类用于分页查询参数
- 新增 WorkFlowVo 类用于工作流列表展示
- 优化 ModelProductController 中的分页查询逻辑
2025-01-14 18:09:36 +08:00
yang 52ca9b3295 Merge branch 'feature/my-invitation' into preview 2025-01-14 16:34:38 +08:00
yang 4c15e5247f feat(resource): 添加我的发布功能并优化图片列表接口
- 在 MallProductController 中添加了三个新的接口:selectByUserIdModel、selectByUserIdWorkFlow 和 selectByUserIdImage,用于获取用户发布的模型、工作流和图片信息
- 在 ModelCommentController 和 ModelImageController 中添加了 @RepeatSubmit 注解,用于防止重复提交
- 优化了 ModelImageController 中的 list 接口,使用 PageDomain 作为参数,提高了接口的通用性和灵活性
2025-01-14 16:34:13 +08:00
Diyu0904 3e7a30d786 Merge branch 'feature/admin' into preview
# Conflicts:
#	mcwl-admin/src/main/java/com/mcwl/web/controller/resource/WorkFlowController.java
2025-01-14 16:09:33 +08:00
Diyu0904 3645f7894c 新增工作流添加,修改,回显,删除,详情 2025-01-14 16:07:30 +08:00
yang b8bf961509 feat(resource): 重构模型相关 mapper 并添加新功能
-重命名 MallProductMapper 为 ModelMapper
- 在 ModelImageMapper 和 ModelMapper 中添加新的查询方法- 更新 ModelProduct 实体,添加 likeNum 字段
- 重构 ModelServiceImpl 和 SysUserAttentionServiceImpl,使用新的 mapper 方法
- 更新 SysUserInfo 实体,增加模型相关统计字段
2025-01-14 15:21:37 +08:00
ChenYan 1cdfb48ae3 Merge branch 'preview' of https://gitea.qinmian.online/CY/mcwl-ai into preview 2025-01-13 17:18:09 +08:00
ChenYan 2d0a5dcb38 feat: 2025-01-13 17:04:11 +08:00
yang 2385b58bb0 Merge branch 'feature/my-invitation' into preview 2025-01-13 16:19:13 +08:00
yang f445567505 feat(memberCenter): 新增会员支付金额计算功能并优化模型图片上传
- 在 MemberController 中添加 calculatePayment 方法,用于根据会员等级和活动计算支付金额
- 在 MemberService 接口中新增 calculatePayment 方法
- 实现 MemberServiceImpl 中的 calculatePayment 方法,支持折扣活动的计算
- 在 ModelImage 实体中添加 isTop 字段,用于表示是否置顶
- 优化 ModelImageServiceImpl 中的保存逻辑,设置创建时间
2025-01-13 16:18:40 +08:00
ChenYan c8bc835644 feat: 2025-01-13 15:12:50 +08:00
ChenYan 9ef5a22665 Merge branch 'feature/resource' of https://gitea.qinmian.online/CY/mcwl-ai into preview 2025-01-13 11:48:30 +08:00
ChenYan 573ccd5ef8 feat: 2025-01-13 11:47:28 +08:00
Diyu0904 821dce5654 Merge branch 'feature/admin' into preview 2025-01-13 11:46:41 +08:00
Diyu0904 db353dbb83 新增工作流业务 2025-01-13 11:45:47 +08:00
yang 511bd96d84 refactor(mcwl): 重构资源模块并移除支付相关代码- 移除了 AliPayIntegration 和 OrderTradeController 类
- 更新了 ModelImageController 接口,使用新的 ModelImagePageRes 类作为参数
- 新增了 ModelImagePageRes 类,用于图片分页请求
- 更新了 ModelImageService接口和实现类,支持新的分页查询参数
2025-01-13 11:03:59 +08:00
ChenYan af200b9274 Merge remote-tracking branch 'origin/preview' into preview 2025-01-12 16:00:34 +08:00
ChenYan ca41c38141 Merge branch 'feature/resource' of https://gitea.qinmian.online/CY/mcwl-ai into preview 2025-01-12 15:59:42 +08:00
ChenYan 81dd9362cd feat: 2025-01-12 15:58:39 +08:00
yang 942bcd8315 Merge branch 'preview' into feature/my-invitation 2025-01-12 15:54:20 +08:00
yang f41111fc6d ceshi1 2025-01-12 15:50:54 +08:00
ChenYan 031d115263 feat: 模型评论模块 2025-01-12 15:36:37 +08:00
yang 7f22f046c8 feat(resource): 添加模特图片列表、详情、删除等功能
- 新增图片列表、详情、删除、修改等接口
- 实现分页查询功能
- 添加用户信息展示
- 优化图片上传和评论相关功能
2025-01-12 15:14:31 +08:00
yang 4d2b660faa refactor(mcwl-resource): 优化 ModelImageServiceImpl 类的代码结构- 导入 List 接口,为后续功能扩展做准备 2025-01-11 15:36:32 +08:00
yang 8c844faca5 Merge branch 'feature/my-invitation' into preview
# Conflicts:
#	mcwl-resource/src/main/java/com/mcwl/resource/service/impl/ModelImageServiceImpl.java
2025-01-11 15:34:59 +08:00
yang 120e61102d feat(resource): 添加图片评论功能- 新增 ModelImageCommentVo 类用于评论区评论
- 在 ModelImageService 接口中添加 getComment 方法获取评论
- 在 ModelImageServiceImpl 中实现 getComment 方法
- 在 ModelImageController 中添加 getComment 接口
- 优化 ModelImageLike 和 ModelImageCommentLike相关逻辑
2025-01-11 15:33:30 +08:00
524 changed files with 28647 additions and 2557 deletions

View File

@ -2,11 +2,8 @@
* 后端采用Spring Boot、Spring Security、Redis & Jwt。
* 权限认证使用Jwt支持多终端认证系统。
* 支持加载动态权限菜单,多方式轻松权限控制。
* 高效率开发,使用代码生成器可以一键生成前后端代码。
* 提供了技术栈([Vue3](https://v3.cn.vuejs.org) [Element Plus](https://element-plus.org/zh-CN) [Vite](https://cn.vitejs.dev))版本[McWl-Vue3](https://gitcode.com/yangzongzhuan/McWl-Vue3),保持同步更新。
* 提供了单应用版本[McWl-Vue-fast](https://gitcode.com/yangzongzhuan/McWl-Vue-fast)Oracle版本[McWl-Vue-Oracle](https://gitcode.com/yangzongzhuan/McWl-Vue-Oracle),保持同步更新。
* 不分离版本,请移步[McWl](https://gitee.com/y_project/McWl),微服务版本,请移步[McWl-Cloud](https://gitee.com/y_project/McWl-Cloud)
* 阿里云折扣场:[点我进入](http://aly.mcwl.vip),腾讯云秒杀场:[点我进入](http://txy.mcwl.vip)&nbsp;&nbsp;
## 内置功能
1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。

BIN
blob 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 1008 KiB

View File

@ -0,0 +1,24 @@
# docker一定要有openjdk8的镜像如果没有执行以下命令
# docker pull openjdk:8
FROM openjdk:8
# 作者信息
#LABEL authors="${发布人} <${邮箱}>"
# 创建我的工作目录(手动创建文件夹,此步骤省略)
#RUN mkdir /root/yun
# 暴露端口(和服务端口保持一致)
EXPOSE 8080
# 创建着陆点(创建文件夹) 后续路径和这个路径一致
WORKDIR "/root/mcwl"
# 复制新的运行程序 ./代表的是相对路径 读取的着陆点
COPY ./ncwl-ai.jar /root/mcwl/ncwl-ai.jar
# 挂载出去日志目录 项目名不加jar
VOLUME /root/mcwl/logs/ncwl-ai
# 运行你的jar 运行的是你copy出来的新的jar包
CMD ["java", "-jar", "/root/mcwl/ncwl-ai.jar"]

View File

@ -89,6 +89,12 @@
<artifactId>mcwl-myInvitation</artifactId>
<version>3.8.8</version>
</dependency>
<dependency>
<groupId>com.mcwl</groupId>
<artifactId>mcwl-communityCenter</artifactId>
<version>3.8.8</version>
</dependency>
<!-- 公共模块-->
<dependency>
<groupId>com.mcwl</groupId>
@ -128,6 +134,51 @@
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.1.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-green</artifactId>
<version>3.6.6</version>
</dependency>
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
<version>2.0.9</version>
</dependency>
<!-- <dependency>-->
<!-- <groupId>com.aliyun.oss</groupId>-->
<!-- <artifactId>aliyun-sdk-oss</artifactId>-->
<!-- <version>2.8.3</version>-->
<!-- </dependency>-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.aliyun/imageaudit20191230 -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>imageaudit20191230</artifactId>
<version>2.0.6</version>
</dependency>
</dependencies>
<build>

View File

@ -1,8 +1,6 @@
package com.mcwl;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.mcwl.pay.config.AliConfig;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.amqp.support.converter.Jackson2JsonMessageConverter;
import org.springframework.amqp.support.converter.MessageConverter;
import org.springframework.boot.SpringApplication;
@ -17,6 +15,7 @@ import org.springframework.context.annotation.Bean;
*
* @author mcwl
*/
@EnableConfigurationProperties
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
public class McWlApplication
{

View File

@ -4,7 +4,6 @@ import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.model.GetObjectRequest;
import com.aliyun.oss.model.PutObjectRequest;
import lombok.extern.log4j.Log4j2;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
@ -14,15 +13,17 @@ import java.util.UUID;
/**
* Oss
*/
@Log4j2
public class OssUtil {
/**
* Endpoint AccessKeyaccessKeySecretAPI访 访
*/
private static String endPoint = "oss-cn-beijing.aliyuncs.com";
private static String accessKeyId = "LTAI5tSHZZ8wHJRP8X4r9TXT";
private static String accessKeySecret = "F82IVNx0IGJ3AnP6gSIfcyql1HCXIH";
private static String accessPre = "https://ybl2112.oss-cn-beijing.aliyuncs.com/";
/**
@ -38,7 +39,6 @@ public class OssUtil {
endPoint,
accessKeyId,
accessKeySecret);
log.info("oss服务连接成功");
}
/**
@ -146,7 +146,7 @@ public class OssUtil {
}
public static String getOssFilePath(String filePath){
String fileSuf = filePath.substring(filePath.indexOf(".") + 1);
String fileSuf = filePath.substring(filePath.lastIndexOf(".") + 1);
return getOssDefaultPath() + UUID.randomUUID().toString() + "." + fileSuf;
}

View File

@ -0,0 +1,30 @@
//package com.mcwl.web.controller.communityCenter;
//
//
//import com.mcwl.communityCenter.service.AIService;
//import com.mcwl.communityCenter.webSocket.ChatWebSocket;
//import lombok.RequiredArgsConstructor;
//import org.springframework.web.bind.annotation.GetMapping;
//import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.RestController;
//import reactor.core.publisher.Flux;
//
//@RequiredArgsConstructor
//@RestController
//@RequestMapping("/chat")
//public class ChatController {
//
// private final AIService aiService;
//
//
// /**
// * ai
// */
// @GetMapping("/ai")
// public Flux<String> switchUserMode(String msg) throws Exception {
// return aiService.getDeepSeekResponseStream(msg);
// }
//
//
//
//}

View File

@ -0,0 +1,43 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.domain.vo.CommunityDetailVo;
import com.mcwl.communityCenter.service.CommunityAdviceService;
import com.mcwl.communityCenter.service.CommunityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
/**
*
*/
@Api(tags = "社区通知")
@RestController
@RequestMapping("communityAdvice")
@RequiredArgsConstructor
public class CommunityAdviceController {
private final CommunityAdviceService communityAdviceService;
/**
*
*/
@ApiOperation(value = "获取通知列表")
@PostMapping("adviceList")
public TableDataInfo getCommunityAdviceList(@RequestBody CommunityAdvicePageRes communityAdvicePageRes) {
return communityAdviceService.getCommunityAdviceList(communityAdvicePageRes);
}
}

View File

@ -0,0 +1,138 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.domain.vo.CommunityDetailVo;
import com.mcwl.communityCenter.service.CommunityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
/**
*
*/
@Api(tags = "社区")
@RestController
@RequestMapping("community")
@RequiredArgsConstructor
public class CommunityController {
private final CommunityService communityService;
/**
*
*
* @return
*/
@ApiOperation(value = "社区列表")
@PostMapping("list")
public TableDataInfo getCommunityList(@RequestBody @Valid CommunityListPageRes communityListPageRes) {
return communityService.listByPage(communityListPageRes);
}
@ApiOperation(value = "社区详情")
@GetMapping("detail")
public R<CommunityDetailVo> getCommunityDetail(@Valid
@ApiParam(value = "社区id", required = true)
@NotNull(message = "社区id不能为空")
Long communityId) {
CommunityDetailVo communityDetailVo = communityService.getCommunityDetail(communityId);
return R.ok(communityDetailVo);
}
/**
*
*/
@ApiOperation(value = "编辑社区")
@PostMapping("edit")
public R<Object> editCommunity(@RequestBody @Valid EditCommunityRes editCommunityRes) {
communityService.editCommunity(editCommunityRes);
return R.ok("编辑成功");
}
/**
*
*/
@ApiOperation(value = "我加入的社区")
@PostMapping("myJoin")
public TableDataInfo getMyJoinCommunity(@RequestBody JoinCommunityListPageRes joinCommunityListPageRes) {
return communityService.getMyJoinCommunity(joinCommunityListPageRes);
}
/**
*
*/
@ApiOperation(value = "添加社区")
@PostMapping("addCommunity")
public R<Object> addCommunity(@RequestBody @Valid AddCommunityRes addCommunityRes) {
communityService.addCommunity(addCommunityRes);
return R.ok("社区添加成功");
}
/**
*
*/
@ApiOperation(value = "加入社区")
@PostMapping("join")
public R<Object> joinCommunity(@RequestBody @Valid JoinCommunityRes joinCommunityRes) {
return communityService.joinCommunity(joinCommunityRes);
}
/**
* 退
*/
@ApiOperation(value = "退出社区")
@PostMapping("quit")
public R<Object> quitCommunity(@RequestBody @Valid QuitCommunityRes quitCommunityRes) {
Long tenantId = quitCommunityRes.getTenantId();
Long communityId = quitCommunityRes.getCommunityId();
return communityService.quitCommunity(tenantId, communityId);
}
//
// /**
// * 删除社区
// *
// * @param id 社区id
// * @return 删除结果
// */
// @ApiOperation(value = "删除社区")
// @GetMapping("delete")
// public R<Object> deleteCommunity(@NotNull(message = "id不能为空")
// @ApiParam(value = "id", required = true)
// @Valid
// Long id) {
// Community community = communityService.getById(id);
// if (Objects.isNull(community)) {
// return R.fail(HttpStatus.SHOW_ERROR_MSG, "该社区不存在");
// }
// communityService.removeById(id);
// return R.ok();
// }
/**
*
*/
@ApiOperation(value = "是否加入社区")
@PostMapping("isJoin")
public R<Object> isJoinCommunity(@RequestBody @Valid JoinCommunityRes joinCommunityRes) {
return communityService.isJoinCommunity(joinCommunityRes);
}
}

View File

@ -0,0 +1,61 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.PageDomain;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.service.CommunityFileLogService;
import com.mcwl.communityCenter.service.CommunityFileService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
/**
*
*/
@Api(tags = "社区文件")
@RestController
@RequestMapping("communityFile")
@RequiredArgsConstructor
public class CommunityFileController {
private final CommunityFileService communityFileService;
private final CommunityFileLogService communityFileLogService;
/**
*
*/
@ApiOperation(value = "社区文件列表")
@PostMapping("/list")
public TableDataInfo getCommunityFileList(@RequestBody @Valid CommunityFilePageListRes communityFilePageListRes) {
return communityFileService.getCommunityFileList(communityFilePageListRes);
}
/**
*
*/
@ApiOperation(value = "社区文件上传")
@PostMapping("/upload")
public R<String> upload(@RequestBody @Valid CommunityUploadFileRes communityUploadFileRes) {
return communityFileService.upload(communityUploadFileRes);
}
/**
*
*/
@ApiOperation(value = "社区文件下载")
@PostMapping("/download")
public R<String> download(@RequestBody @Valid CommunityDownloadFileRes communityDownloadFileRes) {
return communityFileService.download(communityDownloadFileRes);
}
}

View File

@ -0,0 +1,74 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.Community;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.service.CommunityService;
import com.mcwl.communityCenter.service.CommunityUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.Objects;
/**
*
*/
@Api(tags = "社区用户")
@RestController
@RequestMapping("communityUser")
@RequiredArgsConstructor
public class CommunityUserController {
private final CommunityUserService communityUserService;
/**
*
*/
@ApiOperation(value = "社区用户列表")
@PostMapping("list")
public TableDataInfo getCommunityUserList(@RequestBody @Valid CommunityUserListPageRes communityUserListPageRes) {
return communityUserService.getCommunityUserList(communityUserListPageRes);
}
/**
*
*/
@ApiOperation(value = "拉黑")
@PostMapping("black")
public R<Object> black(@RequestBody @Valid BlackListRes blackListRes) {
return communityUserService.black(blackListRes);
}
/**
*
*/
@ApiOperation(value = "取消拉黑")
@PostMapping("unBlack")
public R<Object> unBlack(@RequestBody @Valid UnBlackListRes unBlackListRes) {
return communityUserService.unBlack(unBlackListRes);
}
/**
* /
*/
@ApiOperation(value = "管理/取消管理")
@PostMapping("manage")
public R<Object> manage(@RequestBody @Valid CommunityUserManageRes communityUserManageRes) {
return communityUserService.manage(communityUserManageRes);
}
}

View File

@ -0,0 +1,67 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.domain.R;
import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.DownloadFileRequest;
import com.obs.services.model.DownloadFileResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
/**
* @author DaiZibo
* @date 2025/3/8
* @apiNote
*/
@RequestMapping("/downFile")
@RestController
public class DownloadFile {
@Autowired
private ObsClient obsClient;
@Value("${huawei.obs.bucketName}")
private String bucketName;
@GetMapping("/down")
public R down(@RequestParam String objectKey, String path) {
try {
DownloadFileRequest request = new DownloadFileRequest(bucketName, objectKey);
// 设置下载对象的本地文件路径
request.setDownloadFile(path);
// 设置分段下载时的最大并发数
request.setTaskNum(10);
// 设置分段大小为10MB
request.setPartSize(10 * 1024 * 1024);
// 开启断点续传模式
request.setEnableCheckpoint(true);
// 进行断点续传下载
DownloadFileResult result = obsClient.downloadFile(request);
System.out.println("downloadFile successfully");
System.out.println("Etag:" + result.getObjectMetadata().getEtag());
} catch (ObsException e) {
System.out.println("downloadFile failed");
// 请求失败,打印http状态码
System.out.println("HTTP Code:" + e.getResponseCode());
// 请求失败,打印服务端错误码
System.out.println("Error Code:" + e.getErrorCode());
// 请求失败,打印详细错误信息
System.out.println("Error Message:" + e.getErrorMessage());
// 请求失败,打印请求id
System.out.println("Request ID:" + e.getErrorRequestId());
System.out.println("Host ID:" + e.getErrorHostId());
e.printStackTrace();
} catch (Exception e) {
System.out.println("downloadFile failed");
// 其他异常信息打印
e.printStackTrace();
}
return R.ok();
}
}

View File

@ -0,0 +1,52 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.IncomeInfo;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.domain.vo.IncomeInfoVo;
import com.mcwl.communityCenter.service.IncomeInfoService;
import com.mcwl.communityCenter.service.PublishCollectService;
import com.mcwl.communityCenter.service.PublishService;
import com.mcwl.communityCenter.service.QuestionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
*
*/
@Api(tags = "收益明细")
@RestController
@RequiredArgsConstructor
@RequestMapping("incomeInfo")
public class IncomeInfoController {
private final IncomeInfoService incomeInfoService;
/**
*
*/
@ApiOperation(value = "明细列表")
@PostMapping("incomeList")
public TableDataInfo incomeList(@Valid @RequestBody IncomeInfoListPageRes incomeInfoListPageRes) {
return incomeInfoService.incomeList(incomeInfoListPageRes);
}
/**
*
*/
@ApiOperation(value = "社区收益")
@GetMapping("communityIncome")
public R<IncomeInfoVo> communityIncome() {
return incomeInfoService.communityIncome();
}
}

View File

@ -0,0 +1,70 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.utils.StringUtils;
import com.mcwl.communityCenter.domain.Community;
import com.mcwl.communityCenter.service.InviteService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
/**
*
*/
@Api(tags = "社区邀请")
@RestController
@RequestMapping("invite")
@RequiredArgsConstructor
@Valid
public class InviteController {
private final InviteService inviteService;
/**
*
*/
@ApiOperation(value = "邀请码链接")
@GetMapping("inviteCode")
public R<String> inviteCode(@NotNull(message = "社区不能为空")
@ApiParam(value = "社区", required = true)
Long communityId) {
// 获取邀请码链接
String inviteCode = inviteService.getInviteCode(communityId);
if (StringUtils.isBlank(inviteCode)) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"获取邀请码失败");
}
return R.ok(inviteCode);
}
/**
*
*/
@ApiOperation(value = "接受邀请")
@GetMapping("acceptInvite")
@Valid
public R<Object> acceptInvite(@NotNull(message = "社区不能为空")
@ApiParam(value = "社区", required = true)
Long communityId,
@NotBlank(message = "邀请码不能为空")
@ApiParam(value = "邀请码", required = true)
String inviteCode) {
return inviteService.acceptInvite(communityId, inviteCode);
}
}

View File

@ -0,0 +1,46 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.dto.MyPublishCollectPageRes;
import com.mcwl.communityCenter.domain.dto.MyPublishPageRes;
import com.mcwl.communityCenter.domain.dto.PersonHomePageRes;
import com.mcwl.communityCenter.domain.dto.QuestionPageRes;
import com.mcwl.communityCenter.service.PublishCollectService;
import com.mcwl.communityCenter.service.PublishService;
import com.mcwl.communityCenter.service.QuestionService;
import com.mcwl.communityCenter.service.impl.PublishCommentLikeServiceImpl;
import com.mcwl.communityCenter.service.impl.PublishServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
*
*/
@Api(tags = "个人主页")
@RestController
@RequiredArgsConstructor
@RequestMapping("personHome")
public class PersonHomeController {
private final PublishService publishService;
/**
*
*/
@PostMapping("getPersonHomeList")
@ApiOperation(value = "个人主页列表")
public TableDataInfo getPersonHomeList(@RequestBody @Valid PersonHomePageRes personHomePageRes) {
return publishService.getPersonHomeList(personHomePageRes);
}
}

View File

@ -0,0 +1,106 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.controller.BaseController;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.resource.domain.request.PlatForm;
import com.mcwl.resource.service.PlatFormService;
import com.mcwl.web.controller.common.OssUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* app
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.web.controller.communityCenter
* @FilenamePlaFormController
* @Description TODO
* @Date2025/3/4 16:36
*/
@Api(tags = "官方app")
@RestController
@RequestMapping("app")
public class PlaFormController extends BaseController {
@Autowired
private PlatFormService platFormService;
/**
*
*/
@ApiOperation(value = "官方连接方式二维码列表")
@GetMapping("/list")
public R<List<PlatForm>> list() {
return R.ok(platFormService.listplatForm());
}
/***
*
* url
* @param file
* @return
*/
@ApiOperation(value = "官方二维码文件")
@PostMapping("/UrlFile")
public AjaxResult zipUrlFile(@RequestParam MultipartFile file) {
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success("上传成功", s);
}
/**
*
*/
@ApiOperation(value = "添加")
@PostMapping("/insert")
public R<Boolean> add(@RequestBody PlatForm platForm) {
boolean save = platFormService.save(platForm);
return R.ok(save);
}
/**
*
*/
@ApiOperation(value = "修改")
@PostMapping("/update")
public AjaxResult updateModel(@RequestBody PlatForm platForm) {
platFormService.updateById(platForm);
return AjaxResult.success("修改成功");
}
/**
*
*
* @param id
* @return
*/
@ApiOperation(value = "查询平台app详情")
@GetMapping("/selectModelById")
public R<PlatForm> selectModelById(@Valid @NotNull(message = "id不能为空") @RequestParam Long id) {
PlatForm byId = platFormService.getById(id);
return R.ok(byId);
}
/**
*
*/
@ApiOperation(value = "删除联系")
@GetMapping("delete")
public AjaxResult delete(@Valid @NotNull(message = "id不能为空") @RequestParam Long id) {
platFormService.removeById(id);
return AjaxResult.success();
}
}

View File

@ -0,0 +1,83 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.controller.BaseController;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.communityCenter.domain.dto.CommentDelRes;
import com.mcwl.communityCenter.domain.dto.CommentDetailRes;
import com.mcwl.communityCenter.domain.dto.CommentRes;
import com.mcwl.communityCenter.domain.vo.CommentVo;
import com.mcwl.communityCenter.service.PublishCommentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
/**
*
*/
@Api(tags = "社群评论")
@RequestMapping("publishComment")
@RestController
@RequiredArgsConstructor
public class PublishCommentController extends BaseController {
private final PublishCommentService publishCommentService;
/**
*
*
* @param commentRes
* @return
*/
@ApiOperation(value = "添加发布评论")
@PostMapping("/save")
public R<Object> save(@RequestBody @Valid CommentRes commentRes) {
return publishCommentService.addComment(commentRes);
}
/**
*
*
* @param commentDetailRes
* @return
*/
@ApiOperation(value = "获取评论详情")
@PostMapping("/detail")
public R<List<CommentVo>> getComment(@RequestBody @Valid CommentDetailRes commentDetailRes) {
return publishCommentService.getComment(commentDetailRes);
}
// /**
// * 点赞或取消点赞评论
// * @param commentDetailRes 评论请求参数
// * @return 更新后的点赞数
// */
// @ApiOperation(value = "点赞或取消点赞评论")
// @PostMapping("/like")
// public AjaxResult like(@RequestBody @Valid CommentDetailRes commentDetailRes) {
//
// return publishCommentService.like(commentDetailRes);
// }
@ApiOperation(value = "删除评论")
@PostMapping("/delete")
public R<Object> delete(@RequestBody @Valid CommentDelRes commentDelRes) {
return publishCommentService.removeCommentById(commentDelRes);
}
}

View File

@ -0,0 +1,117 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.domain.vo.PublishVo;
import com.mcwl.communityCenter.service.PublishService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.Objects;
/**
*
*/
@Api(tags = "社区帖子发布")
@RestController
@RequestMapping("publish")
@RequiredArgsConstructor
public class PublishController {
private final PublishService publishService;
/**
*
*/
@ApiOperation(value = "获取发布详情")
@PostMapping("detail")
public R<PublishVo> getPublishDetail(@RequestBody @Valid PublishDetailRes publishDetailRes) {
PublishVo publishVo = publishService.getDetail(publishDetailRes);
if (Objects.isNull(publishVo)) {
return R.fail(HttpStatus.SHOW_ERROR_MSG, "获取详情失败");
}
return R.ok(publishVo);
}
/**
*
*/
@ApiOperation(value = "发布")
@PostMapping("publish")
public R<Object> publish(@RequestBody @Valid PublishRes publishRes) {
return publishService.publish(publishRes);
}
/**
*
*/
@ApiOperation(value = "获取发布列表")
@PostMapping("publishList")
public TableDataInfo publishList(@RequestBody @Valid PublishPageRes publishPageRes) {
return publishService.publishList(publishPageRes);
}
// /**
// * 获取发布图片列表
// */
// @ApiOperation(value = "获取发布图片列表")
// @PostMapping("publishImage")
// public TableDataInfo publishImage(@RequestBody @Valid PublishPageRes publishPageRes) {
// return publishService.publishImage(publishPageRes);
// }
//
// /**
// * 获取发布文件列表
// */
// @ApiOperation(value = "获取发布文件列表")
// @PostMapping("publishFile")
// public TableDataInfo publishFile(@RequestBody @Valid PublishPageRes publishPageRes) {
// return publishService.publishFile(publishPageRes);
// }
/**
*
*/
@ApiOperation(value = "删除")
@GetMapping("remove")
public R<Object> deletePublish(@NotNull(message = "id不能为空") @ApiParam(value = "id") @Valid Long id) {
publishService.removeById(id);
return R.ok();
}
/**
* /
*/
@ApiOperation(value = "精选/取消精选")
@GetMapping("elite")
public R<Object> elitePublish(@NotNull(message = "社区id不能为空")
@ApiParam(value = "社区id")
@Valid Long communityId,
@NotNull(message = "发布文章id不能为空")
@ApiParam(value = "发布文章id")
@Valid Long publishId) {
publishService.elitePublish(communityId, publishId);
return R.ok();
}
/**
* /
*/
@ApiOperation(value = "收藏/取消收藏")
@PostMapping("collect")
public R<Object> collectPublish(@RequestBody @Valid PublishCollectRes publishCollectRes) {
publishService.collectPublish(publishCollectRes);
return R.ok();
}
}

View File

@ -0,0 +1,42 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.controller.BaseController;
import com.mcwl.common.core.domain.R;
import com.mcwl.communityCenter.domain.dto.PublishCommentLikeRes;
import com.mcwl.communityCenter.domain.dto.PublishLikeRes;
import com.mcwl.communityCenter.service.PublishCommentLikeService;
import com.mcwl.communityCenter.service.PublishLikeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
*
*/
@Api(tags = "社群发布点赞")
@RestController
@RequiredArgsConstructor
@RequestMapping("PublishLike")
public class PublishLikeController extends BaseController {
private final PublishLikeService publishLikeService;
/**
* /
*/
@PostMapping("/like")
@ApiOperation(value = "点赞/取消点赞")
public R<Object> like(@RequestBody @Valid PublishLikeRes publishLikeRes) {
publishLikeService.like(publishLikeRes);
return R.ok();
}
}

View File

@ -0,0 +1,64 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.communityCenter.domain.dto.*;
import com.mcwl.communityCenter.service.QuestionCommentService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
/**
*
*/
@Api(tags = "社区提问评论")
@RestController
@RequestMapping("questionComment")
@RequiredArgsConstructor
public class QuestionCommentController {
private final QuestionCommentService questionCommentService;
/**
*
*/
@PostMapping("comment")
@ApiOperation(value = "新增提问评论")
public R<Object> comment(@Valid @RequestBody QuestionCommentRes questionCommentRes) {
return questionCommentService.comment(questionCommentRes);
}
/**
*
* @param questionCommentPageRes
* @return
*/
@PostMapping("list")
@ApiOperation(value = "获取提问评论列表")
public TableDataInfo list(@RequestBody @Valid QuestionCommentPageRes questionCommentPageRes) {
return questionCommentService.listByPage(questionCommentPageRes);
}
/**
*
*/
@PostMapping("adopt")
@ApiOperation(value = "采纳评论")
public R<Object> adopt(@Valid @RequestBody QuestionCommentAdoptRes questionCommentAdoptRes) {
return questionCommentService.adopt(questionCommentAdoptRes);
}
}

View File

@ -0,0 +1,126 @@
package com.mcwl.web.controller.communityCenter;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.domain.entity.SysUser;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.communityCenter.domain.dto.QuestionDetailRes;
import com.mcwl.communityCenter.domain.dto.QuestionPageRes;
import com.mcwl.communityCenter.domain.dto.QuestionReplyRes;
import com.mcwl.communityCenter.domain.dto.QuestionRes;
import com.mcwl.communityCenter.domain.vo.QuestionVo;
import com.mcwl.communityCenter.service.QuestionService;
import com.mcwl.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.Objects;
/**
*
*/
@Api(tags = "社区提问")
@RestController
@RequestMapping("question")
@RequiredArgsConstructor
public class QuestionController {
private final QuestionService questionService;
private final ISysUserService sysUserService;
/**
*
*/
@PostMapping("addQuestion")
@ApiOperation(value = "提问")
public R<Object> addQuestion(@RequestBody @Valid QuestionRes questionRes) {
// 提问类型
Integer type = questionRes.getType();
// 付费金额
Double amount = questionRes.getAmount();
// 类型为1时付费金额不能为空
if (Objects.equals(type, 1) && Objects.isNull(amount)) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"付费金额不能为空");
}
// 付费类型为1时判断钱包余额是否充足
if (Objects.equals(type, 1)) {
if (amount < 10) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"付费金额不能小于10");
}
if (amount > 1000) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"付费金额不能大于1000");
}
Long userId = SecurityUtils.getUserId();
SysUser sysUser = sysUserService.selectUserById(userId);
Double wallet = sysUser.getWallet();
if (wallet < amount) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"钱包余额不足");
}
} else {
questionRes.setAmount(0.0);
}
return questionService.addQuestion(questionRes);
}
/**
*
*/
@PostMapping("list")
@ApiOperation(value = "获取提问列表")
public TableDataInfo list(@RequestBody @Valid QuestionPageRes questionPageRes) {
return questionService.list(questionPageRes);
}
/**
*
*/
@PostMapping("listImage")
@ApiOperation(value = "获取提问图片列表")
public TableDataInfo listImage(@RequestBody @Valid QuestionPageRes questionPageRes) {
return questionService.listImage(questionPageRes);
}
/**
*
*/
@PostMapping("detail")
@ApiOperation(value = "获取问题详情")
public R<QuestionVo> getQuestionDetail(@RequestBody @Valid QuestionDetailRes questionDetailRes) {
QuestionVo questionVo = questionService.getDetail(questionDetailRes);
if (Objects.isNull(questionVo)) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"获取详情失败");
}
return R.ok(questionVo);
}
// /**
// * 回复
// */
// @PostMapping("reply")
// @ApiOperation(value = "回复")
// public AjaxResult reply(@RequestBody @Valid QuestionReplyRes questionReplyRes) {
//
// return questionService.reply(questionReplyRes);
//
// }
}

View File

@ -0,0 +1,94 @@
package com.mcwl.web.controller.memberCenter;
import cn.hutool.core.bean.BeanUtil;
import com.mcwl.common.core.domain.R;
import com.mcwl.memberCenter.domain.Benefit;
import com.mcwl.memberCenter.domain.dto.AddBenefitDto;
import com.mcwl.memberCenter.domain.dto.EditBenefitDto;
import com.mcwl.memberCenter.domain.vo.BenefitVo;
import com.mcwl.memberCenter.enums.MemberBenefitTypeEnum;
import com.mcwl.memberCenter.service.BenefitService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/***
*
*/
@RestController
@RequestMapping("benefit")
@RequiredArgsConstructor
@Api(tags = "会员中心")
public class BenefitController {
private final BenefitService benefitService;
/**
*
*/
// @PreAuthorize("@ss.hasPermi('system:benefit:list')")
@ApiOperation(value = "权益列表")
@GetMapping("list")
public R<List<BenefitVo>> list() {
return R.ok(benefitService.benefitList());
}
/**
*
*/
// @PreAuthorize("@ss.hasPermi('system:benefit:add')")
@ApiOperation(value = "添加权益")
@PostMapping("add")
public R<Object> add(@RequestBody @Valid AddBenefitDto addBenefitDto) {
benefitService.addBenefit(addBenefitDto);
return R.ok();
}
/**
* id
*/
@ApiOperation(value = "根据权益名称id查询权益")
@GetMapping("getBenefitByBenefitId")
public R<List<Benefit>> getBenefitByBenefitId(@NotNull(message = "权益名称id不能为空") Long benefitNameId) {
List<Benefit> benefitList = benefitService.lambdaQuery()
.eq(Benefit::getBenefitNameId, benefitNameId)
.list();
return R.ok(benefitList);
}
/**
*
*/
// @PreAuthorize("@ss.hasPermi('system:benefit:edit')")
@ApiOperation(value = "修改权益")
@PostMapping("update")
public R<Object> update(@RequestBody @Valid EditBenefitDto editBenefitDto) {
Benefit benefit = BeanUtil.copyProperties(editBenefitDto, Benefit.class);
benefitService.updateById(benefit);
return R.ok();
}
// @PreAuthorize("@ss.hasPermi('system:benefit:remove')")
@ApiOperation(value = "删除权益")
@GetMapping("delete")
public R<Object> delete(@NotNull(message = "id不能为空") Long id) {
benefitService.removeById(id);
return R.ok();
}
}

View File

@ -0,0 +1,69 @@
package com.mcwl.web.controller.memberCenter;
import cn.hutool.core.bean.BeanUtil;
import com.mcwl.common.core.domain.R;
import com.mcwl.memberCenter.domain.Benefit;
import com.mcwl.memberCenter.domain.BenefitName;
import com.mcwl.memberCenter.domain.dto.AddBenefitDto;
import com.mcwl.memberCenter.domain.dto.AddBenefitNameDto;
import com.mcwl.memberCenter.domain.dto.EditBenefitDto;
import com.mcwl.memberCenter.domain.dto.EditBenefitNameDto;
import com.mcwl.memberCenter.domain.vo.BenefitVo;
import com.mcwl.memberCenter.service.BenefitNameService;
import com.mcwl.memberCenter.service.BenefitService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/***
*
*/
@RestController
@RequestMapping("benefitName")
@RequiredArgsConstructor
@Api(tags = "会员中心")
public class BenefitNameController {
private final BenefitNameService benefitNameService;
/**
*
*/
@ApiOperation(value = "权益名称列表")
@GetMapping("list")
public R<List<BenefitName>> list() {
List<BenefitName> list = benefitNameService.list();
return R.ok(list);
}
@ApiOperation(value = "添加权益名称")
@PostMapping("add")
public R<Object> add(@RequestBody @Valid AddBenefitNameDto addBenefitDto) {
BenefitName benefitName = BeanUtil.toBean(addBenefitDto, BenefitName.class);
benefitNameService.save(benefitName);
return R.ok();
}
@ApiOperation(value = "修改权益名称")
@PostMapping("update")
public R<Object> update(@RequestBody @Valid EditBenefitNameDto editBenefitNameDto) {
BenefitName benefitName = BeanUtil.toBean(editBenefitNameDto, BenefitName.class);
benefitNameService.updateById(benefitName);
return R.ok();
}
@ApiOperation(value = "删除权益名称")
@GetMapping("delete")
public R<Object> delete(@Valid @NotNull(message = "id不能为空") Long id) {
benefitNameService.removeById(id);
return R.ok();
}
}

View File

@ -0,0 +1,84 @@
package com.mcwl.web.controller.memberCenter;
import cn.hutool.core.bean.BeanUtil;
import com.mcwl.common.core.domain.R;
import com.mcwl.memberCenter.domain.MemberBenefit;
import com.mcwl.memberCenter.domain.dto.MemberBenefitDto;
import com.mcwl.memberCenter.domain.vo.MemberBenefitVO;
import com.mcwl.memberCenter.service.MemberBenefitService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/***
*
*/
@RestController
@RequestMapping("memberBenefit")
@RequiredArgsConstructor
@Api(tags = "会员中心")
public class MemberBenefitController {
private final MemberBenefitService memberBenefitService;
/**
*
*/
// @PreAuthorize("@ss.hasPermi('system:memberBenefit:list')")
@GetMapping("getMemberBenefitList")
@ApiOperation(value = "获取会员等级及权益列表")
public R<List<MemberBenefitVO>> getMemberBenefitList() {
return R.ok(memberBenefitService.getMemberBenefitList());
}
/**
*
*/
@ApiOperation(value = "查询会员权益")
@GetMapping("getMemberBenefit")
public R<MemberBenefitVO> getMemberBenefit(@Valid
@NotNull(message = "会员等级id不能为空")
@ApiParam(value = "会员等级id", required = true)
Long memberLevelId) {
return R.ok(memberBenefitService.getMemberBenefit(memberLevelId));
}
/**
*
*/
// @PreAuthorize("@ss.hasPermi('system:memberBenefit:add')")
@ApiOperation(value = "会员绑定权益")
@PostMapping("addMemberBenefit")
public R<Object> addMemberBenefit(@RequestBody @Valid MemberBenefitDto memberBenefitDto) {
memberBenefitService.addMemberBenefit(memberBenefitDto);
return R.ok();
}
// @PreAuthorize("@ss.hasPermi('system:memberBenefit:edit')")
@ApiOperation(value = "修改会员权益")
@PostMapping("updateMemberBenefit")
public R<Object> updateMemberBenefit(@RequestBody @Valid MemberBenefit memberBenefit) {
return R.ok(memberBenefitService.updateById(memberBenefit));
}
@ApiOperation(value = "删除会员权益")
@GetMapping("deleteMemberBenefit")
public R<Object> deleteMemberBenefit(@Valid @NotNull(message = "会员权益id不能为空") Long id) {
return R.ok(memberBenefitService.removeById(id));
}
}

View File

@ -1,30 +1,42 @@
package com.mcwl.web.controller.memberCenter;
import cn.hutool.core.bean.BeanUtil;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.domain.entity.SysUser;
import com.mcwl.common.core.page.PageDomain;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.memberCenter.domain.MemberConsume;
import com.mcwl.memberCenter.domain.Member;
import com.mcwl.memberCenter.domain.MemberLevel;
import com.mcwl.memberCenter.service.MemberBenefitService;
import com.mcwl.memberCenter.domain.*;
import com.mcwl.memberCenter.domain.vo.MemberConsumeVO;
import com.mcwl.memberCenter.domain.vo.MemberVo;
import com.mcwl.memberCenter.domain.vo.RechargeRecordVO;
import com.mcwl.memberCenter.enums.PromotionEnum;
import com.mcwl.memberCenter.service.*;
import com.mcwl.memberCenter.domain.dto.RechargePointsDto;
import com.mcwl.memberCenter.domain.dto.UserMemberDto;
import com.mcwl.memberCenter.service.MemberConsumeService;
import com.mcwl.memberCenter.service.MemberLevelService;
import com.mcwl.memberCenter.service.MemberService;
import com.mcwl.system.service.ISysUserService;
import com.mcwl.memberCenter.domain.vo.PointsVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.jboss.marshalling.SimpleDataInput;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
import java.util.Optional;
import javax.validation.constraints.NotNull;
import java.text.SimpleDateFormat;
import java.util.*;
/***
*
*/
@RestController
@RequestMapping("member")
@RequiredArgsConstructor
@Api(tags = "会员中心")
public class MemberController {
private final MemberService memberService;
@ -37,6 +49,8 @@ public class MemberController {
private final MemberLevelService memberLevelService;
private final MemberPromotionService memberPromotionService;
/**
*
*
@ -44,7 +58,7 @@ public class MemberController {
* @return
*/
@PostMapping("createMember")
public AjaxResult createMemberCenter(@RequestBody @Valid UserMemberDto userMemberDto) {
public R<Member> createMemberCenter(@RequestBody @Valid UserMemberDto userMemberDto) {
Long userId = userMemberDto.getUserId();
Long memberLevelId = userMemberDto.getMemberLevelId();
String paymentMethod = userMemberDto.getPaymentMethod();
@ -52,49 +66,54 @@ public class MemberController {
SysUser sysUser = sysUserService.selectUserById(userId);
if (!Optional.ofNullable(sysUser).isPresent()) {
return AjaxResult.warn("用户不存在");
return R.fail(HttpStatus.SHOW_ERROR_MSG, "用户不存在");
}
MemberLevel memberLevel = memberLevelService.getById(memberLevelId);
if (!Optional.ofNullable(memberLevel).isPresent()) {
return AjaxResult.warn("会员等级不存在");
return R.fail(HttpStatus.SHOW_ERROR_MSG, "会员等级不存在");
}
Member member = memberService.createUserMember(userId, memberLevelId, paymentMethod, promotionId);
if (!Optional.ofNullable(member).isPresent()) {
return AjaxResult.warn("创建会员失败");
return R.fail(HttpStatus.SHOW_ERROR_MSG, "创建会员失败");
}
return AjaxResult.success(member);
return R.ok(member);
}
/**
*
*
* @return
*
*/
@GetMapping("getPoints")
public AjaxResult getPoints() {
Long userId = SecurityUtils.getUserId();
@ApiOperation(value = "获取用户有效会员的会员")
@GetMapping("getValidMemberById")
public R<List<MemberVo>> getUseUserMember(@Valid @NotNull(message = "用户id不能为空") Long userId) {
Member member = memberService.getUseUserMemberByUserId(userId);
if (!Optional.ofNullable(member).isPresent()) {
return AjaxResult.warn("用户未开通会员");
return R.ok(memberService.getValidMemberById(userId));
}
PointsVO pointsVO = new PointsVO();
// 会员消费记录
List<MemberConsume> memberConsumeList = memberConsumeService
.lambdaQuery()
.eq(MemberConsume::getUserId, userId)
.list();
/**
*
*
* @return
*/
@PostMapping("getConsumePoints")
@ApiOperation(value = "获取积分消费记录")
public TableDataInfo getConsumePoints(@Valid @RequestBody PageDomain pageDomain) {
pointsVO.setPoints(member.getPoints());
pointsVO.setMemberConsumeList(memberConsumeList);
return memberConsumeService.getConsumePoints(pageDomain);
}
return AjaxResult.success(pointsVO);
/**
*
*/
@PostMapping("getRechargePoints")
@ApiOperation(value = "获取积分充值记录")
public TableDataInfo getRechargePoints(@Valid @RequestBody PageDomain pageDomain) {
return memberService.getRechargePoints(pageDomain);
}
@ -102,25 +121,24 @@ public class MemberController {
*
*/
@PostMapping("rechargePoints")
public AjaxResult rechargePoints(@RequestBody @Valid RechargePointsDto rechargePointsDto) {
@ApiOperation(value = "会员积分充值")
public R<Object> rechargePoints(@RequestBody @Valid RechargePointsDto rechargePointsDto) {
Long userId = rechargePointsDto.getUserId();
Double amount = rechargePointsDto.getAmount();
SysUser sysUser = sysUserService.selectUserById(userId);
if (!Optional.ofNullable(sysUser).isPresent()) {
return AjaxResult.warn("用户不存在");
return R.fail(HttpStatus.SHOW_ERROR_MSG, "用户不存在");
}
Member member = memberService.rechargePoints(userId, amount * 100);
// 返回充值积分
if (!Optional.ofNullable(member).isPresent()) {
return AjaxResult.warn("充值积分失败");
return R.fail(HttpStatus.SHOW_ERROR_MSG, "充值积分失败");
}
rechargePointsDto.setPoints(member.getPoints());
return AjaxResult.success(rechargePointsDto);
return R.ok();
}
@ -128,16 +146,65 @@ public class MemberController {
*
*/
@GetMapping("consumePoints/{consumePoints}")
public AjaxResult consumePoints(@PathVariable Double consumePoints) {
@ApiOperation(value = "消费积分")
public R<Object> consumePoints(@PathVariable Double consumePoints) {
if (consumePoints == null || consumePoints <= 0) {
return AjaxResult.warn("消费积分不能为空或小于0");
return R.fail(HttpStatus.SHOW_ERROR_MSG, "消费积分不能为空或小于0");
}
memberService.consumePoints(consumePoints);
return AjaxResult.success();
return R.ok();
}
/**
*
*/
@GetMapping("calculatePayment")
@ApiOperation(value = "根据会员等级和活动计算支付金额")
public R<Double> calculatePayment(@Valid @NotNull(message = "请选择会员") Long memberLevelId, @RequestParam(required = false) Long promotionId) {
// 获取当前用户
Long userId = SecurityUtils.getUserId();
MemberPromotion memberPromotion = memberPromotionService.lambdaQuery()
.eq(MemberPromotion::getUserId, userId)
.eq(Objects.nonNull(promotionId), MemberPromotion::getPromotionId, promotionId)
.eq(MemberPromotion::getStatus, PromotionEnum.PARTICIPATE)
.one();
if (Objects.nonNull(promotionId) && Objects.isNull(memberPromotion)) {
return R.fail(HttpStatus.SHOW_ERROR_MSG, "未参与活动或已过期");
}
MemberLevel memberLevel = memberLevelService.getById(memberLevelId);
Double unitPrice = memberLevel.getUnitPrice();
unitPrice = memberService.calculatePayment(unitPrice, promotionId);
return R.ok(unitPrice);
}
/**
*
*/
@GetMapping("isMember")
@ApiOperation(value = "是否是会员")
public R<Map<String, String>> isMember() {
Long userId = SecurityUtils.getUserId();
Map<String, String> map = new HashMap<>();
Member member = memberService.getUseUserMemberByUserId(userId);
if (Optional.ofNullable(member).isPresent()) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date startDate = member.getStartDate();
Date endDate = member.getEndDate();
map.put("result", "1");
map.put("startDate", sdf.format(startDate));
map.put("endDate", sdf.format(endDate));
return R.ok(map);
}
map.put("result", "0");
return R.ok(map);
}
}

View File

@ -1,63 +1,109 @@
package com.mcwl.web.controller.memberCenter;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.memberCenter.domain.MemberBenefit;
import cn.hutool.core.bean.BeanUtil;
import com.mcwl.common.core.domain.R;
import com.mcwl.memberCenter.domain.MemberLevel;
import com.mcwl.memberCenter.service.MemberBenefitService;
import com.mcwl.memberCenter.domain.dto.AddMemberLevelDto;
import com.mcwl.memberCenter.domain.dto.EditMemberLevelDto;
import com.mcwl.memberCenter.domain.vo.MemberLevelVo;
import com.mcwl.memberCenter.service.MemberLevelService;
import com.mcwl.memberCenter.domain.vo.MemberBenefitVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
/***
*
*/
@RestController
@RequestMapping("memberLevel")
@RequiredArgsConstructor
@Api(tags = "会员中心")
public class MemberLevelController {
private final MemberLevelService memberLevelService;
private final MemberBenefitService memberBenefitService;
/**
*
*/
// @PreAuthorize("@ss.hasPermi('system:memberLevel:add')")
@PostMapping("addMemberLevel")
@ApiOperation(value = "添加会员等级")
public R<Object> add(@RequestBody @Valid AddMemberLevelDto addMemberLevelDto) {
MemberLevel memberLevel = BeanUtil.copyProperties(addMemberLevelDto, MemberLevel.class);
memberLevelService.save(memberLevel);
return R.ok();
}
/**
*
*
* @return
*/
// @PreAuthorize("@ss.hasPermi('system:memberLevel:list')")
@GetMapping("list")
public AjaxResult list() {
@ApiOperation(value = "获取会员等级列表")
public R<List<MemberLevelVo>> list() {
List<MemberLevel> memberLevelList = memberLevelService.list();
List<MemberLevelVo> memberLevelListVo = new ArrayList<>();
for (MemberLevel memberLevel : memberLevelList) {
MemberLevelVo memberLevelVo = BeanUtil.copyProperties(memberLevel, MemberLevelVo.class);
memberLevelVo.setSubscriptionPeriod(memberLevel.getSubscriptionPeriod().getValue());
memberLevelListVo.add(memberLevelVo);
}
return AjaxResult.success(memberLevelList);
return R.ok(memberLevelListVo);
}
/**
*
*/
// @PreAuthorize("@ss.hasPermi('system:memberLevel:query')")
@GetMapping("getMemberLevel")
@ApiOperation(value = "获取会员等级")
public R<MemberLevelVo> getMemberLevel(@Valid
@NotNull(message = "会员等级id不能为空")
@ApiParam(value = "会员等级id", required = true)
Long id) {
MemberLevel memberLevel = memberLevelService.getById(id);
MemberLevelVo memberLevelVo = BeanUtil.copyProperties(memberLevel, MemberLevelVo.class);
memberLevelVo.setSubscriptionPeriod(memberLevel.getSubscriptionPeriod().getValue());
return R.ok(memberLevelVo);
}
/**
*
*
*/
@GetMapping("getMemberBenefitList")
public AjaxResult getMemberBenefitList() {
List<MemberBenefitVO> memberBenefitVOList = new ArrayList<>();
List<MemberLevel> memberLevelList = memberLevelService.list();
for (MemberLevel memberLevel : memberLevelList) {
MemberBenefitVO memberBenefitVO = new MemberBenefitVO();
memberBenefitVO.setMemberLevel(memberLevel);
// 获取会员等级对应的权益
List<MemberBenefit> memberBenefitList = memberBenefitService.lambdaQuery()
.eq(MemberBenefit::getMemberLevelId, memberLevel.getId())
.list();
memberBenefitVO.setMemberBenefitList(memberBenefitList);
memberBenefitVOList.add(memberBenefitVO);
// @PreAuthorize("@ss.hasPermi('system:memberLevel:edit')")
@PostMapping("updateMemberLevel")
@ApiOperation(value = "修改会员等级")
public R<Object> update(@RequestBody @Valid EditMemberLevelDto editMemberLevelDto) {
memberLevelService.updateById(BeanUtil.copyProperties(editMemberLevelDto, MemberLevel.class));
return R.ok();
}
return AjaxResult.success(memberBenefitVOList);
/**
*
*/
// @PreAuthorize("@ss.hasPermi('system:memberLevel:remove')")
@GetMapping("deleteMemberLevel")
@ApiOperation(value = "删除会员等级")
public R<Object> delete(@Valid
@NotNull(message = "会员等级id不能为空")
@ApiParam(value = "会员等级id", required = true)
Long id) {
memberLevelService.removeById(id);
return R.ok();
}
}

View File

@ -2,7 +2,11 @@ package com.mcwl.web.controller.memberCenter;
import cn.hutool.core.bean.BeanUtil;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.PageDomain;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.memberCenter.domain.Member;
import com.mcwl.memberCenter.domain.MemberPromotion;
@ -14,10 +18,15 @@ import com.mcwl.memberCenter.enums.PromotionEnum;
import com.mcwl.memberCenter.service.MemberPromotionService;
import com.mcwl.memberCenter.service.MemberService;
import com.mcwl.memberCenter.service.PromotionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.List;
import java.util.Optional;
@ -29,25 +38,26 @@ import java.util.Optional;
@RestController
@RequestMapping("promotion")
@RequiredArgsConstructor
@Api(tags = "会员中心")
public class PromotionController {
private final PromotionService promotionService;
private final MemberPromotionService memberPromotionService;
private final MemberService memberService;
/**
*
*/
// @PreAuthorize("@ss.hasPermi('system:promotion:add')")
@PostMapping("createPromotion")
public AjaxResult createPromotion(@RequestBody @Valid PromotionDto promotionDto) {
@ApiOperation(value = "创建活动")
public R<Object> createPromotion(@RequestBody @Valid PromotionDto promotionDto) {
Date startTime = promotionDto.getStartTime();
Date endTime = promotionDto.getEndTime();
if (startTime.after(endTime)) {
return AjaxResult.warn("活动开始时间不能大于结束时间");
return R.fail(HttpStatus.SHOW_ERROR_MSG,"活动开始时间不能大于结束时间");
}
Promotion promotion = new Promotion();
@ -55,80 +65,64 @@ public class PromotionController {
promotionService.save(promotion);
return AjaxResult.success();
return R.ok();
}
/**
*
*/
@GetMapping("promotionList")
public AjaxResult promotionList() {
List<Promotion> promotionList = promotionService.lambdaQuery()
.gt(Promotion::getEndTime, new Date())
.list();
return AjaxResult.success(promotionList);
@PostMapping("promotionList")
@ApiOperation(value = "活动列表")
public TableDataInfo getPromotionList(@Valid @RequestBody PageDomain pageDomain) {
return promotionService.getPromotionList(pageDomain);
}
/**
*
*/
@GetMapping("myPromotionList")
public AjaxResult myPromotionList() {
// 获取当前用户
Long userId = SecurityUtils.getUserId();
List<MemberPromotion> memberPromotionList = memberPromotionService.lambdaQuery()
.eq(MemberPromotion::getUserId, userId)
.list();
return AjaxResult.success(memberPromotionList);
@PostMapping("myPromotionList")
@ApiOperation(value = "获取当前用户参与的活动")
public TableDataInfo myPromotionList(@Valid @RequestBody PageDomain pageDomain) {
return promotionService.getMyPromotionList(pageDomain);
}
/**
*
*/
@PostMapping("joinPromotion")
public AjaxResult joinPromotion(@RequestBody @Valid JoinPromotionDto joinPromotionDto) {
// 用户id
Long userId = joinPromotionDto.getUserId();
// 活动id
Long promotionId = joinPromotionDto.getPromotionId();
// 按活动id查询活动信息
Promotion promotion = promotionService.getById(promotionId);
@GetMapping("joinPromotion")
@ApiOperation(value = "参与活动")
public R<Object> joinPromotion(@Valid
@NotNull(message = "活动ID不能为空")
@ApiParam("活动ID")
Long promotionId) {
if (!Optional.ofNullable(promotion).isPresent()) {
return AjaxResult.warn("活动不存在");
return promotionService.joinPromotion(promotionId);
}
if (promotion.getStartTime().after(new Date())) {
return AjaxResult.warn("活动未开始");
}
// 活动是否过期
if (promotion.getEndTime().before(new Date())) {
return AjaxResult.warn("活动已过期");
}
// 获取当前用户是否参与过该活动
if (isJoinPromotion(userId, promotionId)) {
return AjaxResult.warn("您已参与过该活动");
}
// 是否在活动期间内订阅或续订会员
// if (!isSubscribe(userId, promotion)) {
// return AjaxResult.warn("请在活动期间内订阅或续期会员后参加该活动");
/**
*
*/
// @PostMapping("updatePromotion")
// @ApiOperation(value = "修改活动")
// public R<Object> updatePromotion(@RequestBody @Valid PromotionDto promotionDto) {
//
// return promotionService.updatePromotion(promotionDto);
// }
Member member = memberService.getUseUserMemberByUserId(userId);
String memberLevelIds = promotion.getMemberLevelIds();
if (!memberLevelIds.contains(member.getMemberLevelId().toString())) {
return AjaxResult.warn("无法参与该活动,请查看活动条件");
}
MemberPromotion memberPromotion = getMemberPromotion(userId, promotionId);
memberPromotionService.save(memberPromotion);
return AjaxResult.success();
/**
*
*/
@GetMapping("deletePromotion")
@ApiOperation(value = "删除活动")
public R<Object> deletePromotion(@Valid
@NotNull(message = "活动ID不能为空")
@ApiParam("活动ID")
Long promotionId) {
promotionService.removeById(promotionId);
return R.ok();
}
// private boolean isSubscribe(Long userId, Promotion promotion) {
@ -145,26 +139,5 @@ public class PromotionController {
// return true;
// }
private boolean isJoinPromotion(Long userId, Long promotionId) {
MemberPromotion memberPromotion = memberPromotionService.lambdaQuery()
.eq(MemberPromotion::getUserId, userId)
.eq(MemberPromotion::getPromotionId, promotionId)
.one();
return memberPromotion != null;
}
private static MemberPromotion getMemberPromotion(Long userId, Long promotionId) {
MemberPromotion memberPromotion = new MemberPromotion();
memberPromotion.setUserId(userId);
memberPromotion.setPromotionId(promotionId);
memberPromotion.setStatus(PromotionEnum.PARTICIPATE);
memberPromotion.setParticipationTime(new Date());
memberPromotion.setCreateBy(SecurityUtils.getUsername());
memberPromotion.setCreateTime(new Date());
memberPromotion.setUpdateBy(SecurityUtils.getUsername());
memberPromotion.setUpdateTime(new Date());
return memberPromotion;
}
}

View File

@ -0,0 +1,90 @@
package com.mcwl.web.controller.myInvitation;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.myInvitation.domain.CommissionRatio;
import com.mcwl.myInvitation.domain.Invitation;
import com.mcwl.myInvitation.domain.dto.EarningsDisplayDto;
import com.mcwl.myInvitation.domain.vo.CommissionRatioVo;
import com.mcwl.myInvitation.domain.vo.EarningsDisplayVO;
import com.mcwl.myInvitation.service.CommissionRatioService;
import com.mcwl.myInvitation.service.InvitationService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.format.annotation.NumberFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
*
*/
@RestController()
@RequiredArgsConstructor
@RequestMapping("/commissionRatio")
@Api(tags = "我的邀请")
public class CommissionRatioController {
private final CommissionRatioService commissionRatioService;
/**
*
*/
@GetMapping("/list")
@ApiOperation(value = "提成列表")
public R<List<CommissionRatioVo>> list() {
List<CommissionRatioVo> list = commissionRatioService.ratioList();
return R.ok(list);
}
/**
*
*/
@GetMapping("/detail")
@ApiOperation(value = "提成详情")
public R<CommissionRatioVo> detail(@Valid @NotNull(message = "提成比例id不能为空") Long id) {
CommissionRatioVo detail = commissionRatioService.detail(id);
if (detail == null) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"提成比例不存在");
}
return R.ok(detail);
}
/**
*
*/
@GetMapping("/update")
@ApiOperation(value = "修改提成")
public R<CommissionRatioVo> update(@Valid
@NotNull(message = "提成比例id不能为空")
Long id,
@Valid
@NotNull(message = "提成比例不能为空")
@NumberFormat
Double ratio) {
if (ratio < 0 || ratio > 1) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"提成比例必须在0-1之间");
}
CommissionRatioVo detail = commissionRatioService.updateRatio(id, ratio);
if (detail == null) {
return R.fail(HttpStatus.SHOW_ERROR_MSG,"提成比例不存在");
}
return R.ok(detail);
}
}

View File

@ -1,30 +0,0 @@
package com.mcwl.web.controller.myInvitation;
import cn.hutool.core.bean.BeanUtil;
import com.mcwl.myInvitation.domain.Consume;
import com.mcwl.myInvitation.service.ConsumeService;
import com.mcwl.myInvitation.domain.dto.ConsumeDto;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
/**
*
*/
@RestController()
@RequiredArgsConstructor
@RequestMapping("/consume")
public class ConsumeController {
private final ConsumeService consumeService;
@PostMapping
public void consume(@RequestBody ConsumeDto consumeDto) {
Consume consume = new Consume();
BeanUtil.copyProperties(consumeDto, consume);
consumeService.saveConsume(consume);
}
}

View File

@ -1,73 +1,87 @@
package com.mcwl.web.controller.myInvitation;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.myInvitation.domain.Invitation;
import com.mcwl.myInvitation.domain.dto.EarningsDisplayDto;
import com.mcwl.myInvitation.service.InvitationService;
import com.mcwl.myInvitation.domain.vo.EarningsDisplayVO;
import com.mcwl.system.domain.dto.WithdrawalPageRes;
import com.mcwl.system.service.ISysUserPayAccountLogService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.*;
import static com.mcwl.common.core.domain.AjaxResult.success;
/**
*
*
*/
@RestController()
@RequiredArgsConstructor
@RequestMapping("/invitation")
@Api(tags = "我的邀请")
public class InvitationController {
private final InvitationService invitationService;
private final ISysUserPayAccountLogService sysUserPayAccountLogService;
/**
*
*
* @return
*/
@GetMapping("/getInvitationCode")
public AjaxResult getInvitationCode() {
@ApiOperation(value = "获取邀请码")
public R<String> getInvitationCode() {
// 获取当前用户
Long userId = SecurityUtils.getUserId();
String invitationCode = invitationService.getInvitationCode(userId);
if (StringUtils.isEmpty(invitationCode)) {
return AjaxResult.warn("获取邀请码失败");
return R.fail(HttpStatus.SHOW_ERROR_MSG,"获取邀请码失败");
}
return success("操作成功", invitationCode);
return R.ok("操作成功", invitationCode);
}
/**
*
*
* @param userId id
* @return
*/
@GetMapping("/list/{userId}")
public AjaxResult list(@PathVariable Long userId) {
List<Invitation> list = invitationService.lambdaQuery()
.eq(Invitation::getUserId, userId)
.list();
return success(list);
}
// @GetMapping("/list")
// @ApiOperation(value = "获取邀请列表")
// public R<List<Invitation>> list(@Valid
// @NotNull(message = "用户id不能为空")
// @ApiParam("用户id") Long userId) {
// List<Invitation> list = invitationService.lambdaQuery()
// .eq(Invitation::getUserId, userId)
// .list();
// return R.ok(list);
// }
/**
*
*/
@GetMapping("earningsDisplay")
public AjaxResult earningsDisplay() {
@ApiOperation(value = "邀请人收益展示")
public R<EarningsDisplayVO> earningsDisplay() {
Long userId = SecurityUtils.getUserId();
EarningsDisplayVO earningsDisplayVO = new EarningsDisplayVO();
@ -78,16 +92,39 @@ public class InvitationController {
// 获取我的团员
List<EarningsDisplayDto> earningsDisplay = invitationService.getEarningsDisplay(userId);
if (earningsDisplay == null || earningsDisplay.isEmpty()) {
return AjaxResult.warn("暂无收益");
return R.ok(new EarningsDisplayVO(totalAmount, Collections.emptyList()));
}
earningsDisplayVO.setTotalAmount(totalAmount);
earningsDisplayVO.setEarningsDisplayList(earningsDisplay);
return success(earningsDisplayVO);
return R.ok(earningsDisplayVO);
}
/**
*
*/
@GetMapping("totalAmount")
@ApiOperation(value = "累计收入金额")
public R<Double> totalAmount() {
Long userId = SecurityUtils.getUserId();
Double totalAmount = invitationService.getTotalAmount(userId);
if (Objects.isNull(totalAmount)) {
totalAmount = 0.0;
}
return R.ok(totalAmount);
}
/**
*
*/
@PostMapping("withdrawalRecord")
@ApiOperation(value = "提现记录")
public TableDataInfo withdrawalRecord(@Valid @RequestBody WithdrawalPageRes withdrawalPageRes) {
return sysUserPayAccountLogService.getWithdrawalRecord(withdrawalPageRes);
}
}

View File

@ -0,0 +1,294 @@
package com.mcwl.web.controller.pay.AliPay;
import cn.hutool.core.lang.UUID;
import cn.hutool.extra.qrcode.QrCodeUtil;
import com.alipay.api.domain.AlipayAccount;
import com.alipay.easysdk.factory.Factory;
import com.mcwl.common.annotation.Anonymous;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.controller.BaseController;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.redis.RedisCache;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.common.utils.ShareCodeUtils;
import com.mcwl.pay.config.AliConfig;
import com.mcwl.pay.domain.OrderTrade;
import com.mcwl.pay.domain.OrderTradeDto;
import com.mcwl.pay.domain.vo.PayVo;
import com.mcwl.pay.service.AliPayService;
import com.mcwl.pay.service.OrderTradeService;
import com.mcwl.system.domain.SysUserPayAccount;
import com.mcwl.system.service.ISysUserPayAccountService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;
import java.io.FileNotFoundException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
/**
* @AuthorChenYan
* @ProjectMcWl
* @Packagecom.mcwl.web.controller.pay
* @FilenameOrderTradeController
* @Description
* @Date2025/1/3 14:46
*/
@Controller
@RequestMapping("/ali/pay")
@Validated
@Api(tags = "支付模块")
public class AliPayController extends BaseController {
@Autowired
private OrderTradeService orderTradeService;
@Autowired
private ISysUserPayAccountService sysUserPayAccountService;
@Autowired
private AliPayService aliPayService;
@Autowired
private AliConfig aliConfig;
@Autowired
private RedisCache redisCache;
@Value("${mall.mgt.aliPayConfig.bindUrl}")
private String bindUrl;
/**
*
*
* @param response
* @throws Exception
*/
@ApiOperation(value = "支付宝绑定")
@GetMapping("/generateQrCode")
@ResponseBody
public R<String> generateQrCode(HttpServletResponse response) throws Exception {
String scope = "auth_user"; // 需要获取用户信息
String appId = aliConfig.getAppId();
String state = ShareCodeUtils.idToCode(SecurityUtils.getUserId()); // 防止CSRF攻击
String encodedRedirectUri = URLEncoder.encode(bindUrl, "UTF-8");
String authUrl = String.format(aliConfig.getOauthUrl(),appId, scope, encodedRedirectUri, state);
// QrCodeUtil.generate(authUrl, 300, 300, "png", response.getOutputStream());
return R.ok(authUrl, "成功");
}
/**
*
*/
@GetMapping("/queryBindStatus")
@ApiOperation(value = "支付宝绑定状态查询")
@ResponseBody
public R<Object> queryTradeStatus() throws Exception {
return aliPayService.queryBindStatus();
}
/**
*
*
* @param authCode
*/
@GetMapping("/callback")
public String callback(@RequestParam("auth_code") String authCode, String state) throws FileNotFoundException {
System.out.println("authCode = " + authCode);
String result = aliPayService.bindingCallback(authCode, state);
if ("success".equals(result)) {
return "binding-success";
} else {
return "binding-fail";
}
}
// /**
// * 账户余额查询
// */
// @GetMapping("/balance")
// @ResponseBody
// public AjaxResult balance() throws AlipayApiException {
// String balance = aliPayService.balance();
// return AjaxResult.success(balance);
// }
/**
*
*
* @param orderTradeDto
* @param response
* @throws Exception
*/
@Anonymous
@PostMapping("/doPay")
@ApiOperation(value = "支付宝支付")
@ResponseBody
public R<PayVo> doPay(@Valid
@RequestBody
OrderTradeDto orderTradeDto,
HttpServletResponse response) throws Exception {
PayVo payVo = null;
String type = orderTradeDto.getType();
if ("member".equalsIgnoreCase(type)) {
if (!Optional.ofNullable(orderTradeDto.getProductId()).isPresent()) {
return R.fail(HttpStatus.SHOW_ERROR_MSG, "商品id不能为空");
}
payVo = aliPayService.memberPay(orderTradeDto);
// QrCodeUtil.generate(payVo.getUrl(), 300, 300, "png", response.getOutputStream());
} else if ("points".equalsIgnoreCase(type)) {
payVo = aliPayService.pointsPay(orderTradeDto.getAmount());
// QrCodeUtil.generate(payVo.getUrl(), 300, 300, "png", response.getOutputStream());
} else if ("wallet".equalsIgnoreCase(type)) {
// 充值金额只能是整数
if (orderTradeDto.getAmount() % 1 != 0) {
return R.fail(HttpStatus.SHOW_ERROR_MSG, "充值金额只能是整数");
}
payVo = aliPayService.walletPay(orderTradeDto.getAmount());
// QrCodeUtil.generate(payVo.getUrl(), 300, 300, "png", response.getOutputStream());
} else {
return R.fail(HttpStatus.SHOW_ERROR_MSG, "订单类型错误");
}
return R.ok(payVo);
}
/**
*
*/
@Anonymous
@GetMapping("/fetch")
@ResponseBody
@ApiOperation(value = "提现")
public R<String> fetch(@Valid
@NotNull(message = "提现金额不能为空")
@Pattern(regexp = "^(0|(?!0\\d)[1-9]\\d*)(\\.\\d{2})?$", message = "金额格式错误(必须保留两位小数)")
String amount) throws Exception {
SysUserPayAccount sysUserPayAccount = sysUserPayAccountService.lambdaQuery()
.eq(SysUserPayAccount::getUserId, SecurityUtils.getUserId())
.eq(SysUserPayAccount::getType, 0)
.one();
if (Objects.isNull(sysUserPayAccount)) {
return R.fail(HttpStatus.SHOW_ERROR_MSG, "请先绑定支付宝");
}
if (Double.parseDouble(amount) < 0.1) {
return R.fail(HttpStatus.SHOW_ERROR_MSG, "提现金额最小为0.1");
}
return aliPayService.fetch(amount);
}
/**
*
*
* @param request
* @return
* @throws Exception
*/
@Anonymous
@PostMapping("/notify") // 注意这里必须是POST接口
@ResponseBody
public String payNotify(HttpServletRequest request) throws Exception {
if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
System.out.println("=========支付宝异步回调========");
Map<String, String> params = new HashMap<>();
Map<String, String[]> requestParams = request.getParameterMap();
for (String name : requestParams.keySet()) {
params.put(name, request.getParameter(name));
// System.out.println(name + " = " + request.getParameter(name));
}
// 支付宝验签
if (Factory.Payment.Common().verifyNotify(params)) {
// System.out.println("交易名称: " + params.get("subject"));
// System.out.println("交易状态: " + params.get("trade_status"));
// System.out.println("支付宝交易凭证号: " + params.get("trade_no"));
// System.out.println("商户订单号: " + params.get("out_trade_no"));
// System.out.println("交易金额: " + params.get("total_amount"));
// System.out.println("买家在支付宝唯一id: " + params.get("buyer_id"));
// System.out.println("买家付款时间: " + params.get("gmt_payment"));
// System.out.println("买家付款金额: " + params.get("buyer_pay_amount"));
// 验签通过
String code = params.get("out_trade_no"); // 商户订单号
OrderTrade orderTrade = orderTradeService.lambdaQuery()
.eq(OrderTrade::getCode, code)
.one();
if (Objects.isNull(orderTrade)) {
return "failure";
}
// 获取订单后缀
String suffix = code.substring(code.lastIndexOf("_") + 1);
orderTradeService.orderHandler(orderTrade, suffix, params);
// 更新订单状态
// if (!StringUtils.isEmpty(orderTradeJson)) {
// OrderTrade orderTrade = JSONUtil.toBean(orderTradeJson, OrderTrade.class);
// // 支付宝交易凭证号
// orderTrade.setPaymentMethod(params.get("trade_no"));
// orderTrade.setTransactionId(1);
// orderTrade.setOrderTime(DateUtils.parseDate(params.get("gmt_payment")));
// orderTrade.setOrderStatus(3);
// orderTrade.setPayStatus(2);
// String totalAmountStr = params.get("total_amount");
// if (totalAmountStr != null && !totalAmountStr.isEmpty()) {
// BigDecimal totalAmount = new BigDecimal(totalAmountStr);
// orderTrade.setTotalAmount(totalAmount.intValue());
// }
// String buyerPayAmountStr = params.get("buyer_pay_amount");
// if (buyerPayAmountStr != null && !buyerPayAmountStr.isEmpty()) {
// BigDecimal buyerPayAmount = new BigDecimal(buyerPayAmountStr);
// orderTrade.setPaymentAmount(buyerPayAmount.intValue());
// }
// orderTradeService.save(orderTrade);
// }
} else {
// 验签失败
System.out.println("验签失败");
}
} else {
// 验签失败
System.out.println("验签失败");
}
return "success";
}
}

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,19 @@
package com.mcwl.web.controller.pay.AliPay;
import io.swagger.annotations.Api;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
*
* @author DaiZibo
* @date 2025/3/28
* @apiNote
*/
@Api(tags = "商品购买记录")
@RequestMapping("/modelRechargeRecord")
@RestController
public class ModelPurchaseRecordController {
}

View File

@ -1,30 +1,33 @@
package com.mcwl.web.controller.pay.AliPay;
import cn.hutool.core.lang.UUID;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.json.JSONUtil;
import com.alipay.easysdk.factory.Factory;
import com.alipay.easysdk.kernel.Config;
import com.alipay.easysdk.payment.common.models.AlipayTradeCancelResponse;
import com.alipay.easysdk.payment.common.models.AlipayTradeCloseResponse;
import com.alipay.easysdk.payment.common.models.AlipayTradeQueryResponse;
import com.mcwl.common.JSONUtils;
import com.mcwl.common.annotation.Anonymous;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.core.controller.BaseController;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.common.core.redis.RedisCache;
import com.mcwl.common.domain.IdsParam;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.pay.domain.OrderTrade;
import com.mcwl.pay.domain.OrderTradeDto;
import com.mcwl.pay.service.AliPayService;
import com.mcwl.pay.service.OrderTradeService;
import lombok.extern.slf4j.Slf4j;
import com.alipay.easysdk.kernel.Config;
import com.mcwl.resource.domain.dto.ProductRes;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.*;
import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;
import java.util.Map;
/**
* @AuthorChenYan
@ -35,10 +38,10 @@ import java.util.*;
* @Date2025/1/3 14:46
*/
@Slf4j
@RestController
@RequestMapping("/web/pay")
@RequestMapping("/order")
@Validated
@Api(tags = "订单模块")
public class OrderTradeController extends BaseController {
@Autowired
@ -48,16 +51,28 @@ public class OrderTradeController extends BaseController {
private OrderTradeService orderTradeService;
@Autowired
private AliPayIntegration aliPayIntegration;
private AliPayService aliPayService;
@Autowired
private RedisCache redisCache;
/**
*
*/
@PostMapping("/buy")
@ApiOperation(value = "购买产品")
public R<Object> buy(@Valid @RequestBody ProductRes productRes) throws Exception {
orderTradeService.productHandler(productRes);
return R.ok();
}
/**
*
*/
@GetMapping("/list")
@ApiOperation(value = "查询订单列表")
public TableDataInfo list(OrderTrade orderTrade) {
startPage();
List<OrderTrade> list = orderTradeService.selectMallProductList(orderTrade);
@ -68,157 +83,81 @@ public class OrderTradeController extends BaseController {
*
*/
@PostMapping("/add")
public AjaxResult add(@RequestBody OrderTrade orderTrade) {
@ApiOperation(value = "新增订单")
public R<Object> add(@RequestBody OrderTrade orderTrade) {
// 获取当前用户
Long userId = SecurityUtils.getUserId();
if (userId == null) {
return AjaxResult.warn("用户未登录");
return R.fail(HttpStatus.SHOW_ERROR_MSG,"用户未登录");
}
orderTrade.setUserId(userId);
orderTrade.setCreateBy(getUsername());
return toAjax(orderTradeService.insertMallProduct(orderTrade));
return R.ok(orderTradeService.insertMallProduct(orderTrade));
}
/**
*
*/
@PostMapping("/upda")
public AjaxResult upda(@RequestBody OrderTrade orderTrade) {
@PostMapping("/update")
@ApiOperation(value = "修改订单")
public R<Object> update(@RequestBody OrderTrade orderTrade) {
// 获取当前用户
Long userId = SecurityUtils.getUserId();
if (userId == null) {
return AjaxResult.warn("用户未登录");
return R.fail(HttpStatus.SHOW_ERROR_MSG,"用户未登录");
}
orderTrade.setUserId(userId);
orderTrade.setUpdateBy(getUsername());
return toAjax(orderTradeService.updateMallProduct(orderTrade));
orderTradeService.updateMallProduct(orderTrade);
return R.ok();
}
/**
*
*/
@PostMapping
public AjaxResult remove(@RequestBody IdsParam ids) {
@ApiOperation(value = "删除订单")
public R<Object> remove(@RequestBody IdsParam ids) {
orderTradeService.deleteMallProductByIds(ids);
return success();
return R.ok();
}
/**
*
*
* @param orderTradeDto
* @param response
* @throws Exception
*
*/
@Anonymous
@PostMapping("/doPay")
public void doPay(@RequestBody OrderTradeDto orderTradeDto, HttpServletResponse response) throws Exception {
String qrUrl = null;
String type = orderTradeDto.getType();
if ("member".equalsIgnoreCase(type)) {
qrUrl = aliPayIntegration.memberPay(orderTradeDto);
} else if ("points".equalsIgnoreCase(type)) {
qrUrl = aliPayIntegration.pointsPay(orderTradeDto.getPaymentAmount());
}
QrCodeUtil.generate(qrUrl, 300, 300, "png", response.getOutputStream());
}
@GetMapping("/queryTradeStatus")
public Object queryTradeStatus(@RequestParam String outTradeNo) throws Exception {
Factory.setOptions(config);
AlipayTradeQueryResponse query = Factory.Payment.Common().query(outTradeNo);
Map<String, Object> map = JSONUtils.jsonToMap(query.getHttpBody());
@ApiOperation(value = "查询交易状态")
public R<Object> queryTradeStatus(@Valid @NotBlank(message = "订单号不能为空") String outTradeNo) throws Exception {
return aliPayService.queryTradeStatus(outTradeNo);
// 返回交易结果, 是否交易成功需要根据该对象中的 trade_status 来确定
// trade_status 的枚举值如下, 请见 https://opendocs.alipay.com/apis/api_1/alipay.trade.query
// WAIT_BUYER_PAY交易创建等待买家付款
// TRADE_CLOSED未付款交易超时关闭或支付完成后全额退款
// TRADE_SUCCESS交易支付成功
// TRADE_FINISHED交易结束不可退款
// 当 trade_status 等于 TRADE_SUCCESS 或 TRADE_FINISHED 时, 表示支付成功
return map.get("alipay_trade_query_response");
}
/**
*
*
* @param request
* @return
* @throws Exception
*
*/
@Anonymous
@PostMapping("/notify") // 注意这里必须是POST接口
public String payNotify(HttpServletRequest request) throws Exception {
log.info("已经进入回调接口");
if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
System.out.println("=========支付宝异步回调========");
Map<String, String> params = new HashMap<>();
Map<String, String[]> requestParams = request.getParameterMap();
for (String name : requestParams.keySet()) {
params.put(name, request.getParameter(name));
// System.out.println(name + " = " + request.getParameter(name));
}
// 支付宝验签
if (Factory.Payment.Common().verifyNotify(params)) {
// System.out.println("交易名称: " + params.get("subject"));
// System.out.println("交易状态: " + params.get("trade_status"));
// System.out.println("支付宝交易凭证号: " + params.get("trade_no"));
// System.out.println("商户订单号: " + params.get("out_trade_no"));
// System.out.println("交易金额: " + params.get("total_amount"));
// System.out.println("买家在支付宝唯一id: " + params.get("buyer_id"));
// System.out.println("买家付款时间: " + params.get("gmt_payment"));
// System.out.println("买家付款金额: " + params.get("buyer_pay_amount"));
// 验签通过
String code = params.get("out_trade_no"); // 商户订单号
// 获取订单后缀
String suffix = code.substring(code.lastIndexOf("_") + 1);
String orderTradeJson = redisCache.getCacheObject(code);
OrderTrade orderTrade = JSONUtil.toBean(orderTradeJson, OrderTrade.class);
orderTradeService.orderHandler(orderTrade, suffix, params);
// 更新订单状态
// if (!StringUtils.isEmpty(orderTradeJson)) {
// OrderTrade orderTrade = JSONUtil.toBean(orderTradeJson, OrderTrade.class);
// // 支付宝交易凭证号
// orderTrade.setPaymentMethod(params.get("trade_no"));
// orderTrade.setTransactionId(1);
// orderTrade.setOrderTime(DateUtils.parseDate(params.get("gmt_payment")));
// orderTrade.setOrderStatus(3);
// orderTrade.setPayStatus(2);
// String totalAmountStr = params.get("total_amount");
// if (totalAmountStr != null && !totalAmountStr.isEmpty()) {
// BigDecimal totalAmount = new BigDecimal(totalAmountStr);
// orderTrade.setTotalAmount(totalAmount.intValue());
// @GetMapping("/cancelTrade")
// public AjaxResult cancelTrade(String outTradeNo) throws Exception {
// // 关闭交易
// AlipayTradeCancelResponse cancel = Factory.Payment.Common().cancel(outTradeNo);
// if (cancel.getCode().equals("10000")) {
// return AjaxResult.success("关闭成功");
// }
// String buyerPayAmountStr = params.get("buyer_pay_amount");
// if (buyerPayAmountStr != null && !buyerPayAmountStr.isEmpty()) {
// BigDecimal buyerPayAmount = new BigDecimal(buyerPayAmountStr);
// orderTrade.setPaymentAmount(buyerPayAmount.intValue());
// return AjaxResult.error("关闭失败");
// }
// orderTradeService.save(orderTrade);
// }
} else {
// 验签失败
System.out.println("验签失败");
}
} else {
// 验签失败
System.out.println("验签失败");
}
return "success";
}
/**
*
*/
// @GetMapping("/closeTrade")
// public AjaxResult closeTrade(String outTradeNo) throws Exception {
// // 关闭交易
// AlipayTradeCloseResponse close = Factory.Payment.Common().close(outTradeNo);
// if (close.getCode().equals("10000")) {
// return AjaxResult.success("关闭成功");
// }
// return AjaxResult.error("关闭失败");
// }
}

View File

@ -0,0 +1,175 @@
package com.mcwl.web.controller.personalCenter;
import cn.hutool.core.bean.BeanUtil;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.domain.entity.SysUser;
import com.mcwl.common.core.page.PageDomain;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.memberCenter.domain.Member;
import com.mcwl.memberCenter.domain.MemberConsume;
import com.mcwl.memberCenter.domain.vo.MemberConsumeVO;
import com.mcwl.memberCenter.domain.vo.RechargeRecordVO;
import com.mcwl.memberCenter.service.MemberService;
import com.mcwl.myInvitation.service.CommissionService;
import com.mcwl.myInvitation.service.ConsumeService;
import com.mcwl.pay.service.OrderTradeService;
import com.mcwl.resource.domain.dto.ModelImagePageRes;
import com.mcwl.resource.service.*;
import com.mcwl.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@Api(tags = "个人中心")
@RestController
@RequestMapping("personalCenter")
@RequiredArgsConstructor
public class PersonalCenterController {
private final ModelService modelService;
private final ModelLikeService modelLikeService;
private final ModelImageService modelImageService;
private final WorkFlowService workFlowService;
private final WorkFlowLikeService workFlowLikeService;
private final ModelImageLikeService modelImageLikeService;
private final ISysUserService sysUserService;
private final MemberService memberService;
private final OrderTradeService orderTradeService;
private final ConsumeService consumeService;
private final CommissionService commissionService;
/**
* -
*/
@ApiOperation(value = "我的发布-模型列表")
@PostMapping("/selectByUserIdModel")
public TableDataInfo selectByUserIdModel(@RequestBody ModelImagePageRes imagePageRes) {
return modelService.listByPage(imagePageRes);
}
/**
* -
*/
@ApiOperation(value = "我的发布-工作流列表")
@PostMapping("/selectByUserIdWorkFlow")
public TableDataInfo selectByUserIdWorkFlow(@RequestBody ModelImagePageRes imagePageRes) {
return workFlowService.listByPage(imagePageRes);
}
/**
* -
*/
@ApiOperation(value = "我的发布-图片列表")
@PostMapping("/selectByUserIdImage")
public TableDataInfo selectByUserIdImage(@RequestBody ModelImagePageRes imagePageRes) {
return modelImageService.listByPage(imagePageRes);
}
/**
* -
*/
@ApiOperation(value = "我的点赞-模型列表")
@PostMapping("/likeModel")
public TableDataInfo likeModel(@Valid @RequestBody PageDomain pageDomain) {
return modelLikeService.listByPage(pageDomain);
}
/**
* -
*/
@ApiOperation(value = "我的点赞-工作流列表")
@PostMapping("/likeWorkFlow")
public TableDataInfo likeWorkFlow(@Valid @RequestBody PageDomain pageDomain) {
return workFlowLikeService.listByPage(pageDomain);
}
/**
* -
*/
@ApiOperation(value = "我的点赞-图片列表")
@PostMapping("/likeImage")
public TableDataInfo likeImage(@Valid @RequestBody PageDomain pageDomain) {
return modelImageLikeService.listByPage(pageDomain);
}
/**
*
*/
@ApiOperation(value = "获取积分和金币")
@PostMapping("/getPointAndWallet")
public R<Map<String, Double>> getPointAndWallet() {
Long userId = SecurityUtils.getUserId();
Map<String, Double> map = new HashMap<>();
SysUser sysUser = sysUserService.selectUserById(userId);
Member member = memberService.getUseUserMemberByUserId(userId);
double points = sysUser.getFreePoints();
if (Objects.nonNull(member)) {
points = points + member.getPoints();
}
map.put("point", points);
map.put("wallet", sysUser.getWallet());
return R.ok(map);
}
/**
*
*/
@ApiOperation(value = "获取金币消费记录")
@PostMapping("/getWalletRecord")
public TableDataInfo getWalletRecord(@Valid @RequestBody PageDomain pageDomain) {
return consumeService.getWalletRecord(pageDomain);
}
/**
*
*/
@ApiOperation(value = "获取金币收入记录")
@PostMapping("/getWalletIncomeRecord")
public TableDataInfo getWalletIncomeRecord(@Valid @RequestBody PageDomain pageDomain) {
return commissionService.getWalletIncomeRecord(pageDomain);
}
/**
*
*/
@ApiOperation(value = "获取金币充值记录")
@PostMapping("/getRecord")
public TableDataInfo getRecord(@Valid @RequestBody PageDomain pageDomain) {
return orderTradeService.getRecord(pageDomain, "金币充值");
}
}

View File

@ -0,0 +1,62 @@
package com.mcwl.web.controller.platformData;
import com.mcwl.common.core.domain.R;
import com.mcwl.pay.domain.vo.IncomeVo;
import com.mcwl.pay.domain.vo.TrendVo;
import com.mcwl.pay.service.OrderTradeService;
import com.mcwl.system.domain.vo.UserDataVo;
import com.mcwl.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Api(tags = "平台数据统计")
@RestController
@RequestMapping("platformData")
@RequiredArgsConstructor
public class PlatformData {
private final OrderTradeService orderTradeService;
private final ISysUserService sysUserService;
/**
*
*/
@ApiOperation(value = "平台收益")
@GetMapping("getIncome")
public R<IncomeVo> getIncome() {
return R.ok(orderTradeService.getIncome());
}
/**
*
*/
@ApiOperation(value = "收益趋势")
@GetMapping("getTrend")
public R<TrendVo> getTrend() {
return R.ok(orderTradeService.getTrend());
}
/**
*
*/
@ApiOperation(value = "用户数据")
@GetMapping("getUserData")
public R<UserDataVo> getUserData() {
return R.ok(sysUserService.getUserData());
}
}

View File

@ -7,7 +7,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
/**
* @AuthorChenYan
* @ProjectMcWl
* @Packagecom.mcwl.common.config

View File

@ -31,4 +31,45 @@ public class CodeMQConfig {
return new Queue(QueueConstants.MEMBER_BILLING_QUEUE, true);
}
@Bean
public Queue modelLikeQueue() {
return new Queue(QueueConstants.MODEL_LIKE_QUEUE, true);
}
@Bean
public Queue modelCommentLikeQueue() {
return new Queue(QueueConstants.MODEL_COMMENT_LIKE_QUEUE, true);
}
@Bean
public Queue imageLikeQueue() {
return new Queue(QueueConstants.IMAGE_LIKE_QUEUE, true);
}
@Bean
public Queue imageCommentLikeQueue() {
return new Queue(QueueConstants.IMAGE_COMMENT_LIKE_QUEUE, true);
}
@Bean
public Queue workFlowLikeQueue() {
return new Queue(QueueConstants.WORK_FLOW_LIKE_QUEUE, true);
}
@Bean
public Queue workFlowCommentLikeQueue() {
return new Queue(QueueConstants.WORK_FLOW_COMMENT_LIKE_QUEUE, true);
}
@Bean
public Queue sysMsgQueue() {
return new Queue(QueueConstants.SYS_MSG_QUEUE, true);
}
}

View File

@ -1,24 +1,74 @@
package com.mcwl.web.controller.rabbitmq.consumer;
import com.alibaba.fastjson.JSON;
import com.mcwl.common.constant.QueueConstants;
import lombok.extern.slf4j.Slf4j;
import com.mcwl.common.constant.RedisConstants;
import com.mcwl.common.core.domain.model.PhoneLoginBody;
import com.mcwl.common.core.redis.RedisCache;
import com.mcwl.common.utils.uuid.TelSmsUtils;
import com.rabbitmq.client.Channel;
import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeUnit;
/**
*
*
* @author DaiZibo
* @date 2024/12/30
* @apiNote
*/
@Slf4j
@Component
public class CodeConsumer {
@RabbitListener(queues = QueueConstants.CODE_QUEUE)
public void code(String msg) {
@Autowired
private RedisCache redisCache;
@Autowired
private RedisTemplate<String, String> redisTemplate;
@RabbitListener(queues = QueueConstants.CODE_QUEUE)
public void code(Message message, Channel channel, String msg) {
if (msg == "") {
return;
}
String messageId = message.getMessageProperties().getMessageId();
try {
Long add = redisTemplate.opsForSet().add(RedisConstants.CODE_UUID + messageId, "1");
redisTemplate.expire(RedisConstants.CODE_UUID + messageId, 2, TimeUnit.MINUTES);
if (add > 0) {
PhoneLoginBody phoneLoginBody = JSON.parseObject(msg, PhoneLoginBody.class);
//发送短信服务
// 构建 sendDataMap
Map<String, String> sendDataMap = new HashMap<>();
sendDataMap.put("code", phoneLoginBody.getCode());
String s1 = TelSmsUtils.sendSms(phoneLoginBody.getPhone(), "SMS_478520014", sendDataMap);
//手动确认
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
}else {
}
} catch (IOException e) {
//删除标记
redisTemplate.delete(RedisConstants.CODE_UUID+messageId);
throw new RuntimeException(e);
}
log.info("消费者获取到的数据:{}", msg);
}
}

View File

@ -0,0 +1,58 @@
package com.mcwl.web.controller.resource;
import com.mcwl.common.core.domain.R;
import com.mcwl.resource.domain.Collect;
import com.mcwl.resource.domain.vo.PageVo;
import com.mcwl.resource.service.impl.CollectServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
*
* @author DaiZibo
* @date 2025/3/5
* @apiNote
*/
@Slf4j
@Api(tags = "收藏")
@RestController
@RequestMapping("/collect")
public class CollectController {
@Autowired
private CollectServiceImpl collectService;
/**
*
* @param collect
* @return
*/
@ApiOperation(value = "添加收藏")
@PostMapping("/addCollect")
public R addCollect(@RequestBody Collect collect){
return collectService.addCollect(collect);
}
/**
*
* @param pageVo
* @return
*/
@ApiOperation(value = "查询收藏列表")
@PostMapping("/selectCollect")
public R selectCollect(@RequestBody PageVo pageVo){
return collectService.selectCollect(pageVo);
}
}

View File

@ -0,0 +1,88 @@
package com.mcwl.web.controller.resource;
import com.mcwl.common.core.domain.R;
import com.mcwl.resource.domain.DownloadRecord;
import com.mcwl.resource.domain.request.RequestDownload;
import com.mcwl.resource.domain.vo.PageVo;
import com.mcwl.resource.service.impl.DownloadRecordServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
*
* @author DaiZibo
* @date 2025/3/6
* @apiNote
*/
@Slf4j
@Api(tags = "文件下载记录")
@RestController
@RequestMapping("/downloadRecord")
public class DownloadRecordController {
@Autowired
private DownloadRecordServiceImpl downloadRecordService;
/**
*
* @param downloadRecord
* @return
*/
@ApiOperation(value = "新增下载记录")
@PostMapping("/addDownloadRecord")
public R addDownloadRecord(@RequestBody DownloadRecord downloadRecord){
return downloadRecordService.addDownloadRecord(downloadRecord);
}
/**
*
* @param pageVo
* @return
*/
@ApiOperation(value = "下载记录")
@PostMapping("/selectDownloadRecord")
public R selectDownloadRecord(@RequestBody PageVo pageVo){
return downloadRecordService.selectDownloadRecord(pageVo);
}
/**
*
* @return
*/
@ApiOperation(value = "修改下载状态")
@PostMapping("/updateDownloadRecord")
public R updateDownloadRecord(@RequestBody DownloadRecord downloadRecord){
return downloadRecordService.updateDownloadRecord(downloadRecord);
}
/**
*
* @param ids
* @return
*/
@ApiOperation(value = "批量删除下载记录")
@GetMapping("/deleteDownloadRecord")
public R deleteDownloadRecord(@RequestParam String ids){
return downloadRecordService.deleteDownloadRecord(ids);
}
@ApiOperation(value = "根据文件名查询详情")
@PostMapping("/selectFileByName")
public R selectByFileName(@RequestBody RequestDownload requestDownload){
return downloadRecordService.selectByFileName(requestDownload);
}
}

View File

@ -0,0 +1,295 @@
package com.mcwl.web.controller.resource;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.utils.obs.ObsUtils;
import com.mcwl.resource.domain.request.RequestFile;
import com.mcwl.resource.domain.vo.FileVo;
import com.mcwl.resource.service.impl.FileServiceImpl;
import com.mcwl.web.controller.common.OssUtil;
import com.obs.services.ObsClient;
import com.obs.services.model.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* /
*
* @author DaiZibo
* @date 2025/2/10
* @apiNote
*/
@Slf4j
@Api(tags = "上传文件")
@RestController
@RequestMapping("/file")
public class FileController {
@Autowired
private FileServiceImpl fileService;
@Autowired
private ObsUtils obsUtils;
@Autowired
private ObsClient obsClient;
@Value("${huawei.obs.bucketName}")
private String bucketName;
/***
*
*
* @param file
* @return
*/
@ApiOperation("上传图片")
@PostMapping("/imgUpload")
public AjaxResult imgUpload(@RequestParam MultipartFile file) {
String s = OssUtil.uploadMultipartFile(file);
String fileName = file.getOriginalFilename();
Map<String, String> map = new HashMap<>();
map.put("fileName", fileName);
map.put("url", s);
return AjaxResult.success(map);
}
/***
*
*
* @param file
* @return
*/
@ApiOperation("上传文件")
@PostMapping("/fileUpload")
public AjaxResult fileUpload(@RequestParam MultipartFile file) {
log.info("开始上传文件...");
Map<String, String> map = obsUtils.uploadFile(file);
return AjaxResult.success(map);
}
/***
*
* zip
* @param file
* @return
*/
@ApiOperation(value = "zip")
@PostMapping("/zipUrlFile")
public AjaxResult zipUrlFile(@RequestParam MultipartFile file) {
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success(s);
}
/***
*
* zip
* @param file
* @return
*/
@ApiOperation(value = "zip")
@PostMapping("/zipUrl")
public AjaxResult zipUrl(@RequestParam MultipartFile file) {
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success(s);
}
/**
*
* @return
*/
@PostMapping("/selectFileName")
@ApiOperation(value = "根据文件名查找是否存在并返回秘钥")
public AjaxResult selectFileName(@RequestBody FileVo fileVo){
return fileService.selectFileName(fileVo.getName(), fileVo.getType());
}
@PostMapping("/selectFile")
@ApiOperation(value = "根据文件名查找是否存在")
public AjaxResult selectFile(@RequestBody FileVo fileVo){
return fileService.selectFile(fileVo.getName(), fileVo.getType());
}
@GetMapping("/download")
@ApiOperation(value = "读取文件内容")
public AjaxResult download(@RequestParam String name) throws IOException {
obsUtils.download(name);
return AjaxResult.success();
}
/**
*
*/
@ApiOperation(value = "启动上传任务")
@GetMapping("/getUploadId")
public R getUploadId(@RequestParam("objectKey")String objectKey) {
InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectKey);
ObjectMetadata metadata = new ObjectMetadata();
metadata.addUserMetadata("property", "property-value");
metadata.setContentType("text/plain");
request.setMetadata(metadata);
InitiateMultipartUploadResult result = obsClient.initiateMultipartUpload(request);
String uploadId = result.getUploadId();
return R.ok(uploadId);
}
/**
*
*/
@ApiOperation(value = "分片上传")
@PostMapping("/chunk")
public R splitFileUpload(
@RequestParam("objectKey")String objectKey,
@RequestParam("file") MultipartFile file,
@RequestParam("chunk") int chunk,
@RequestParam("uploadId") String uploadId) throws Exception {
long startTime = System.currentTimeMillis(); // 记录开始时间
try {
File file1 = multipartFileToFile(file);
Map<String, String> map = uploadChunk(uploadId, file1, chunk, objectKey);
log.info("上传的文件大小: {}", file.getSize());
return R.ok(map);
} finally {
long duration = System.currentTimeMillis() - startTime; // 计算耗时
log.info("方法 splitFileUpload 执行耗时: {} ms", duration);
}
}
/**
*
*/
@ApiOperation(value = "合并上传")
@PostMapping("/completeUpload")
public R completeUpload(
@RequestParam("objectKey")String objectKey,
@RequestParam("uploadId") String uploadId,
@RequestBody List<Map<String,String>> mapList
) {
List<PartEtag> partEtags = new ArrayList<>();
for(Map<String,String> map: mapList ){
PartEtag part1 = new PartEtag();
part1.setPartNumber(Integer.valueOf(map.get("partNumber")));
part1.seteTag(map.get("etag"));
partEtags.add(part1);
}
CompleteMultipartUploadRequest request = new CompleteMultipartUploadRequest(
bucketName, objectKey, uploadId, partEtags);
CompleteMultipartUploadResult result = obsClient.completeMultipartUpload(request);
return R.ok(result);
}
/**
*
*/
@ApiOperation(value = "取消任务上传")
@GetMapping("/cancelUpload")
public R cancelUpload(
@RequestParam("objectKey")String objectKey,
@RequestParam("uploadId") String uploadId
){
AbortMultipartUploadRequest request = new AbortMultipartUploadRequest(bucketName, objectKey, uploadId);
obsClient.abortMultipartUpload(request);
return R.ok();
}
public Map<String,String> uploadChunk(String uploadId, File file,int chunk, String objectKey){
// Endpoint以北京四为例其他地区请按实际情况填写。
Map<String,String> map = new HashMap<>();
UploadPartRequest request = new UploadPartRequest(bucketName, objectKey);
request.setUploadId(uploadId);
request.setPartNumber(chunk);
request.setFile(file);
request.setPartSize(5 * 1024 * 1024L);
UploadPartResult result = obsClient.uploadPart(request);
map.put("etag",result.getEtag());
map.put("partNumber",String.valueOf(result.getPartNumber()));
log.info("分段上传完成:{}",chunk);
return map;
}
/**
* MultipartFile File
*
* @param file
* @throws Exception
*/
public static File multipartFileToFile(MultipartFile file) throws Exception {
File toFile = null;
if (file.equals("") || file.getSize() <= 0) {
file = null;
} else {
InputStream ins = null;
ins = file.getInputStream();
toFile = new File(file.getOriginalFilename());
inputStreamToFile(ins, toFile);
ins.close();
}
return toFile;
}
//获取流文件
private static void inputStreamToFile(InputStream ins, File file) {
try {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @return
*/
@ApiOperation(value = "校验文件hash是否重复")
@GetMapping("/selectHash")
public R selectHash(String hashCode,Integer type){
return fileService.selectHash(hashCode,type);
}
@PostMapping("/updateFileData")
public R updateFileData(@RequestBody RequestFile requestFile){
log.info("加密后获取到的数据:{}",requestFile);
return fileService.updateFileData(requestFile);
}
}

View File

@ -0,0 +1,105 @@
package com.mcwl.web.controller.resource;
import com.mcwl.web.controller.common.OssUtil;
import org.springframework.mock.web.MockMultipartFile;
import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.CipherOutputStream;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.AlgorithmParameters;
import java.util.Base64;
/**
*
* @author DaiZibo
* @date 2025/1/25
* @apiNote
*/
public class FileEncryptDecryptUtil {
private static final String ALGORITHM = "AES/CBC/PKCS5Padding";
private static final String TRANSFORMATION = "AES";
private static final String KEY = "iamkeyeeddzasdfs"; // 实际应用中应使用更安全的密钥生成方式
private static byte[] SAVED_IV; // 静态变量存储IV确保解密时可访问
public static void main(String[] args) throws Exception {
// 示例:加密文件
encryptFile("D:\\ASE\\encryption\\测试文件1.txt", "D:\\ASE\\decode\\加密测试文件1.txt");
//// 解密文件
decryptFile("C:\\Users\\Dzb\\Desktop\\a.enc", "D:\\\\ASE\\\\encryption\\\\解密测试文件2.txt");
uploadEncryptedFileToOSS("D:\\ASE\\encryption\\测试文件1.txt", "encrypted-test-file1.enc");
}
public static void encryptFile(String sourcePath, String encryptedPath) throws Exception {
Cipher cipher = initCipher(Cipher.ENCRYPT_MODE);
try (FileInputStream fis = new FileInputStream(sourcePath);
FileOutputStream fos = new FileOutputStream(encryptedPath);
CipherOutputStream cos = new CipherOutputStream(fos, cipher)) {
byte[] buffer = new byte[1024];
int read;
while ((read = fis.read(buffer)) != -1) {
cos.write(buffer, 0, read);
}
}
System.out.println("加密完成");
}
public static void decryptFile(String encryptedPath, String decryptedPath) throws Exception {
Cipher cipher = initCipher(Cipher.DECRYPT_MODE);
try (FileInputStream fis = new FileInputStream(encryptedPath);
CipherInputStream cis = new CipherInputStream(fis, cipher);
FileOutputStream fos = new FileOutputStream(decryptedPath)) {
byte[] buffer = new byte[1024];
int read;
while ((read = cis.read(buffer)) != -1) {
fos.write(buffer, 0, read);
}
}
System.out.println("解密完成");
}
private static Cipher initCipher(int mode) throws Exception {
Cipher cipher = Cipher.getInstance(ALGORITHM);
SecretKey secretKey = new SecretKeySpec(KEY.getBytes(), TRANSFORMATION);
if (mode == Cipher.ENCRYPT_MODE && SAVED_IV == null) {
cipher.init(mode, secretKey);
AlgorithmParameters params = cipher.getParameters();
SAVED_IV = params.getParameterSpec(IvParameterSpec.class).getIV();
System.out.println("Generated IV: " + Base64.getEncoder().encodeToString(SAVED_IV));
} else {
cipher.init(mode, secretKey, new IvParameterSpec(SAVED_IV));
}
return cipher;
}
public static void uploadEncryptedFileToOSS(String sourcePath, String ossFileName) throws Exception {
Cipher cipher = initCipher(Cipher.ENCRYPT_MODE);
// 使用ByteArrayOutputStream代替FileOutputStream
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try (FileInputStream fis = new FileInputStream(sourcePath);
CipherInputStream cis = new CipherInputStream(fis, cipher)) {
byte[] buffer = new byte[1024];
int read;
while ((read = cis.read(buffer)) != -1) {
bos.write(buffer, 0, read);
}
}
System.out.println("加密完成");
// 将加密后的字节数组转换为MultipartFile
MockMultipartFile multipartFile = new MockMultipartFile(ossFileName, ossFileName, "application/octet-stream", bos.toByteArray());
// 调用上传方法
String s = OssUtil.uploadMultipartFile(multipartFile);
System.out.println("文件已上传至: " + s);
}
}

View File

@ -1,23 +1,42 @@
package com.mcwl.web.controller.resource;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.github.pagehelper.PageInfo;
import com.mcwl.common.core.controller.BaseController;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.myInvitation.domain.Consume;
import com.mcwl.myInvitation.service.ConsumeService;
import com.mcwl.pay.domain.ModelPurchaseRecord;
import com.mcwl.pay.mapper.ModelPurchaseRecordMapper;
import com.mcwl.resource.domain.ModelProduct;
import com.mcwl.resource.domain.vo.MallProductVo;
import com.mcwl.resource.domain.ModelVersion;
import com.mcwl.resource.domain.dto.ModelImagePageRes;
import com.mcwl.resource.domain.request.RequestModel;
import com.mcwl.resource.domain.response.ResponseModelProduct;
import com.mcwl.resource.domain.vo.PageVo;
import com.mcwl.resource.mapper.ModelVersionMapper;
import com.mcwl.resource.service.ModelService;
import com.mcwl.web.controller.common.OssUtil;
import com.mcwl.system.service.impl.SysUserServiceImpl;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.Set;
import java.util.stream.Collectors;
/**
*
*
*
* @AuthorChenYan
* @ProjectMcWl
* @Packagecom.mcwl.web.controller.resource
@ -25,120 +44,200 @@ import java.util.List;
* @Description
* @Date2024/12/31 10:48
*/
@Api(tags = "模型")
@RestController
@RequestMapping("/model")
public class MallProductController extends BaseController {
@Autowired
private ModelPurchaseRecordMapper modelPurchaseRecordMapper;
@Autowired
private ModelService modelService;
@Autowired
private ModelVersionMapper modelVersionMapper;
/***
*
*
* @param file
* @return
*/
@PostMapping("/file")
public AjaxResult Malifile(@RequestParam MultipartFile file){
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success(s);
}
/***
*
* zip
* @param file
* @return
*/
@PostMapping("/zipUrlFile")
public AjaxResult zipUrlFile(@RequestParam MultipartFile file){
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success(s);
}
/***
*
* zip
* @param file
* @return
*/
@PostMapping("/zipUrl")
public AjaxResult zipUrl(@RequestParam MultipartFile file){
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success(s);
}
@Autowired
private SysUserServiceImpl sysUserService;
@Autowired
private ConsumeService consumeService;
/**
*
*
*/
@ApiOperation(value = "模型列表")
@PostMapping("/list")
public TableDataInfo list(@RequestBody ModelProduct mallProduct)
{
startPage();
List<ModelProduct> list = modelService.selectMallProductList(mallProduct);
return getDataTable(list);
public TableDataInfo list(@RequestBody ModelImagePageRes imagePageRes) {
return modelService.listByPage(imagePageRes);
}
@ApiOperation(value = "模型详情")
@GetMapping("finbyid")
public AjaxResult finbyid(@Valid @NotNull(message = "模型id不能为空") @RequestParam Long id) {
RequestModel requestModel = new RequestModel();
@PostMapping("finbyid")
public AjaxResult finbyid(@RequestBody ModelProduct modelVersion)
{
ModelProduct modelVersion1 = modelService.getById(modelVersion.getId());
return AjaxResult.success(modelVersion1);
ModelProduct modelVersion1 = modelService.getById(id);
Set<Long> productIdSet = consumeService.lambdaQuery()
.eq(Consume::getUserId, SecurityUtils.getUserId())
.eq(Consume::getType, 0)
.list()
.parallelStream()
.map(Consume::getProductId)
.collect(Collectors.toSet());
Optional.ofNullable(modelVersion1)
.filter(m -> productIdSet.contains(m.getId()))
.ifPresent(m -> m.setIsBuy(1));
LambdaQueryWrapper<ModelVersion> modelVersionLambdaQueryWrapper = new LambdaQueryWrapper<>();
modelVersionLambdaQueryWrapper.eq(ModelVersion::getModelId, id);
modelVersionLambdaQueryWrapper.eq(ModelVersion::getDelFlag, "0");
List<ModelVersion> modelVersions = modelVersionMapper.selectList(modelVersionLambdaQueryWrapper);
requestModel.setModelProduct(modelVersion1);
requestModel.setModelVersionList(modelVersions);
return AjaxResult.success(requestModel);
}
@PostMapping("insert")
public AjaxResult insert(@RequestBody ModelProduct modelVersion)
{
@ApiOperation(value = "添加模型")
@PostMapping("/insert")
public R<String> addupdateModel(@RequestBody RequestModel requestModel) {
ModelProduct modelProduct = requestModel.getModelProduct();
Long userId = SecurityUtils.getUserId();
modelVersion.setUserId(userId);
modelVersion.setCreateBy(getUsername());
modelService.save(modelVersion);
return AjaxResult.success();
modelProduct.setUserId(userId);
return modelService.addModel(requestModel);
}
@PostMapping("update")
public AjaxResult update(@RequestBody ModelProduct modelVersion)
{
@ApiOperation(value = "修改模型")
@PostMapping("/update")
public AjaxResult updateModel(@RequestBody RequestModel requestModel) {
// for (ModelVersion modelVersion : requestModel.getModelVersionList()) {
//
// //校验名字
// ModelVersion modelVersion1 = modelVersionMapper.selectByFileName(modelVersion.getFileName());
// if (modelVersion1 != null) {
//
// return AjaxResult.error(HttpStatus.SHOW_ERROR_MSG,"文件名字重复");
// }
// //校验hash
// ModelVersion modelVersion2 = modelVersionMapper.selectByHash(modelVersion.getFileHash());
// if (modelVersion2 != null){
//
// return AjaxResult.error(HttpStatus.SHOW_ERROR_MSG,"文件内容重复");
// }
// }
ModelProduct modelProduct = requestModel.getModelProduct();
Long userId = SecurityUtils.getUserId();
modelVersion.setUserId(userId);
modelVersion.setUpdateBy(getUsername());
modelService.updateById(modelVersion);
return AjaxResult.success();
modelProduct.setUserId(userId);
modelService.updaModel(requestModel);
return AjaxResult.success("修改成功");
}
@PostMapping("delete")
public AjaxResult delete(@RequestBody ModelProduct modelVersion)
{
modelService.removeById(modelVersion.getId());
@ApiOperation(value = "删除模型")
@GetMapping("delete")
public AjaxResult delete(@Valid @NotNull(message = "模型id不能为空") @RequestParam Long id) {
modelService.removeById(id);
return AjaxResult.success();
}
/**
*
*
*
* @param id
* @return
*/
@PostMapping("/selectByUserId")
public AjaxResult selectByUserId(@RequestBody MallProductVo mallProductVo){
@ApiOperation(value = "查询模型详情")
@GetMapping("/selectModelById")
public R<ModelProduct> selectModelById(@Valid @NotNull(message = "模型id不能为空") @RequestParam Long id) {
Page<ModelProduct> mallProductList = modelService.selectByUserId(mallProductVo);
return AjaxResult.success(mallProductList);
R<ModelProduct> modelProductR = modelService.selectModelById(id);
ModelProduct data = modelProductR.getData();
if (Objects.nonNull(data)) {
LambdaQueryWrapper<ModelPurchaseRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ModelPurchaseRecord::getUserId, SecurityUtils.getUserId())
.eq(ModelPurchaseRecord::getProductId, id)
.eq(ModelPurchaseRecord::getProductType, 0);
ModelPurchaseRecord modelPurchaseRecord = modelPurchaseRecordMapper.selectOne(wrapper);
data.setIsBuy(1);
if (Objects.isNull(modelPurchaseRecord)) {
data.setIsBuy(0);
}
modelProductR.setData(data);
}
return modelProductR;
}
/**
*
*
* @param id
* @param isTop
* @return
*/
@ApiOperation(value = "设置模型置顶状态")
@GetMapping("/{id}/top")
public AjaxResult setModelTop(@PathVariable Long id, @RequestParam boolean isTop) {
modelService.setModelTop(id, isTop);
return AjaxResult.success();
}
/**
*
*
* @return
*/
@ApiOperation(value = "获取置顶的模型列表")
@GetMapping
public R<List<ModelProduct>> fetchModelsSortedByTopStatus() {
List<ModelProduct> models = modelService.fetchModelsSortedByTopStatus();
return R.ok(models);
}
/**
* 广
*/
@ApiOperation(value = "模型广场列表")
@PostMapping("/modelSquare")
public R modelSquare(@RequestBody PageVo pageVo) {
PageInfo<ResponseModelProduct> modelProductPage = modelService.modelSquare(pageVo);
return R.ok(modelProductPage);
}
/**
*
*
* @param name
* @return
*/
@ApiOperation(value = "校验模型名字是否唯一")
@GetMapping("/selectModelByName")
public R selectModelByName(@RequestParam String name) {
return modelService.selectModelByName(name);
}
@ApiOperation(value = "个人中心更改背景")
@GetMapping("/updateBackgroundImg")
public R updateBackgroundImg(@RequestParam Long id, String path) {
sysUserService.updateBackgroundImg(id, path);
return R.ok();
}
}

View File

@ -1,63 +0,0 @@
package com.mcwl.web.controller.resource;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mcwl.common.annotation.RepeatSubmit;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.resource.domain.ModelProduct;
import com.mcwl.resource.domain.vo.MallProductVo;
import com.mcwl.resource.service.MallProductLikeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
*
* @author DaiZibo
* @date 2025/1/2
* @apiNote
*/
@RequestMapping("/like")
@RestController
public class MallProductLikeController {
@Autowired
private MallProductLikeService mallProductLikeService;
/**
*
* @param mallProductVo
* @return
*/
@PostMapping("/selectByUserLike")
public AjaxResult selectByUserLike(@RequestBody MallProductVo mallProductVo){
Page<ModelProduct> mallProductPage = mallProductLikeService.selectByUserLike(mallProductVo);
return AjaxResult.success(mallProductPage);
}
/**
* /
* @param productId
* @return
*/
@RepeatSubmit
@GetMapping("/addLike")
public AjaxResult addLike(@RequestParam Long productId){
return mallProductLikeService.addLike(productId);
}
/**
*
* @param productId
* @return
*/
@GetMapping("/selectLike")
public AjaxResult selectLike(@RequestParam Long productId){
Boolean aBoolean = mallProductLikeService.selectLike(productId);
return AjaxResult.success(aBoolean);
}
}

View File

@ -1,14 +1,26 @@
package com.mcwl.web.controller.resource;
import com.mcwl.common.annotation.RepeatSubmit;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.resource.domain.ModelComment;
import com.mcwl.common.core.domain.R;
import com.mcwl.resource.domain.dto.ModelCommentRes;
import com.mcwl.resource.domain.vo.ModelCommentVo;
import com.mcwl.resource.service.ModelCommentLikeService;
import com.mcwl.resource.service.ModelCommentService;
import com.mcwl.resource.service.ModelLikeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
*
*
* @AuthorChenYan
* @ProjectMcWl
* @Packagecom.mcwl.web.controller.resource
@ -16,6 +28,7 @@ import org.springframework.web.bind.annotation.*;
* @Description TODO
* @Date2025/1/12 11:36
*/
@Api(tags = "模型评论")
@RequestMapping("/ModelComment")
@RestController
public class ModelCommentController {
@ -27,38 +40,90 @@ public class ModelCommentController {
@Autowired
private ModelCommentLikeService modelCommentLikeService;
/**
* /
*/
@GetMapping("/imageLike/{imageId}")
public AjaxResult like(@PathVariable Long imageId) {
modelLikeService.like(imageId);
return AjaxResult.success();
@ApiOperation(value = "模型点赞/取消")
@RepeatSubmit
@GetMapping("/modelLike")
public R<Object> like(@Valid
@NotNull(message = "模型id不能为空")
@ApiParam(value = "模型id", required = true)
Long modelId) {
modelLikeService.like(modelId);
return R.ok();
}
/**
*
*/
@ApiOperation(value = "模型评论发布")
@PostMapping("/comment")
public AjaxResult comment(@RequestBody ModelComment modelComment) {
modelCommentService.comment(modelComment);
return AjaxResult.success();
public R<Object> comment(@Valid @RequestBody ModelCommentRes modelCommentRes) {
modelCommentService.comment(modelCommentRes);
return R.ok();
}
/**
* /
*/
@GetMapping("/commentLike/{commentId}")
public AjaxResult commentLike(@PathVariable Long commentId) {
@ApiOperation(value = "模型评论点赞/取消")
@RepeatSubmit
@GetMapping("/commentLike")
public R<Object> commentLike(@Valid
@NotNull(message = "评论id不能为空")
@ApiParam(value = "评论id", required = true)
Long commentId) {
modelCommentLikeService.like(commentId);
return AjaxResult.error();
return R.ok();
}
/**
*
*/
@ApiOperation(value = "获取模型评论")
@GetMapping("/getComment")
@Valid
public R<List<ModelCommentVo>> getComment(@Valid
@NotNull(message = "模型id不能为空")
@ApiParam(value = "模型id", required = true)
Long modelId,
@Valid
@NotNull(message = "排序方式不能为空")
@ApiParam(value = "排序方式 0最热 1最新", required = true)
Integer sortType) {
List<ModelCommentVo> modelCommentList = modelCommentService.getComment(modelId, sortType);
return R.ok(modelCommentList);
}
/**
*
*/
@ApiOperation(value = "删除模型评论")
@GetMapping("/commentDelete")
public R<Object> commentDelete(@Valid
@NotNull(message = "评论id不能为空")
@ApiParam(value = "评论id", required = true)
Long commentId) {
modelCommentService.removeById(commentId);
return R.ok();
}
/**
*
*/
@ApiOperation(value = "获取模型评论数量")
@GetMapping("/commentCount")
public R<Integer> getCommentCount(@Valid
@NotNull(message = "模型id不能为空")
@ApiParam(value = "模型id", required = true)
Long modelId) {
Integer commentCount = modelCommentService.getCommentCount(modelId);
return R.ok(commentCount);
}
}

View File

@ -0,0 +1,105 @@
package com.mcwl.web.controller.resource;
import com.mcwl.common.annotation.RepeatSubmit;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.resource.domain.dto.ModelImageCommentRes;
import com.mcwl.resource.domain.vo.ModelImageCommentVo;
import com.mcwl.resource.service.ModelImageCommentLikeService;
import com.mcwl.resource.service.ModelImageCommentService;
import com.mcwl.resource.service.ModelImageService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
*
*/
@Api(tags = "图片评论")
@RestController
@RequestMapping("/imageComment")
@RequiredArgsConstructor
public class ModelImageCommentController {
private final ModelImageService modelImageService;
private final ModelImageCommentLikeService modelImageCommentLikeService;
private final ModelImageCommentService modelImageCommentService;
/**
*
*/
@ApiOperation(value = "图片评论发布")
@PostMapping("/comment")
public R<Object> comment(@Valid @RequestBody ModelImageCommentRes modelImageCommentRes) {
modelImageCommentService.comment(modelImageCommentRes);
return R.ok();
}
/**
* /
*/
@ApiOperation(value = "图片评论点赞/取消")
@RepeatSubmit(interval = 1000)
@GetMapping("/commentLike")
public R<Object> commentLike(@Valid
@NotNull(message = "评论id不能为空")
@ApiParam(value = "评论id", required = true)
Long commentId) {
modelImageCommentLikeService.like(commentId);
return R.ok();
}
/**
*
*/
@ApiOperation(value = "删除图片评论")
@GetMapping("/commentDelete")
public R<Object> commentDelete(@Valid
@NotNull(message = "评论id不能为空")
@ApiParam(value = "评论id", required = true) Long commentId) {
modelImageCommentService.removeById(commentId);
return R.ok();
}
/**
*
*/
@ApiOperation(value = "获取图片评论")
@GetMapping("/getComment")
@Valid
public R<List<ModelImageCommentVo>> getComment(@Valid
@NotNull(message = "图片id不能为空")
@ApiParam(value = "评论id", required = true)
Long imageId,
@Valid
@NotNull(message = "排序方式不能为空")
@ApiParam(value = "排序方式 0最热 1最新", required = true)
Integer sortType) {
List<ModelImageCommentVo> modelImageCommentVoList = modelImageCommentService.getComment(imageId, sortType);
return R.ok(modelImageCommentVoList);
}
/**
*
*/
@ApiOperation(value = "获取图片评论数量")
@GetMapping("/commentCount")
public R<Integer> getCommentCount(@Valid
@NotNull(message = "图片id不能为空")
@ApiParam(value = "图片id", required = true)
Long imageId) {
Integer commentCount = modelImageCommentService.getCommentCount(imageId);
return R.ok(commentCount);
}
}

View File

@ -1,26 +1,35 @@
package com.mcwl.web.controller.resource;
import cn.hutool.core.bean.BeanUtil;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.utils.SecurityUtils;
import com.mcwl.common.utils.oss.OssUtil;
import com.github.pagehelper.PageInfo;
import com.mcwl.common.annotation.RepeatSubmit;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.PageDomain;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.resource.domain.ModelImage;
import com.mcwl.resource.domain.ModelImageCommentLike;
import com.mcwl.resource.domain.ModelImageLike;
import com.mcwl.resource.domain.dto.ModelImageCommentRes;
import com.mcwl.resource.domain.dto.ModelImagePageRes;
import com.mcwl.resource.domain.dto.ModelImageRes;
import com.mcwl.resource.service.ModelImageCommentLikeService;
import com.mcwl.resource.domain.response.ResponseModelImage;
import com.mcwl.resource.domain.vo.ModelImageVo;
import com.mcwl.resource.domain.vo.PageVo;
import com.mcwl.resource.service.ModelImageLikeService;
import com.mcwl.resource.service.ModelImageService;
import com.mcwl.system.service.ISysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.Date;
import java.util.Objects;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
*
*/
@Api(tags = "图片")
@RestController
@RequestMapping("/modelImage")
@RequestMapping("/image")
@RequiredArgsConstructor
public class ModelImageController {
@ -28,58 +37,112 @@ public class ModelImageController {
private final ModelImageLikeService modelImageLikeService;
private final ModelImageCommentLikeService modelImageCommentLikeService;
private final ISysUserService sysUserService;
/**
*
*
*/
@GetMapping("/upload")
public AjaxResult upload(MultipartFile file) {
@ApiOperation(value = "图片列表")
@PostMapping("/list")
public TableDataInfo list(@RequestBody
@Valid
PageDomain pageDomain) {
ModelImagePageRes imagePageRes = new ModelImagePageRes();
BeanUtil.copyProperties(pageDomain, imagePageRes);
return modelImageService.listByPage(imagePageRes);
}
return AjaxResult.success("上传成功", OssUtil.uploadMultipartFile(file));
/**
*
*/
@ApiOperation(value = "图片详情")
@GetMapping("/detail")
public R<ModelImageVo> detail(@Valid @NotNull(message = "图片id不能为空") Long id) {
ModelImageVo modelImageVo = modelImageService.getDetail(id);
return R.ok(modelImageVo);
}
/**
*
*/
@ApiOperation(value = "图片删除")
@GetMapping("/delete")
public R<Object> delete(@Valid @NotNull(message = "图片id不能为空") Long id) {
modelImageService.removeById(id);
return R.ok();
}
/**
*
*/
@ApiOperation(value = "图片修改")
@PostMapping("/update")
public R<Object> update(@Valid @RequestBody ModelImageRes modelImageRes) {
modelImageService.updateById(modelImageRes);
return R.ok();
}
/**
*
*/
@ApiOperation(value = "图片发布")
@PostMapping("/publish")
public AjaxResult publish(@RequestBody ModelImageRes modelImageRes) {
modelImageService.publish(modelImageRes);
return AjaxResult.success();
public R<Object> publish(@Valid @RequestBody ModelImageRes modelImageRes) {
return modelImageService.publish(modelImageRes);
}
/**
* /
*/
@GetMapping("/imageLike/{imageId}")
public AjaxResult like(@PathVariable Long imageId) {
modelImageLikeService.like(imageId);
return AjaxResult.success();
@ApiOperation(value = "图片点赞/取消")
@RepeatSubmit
@GetMapping("/imageLike")
public R<Object> like(@Valid @NotNull(message = "图片id不能为空") Long id) {
modelImageLikeService.like(id);
return R.ok();
}
/**
*
*
*
* @param id
* @param isTop
* @return
*/
@PostMapping("/comment")
public AjaxResult comment(@RequestBody ModelImageCommentRes modelImageCommentRes) {
modelImageService.comment(modelImageCommentRes);
return AjaxResult.success();
@ApiOperation(value = "设置图片置顶状态")
@GetMapping("/{id}/top")
public R<Object> setModelImageTop(@PathVariable Long id, @RequestParam boolean isTop) {
modelImageLikeService.setModelImageTop(id, isTop);
return R.ok();
}
/**
*
*
* @return
*/
@ApiOperation(value = "获取置顶的图片列表")
@GetMapping
public R<List<ModelImage>> fetchModelImagesSortedByTopStatus() {
List<ModelImage> models = modelImageLikeService.fetchModelImageSortedByTopStatus();
return R.ok(models);
}
/**
* /
*
*
* @return
*/
@GetMapping("/commentLike/{commentId}")
public AjaxResult commentLike(@PathVariable Long commentId) {
modelImageCommentLikeService.like(commentId);
return AjaxResult.error();
@ApiOperation(value = "作品灵感")
@GetMapping("/imageList")
public R<PageInfo<ResponseModelImage>> imageList(PageVo pageVo) {
PageInfo<ResponseModelImage> models = modelImageLikeService.imageList(pageVo);
return R.ok(models);
}
}

View File

@ -1,14 +1,14 @@
package com.mcwl.web.controller.resource;
import com.mcwl.common.core.controller.BaseController;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.resource.domain.ModelVersion;
import com.mcwl.resource.service.ModelVersionService;
import com.mcwl.web.controller.common.OssUtil;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.util.List;
@ -20,6 +20,7 @@ import java.util.List;
* @Description TODO
* @Date2025/1/9 16:47
*/
@Api(tags = "模型版本")
@RestController
@RequestMapping("ModelVersion")
public class ModelVersionController extends BaseController {
@ -28,53 +29,18 @@ public class ModelVersionController extends BaseController {
private ModelVersionService modelVersionService;
/***
*
*
* @param file
/**
*
* @param modelId
* @return
*/
@PostMapping("/file")
public AjaxResult Malifile(@RequestParam MultipartFile file){
@GetMapping("/selectByModelId")
public R<List<ModelVersion>> selectByModelId(@RequestParam Long modelId){
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success(s);
return modelVersionService.selectByModelId(modelId);
}
/***
*
* zip
* @param file
* @return
*/
@PostMapping("/zipUrlFile")
public AjaxResult zipUrlFile(@RequestParam MultipartFile file){
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success(s);
}
/***
*
* zip
* @param file
* @return
*/
@PostMapping("/zipUrl")
public AjaxResult zipUrl(@RequestParam MultipartFile file){
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success(s);
}
@ApiOperation(value = "模型版本列表")
@PostMapping("list")
public TableDataInfo list(@RequestBody ModelVersion modelVersion)
{
@ -84,35 +50,56 @@ public class ModelVersionController extends BaseController {
}
@PostMapping("finbyid")
public AjaxResult finbyid(@RequestBody ModelVersion modelVersion)
@ApiOperation(value = "模型版本详情")
@GetMapping("finbyid")
public R<List<ModelVersion>> finbyid(@RequestParam Long id)
{
ModelVersion modelVersion1 = modelVersionService.getById(modelVersion.getId());
return AjaxResult.success(modelVersion1);
List<ModelVersion> modelVersionList = modelVersionService.finbyid(id);
return R.ok(modelVersionList);
}
@ApiOperation(value = "模型版本添加")
@PostMapping("insert")
public AjaxResult insert(@RequestBody ModelVersion modelVersion)
public R<Object> insert(@RequestBody ModelVersion modelVersion)
{
modelVersionService.save(modelVersion);
return AjaxResult.success();
return R.ok();
}
@ApiOperation(value = "模型版本修改")
@PostMapping("update")
public AjaxResult update(@RequestBody ModelVersion modelVersion)
public R<Object> update(@RequestBody ModelVersion modelVersion)
{
modelVersionService.updateById(modelVersion);
return AjaxResult.success();
return R.ok();
}
@ApiOperation(value = "模型版本删除")
@PostMapping("delete")
public AjaxResult delete(@RequestBody ModelVersion modelVersion)
public R<Object> delete(@RequestBody ModelVersion modelVersion)
{
modelVersionService.removeById(modelVersion.getId());
return AjaxResult.success();
return R.ok();
}
/**
*
* @param id
* @return
*/
@ApiOperation(value = "下载模型文件")
@GetMapping("/modelFileDownload")
public R modelFileDownload(@RequestParam Long id){
return modelVersionService.modelFileDownload(id);
}
}

View File

@ -0,0 +1,85 @@
package com.mcwl.web.controller.resource;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.mcwl.common.core.domain.R;
import com.mcwl.resource.domain.Report;
import com.mcwl.resource.domain.vo.PageVo;
import com.mcwl.resource.service.ReportService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
/**
*
* @author DaiZibo
* @date 2025/1/18
* @apiNote
*/
@Api(tags = "举报")
@RequestMapping("/report")
@RestController
public class ReportController {
@Autowired
private ReportService reportService;
/**
*
* @param report
* @return
*/
@ApiOperation(value = "新增举报内容")
@PostMapping("/addReport")
public R<Object> addReport(@RequestBody Report report){
reportService.addReport(report);
return R.ok();
}
/**
*
* @param pageVo
* @return
*/
@ApiOperation(value = "查询举报列表")
@PostMapping("/selectReport")
public R<Page<Report>> selectReport(@RequestBody PageVo pageVo){
return reportService.selectReport(pageVo);
}
/**
*
* @param id
* @return
*/
@ApiOperation(value = "删除举报")
@GetMapping("/deleteReport")
public R<Object> deleteReport(@RequestParam Long id){
reportService.deleteReport(id);
return R.ok();
}
/**
*
* @param productId
* @param type
* @param status
* @param text
* @return
*/
@ApiOperation(value = "修改状态")
@GetMapping("/updateStatus")
public R<Object> updateStatus(@RequestParam Long productId,Integer type,Integer status,String text){
reportService.updateStatus(productId, type,status,text);
return R.ok();
}
}

View File

@ -0,0 +1,129 @@
package com.mcwl.web.controller.resource;
import com.mcwl.common.core.domain.R;
import com.mcwl.resource.domain.dto.SysAdviceDto;
import com.mcwl.resource.domain.vo.AdviceVo;
import com.mcwl.resource.domain.vo.AttentionAdviceVo;
import com.mcwl.resource.domain.vo.CommentAdviceVo;
import com.mcwl.resource.domain.vo.LikeAdviceVo;
import com.mcwl.resource.service.ISysAdviceService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
*
*/
@RestController
@RequestMapping("advice")
@RequiredArgsConstructor
@Api(tags = "消息通知")
public class SysAdviceController {
private final ISysAdviceService sysAdviceService;
/**
*
*
@NotNull(message = "消息内容不能为空")
@ApiParam(value = "消息内容", required = true)
String adviceContent
*/
// @PreAuthorize("@ss.hasPermi('system:advice:add')")
@PostMapping("sendSysMsg")
@ApiOperation(value = "添加系统消息")
public R<String> sendSysMsg(@Valid @RequestBody SysAdviceDto sysAdviceDto) {
sysAdviceService.sendSysMsg(sysAdviceDto);
return R.ok();
}
/**
*
*/
@GetMapping("read")
@ApiOperation(value = "已读")
public R<String> read(@Valid
@NotNull(message = "消息id不能为空")
@ApiParam(value = "消息id", required = true)
Long adviceId) {
sysAdviceService.read(adviceId);
return R.ok();
}
/**
*
*/
@GetMapping("readAll")
@ApiOperation(value = "一键已读")
public R<String> readAll() {
sysAdviceService.readAll();
return R.ok();
}
/**
*
*/
@GetMapping("getAllMsg")
@ApiOperation(value = "获取所有通知")
public R<List<AdviceVo>> getAllMsg() {
List<AdviceVo> adviceVo = sysAdviceService.getAllMsg();
return R.ok(adviceVo);
}
/**
*
*/
@GetMapping("getOfficialMsg")
@ApiOperation(value = "获取官方通知")
public R<List<AdviceVo>> getOfficialMsg() {
List<AdviceVo> adviceVo = sysAdviceService.getOfficialMsg();
return R.ok(adviceVo);
}
/**
*
*/
@GetMapping("getCommentMsg")
@ApiOperation(value = "获取评论通知")
public R<List<CommentAdviceVo>> getCommentMsg(@Valid
@NotNull(message = "类型不能为空")
@ApiParam(value = "类型 0模型 1工作流 2图片 3全部", required = true)
Integer productType) {
List<CommentAdviceVo> adviceVo = sysAdviceService.getCommentMsg(productType);
return R.ok(adviceVo);
}
/**
*
*/
@GetMapping("getLikeMsg")
@ApiOperation(value = "获取点赞通知")
public R<List<LikeAdviceVo>> getLikeMsg(@Valid
@NotNull(message = "类型不能为空")
@ApiParam(value = "类型 0模型 1工作流 2图片 3评论 4全部", required = true)
Integer productType) {
List<LikeAdviceVo> likeAdviceVoList = sysAdviceService.getLikeMsg(productType);
return R.ok(likeAdviceVoList);
}
/**
*
*/
@GetMapping("getAttentionMsg")
@ApiOperation(value = "获取关注通知")
public R<List<AttentionAdviceVo>> getAttentionMsg() {
List<AttentionAdviceVo> attentionAdviceVoList = sysAdviceService.getAttentionMsg();
return R.ok(attentionAdviceVoList);
}
}

View File

@ -1,14 +1,16 @@
package com.mcwl.web.controller.resource;
import com.github.pagehelper.PageInfo;
import com.mcwl.common.annotation.RepeatSubmit;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.domain.entity.SysUser;
import com.mcwl.resource.domain.SysUserInfo;
import com.mcwl.resource.service.impl.SysUserAttentionServiceImpl;
import com.mcwl.resource.domain.vo.PageVo;
import com.mcwl.resource.service.SysUserAttentionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
/**
*
@ -16,23 +18,23 @@ import org.springframework.web.bind.annotation.RestController;
* @date 2025/1/3
* @apiNote
*/
@Api(tags = "关注")
@RequestMapping("/attention")
@RestController
public class SysUserAttentionController {
@Autowired
private SysUserAttentionServiceImpl sysUserAttentionService;
private SysUserAttentionService sysUserAttentionService;
/**
* /
* @param userId
* @return
*/
@ApiOperation(value = "添加/取消关注")
@RepeatSubmit
@GetMapping("/addAttention")
public AjaxResult addAttention(@RequestParam Long userId) {
public R addAttention(@RequestParam Long userId) {
return sysUserAttentionService.addAttention(userId);
@ -43,23 +45,53 @@ public class SysUserAttentionController {
* @param userId
* @return
*/
@ApiOperation(value = "查询是否关注用户")
@GetMapping("/selectAttention")
public AjaxResult selectAttention(@RequestParam Long userId) {
public R<Boolean> selectAttention(@RequestParam Long userId) {
Boolean aBoolean = sysUserAttentionService.selectAttention(userId);
return AjaxResult.success(aBoolean);
return R.ok(aBoolean);
}
/**
*
* @return
*/
@ApiOperation(value = "查询个人粉丝,关注,下载量,喜欢")
@GetMapping("/selectUserInfo")
public AjaxResult selectUserInfo(){
public R<SysUserInfo> selectUserInfo(Long userId){
SysUserInfo sysUserInfo = sysUserAttentionService.selectUserInfo();
SysUserInfo sysUserInfo = sysUserAttentionService.selectUserInfo(userId);
return AjaxResult.success(sysUserInfo);
return R.ok(sysUserInfo);
}
/**
*
* @return
*/
@ApiOperation(value = "查询关注列表")
@PostMapping("/selectAttentionList")
public R<PageInfo<SysUser>> selectAttentionList(@RequestBody PageVo pageVo){
PageInfo<SysUser> sysUserList = sysUserAttentionService.selectAttentionPage(pageVo);
return R.ok(sysUserList);
}
/**
*
* @return
*/
@ApiOperation(value = "查询粉丝列表")
@PostMapping("/selectToAttention")
public R<PageInfo<SysUser>> selectToAttention(@RequestBody PageVo pageVo){
PageInfo<SysUser> sysUserList = sysUserAttentionService.selectToAttentionPage(pageVo);
return R.ok(sysUserList);
}
}

View File

@ -1,10 +1,12 @@
package com.mcwl.web.controller.resource;
import com.mcwl.common.core.controller.BaseController;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.common.core.page.TableDataInfo;
import com.mcwl.resource.domain.ToActivity;
import com.mcwl.resource.service.ToActivityService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
@ -13,7 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
/**
* @AuthorChenYan
* @ProjectMcWl
* @Packagecom.mcwl.web.controller.resource
@ -21,8 +23,9 @@ import java.util.List;
* @Description TODO
* @Date2025/1/9 17:59
*/
@Api(tags = "活动")
@RestController
@RequestMapping("ToActivity")
@RequestMapping("/ToActivity")
public class ToActivityController extends BaseController {
@Autowired
private ToActivityService toActivityService;
@ -30,48 +33,58 @@ public class ToActivityController extends BaseController {
/**
*
*/
@ApiOperation(value = "活动列表")
@PostMapping("/list")
public TableDataInfo list(@RequestBody ToActivity toActivity)
{
startPage();
List<ToActivity> list = toActivityService.selectToActivityList(toActivity);
return getDataTable(list);
}
@ApiOperation(value = "活动详情")
@PostMapping("finById")
public AjaxResult finById(@RequestBody ToActivity toActivity)
public R<ToActivity> finById(@RequestBody ToActivity toActivity)
{
return AjaxResult.success(toActivityService.getById(toActivity));
return R.ok(toActivityService.getById(toActivity.getId()));
}
@ApiOperation(value = "活动添加")
@PostMapping("add")
public AjaxResult add(@RequestBody ToActivity toActivity)
public R<Object> add(@RequestBody ToActivity toActivity)
{
return AjaxResult.success(toActivityService.save(toActivity));
toActivityService.save(toActivity);
return R.ok();
}
@ApiOperation(value = "活动修改")
@PostMapping("update")
public AjaxResult update(@RequestBody ToActivity toActivity)
public R<Object> update(@RequestBody ToActivity toActivity)
{
return AjaxResult.success(toActivityService.updateById(toActivity));
toActivityService.updateById(toActivity);
return R.ok();
}
@ApiOperation(value = "活动删除")
@PostMapping("delete")
public AjaxResult delete(@RequestBody ToActivity toActivity)
public R<Object> delete(@RequestBody ToActivity toActivity)
{
return AjaxResult.success(toActivityService.removeById(toActivity));
toActivityService.removeById(toActivity);
return R.ok();
}
@ApiOperation(value = "活动批量删除")
@PostMapping("deleteByIds")
public AjaxResult deleteByIds(@RequestBody List<ToActivity> toActivity)
public R<Object> deleteByIds(@RequestBody List<ToActivity> toActivity)
{
return AjaxResult.success(toActivityService.removeByIds(toActivity));
toActivityService.removeByIds(toActivity);
return R.ok();
}

View File

@ -0,0 +1,127 @@
package com.mcwl.web.controller.resource;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.domain.R;
import com.mcwl.resource.domain.dto.WorkFlowCommentRes;
import com.mcwl.resource.domain.vo.WorkFlowCommentVo;
import com.mcwl.resource.service.WorkFlowCommentLikeService;
import com.mcwl.resource.service.WorkFlowCommentService;
import com.mcwl.resource.service.WorkFlowLikeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
*
*
* @AuthorChenYan
* @ProjectMcWl
* @Packagecom.mcwl.web.controller.resource
* @FilenameModelCommentcontroller
* @Description TODO
* @Date2025/1/12 11:36
*/
@Api(tags = "工作流评论")
@RequestMapping("/WorkFlowComment")
@RestController
public class WorkFlowCommentController {
@Autowired
private WorkFlowLikeService workFlowLikeService;
@Autowired
private WorkFlowCommentService workFlowCommentService;
@Autowired
private WorkFlowCommentLikeService workFlowCommentLikeService;
/**
* /
*/
@ApiOperation(value = "工作流点赞/取消")
@GetMapping("/like")
public R<Object> like(@Valid
@NotNull(message = "模型id不能为空")
@ApiParam(value = "模型id", required = true)
Long workFlowId) {
workFlowLikeService.like(workFlowId);
return R.ok();
}
/**
*
*/
@ApiOperation(value = "工作流评论发布")
@PostMapping("/comment")
public R<Object> comment(@Valid
@RequestBody
WorkFlowCommentRes workFlowCommentRes) {
workFlowCommentService.comment(workFlowCommentRes);
return R.ok();
}
/**
* /
*/
@ApiOperation(value = "工作流评论点赞/取消")
@GetMapping("/commentLike")
public R<Object> commentLike(@Valid
@NotNull(message = "评论id不能为空")
@ApiParam(value = "评论id", required = true)
Long commentId) {
workFlowCommentLikeService.like(commentId);
return R.ok();
}
/**
*
*/
@ApiOperation(value = "获取工作流评论")
@GetMapping("/getComment")
public R<List<WorkFlowCommentVo>> getComment(@Valid
@NotNull(message = "模型id不能为空")
@ApiParam(value = "模型id", required = true)
Long commentId,
@Valid
@NotNull(message = "排序方式不能为空")
@ApiParam(value = "排序方式 0最热 1最新", required = true)
Integer sortType) {
List<WorkFlowCommentVo> modelCommentList = workFlowCommentService.getComment(commentId, sortType);
return R.ok(modelCommentList);
}
/**
*
*/
@ApiOperation(value = "删除工作流评论")
@GetMapping("/commentDelete")
public R<Object> commentDelete(@Valid
@NotNull(message = "评论id不能为空")
@ApiParam(value = "评论id", required = true)
Long commentId) {
workFlowCommentService.removeById(commentId);
return R.ok();
}
/**
*
*/
@ApiOperation(value = "获取工作流评论数量")
@GetMapping("/commentCount")
public R<Integer> getCommentCount(@Valid
@NotNull(message = "工作流id不能为空")
@ApiParam(value = "工作流id", required = true)
Long workFlowId) {
Integer commentCount = workFlowCommentService.getCommentCount(workFlowId);
return R.ok(commentCount);
}
}

View File

@ -1,17 +1,30 @@
package com.mcwl.web.controller.resource;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.github.pagehelper.PageInfo;
import com.mcwl.common.core.controller.BaseController;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.web.controller.common.OssUtil;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.mcwl.common.core.domain.R;
import com.mcwl.resource.domain.WorkFlow;
import com.mcwl.resource.domain.dto.AddRequestWorkFlow;
import com.mcwl.resource.domain.request.RequestWorkFlow;
import com.mcwl.resource.domain.response.ResponseWorkFlow;
import com.mcwl.resource.domain.vo.PageVo;
import com.mcwl.resource.mapper.WorkFlowVersionMapper;
import com.mcwl.resource.service.WorkFlowService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
*
*
* @AuthorChenYan
* @ProjectMcWl
* @Packagecom.mcwl.web.controller.resource
@ -19,55 +32,175 @@ import org.springframework.web.multipart.MultipartFile;
* @Description
* @Date2024/12/31 10:48
*/
@Api(tags = "工作流")
@RestController
@RequestMapping("/WorkFlow")
public class WorkFlowController extends BaseController {
@Autowired
private WorkFlowService workFlowService;
/***
@Autowired
private WorkFlowVersionMapper workFlowVersionMapper;
/**
*
*
*
* @param file
* @param id
* @param isTop
* @return
*/
@PostMapping("/file")
public AjaxResult Malifile(@RequestParam MultipartFile file){
@ApiOperation(value = "设置工作流的置顶状态")
@GetMapping("/{id}/top")
public R<Object> setWorkFlowTop(@PathVariable Long id, @RequestParam boolean isTop) {
workFlowService.setworkFlowTop(id, isTop);
return R.ok();
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success(s);
}
/***
/**
*
*
* zip
* @param file
* @return
*/
@PostMapping("/zipUrlFile")
public AjaxResult zipUrlFile(@RequestParam MultipartFile file){
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success(s);
@ApiOperation(value = "获取置顶的模型列表")
@GetMapping
public R<List<WorkFlow>> fetchWorkFlowSortedByTopStatus() {
List<WorkFlow> models = workFlowService.fetchWorkFlowSortedByTopStatus();
return R.ok(models);
}
/**
*
*
* @param addRequestWorkFlow
* @return
*/
@ApiOperation(value = "添加工作流")
@PostMapping("/addWorkFlow")
public R<Object> addWorkFlow(@Validated @RequestBody AddRequestWorkFlow addRequestWorkFlow) {
return workFlowService.addWorkFlow(addRequestWorkFlow);
}
/**
*
*
* @param requestWorkFlow
* @return
*/
@ApiOperation(value = "修改工作流")
@PostMapping("/updateWorkFlow")
public R<Object> updateWorkFlow(@RequestBody RequestWorkFlow requestWorkFlow) {
// for (WorkFlowVersion workFlowVersion : requestWorkFlow.getWorkFlowVersionList()) {
//
// //校验名字
// WorkFlowVersion workFlowVersion1 = workFlowVersionMapper.selectByFileName(workFlowVersion.getFileName());
// if (workFlowVersion1 != null) {
//
// return R.fail(HttpStatus.SHOW_ERROR_MSG,"文件名字重复");
// }
// //校验hash
// WorkFlowVersion workFlowVersion2 = workFlowVersionMapper.selectByHash(workFlowVersion.getFileHash());
// if (workFlowVersion2 != null){
//
// return R.fail(HttpStatus.SHOW_ERROR_MSG,"文件内容重复");
// }
// }
workFlowService.updateWorkFlow(requestWorkFlow);
return R.ok();
}
/**
*
*
* @param id
* @return
*/
@ApiOperation(value = "删除工作流")
@GetMapping("/deleteWorkFlow")
public R<Object> deleteWorkFlow(@RequestParam @Valid @NotNull(message = "工作流id不能为空") Long id) {
workFlowService.deleteWorkFlow(id);
return R.ok();
}
/**
*
*
* @param pageVo
* @return
*/
@ApiOperation(value = "查询工作流列表")
@PostMapping("/selectWorkFlow")
public R<Page<WorkFlow>> selectWorkFlow(@RequestBody PageVo pageVo) {
return workFlowService.selectWorkFlow(pageVo);
}
/**
*
* @param id
* @return
*/
@ApiOperation(value = "查询工作流详情")
@GetMapping("/selectWorkFlowById")
public R<WorkFlow> selectWorkFlowById(@RequestParam @Valid @NotNull(message = "工作流id不能为空") Long id) {
return workFlowService.selectWorkFlowById(id);
}
/**
*
*
* @param name
* @return
*/
@ApiOperation(value = "校验名字是否重复")
@GetMapping("/selectWorkFlowByName")
public R<Long> selectWorkFlowByName(@RequestParam String name) {
Long sign = workFlowService.selectWorkFlowByName(name);
return R.ok(sign);
}
/**
*
*
* @return
*/
@ApiOperation(value = "工作流回显接口")
@GetMapping("/selectWorkFlowVersionById")
public R<RequestWorkFlow> selectWorkFlowVersionById(@RequestParam @Valid @NotNull(message = "图片id不能为空") Long id) {
return workFlowService.selectWorkFlowVersionById(id);
}
/**
*
*
* @return
*/
@ApiOperation(value = "工作流列表")
@PostMapping("/workFlowList")
public R<PageInfo<ResponseWorkFlow>> workFlowList(@RequestBody PageVo pageVo) {
PageInfo<ResponseWorkFlow> responseWorkFlowPageInfo = workFlowService.workFlowList(pageVo);
return R.ok(responseWorkFlowPageInfo);
}
/***
*
* zip
* @param file
* @return
*/
@PostMapping("/zipUrl")
public AjaxResult zipUrl(@RequestParam MultipartFile file){
String s = OssUtil.uploadMultipartFile(file);
return AjaxResult.success(s);
}
// @PostMapping("/add")
// public AjaxResult
}

View File

@ -0,0 +1,56 @@
package com.mcwl.web.controller.resource;
import com.mcwl.common.core.domain.R;
import com.mcwl.resource.domain.WorkFlowVersion;
import com.mcwl.resource.service.WorkFlowVersionService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
/**
*
*
* @author DaiZibo
* @date 2025/1/14
* @apiNote
*/
@Api(tags = "工作流版本")
@RequestMapping("/WorkFlowVersion")
@RestController
public class WorkFlowVersionController {
@Autowired
private WorkFlowVersionService workFlowVersionService;
/**
*
*
* @param workId
* @return
*/
@ApiOperation(value = "查询工作流下的所有版本信息")
@GetMapping("/selectVersionByWorkId")
public R<List<WorkFlowVersion>> selectVersionByWorkId(@RequestParam Long workId) {
return workFlowVersionService.selectVersionByWorkId(workId);
}
/**
*
* @param id
* @return
*/
@ApiOperation("下载工作流")
@GetMapping("/workFlowFileDownload")
public R workFlowFileDownload(@RequestParam Long id){
return workFlowVersionService.workFlowFileDownload(id);
}
}

View File

@ -0,0 +1,62 @@
package com.mcwl.web.controller.system;
import com.mcwl.common.core.controller.BaseController;
import com.mcwl.system.domain.Policy;
import com.mcwl.system.service.PolicyService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
/**
* @AuthorChenYan
* @Projectmcwl-ai
* @Packagecom.mcwl.web.controller.system
* @FilenamePerController
* @Description TODO
* @Date2025/2/14 10:11
*/
@Api(tags = "隐私政策/用户协议")
@RestController
@RequestMapping("Policy")
@RequiredArgsConstructor
public class PerController extends BaseController {
@Autowired
private PolicyService policyService;
/**
*
*
* @param type
* @return
*/
@ApiOperation(value = "获取指定类型的政策内容")
@GetMapping("/{type}")
public ResponseEntity<?> getPolicy(@PathVariable("type") String type) {
Policy policy = policyService.getPolicyByType(type);
if (policy == null) {
return new ResponseEntity<>("Policy not found", HttpStatus.NOT_FOUND);
}
return new ResponseEntity<>(policy.getContent(), HttpStatus.OK);
}
/**
*
*
* @param type
* @param content
* @return
*/
@ApiOperation(value = "更新指定类型的政策内容")
@PutMapping("/{type}")
public ResponseEntity<?> updatePolicy(@PathVariable("type") String type, @RequestBody String content) {
try {
policyService.updatePolicyContent(type, content);
return new ResponseEntity<>("Policy updated successfully", HttpStatus.OK);
} catch (RuntimeException e) {
return new ResponseEntity<>(e.getMessage(), HttpStatus.BAD_REQUEST);
}
}
}

View File

@ -1,57 +0,0 @@
package com.mcwl.web.controller.system;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.system.domain.vo.AdviceVo;
import com.mcwl.system.service.ISysAdviceService;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("system/advice")
@RequiredArgsConstructor
public class SysAdviceController {
private final ISysAdviceService sysAdviceService;
/**
*
*/
@GetMapping("getUserNewMsg")
public AjaxResult getUserNewMsg() {
List<AdviceVo> adviceVo = sysAdviceService.getUserNewMsg();
return AjaxResult.success(adviceVo);
}
/**
*
*/
@GetMapping("getUserSystemNotice")
public AjaxResult getUserSystemNotice() {
List<AdviceVo> adviceVo = sysAdviceService.getUserSystemNotice();
return AjaxResult.success(adviceVo);
}
/**
*
*/
@GetMapping("getUserAllMsg")
public AjaxResult getUserAllMsg() {
List<AdviceVo> adviceVo = sysAdviceService.getUserAllMsg();
return AjaxResult.success(adviceVo);
}
/**
*
*/
@GetMapping("getAllMsg")
public AjaxResult getAllMsg() {
List<AdviceVo> adviceVo = sysAdviceService.getAllMsg();
return AjaxResult.success(adviceVo);
}
}

View File

@ -1,7 +1,9 @@
package com.mcwl.web.controller.system;
import com.alibaba.fastjson2.JSONObject;
import com.mcwl.common.annotation.Anonymous;
import com.mcwl.common.constant.Constants;
import com.mcwl.common.constant.HttpStatus;
import com.mcwl.common.constant.QueueConstants;
import com.mcwl.common.constant.RedisConstants;
import com.mcwl.common.core.domain.AjaxResult;
@ -18,15 +20,13 @@ import com.mcwl.framework.web.service.SysLoginService;
import com.mcwl.framework.web.service.SysPermissionService;
import com.mcwl.framework.web.service.TokenService;
import com.mcwl.system.service.ISysMenuService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.amqp.rabbit.core.RabbitTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
/**
@ -34,7 +34,6 @@ import java.util.concurrent.TimeUnit;
*
* @author mcwl
*/
@Slf4j
@RestController
public class SysLoginController
{
@ -62,31 +61,31 @@ public class SysLoginController
public AjaxResult code(@RequestParam String phone){
if (StringUtils.isEmpty(phone)){
return AjaxResult.error("请输入手机号");
return AjaxResult.error(HttpStatus.SHOW_ERROR_MSG,"请输入手机号");
}
//校验验证码是否存在
if (redisCache.hasKey(RedisConstants.CODE_PHONE+phone)){
return AjaxResult.error("请勿重复发送");
return AjaxResult.error(HttpStatus.SHOW_ERROR_MSG,"请勿重复发送");
}
//生成验证码
String s = CodeUtils.generateCaptcha();
log.info("获取到的验证码:{}",s);
//存储redis
redisCache.setCacheObject(RedisConstants.CODE_PHONE+phone,s,1, TimeUnit.MINUTES);
//发送短信服务
// 构建 sendDataMap
Map<String, String> sendDataMap = new HashMap<>();
sendDataMap.put("code", s);
// TelSmsUtils.sendSms(phone,"SMS_460535072",sendDataMap);
PhoneLoginBody phoneLoginBody = PhoneLoginBody.builder().code(s)
.phone(phone).build();
rabbitTemplate.convertAndSend(QueueConstants.CODE_QUEUE,s);
rabbitTemplate.convertAndSend(QueueConstants.CODE_QUEUE, JSONObject.toJSONString(phoneLoginBody), message -> {
message.getMessageProperties().setMessageId(UUID.randomUUID().toString().replace("-",""));
return message;
});
return AjaxResult.success(s);
return AjaxResult.success();
}

View File

@ -15,6 +15,7 @@ import com.mcwl.system.service.ISysDeptService;
import com.mcwl.system.service.ISysPostService;
import com.mcwl.system.service.ISysRoleService;
import com.mcwl.system.service.ISysUserService;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
@ -47,6 +48,15 @@ public class SysUserController extends BaseController
@Autowired
private ISysPostService postService;
/**
* id
*/
@GetMapping("/getUserId")
public AjaxResult getSysUserId() {
Long userId = SecurityUtils.getUserId();
return AjaxResult.success(userId);
}
/**
*
*/
@ -252,9 +262,13 @@ public class SysUserController extends BaseController
*
* @return
*/
@ApiOperation(value = "个人中心查询个人数据")
@GetMapping("/selectUserById")
public AjaxResult selectUserById(){
SysUser sysUser = userService.selectUserInfoById(SecurityUtils.getUserId());
public AjaxResult selectUserById(@RequestParam(name = "id", required = false) Long id){
if (id == null){
id = SecurityUtils.getUserId();
}
SysUser sysUser = userService.selectUserInfoById(id);
return success(sysUser);
}
@ -266,8 +280,8 @@ public class SysUserController extends BaseController
@PostMapping("/updateUserInfo")
public AjaxResult updateUserInfo(@RequestBody SysUser sysUser){
userService.updateUserInfo(sysUser);
return AjaxResult.success("修改成功");
return userService.updateUserInfo(sysUser);
}
/**

View File

@ -109,16 +109,19 @@ public class WXController {
String openid = redisTemplate.opsForValue().get(verifyKey);
ajax.put("status", 0);
System.out.println("openid{}" + openid);
if (!StringUtils.isEmpty(openid)) {
String openid1 = openid.substring(1, openid.length() - 1);
redisTemplate.delete(verifyKey);
SysUser user = iSysUserThirdAccountService.selectUserByOpenId(openid);
SysUser user = iSysUserThirdAccountService.selectUserByOpenId(openid1);
System.out.println("用户:{}" + user);
if (user.getUserId() == null) {
iSysUserService.addUser(openid,CacheConstants.WE_CHAT,null);
user = iSysUserThirdAccountService.selectUserByOpenId(openid);
iSysUserService.addUser(openid1,CacheConstants.WE_CHAT,null);
user = iSysUserThirdAccountService.selectUserByOpenId(openid1);
}
LoginUser loginUser = new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user));
log.info("生成token的数据user:{}",user);
// 生成token
String token = tokenService.createToken(loginUser);
ajax.put("token", token);

View File

@ -4,6 +4,8 @@ import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import com.mcwl.common.constant.HttpStatus;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

View File

@ -0,0 +1,176 @@
# 数据源配置
spring:
#mq
rabbitmq:
host: 113.45.190.154
port: 5672
username: guest
password: guest
virtualHost: /
listener:
simple:
prefetch: 1 # 每次之能获取一条
acknowledge-mode: manual # 设置消费端手动ack确认
retry:
enabled: true # 是否支持重试
# 生产者配置
publisher-confirm-type: correlated #确认消息已发送到交换机(Exchange)
publisher-returns: true #确认消息已发送到队列(Queue)
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://113.45.190.154:3306/mcwl?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: ybl123456@
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: false
url:
username:
password:
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置连接超时时间
connectTimeout: 30000
# 配置网络超时时间
socketTimeout: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 300000
# 配置一个连接在池中最大生存的时间,单位是毫秒
maxEvictableIdleTimeMillis: 900000
# 配置检测连接是否有效
validationQuery: SELECT 1 FROM DUAL
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
webStatFilter:
enabled: true
statViewServlet:
enabled: true
# 设置白名单,不填则允许所有访问
allow:
url-pattern: /druid/*
# 控制台管理用户名和密码
login-username: mcwl
login-password: 123456
filter:
stat:
enabled: true
# 慢SQL记录
log-slow-sql: true
slow-sql-millis: 1000
merge-sql: true
wall:
config:
multi-statement-allow: true
# redis 配置
redis:
# 地址 旧测试环境
# host: 113.45.9.111
host: 113.45.190.154
# 端口默认为6379
port: 6379
# 数据库索引
database: 0
# 密码
password: MuYu_Cloud@Redis
# 连接超时时间
timeout: 20s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 5
# 连接池中的最大空闲连接
max-idle: 10
# 连接池的最大数据库连接数
max-active: 1000
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
# token配置
token:
# 令牌自定义标识
header: Authorization
# 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期默认30分钟
expireTime: 43200
# 公众号配置
wechat:
# 应用ID
appid: wx0a72f196ec9c3a70
# 应用密钥
secret: 11218568b79e2c5eb10459ef8c0374bd
# yml版(application.yml)
aliyun:
oss:
bucketName: ybl2112
endpoint: oss-cn-beijing.aliyuncs.com
accessKeyId: LTAI5tSHZZ8wHJRP8X4r9TXT
accessKeySecret: F82IVNx0IGJ3AnP6gSIfcyql1HCXIH
accessPre: https://ybl2112.oss-cn-beijing.aliyuncs.com/
## 沙箱环境
mall:
mgt:
aliPayConfig:
protocol: https
gatewayHost: openapi-sandbox.dl.alipaydev.com
signType: RSA2
# 沙箱应用id
appId: 9021000135682614
# 沙箱应用私钥
privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCQxmQGcaiKjOhayWi+zNTvpp8B5YT8jFFkjLzrD+W+T2Dwf2GfFR4p95zsCJxYeoLWdghMPA6/GMFrLbuVFpaEjuTm4icqA9N8n5d3W0j7gh+wMjZoqyJclAIeb09ut7rY6mWzilA9kWmZnUG7MOWIU70RVRYrfJectCFw/odM9lG4XIVe13X2h+1ecTQyQzLWmnvKFCfo7dQjE7fIYiWfud1ZGUneNs3u73pNWMB6ThGTTCbs0atcgM3fYOg3q7fTxIu9VcaUCJiJ/kNbL9sVEyOrSyx2f2o6w06zdEaOiQFsuDeS8QPYGMg7pf42wAfqCO6hqxQiQT5vp1hvB0o1AgMBAAECggEAIhaEYLwMSispXo8D2cES9iaOU/z91hUX6Qv2Q4anuqqoEZh8nN91Db6etTjFz1NxURvTklelxTsH97t56n26DRY0MWTYgd0Kw9Iz8MeOpKGb4nnAM97vpUq4QQBGfLRIC2ENdzu+7vA5JBFR88hsky/cWaNmJ/EbJauIIDneE7GigMR2HF7kfzdZzOBN4ZEh/ef5NKeCnEieRJJhWRgrgNXVZ44Tqi67AM7ey9pyUtBe7fgzxXtrWXBN9yKaVxxSXm3KJXFQqA6mcilFVZaxMNlAySc4MPTW8lq0ozOCOCunoeIphNz/OVIxGu3/voXFXlBfOKqOkYMVZxMY6OrvtQKBgQD0nIlXK4VW72VaGpz9kxQkRNzJV/yqaqet1GOSlPM2l0RCRFOVVdnvbQdHGPe6+HxHL1dh5MP8T/aHoP+4UXkkQCc8moS2FZxJvFH2QTSZBcSSdGL7GMpROqs38J+XlJzrhNcB20lrW6D7yMeQa4YEcXwdbD8Er/YaIqODBWYYewKBgQCXg+16RLDArciwwhf0TBWZPor2iYFDdwU5UPu7CKOhU1MLfQhG85gGpXHjB6G8cMUi/ezxh/FEl+sWOZegpkPwL5/BQS9tNYWIaC4kipPF/a5Up4DMYUHVAuuPwNqqXpvgU+rGjCns0wtPRnjrkghLkc3oTSID7o7pzUwIk2whDwKBgAys3+EIfExY82OL5X6uVGjcuKQmTw11oWK8krxRw5iclgjpCXu/ix+BAtOIU634mlgF9/02oYE9k4TLrvSaJDDgsifNyfq1e/fGLmkYT+VuCxWbulVQn4s+AwlPCrYMGWWK6KlL9638fYcOjGjLaZJpXwkXRtyzUYlhKh/r87JpAoGBAIavRp2mi/xrPvgpQQPv0k9L8llfOCHRnjoqC+thrZsNp8eRmJcBmMVnskofEZ2iHQuS71pw/n58EQTLo0ayJbhPjVJL8K3CovXzrfjbmqqoa5xi3bJQTiXdF6rMw1QpD6Uk05E1LVuQ6v/IZFr7kBYlAQWb8z3NhQq+bPU+nyLvAoGAGpBbSM8gPzdWQqkHoos0icu3cj0GhN3MU7+1Eb/rsXyh/lk5wtZTEnHjwhdUOUtwVNjvrv7CzA7unhOoaM6YcE/Zpd4zt8pjqH1Mhds7UHf4Xg+A+J4G6meYnhSwfBpOub02ncsqfBlXE0qhFv6AvcMewWndyLb8EYaUUXTYkG0=
# 沙箱应用公钥证书
appCertPath: /opt/cert/dev/appPublicCert.crt
# 沙箱支付宝公钥证书路径
alipayCertPath: /opt/cert/dev/alipayPublicCert.crt
# 沙箱支付宝根证书路径
alipayRootCertPath: /opt/cert/dev/alipayRootCert.crt
# # 沙箱应用公钥证书
# appCertPath: D:\workspace\mochuang\mcwl-ai\mcwl-admin\src\main\resources\cert\dev\alipayPublicCert.crt
# # 沙箱支付宝公钥证书路径
# alipayCertPath: D:\workspace\mochuang\mcwl-ai\mcwl-admin\src\main\resources\cert\dev\alipayPublicCert.crt
# # 沙箱支付宝根证书路径
# alipayRootCertPath: D:\workspace\mochuang\mcwl-ai\mcwl-admin\src\main\resources\cert\dev\alipayRootCert.crt
notifyUrl: http://113.45.190.154:8080/ali/pay/notify
# 沙箱支付宝网关
gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
# 绑定回调
bindUrl: http://113.45.190.154:8080/ali/pay/callback
# 参与方的标识类型,目前支持如下类型: 1、ALIPAY_USER_ID 支付宝的会员ID 2、ALIPAY_LOGON_ID支付宝登录号支持邮箱和手机号格式 3、ALIPAY_OPEN_ID支付宝openid
identityType: ALIPAY_USER_ID
# 授权url
oauthUrl: https://openauth-sandbox.dl.alipaydev.com/oauth2/publicAppAuthorize.htm?app_id=%s&scope=%s&redirect_uri=%s&state=%s
huawei:
obs:
ak: NWXJ93POA9NCDVV1WQYJ
sk: 3aBuzYdUgSsxdNnycD2mESnVwtcyjAKPxqewE79N
bucketName: mcwl
upload:
endPoint: obs.cn-south-1.myhuaweicloud.com
#用户头像与背景
mcwl:
encryptUrl: http://113.45.190.154:9090/encryptAndUpload
user:
avatar: https://ybl2112.oss-cn-beijing.aliyuncs.com/2025/MARCH/10/7/53/3f5cc1d7-b062-4a22-9f7e-d442bc6dcf42.png
backgroundImg: https://ybl2112.oss-cn-beijing.aliyuncs.com/2025/MARCH/10/8/2/c8387681-8138-4a29-a1c9-4a143da34c5a.png

View File

@ -2,7 +2,7 @@
spring:
#mq
rabbitmq:
host: 1.13.246.108
host: 113.45.9.111
port: 5672
username: guest
password: guest
@ -23,7 +23,7 @@ spring:
druid:
# 主库数据源
master:
url: jdbc:mysql://1.13.246.108:3306/mcwl?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
url: jdbc:mysql://113.45.9.111:3306/mcwl?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: root
password: ybl123456@
# 从库数据源
@ -76,11 +76,99 @@ spring:
wall:
config:
multi-statement-allow: true
# redis 配置
redis:
# 地址
host: 113.45.9.111
# 端口默认为6379
port: 6379
# 数据库索引
database: 0
# 密码
password: MuYu_Cloud@Redis
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 5
# 连接池中的最大空闲连接
max-idle: 10
# 连接池的最大数据库连接数
max-active: 1000
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
time-between-eviction-runs: 6000
# token配置
token:
# 令牌自定义标识
header: Authorization
# 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期默认30分钟
expireTime: 43200
# 公众号配置
wechat:
# 应用ID
appid: wx82d4c3c96f0ffa5b
appid: wx0a72f196ec9c3a70
# 应用密钥
secret: abbabcf1da711a3bbd95387ec83edcac
secret: 11218568b79e2c5eb10459ef8c0374bd
# yml版(application.yml)
aliyun:
oss:
bucketName: ybl2112
endpoint: oss-cn-beijing.aliyuncs.com
accessKeyId: LTAI5tSHZZ8wHJRP8X4r9TXT
accessKeySecret: F82IVNx0IGJ3AnP6gSIfcyql1HCXIH
accessPre: https://ybl2112.oss-cn-beijing.aliyuncs.com/
# 线上环境
mall:
mgt:
aliPayConfig:
protocol: https
gatewayHost: openapi-sandbox.dl.alipaydev.com
signType: RSA2
# 线上应用id
appId: 2021005119630093
# 线上应用私钥
privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCQuhRU5iHoabfzJS40A+moMKzb5rmi5XbL59K98CW65Oq/rnzQnj6sCYggIXOLCLKUykZ1XIVa+4V7bGFkMDF0236ncPumnVY/tfCSebLyKl+up1mGeH4mAR6ily7nXAhRnXL+A0015bpCa5FCg2ReN68MEmquB/mHfeLqJfRupwzDWnIWxYSKkFCJ0i47KTFYhM93LHHQ8GrZNNaeiJ6q59MruQI83z0HCxN/DzK4Z2rBWGilwPuYcSEa0STPXYhz8XMXUX/Mlp7dd5zyWeNaxkNRWlhKHvhLVPGvteaEcchs476DIWLCRVXEC1372wMKNrKblzRp7Wi5+l+W14k5AgMBAAECggEAHahkPjmivTPc5FC8NSCQI01GPxH6/Ky1OXfaMd4ifTgn+vvQzBeBlFOnt53jRZyUq/T/l1FMaqacZfyBwLw3hlDslXeLuksHv6qTEBEsYH/ad7oHmIzcnQEhvAPrMrIjakYvqGoYynC3SKEudUjjqoMSthCYF+2+bsuXUpBQlNQLqcJ03U+YhfLswwVVujKvAujoLRqDAWeaa0k0y/1Ua4fr5GJq5M+P8TTBRgZlSK5A7Ee6yxMUncZ9W3lTqZtyG0OQLbz9gkr0c63KPisigaOx9eKlCPWFWUWo+zGvQMVijHDTeoJ3dqNmsPtiIE3rDt8anx4a1R7YK6MQ520hAQKBgQDPFMNl4fRmLSOLNShJm/0mBMoIjPmS3+tPBtCiG4oH9F8vYMJWDA1Im0FdgRa2HlCv6hpiVvvQt824RaUYa7XR6aefXKVEWddHvl3utnghMohjK8o8fTmIxADtU5Q2OlWmPdp1v7yDg8yE5P1GlY+AZ3oggxXOIRVtQrNeL7E3iQKBgQCy6nEaUQUCDDts4o7Pn+N402g3/T9Vz/5JtKmDI01EndK5l/yE8CdgGwdiwN1k3la/Nv8P5kaaX2qVcCGoOIQmMNGOxuNfkKCi+bJKdxmFOI4E3iVYT2H6x27QJwNB6bik1i6b2OWT7ckxeB6xMjefNp1u8Qif+vab60OQZSqoMQKBgESRF3Hwsz/xykcZvtFAuT2RcGQMacbcJcnw87v5ambf33SMkUx0iSF1ZttTFvYOa6ET3tCZBKBDe/Z7+QJxB68NstbtkjtjlAjJW8ji2jwDw20y3q/QtvA2Fih++CBMiHeXG3LJnd3eEiYevE5Wz0ExAhspzFqIUdPvtfyFxiQhAoGBAKgc+iGMN3RxIfVx/FbDGe6SVr8lSrnLMlj3VMBQD26GDVcupKwVLCp1uz7jkiQRdtk9R/UcnwK23WOFdVqnoCRygrXx0/wb3ZTFou2tc2Fmfqu8QML19E67zjfwMHNitYjNaAYwi6ewKvg8sjo1wWXs34k7GquYGNjw+w9Wv/pBAoGAUlVHfZ4RncAiiH/x3EDgqmmVikFpLoM2xXxM16nplrjdBE6IzkpgWb/x2ZI6JCMDyoV2kvF6owW2+QEQ81MrHQMtBRpAvd8nI03gXA5VF3uwp4UjfGpoIAGDBrqQv9DM8vx6C6VJNTT5esZWZSw/+PZ4D19l0/n7gICGx3ugw0Q=
# 线上应用公钥证书
appCertPath: /opt/cert/pro/appCertPublicKey_2021005119630093.crt
# 线上支付宝公钥证书路径
alipayCertPath: /opt/cert/pro/alipayCertPublicKey_RSA2.crt
# 线上支付宝根证书路径
alipayRootCertPath: /opt/cert/pro/alipayRootCert.crt
# # 沙箱应用公钥证书
# appCertPath: D:\workspace\mochuang\mcwl-ai\mcwl-admin\src\main\resources\cert\dev\alipayPublicCert.crt
# # 沙箱支付宝公钥证书路径
# alipayCertPath: D:\workspace\mochuang\mcwl-ai\mcwl-admin\src\main\resources\cert\dev\alipayPublicCert.crt
# # 沙箱支付宝根证书路径
# alipayRootCertPath: D:\workspace\mochuang\mcwl-ai\mcwl-admin\src\main\resources\cert\dev\alipayRootCert.crt
notifyUrl: http://113.45.9.111:8080/ali/pay/notify
# 线上支付宝网关
gatewayUrl: https://openapi.alipay.com/gateway.do
# 绑定回调
bindUrl: http://113.45.9.111:8080/ali/pay/callback
# 参与方的标识类型,目前支持如下类型: 1、ALIPAY_USER_ID 支付宝的会员ID 2、ALIPAY_LOGON_ID支付宝登录号支持邮箱和手机号格式 3、ALIPAY_OPEN_ID支付宝openid
identityType: ALIPAY_OPEN_ID
# 授权url
oauthUrl: https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=%s&scope=%s&redirect_uri=%s&state=%s
huawei:
obs:
ak: NWXJ93POA9NCDVV1WQYJ
sk: 3aBuzYdUgSsxdNnycD2mESnVwtcyjAKPxqewE79N
bucketName: mcwl
upload:
endPoint: obs.cn-south-1.myhuaweicloud.com
#用户头像与背景
mcwl:
encryptUrl: http://113.45.9.111:9090/encryptAndUpload
user:
avatar: https://ybl2112.oss-cn-beijing.aliyuncs.com/2025/MARCH/10/7/53/3f5cc1d7-b062-4a22-9f7e-d442bc6dcf42.png
backgroundImg: https://ybl2112.oss-cn-beijing.aliyuncs.com/2025/MARCH/10/8/2/c8387681-8138-4a29-a1c9-4a143da34c5a.png

View File

@ -57,45 +57,14 @@ spring:
servlet:
multipart:
# 单个文件大小
max-file-size: 10MB
max-file-size: 40GB
# 设置总上传的文件大小
max-request-size: 20MB
max-request-size: 40GB
# 服务模块
devtools:
restart:
# 热部署开关
enabled: true
# redis 配置
redis:
# 地址
host: 1.13.246.108
# 端口默认为6379
port: 6370
# 数据库索引
database: 0
# 密码
password: MuYu_Cloud@Redis
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
# token配置
token:
# 令牌自定义标识
header: Authorization
# 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期默认30分钟
expireTime: 1440
# MyBatis Plus配置
mybatis-plus:
@ -115,7 +84,7 @@ mybatis-plus:
# NONE不启用 PARTIAL只对非嵌套 resultMap 自动映射 FULL对所有 resultMap 自动映射
autoMappingBehavior: PARTIAL
# MyBatis 自动映射时未知列或未知属性处理策
# NONE不做处理 WARNING打印相关警告 FAILING抛出异常和详细信息
# NONE不做处理 WARNING打印相关警告 FAILING抛出异常和详细信息.
autoMappingUnknownColumnBehavior: NONE
# 更详细的日志输出 会有性能损耗 org.apache.ibatis.logging.stdout.StdOutImpl
# 关闭日志记录 (可单纯使用 p6spy 分析) org.apache.ibatis.logging.nologging.NoLoggingImpl
@ -153,7 +122,7 @@ swagger:
# 是否开启swagger
enabled: true
# 请求前缀
pathMapping: /dev-api
pathMapping:
# 防止XSS攻击
xss:
@ -163,25 +132,5 @@ xss:
excludes: /system/notice
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
# yml版(application.yml)
aliyun:
oss:
bucketName: ybl2112
endpoint: oss-cn-beijing.aliyuncs.com
accessKeyId: LTAI5tSHZZ8wHJRP8X4r9TXT
accessKeySecret: F82IVNx0IGJ3AnP6gSIfcyql1HCXIH
policy : https://ybl2112.oss-cn-beijing.aliyuncs.com/
mall:
mgt:
aliPayConfig:
protocol: https
gatewayHost: openapi-sandbox.dl.alipaydev.com
signType: RSA2
appId: 9021000135682614
privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCQxmQGcaiKjOhayWi+zNTvpp8B5YT8jFFkjLzrD+W+T2Dwf2GfFR4p95zsCJxYeoLWdghMPA6/GMFrLbuVFpaEjuTm4icqA9N8n5d3W0j7gh+wMjZoqyJclAIeb09ut7rY6mWzilA9kWmZnUG7MOWIU70RVRYrfJectCFw/odM9lG4XIVe13X2h+1ecTQyQzLWmnvKFCfo7dQjE7fIYiWfud1ZGUneNs3u73pNWMB6ThGTTCbs0atcgM3fYOg3q7fTxIu9VcaUCJiJ/kNbL9sVEyOrSyx2f2o6w06zdEaOiQFsuDeS8QPYGMg7pf42wAfqCO6hqxQiQT5vp1hvB0o1AgMBAAECggEAIhaEYLwMSispXo8D2cES9iaOU/z91hUX6Qv2Q4anuqqoEZh8nN91Db6etTjFz1NxURvTklelxTsH97t56n26DRY0MWTYgd0Kw9Iz8MeOpKGb4nnAM97vpUq4QQBGfLRIC2ENdzu+7vA5JBFR88hsky/cWaNmJ/EbJauIIDneE7GigMR2HF7kfzdZzOBN4ZEh/ef5NKeCnEieRJJhWRgrgNXVZ44Tqi67AM7ey9pyUtBe7fgzxXtrWXBN9yKaVxxSXm3KJXFQqA6mcilFVZaxMNlAySc4MPTW8lq0ozOCOCunoeIphNz/OVIxGu3/voXFXlBfOKqOkYMVZxMY6OrvtQKBgQD0nIlXK4VW72VaGpz9kxQkRNzJV/yqaqet1GOSlPM2l0RCRFOVVdnvbQdHGPe6+HxHL1dh5MP8T/aHoP+4UXkkQCc8moS2FZxJvFH2QTSZBcSSdGL7GMpROqs38J+XlJzrhNcB20lrW6D7yMeQa4YEcXwdbD8Er/YaIqODBWYYewKBgQCXg+16RLDArciwwhf0TBWZPor2iYFDdwU5UPu7CKOhU1MLfQhG85gGpXHjB6G8cMUi/ezxh/FEl+sWOZegpkPwL5/BQS9tNYWIaC4kipPF/a5Up4DMYUHVAuuPwNqqXpvgU+rGjCns0wtPRnjrkghLkc3oTSID7o7pzUwIk2whDwKBgAys3+EIfExY82OL5X6uVGjcuKQmTw11oWK8krxRw5iclgjpCXu/ix+BAtOIU634mlgF9/02oYE9k4TLrvSaJDDgsifNyfq1e/fGLmkYT+VuCxWbulVQn4s+AwlPCrYMGWWK6KlL9638fYcOjGjLaZJpXwkXRtyzUYlhKh/r87JpAoGBAIavRp2mi/xrPvgpQQPv0k9L8llfOCHRnjoqC+thrZsNp8eRmJcBmMVnskofEZ2iHQuS71pw/n58EQTLo0ayJbhPjVJL8K3CovXzrfjbmqqoa5xi3bJQTiXdF6rMw1QpD6Uk05E1LVuQ6v/IZFr7kBYlAQWb8z3NhQq+bPU+nyLvAoGAGpBbSM8gPzdWQqkHoos0icu3cj0GhN3MU7+1Eb/rsXyh/lk5wtZTEnHjwhdUOUtwVNjvrv7CzA7unhOoaM6YcE/Zpd4zt8pjqH1Mhds7UHf4Xg+A+J4G6meYnhSwfBpOub02ncsqfBlXE0qhFv6AvcMewWndyLb8EYaUUXTYkG0=
publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApHkjwHnoUnZuqbas+ZputyWIfU2WKBFKd+wFwlCZytpQhVA16CGAMCGpgjxUPpqbmOtPy74y0wxmDHB9IaYOVsVmi2SAl1IqfxwUSIllbdvbjBvZFAIQlPa8U/zHJPgdGNHDt/Bwqp5uB0OkcGLB9PYyAXBEKiu6zdTsiZloUrPwgnBRJ0iNHYiWo/oOYD9KfopLA+D1nQjqq8m3ShZe46ecMo6ZCHtQI/HtgL/EGga5KY2zOUi0Wwviu8w79RjjzfdsDkzu5VnBdaSru4awDyiF9nAF+uPgA4ZOdLKkpoEANwuIorDW8tT69Gwh+mYx9sDJMxJf7XOekdPbymomiwIDAQAB
notifyUrl: https://253d7236.r27.cpolar.top/web/pay/notify
gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do
knife4j:
enable: true

View File

@ -0,0 +1,38 @@
-----BEGIN CERTIFICATE-----
MIIDszCCApugAwIBAgIQICUCGGcg6L5kXzAfaOSi6zANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UE
BhMCQ04xGzAZBgNVBAoMEkFudCBGaW5hbmNpYWwgdGVzdDElMCMGA1UECwwcQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkgdGVzdDE+MDwGA1UEAww1QW50IEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1
dGhvcml0eSBDbGFzcyAyIFIxIHRlc3QwHhcNMjUwMjE4MDIwNDM0WhcNMjYwMjE4MDIwNDM0WjCB
hDELMAkGA1UEBhMCQ04xHzAdBgNVBAoMFmRicGxmdTEyOTRAc2FuZGJveC5jb20xDzANBgNVBAsM
BkFsaXBheTFDMEEGA1UEAww65pSv5LuY5a6dKOS4reWbvSnnvZHnu5zmioDmnK/mnInpmZDlhazl
j7gtMjA4ODcyMTAzMjk3MTE0MzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKR5I8B5
6FJ2bqm2rPmabrcliH1NligRSnfsBcJQmcraUIVQNeghgDAhqYI8VD6am5jrT8u+MtMMZgxwfSGm
DlbFZotkgJdSKn8cFEiJZW3b24wb2RQCEJT2vFP8xyT4HRjRw7fwcKqebgdDpHBiwfT2MgFwRCor
us3U7ImZaFKz8IJwUSdIjR2IlqP6DmA/Sn6KSwPg9Z0I6qvJt0oWXuOnnDKOmQh7UCPx7YC/xBoG
uSmNszlItFsL4rvMO/UY4833bA5M7uVZwXWkq7uGsA8ohfZwBfrj4AOGTnSypKaBADcLiKKw1vLU
+vRsIfpmMfbAyTMSX+1znpHT28pqJosCAwEAAaMSMBAwDgYDVR0PAQH/BAQDAgTwMA0GCSqGSIb3
DQEBCwUAA4IBAQC36KH0fCX8t0y/GHRt83Xfr0uNfWlYTTY6fzqqgxlqhuU8yYbt9WmE2JHxuUmB
yznEbhCWXqRxpWRInXwhFaZoO7Qn/XJ3rcSJ1NsL3niR94gLcGyNEWyEN2U/L2bPJIXwZYqttW9G
41yONL+27ame+g5PvhjUCEb937zktI+zLdfb5uSyd4aAEPQ7F9Nl4Z2p97NlLBhpfcNq7SGhfLD0
85/vYGsbyef/ZrTV7IKHcgprhANE/yDY6/FUxYgCV/l4h2KMusX9Yj8V5W+9ncPo58XpfolyuZJK
yuVMv1q1h2AIKudxKcr2hK4/T91i/A7A8v4UD+8a3Q5T3Ad6cYw8
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDszCCApugAwIBAgIQIBkIGbgVxq210KxLJ+YA/TANBgkqhkiG9w0BAQsFADCBhDELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxJTAjBgNVBAsMHENlcnRpZmljYXRpb24gQXV0
aG9yaXR5IHRlc3QxNjA0BgNVBAMMLUFudCBGaW5hbmNpYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
dHkgUjEgdGVzdDAeFw0xOTA4MTkxMTE2MDBaFw0yNDA4MDExMTE2MDBaMIGRMQswCQYDVQQGEwJD
TjEbMBkGA1UECgwSQW50IEZpbmFuY2lhbCB0ZXN0MSUwIwYDVQQLDBxDZXJ0aWZpY2F0aW9uIEF1
dGhvcml0eSB0ZXN0MT4wPAYDVQQDDDVBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9y
aXR5IENsYXNzIDIgUjEgdGVzdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMh4FKYO
ZyRQHD6eFbPKZeSAnrfjfU7xmS9Yoozuu+iuqZlb6Z0SPLUqqTZAFZejOcmr07ln/pwZxluqplxC
5+B48End4nclDMlT5HPrDr3W0frs6Xsa2ZNcyil/iKNB5MbGll8LRAxntsKvZZj6vUTMb705gYgm
VUMILwi/ZxKTQqBtkT/kQQ5y6nOZsj7XI5rYdz6qqOROrpvS/d7iypdHOMIM9Iz9DlL1mrCykbBi
t25y+gTeXmuisHUwqaRpwtCGK4BayCqxRGbNipe6W73EK9lBrrzNtTr9NaysesT/v+l25JHCL9tG
wpNr1oWFzk4IHVOg0ORiQ6SUgxZUTYcCAwEAAaMSMBAwDgYDVR0PAQH/BAQDAgTwMA0GCSqGSIb3
DQEBCwUAA4IBAQBWThEoIaQoBX2YeRY/I8gu6TYnFXtyuCljANnXnM38ft+ikhE5mMNgKmJYLHvT
yWWWgwHoSAWEuml7EGbE/2AK2h3k0MdfiWLzdmpPCRG/RJHk6UB1pMHPilI+c0MVu16OPpKbg5Vf
LTv7dsAB40AzKsvyYw88/Ezi1osTXo6QQwda7uefvudirtb8FcQM9R66cJxl3kt1FXbpYwheIm/p
j1mq64swCoIYu4NrsUYtn6CV542DTQMI5QdXkn+PzUUly8F6kDp+KpMNd0avfWNL5+O++z+F5Szy
1CPta1D7EQ/eYmMP+mOQ35oifWIoFCpN6qQVBS/Hob1J/UUyg7BW
-----END CERTIFICATE-----

View File

@ -0,0 +1,88 @@
-----BEGIN CERTIFICATE-----
MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
pDoiVhsLwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
kT9qhqn+lw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
Yf4Zr0fJsGuv
-----END CERTIFICATE-----

View File

@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE-----
MIIDmTCCAoGgAwIBAgIQICQEAub4U5TMozibHLcg8zANBgkqhkiG9w0BAQsFADCBkTELMAkGA1UE
BhMCQ04xGzAZBgNVBAoMEkFudCBGaW5hbmNpYWwgdGVzdDElMCMGA1UECwwcQ2VydGlmaWNhdGlv
biBBdXRob3JpdHkgdGVzdDE+MDwGA1UEAww1QW50IEZpbmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1
dGhvcml0eSBDbGFzcyAyIFIxIHRlc3QwHhcNMjQwNDAyMDUzMjU2WhcNMjUwNDA3MDUzMjU2WjBr
MQswCQYDVQQGEwJDTjEfMB0GA1UECgwWZGJwbGZ1MTI5NEBzYW5kYm94LmNvbTEPMA0GA1UECwwG
QWxpcGF5MSowKAYDVQQDDCEyMDg4NzIxMDMyOTcxMTQzLTkwMjEwMDAxMzU2ODI2MTQwggEiMA0G
CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCQxmQGcaiKjOhayWi+zNTvpp8B5YT8jFFkjLzrD+W+
T2Dwf2GfFR4p95zsCJxYeoLWdghMPA6/GMFrLbuVFpaEjuTm4icqA9N8n5d3W0j7gh+wMjZoqyJc
lAIeb09ut7rY6mWzilA9kWmZnUG7MOWIU70RVRYrfJectCFw/odM9lG4XIVe13X2h+1ecTQyQzLW
mnvKFCfo7dQjE7fIYiWfud1ZGUneNs3u73pNWMB6ThGTTCbs0atcgM3fYOg3q7fTxIu9VcaUCJiJ
/kNbL9sVEyOrSyx2f2o6w06zdEaOiQFsuDeS8QPYGMg7pf42wAfqCO6hqxQiQT5vp1hvB0o1AgMB
AAGjEjAQMA4GA1UdDwEB/wQEAwIE8DANBgkqhkiG9w0BAQsFAAOCAQEAZmMSaD7s3aervdACl0cN
YRcUHMGBA4DwzeLKaF0iqcsQxzJHBQRSGbAeQ9n5l1U5V0Pos92V7eqEJqtC52l6sK5T4YE6zAxf
49RKyo00qVFCbcGMHnRy0F/AkEhz+qhan1R3Dm7Ty6UtgAaeF6emD35EIKXziCvqS1nBt+nniYYB
0O2UntrJ3lYucuLun7TeYou/kPMTnZItzSmvCmG181e5IpSB3qGwBnIgkmB+Ge0kGIFAoV9+MucT
4YOffum8yC0oF7aMtTL9whm5gb+Udj+lBrHYYw8VPNpcvBmRlXEKEJLbWQrGtJi6+URReWqO52UP
fGHB0r4r575H4Y1QkA==
-----END CERTIFICATE-----

View File

@ -0,0 +1,43 @@
-----BEGIN CERTIFICATE-----
MIIDnTCCAoWgAwIBAgIQICUCFPTaqv/ZUGkFjQNMjTANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDIgUjEwHhcNMjUwMjE0MDkxMDAxWhcNMzAwMjEzMDkxMDAxWjB+MQswCQYDVQQGEwJDTjEZ
MBcGA1UECgwQMjA4ODk0Mjk4OTQ4MjU3OTEPMA0GA1UECwwGQWxpcGF5MUMwQQYDVQQDDDrmlK/k
u5jlrp0o5Lit5Zu9Kee9kee7nOaKgOacr+aciemZkOWFrOWPuC0yMDg4OTQyOTg5NDgyNTc5MIIB
IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwa7R9uTM3VJpWZDWiNSUw23AoIlSZ4Y6lgaA
xuhKYmUx8P2yCHJ8xEyASRHUggrYoEvkbuLqHPpNPmJsMaqnbuP4uwfkxO9l/D2bnPRFd2e4eQhX
L7YHOLRWgHhMBfkMYMq9A8kJHDa9drVbxvp1zbvxakJvEuJ9TVCvHdpsTGbMxBn5PP7qTQYoQAQj
FYF6j6eLmrskFgqYGmDV2dbf/tFLaQZSuhut47pb3glvi7g0ECMy+S3v76pZk5+FP42EkBFFsLH1
lTREgO1PTSRAEiZkSGRLtmf3u6EMb42pE6EUF4pHHaACEQ3ZRuYK8Mo00A0FmwAoKil2MxkzAX5Z
KQIDAQABoxIwEDAOBgNVHQ8BAf8EBAMCA/gwDQYJKoZIhvcNAQELBQADggEBAGsnIGoHjk4+YUJJ
nLMggzUmAuKt1rHcUN+3SfsNmnGqwluy4cm4emxj2qwcTzEEQvrES33difh4Ubtf2XyS1MFLkxhG
WonCuEUjZqKgWz66gCG3l0l7HRy2VJaaaVlC49yJMOsuUNtAFjh+Pu5XVb7ff8Adf3YGNeFC4Tde
gkBgDO8RbPSfdc7bP0Fq+TPj5nMCu64KzBz4RP5da7Q/mSFI2PCvtEquhq/eeDezfHUAz2ehC/bA
dSRHytgzrGktk+BIPtEsoYG9zIHBNwA8JCr9Z5q2eauhYvIE1sJVO151Dph1u4LE1voQQ4qr4t6v
gU2IoL6w5LvdWDSQCIrPOa4=
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIE4jCCAsqgAwIBAgIIYsSr5bKAMl8wDQYJKoZIhvcNAQELBQAwejELMAkGA1UEBhMCQ04xFjAU
BgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEw
LwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMy
MjE0MzQxNVoXDTM3MTEyNjE0MzQxNVowgYIxCzAJBgNVBAYTAkNOMRYwFAYDVQQKDA1BbnQgRmlu
YW5jaWFsMSAwHgYDVQQLDBdDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE5MDcGA1UEAwwwQW50IEZp
bmFuY2lhbCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDbGFzcyAyIFIxMIIBIjANBgkqhkiG9w0B
AQEFAAOCAQ8AMIIBCgKCAQEAsLMfYaoRoPRbmDcAfXPCmKf43pWRN5yTXa/KJWO0l+mrgQvs89bA
NEvbDUxlkGwycwtwi5DgBuBgVhLliXu+R9CYgr2dXs8D8Hx/gsggDcyGPLmVrDOnL+dyeauheARZ
fA3du60fwEwwbGcVIpIxPa/4n3IS/ElxQa6DNgqxh8J9Xwh7qMGl0JK9+bALuxf7B541Gr4p0WEN
G8fhgjBV4w4ut9eQLOoa1eddOUSZcy46Z7allwowwgt7b5VFfx/P1iKJ3LzBMgkCK7GZ2kiLrL7R
iqV+h482J7hkJD+ardoc6LnrHO/hIZymDxok+VH9fVeUdQa29IZKrIDVj65THQIDAQABo2MwYTAf
BgNVHSMEGDAWgBRfdLQEwE8HWurlsdsio4dBspzhATAdBgNVHQ4EFgQUSqHkYINtUSAtDPnS8Xoy
oP9p7qEwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIB
AIQ8TzFy4bVIVb8+WhHKCkKNPcJe2EZuIcqvRoi727lZTJOfYy/JzLtckyZYfEI8J0lasZ29wkTt
a1IjSo+a6XdhudU4ONVBrL70U8Kzntplw/6TBNbLFpp7taRALjUgbCOk4EoBMbeCL0GiYYsTS0mw
7xdySzmGQku4GTyqutIGPQwKxSj9iSFw1FCZqr4VP4tyXzMUgc52SzagA6i7AyLedd3tbS6lnR5B
L+W9Kx9hwT8L7WANAxQzv/jGldeuSLN8bsTxlOYlsdjmIGu/C9OWblPYGpjQQIRyvs4Cc/mNhrh+
14EQgwuemIIFDLOgcD+iISoN8CqegelNcJndFw1PDN6LkVoiHz9p7jzsge8RKay/QW6C03KNDpWZ
EUCgCUdfHfo8xKeR+LL1cfn24HKJmZt8L/aeRZwZ1jwePXFRVtiXELvgJuM/tJDIFj2KD337iV64
fWcKQ/ydDVGqfDZAdcU4hQdsrPWENwPTQPfVPq2NNLMyIH9+WKx9Ed6/WzeZmIy5ZWpX1TtTolo6
OJXQFeItMAjHxW/ZSZTok5IS3FuRhExturaInnzjYpx50a6kS34c5+c8hYq7sAtZ/CNLZmBnBCFD
aMQqT8xFZJ5uolUaSeXxg7JFY1QsYp5RKvj4SjFwCGKJ2+hPPe9UyyltxOidNtxjaknOCeBHytOr
-----END CERTIFICATE-----

View File

@ -0,0 +1,88 @@
-----BEGIN CERTIFICATE-----
MIIBszCCAVegAwIBAgIIaeL+wBcKxnswDAYIKoEcz1UBg3UFADAuMQswCQYDVQQG
EwJDTjEOMAwGA1UECgwFTlJDQUMxDzANBgNVBAMMBlJPT1RDQTAeFw0xMjA3MTQw
MzExNTlaFw00MjA3MDcwMzExNTlaMC4xCzAJBgNVBAYTAkNOMQ4wDAYDVQQKDAVO
UkNBQzEPMA0GA1UEAwwGUk9PVENBMFkwEwYHKoZIzj0CAQYIKoEcz1UBgi0DQgAE
MPCca6pmgcchsTf2UnBeL9rtp4nw+itk1Kzrmbnqo05lUwkwlWK+4OIrtFdAqnRT
V7Q9v1htkv42TsIutzd126NdMFswHwYDVR0jBBgwFoAUTDKxl9kzG8SmBcHG5Yti
W/CXdlgwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFEwysZfZ
MxvEpgXBxuWLYlvwl3ZYMAwGCCqBHM9VAYN1BQADSAAwRQIgG1bSLeOXp3oB8H7b
53W+CKOPl2PknmWEq/lMhtn25HkCIQDaHDgWxWFtnCrBjH16/W3Ezn7/U/Vjo5xI
pDoiVhsLwg==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIF0zCCA7ugAwIBAgIIH8+hjWpIDREwDQYJKoZIhvcNAQELBQAwejELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmlj
YXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5jaWFsIENlcnRpZmlj
YXRpb24gQXV0aG9yaXR5IFIxMB4XDTE4MDMyMTEzNDg0MFoXDTM4MDIyODEzNDg0
MFowejELMAkGA1UEBhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNV
BAsMF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MTEwLwYDVQQDDChBbnQgRmluYW5j
aWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFIxMIICIjANBgkqhkiG9w0BAQEF
AAOCAg8AMIICCgKCAgEAtytTRcBNuur5h8xuxnlKJetT65cHGemGi8oD+beHFPTk
rUTlFt9Xn7fAVGo6QSsPb9uGLpUFGEdGmbsQ2q9cV4P89qkH04VzIPwT7AywJdt2
xAvMs+MgHFJzOYfL1QkdOOVO7NwKxH8IvlQgFabWomWk2Ei9WfUyxFjVO1LVh0Bp
dRBeWLMkdudx0tl3+21t1apnReFNQ5nfX29xeSxIhesaMHDZFViO/DXDNW2BcTs6
vSWKyJ4YIIIzStumD8K1xMsoaZBMDxg4itjWFaKRgNuPiIn4kjDY3kC66Sl/6yTl
YUz8AybbEsICZzssdZh7jcNb1VRfk79lgAprm/Ktl+mgrU1gaMGP1OE25JCbqli1
Pbw/BpPynyP9+XulE+2mxFwTYhKAwpDIDKuYsFUXuo8t261pCovI1CXFzAQM2w7H
DtA2nOXSW6q0jGDJ5+WauH+K8ZSvA6x4sFo4u0KNCx0ROTBpLif6GTngqo3sj+98
SZiMNLFMQoQkjkdN5Q5g9N6CFZPVZ6QpO0JcIc7S1le/g9z5iBKnifrKxy0TQjtG
PsDwc8ubPnRm/F82RReCoyNyx63indpgFfhN7+KxUIQ9cOwwTvemmor0A+ZQamRe
9LMuiEfEaWUDK+6O0Gl8lO571uI5onYdN1VIgOmwFbe+D8TcuzVjIZ/zvHrAGUcC
AwEAAaNdMFswCwYDVR0PBAQDAgEGMAwGA1UdEwQFMAMBAf8wHQYDVR0OBBYEFF90
tATATwda6uWx2yKjh0GynOEBMB8GA1UdIwQYMBaAFF90tATATwda6uWx2yKjh0Gy
nOEBMA0GCSqGSIb3DQEBCwUAA4ICAQCVYaOtqOLIpsrEikE5lb+UARNSFJg6tpkf
tJ2U8QF/DejemEHx5IClQu6ajxjtu0Aie4/3UnIXop8nH/Q57l+Wyt9T7N2WPiNq
JSlYKYbJpPF8LXbuKYG3BTFTdOVFIeRe2NUyYh/xs6bXGr4WKTXb3qBmzR02FSy3
IODQw5Q6zpXj8prYqFHYsOvGCEc1CwJaSaYwRhTkFedJUxiyhyB5GQwoFfExCVHW
05ZFCAVYFldCJvUzfzrWubN6wX0DD2dwultgmldOn/W/n8at52mpPNvIdbZb2F41
T0YZeoWnCJrYXjq/32oc1cmifIHqySnyMnavi75DxPCdZsCOpSAT4j4lAQRGsfgI
kkLPGQieMfNNkMCKh7qjwdXAVtdqhf0RVtFILH3OyEodlk1HYXqX5iE5wlaKzDop
PKwf2Q3BErq1xChYGGVS+dEvyXc/2nIBlt7uLWKp4XFjqekKbaGaLJdjYP5b2s7N
1dM0MXQ/f8XoXKBkJNzEiM3hfsU6DOREgMc1DIsFKxfuMwX3EkVQM1If8ghb6x5Y
jXayv+NLbidOSzk4vl5QwngO/JYFMkoc6i9LNwEaEtR9PhnrdubxmrtM+RjfBm02
77q3dSWFESFQ4QxYWew4pHE0DpWbWy/iMIKQ6UZ5RLvB8GEcgt8ON7BBJeMc+Dyi
kT9qhqn+lw==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIICiDCCAgygAwIBAgIIQX76UsB/30owDAYIKoZIzj0EAwMFADB6MQswCQYDVQQG
EwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UECwwXQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNpYWwgQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkgRTEwHhcNMTkwNDI4MTYyMDQ0WhcNNDkwNDIwMTYyMDQ0
WjB6MQswCQYDVQQGEwJDTjEWMBQGA1UECgwNQW50IEZpbmFuY2lhbDEgMB4GA1UE
CwwXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMTAvBgNVBAMMKEFudCBGaW5hbmNp
YWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRTEwdjAQBgcqhkjOPQIBBgUrgQQA
IgNiAASCCRa94QI0vR5Up9Yr9HEupz6hSoyjySYqo7v837KnmjveUIUNiuC9pWAU
WP3jwLX3HkzeiNdeg22a0IZPoSUCpasufiLAnfXh6NInLiWBrjLJXDSGaY7vaokt
rpZvAdmjXTBbMAsGA1UdDwQEAwIBBjAMBgNVHRMEBTADAQH/MB0GA1UdDgQWBBRZ
4ZTgDpksHL2qcpkFkxD2zVd16TAfBgNVHSMEGDAWgBRZ4ZTgDpksHL2qcpkFkxD2
zVd16TAMBggqhkjOPQQDAwUAA2gAMGUCMQD4IoqT2hTUn0jt7oXLdMJ8q4vLp6sg
wHfPiOr9gxreb+e6Oidwd2LDnC4OUqCWiF8CMAzwKs4SnDJYcMLf2vpkbuVE4dTH
Rglz+HGcTLWsFs4KxLsq7MuU+vJTBUeDJeDjdA==
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
MIIDxTCCAq2gAwIBAgIUEMdk6dVgOEIS2cCP0Q43P90Ps5YwDQYJKoZIhvcNAQEF
BQAwajELMAkGA1UEBhMCQ04xEzARBgNVBAoMCmlUcnVzQ2hpbmExHDAaBgNVBAsM
E0NoaW5hIFRydXN0IE5ldHdvcmsxKDAmBgNVBAMMH2lUcnVzQ2hpbmEgQ2xhc3Mg
MiBSb290IENBIC0gRzMwHhcNMTMwNDE4MDkzNjU2WhcNMzMwNDE4MDkzNjU2WjBq
MQswCQYDVQQGEwJDTjETMBEGA1UECgwKaVRydXNDaGluYTEcMBoGA1UECwwTQ2hp
bmEgVHJ1c3QgTmV0d29yazEoMCYGA1UEAwwfaVRydXNDaGluYSBDbGFzcyAyIFJv
b3QgQ0EgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOPPShpV
nJbMqqCw6Bz1kehnoPst9pkr0V9idOwU2oyS47/HjJXk9Rd5a9xfwkPO88trUpz5
4GmmwspDXjVFu9L0eFaRuH3KMha1Ak01citbF7cQLJlS7XI+tpkTGHEY5pt3EsQg
wykfZl/A1jrnSkspMS997r2Gim54cwz+mTMgDRhZsKK/lbOeBPpWtcFizjXYCqhw
WktvQfZBYi6o4sHCshnOswi4yV1p+LuFcQ2ciYdWvULh1eZhLxHbGXyznYHi0dGN
z+I9H8aXxqAQfHVhbdHNzi77hCxFjOy+hHrGsyzjrd2swVQ2iUWP8BfEQqGLqM1g
KgWKYfcTGdbPB1MCAwEAAaNjMGEwHQYDVR0OBBYEFG/oAMxTVe7y0+408CTAK8hA
uTyRMB8GA1UdIwQYMBaAFG/oAMxTVe7y0+408CTAK8hAuTyRMA8GA1UdEwEB/wQF
MAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBLnUTfW7hp
emMbuUGCk7RBswzOT83bDM6824EkUnf+X0iKS95SUNGeeSWK2o/3ALJo5hi7GZr3
U8eLaWAcYizfO99UXMRBPw5PRR+gXGEronGUugLpxsjuynoLQu8GQAeysSXKbN1I
UugDo9u8igJORYA+5ms0s5sCUySqbQ2R5z/GoceyI9LdxIVa1RjVX8pYOj8JFwtn
DJN3ftSFvNMYwRuILKuqUYSHc2GPYiHVflDh5nDymCMOQFcFG3WsEuB+EYQPFgIU
1DHmdZcz7Llx8UOZXX2JupWCYzK1XhJb+r4hK5ncf/w8qGtYlmyJpxk3hr1TfUJX
Yf4Zr0fJsGuv
-----END CERTIFICATE-----

View File

@ -0,0 +1,23 @@
-----BEGIN CERTIFICATE-----
MIIEgjCCA2qgAwIBAgIQICUCFE7HTf+7v9yXtoeyLjANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UE
BhMCQ04xFjAUBgNVBAoMDUFudCBGaW5hbmNpYWwxIDAeBgNVBAsMF0NlcnRpZmljYXRpb24gQXV0
aG9yaXR5MTkwNwYDVQQDDDBBbnQgRmluYW5jaWFsIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENs
YXNzIDEgUjEwHhcNMjUwMjE0MDkxMDAwWhcNMzAwMjEzMDkxMDAwWjBKMQswCQYDVQQGEwJDTjEP
MA0GA1UECgwG5Ya35paMMQ8wDQYDVQQLDAZBbGlwYXkxGTAXBgNVBAMMEDIwODg5NDI5ODk0ODI1
NzkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCQuhRU5iHoabfzJS40A+moMKzb5rmi
5XbL59K98CW65Oq/rnzQnj6sCYggIXOLCLKUykZ1XIVa+4V7bGFkMDF0236ncPumnVY/tfCSebLy
Kl+up1mGeH4mAR6ily7nXAhRnXL+A0015bpCa5FCg2ReN68MEmquB/mHfeLqJfRupwzDWnIWxYSK
kFCJ0i47KTFYhM93LHHQ8GrZNNaeiJ6q59MruQI83z0HCxN/DzK4Z2rBWGilwPuYcSEa0STPXYhz
8XMXUX/Mlp7dd5zyWeNaxkNRWlhKHvhLVPGvteaEcchs476DIWLCRVXEC1372wMKNrKblzRp7Wi5
+l+W14k5AgMBAAGjggEpMIIBJTAfBgNVHSMEGDAWgBRxB+IEYRbk5fJl6zEPyeD0PJrVkTAdBgNV
HQ4EFgQUqfZMfgxmG9w6m5lXQSdoiPe0vagwQAYDVR0gBDkwNzA1BgdggRwBbgEBMCowKAYIKwYB
BQUHAgEWHGh0dHA6Ly9jYS5hbGlwYXkuY29tL2Nwcy5wZGYwDgYDVR0PAQH/BAQDAgbAMC8GA1Ud
HwQoMCYwJKAioCCGHmh0dHA6Ly9jYS5hbGlwYXkuY29tL2NybDk4LmNybDBgBggrBgEFBQcBAQRU
MFIwKAYIKwYBBQUHMAKGHGh0dHA6Ly9jYS5hbGlwYXkuY29tL2NhNi5jZXIwJgYIKwYBBQUHMAGG
Gmh0dHA6Ly9jYS5hbGlwYXkuY29tOjgzNDAvMA0GCSqGSIb3DQEBCwUAA4IBAQAmDOoavQGthLtz
WuW1e0g0K2WChYevFcnWWNILTJ0EsB01Ka0FagOo1T3ErGns+G9lbSj9g6DQZ5DVqLCGnl2ZRvBN
KwSnA/7Frllf7CebBaW5WWJ3VKWxP929izvywlPeQdmRELNGK4H/IZoW+nCDYjUgXLOLMgBnqmLY
wgug/g3iQ+yFSFuvSNE2J84FwPycWweDJ8zrj4aM9S/bjjWoE/Lfe/a86BIYV19A72Ozc/aTGnxP
W/D5txDrhO2wWeCzXd7TuBN1Hze5IX/hYeDqM3rjHuQcGcbFJOchqqR5fUEC/SU9MZ4j/KWND83l
Y28GbRbP5jxhgckHIKjfKh6b
-----END CERTIFICATE-----

View File

@ -0,0 +1,6 @@
# 发件人(必须正确,否则发送失败)
from = 2119157836@qq.com
# 密码注意某些邮箱需要为SMTP服务单独设置授权码
pass = wetaiadftmidejab
# 使用SSL安全连接
sslEnable = true

View File

@ -0,0 +1,57 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<!-- 添加视口元标签,确保在移动设备上正确缩放 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no">
<title>绑定失败</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f9;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
/* 防止在小屏幕上出现水平滚动条 */
overflow-x: hidden;
}
.container {
background-color: #ffffff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
text-align: center;
width: 90%;
max-width: 400px;
/* 为小屏幕设备减少内边距 */
box-sizing: border-box;
}
h1 {
color: #ff6b6b;
font-size: clamp(20px, 5vw, 24px);
/* 使用 clamp 函数动态调整字体大小 */
margin-bottom: 10px;
}
p {
color: #555;
font-size: clamp(14px, 4vw, 16px);
/* 使用 clamp 函数动态调整字体大小 */
margin-top: 0;
}
/* 当屏幕宽度小于 320px 时进一步调整样式 */
@media (max-width: 320px) {
.container {
padding: 15px;
}
}
</style>
</head>
<body>
<div class="container">
<h1>支付宝账号绑定失败!</h1>
<p>请检查您的网络或稍后重试。</p>
</div>
</body>
</html>

View File

@ -0,0 +1,53 @@
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<!-- 确保页面在移动设备上正确缩放 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>绑定成功</title>
<style>
body {
font-family: Arial, sans-serif;
background-color: #f4f4f9;
display: flex;
justify-content: center;
align-items: center;
height: 100vh;
margin: 0;
overflow-x: hidden;
}
.container {
background-color: #ffffff;
padding: 20px;
border-radius: 8px;
box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);
text-align: center;
width: 90%;
max-width: 400px;
box-sizing: border-box;
}
h1 {
color: #28a745;
font-size: clamp(20px, 5vw, 24px);
margin-bottom: 10px;
}
p {
color: #555;
font-size: clamp(14px, 4vw, 16px);
margin-top: 0;
}
/* 小屏幕适配 */
@media (max-width: 320px) {
.container {
padding: 15px;
}
}
</style>
</head>
<body>
<div class="container">
<h1>支付宝账号绑定成功!</h1>
<p>您可以返回用户中心继续操作。</p>
</div>
</body>
</html>

View File

@ -1,71 +0,0 @@
//package com.mcwl.memberCenter;
//
//import com.mcwl.McWlApplication;
//import com.mcwl.common.core.domain.AjaxResult;
//import com.mcwl.memberCenter.consumer.EmptyPointsRemindConsumer;
//import com.mcwl.memberCenter.service.MemberLevelService;
//import com.mcwl.memberCenter.service.MemberService;
//import com.mcwl.memberCenter.task.UserMemberTask;
//import com.mcwl.web.controller.memberCenter.MemberController;
//import com.mcwl.web.controller.memberCenter.MemberLevelController;
//import org.junit.Test;
//import org.junit.runner.RunWith;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.test.context.junit4.SpringRunner;
//
//@RunWith(SpringRunner.class)
//@SpringBootTest(classes = McWlApplication.class)
//public class MemberCenterTest {
//
//
// @Autowired
// private MemberLevelService memberLevelService;
//
// @Autowired
// private MemberController memberController;
//
// @Autowired
// private MemberService memberService;
//
// @Autowired
// private UserMemberTask userMemberTask;
//
// @Autowired
// private MemberLevelController memberLevelController;
//
// @Autowired
// private EmptyPointsRemindConsumer emptyPointsRemindConsumer;
// @Test
// public void createUserMember() {
// System.out.println(memberService.createUserMember(1L, 1013L, "wechat",1L));
// }
//
// @Test
// public void emptyPointsTaskTest() {
// userMemberTask.emptyPointsTsk();
// }
//
// @Test
// public void updateSubscriptionStatusTaskTest() {
// userMemberTask.updateSubscriptionStatusTask();
// }
//
//
// @Test
// public void memberServiceTest() {
// System.out.println(memberLevelService.list());
// }
//
// @Test
// public void getPointsTest() {
// AjaxResult points = memberController.getPoints();
// System.out.println("points = " + points);
// }
//
// @Test
// public void getMemberLevelListTest() {
// System.out.println("memberLevelController.getMemberBenefitList() = " + memberLevelController.getMemberBenefitList());
// }
//
//}

View File

@ -18,6 +18,30 @@
<dependencies>
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.12.0</version>
<exclusions>
<exclusion>
<artifactId>slf4j-simple</artifactId>
<groupId>org.slf4j</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<!-- Jackson -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!--OSS-->
<dependency>
<groupId>com.aliyun.oss</groupId>
@ -160,10 +184,12 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
@ -349,7 +375,7 @@
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.2.1</version>
<version>4.5.13</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
@ -362,7 +388,46 @@
<version>2.6</version>
</dependency>
<!-- Spring Test Dependency for MockMultipartFile -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.3.25</version> <!-- 请确保与 spring-web 使用相同的主要版本 -->
</dependency>
<!-- obs文件存储 3.23.5 3.19.7 -->
<dependency>
<groupId>com.huaweicloud</groupId>
<artifactId>esdk-obs-java</artifactId>
<version>3.19.7</version>
</dependency>
<!-- WebSocket支持 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<!-- &lt;!&ndash; 微信公众号扫码登录需要 &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.github.binarywang</groupId>-->
<!-- <artifactId>weixin-java-mp</artifactId>-->
<!-- <version>4.4.0</version>-->
<!-- </dependency>-->
<!-- &lt;!&ndash; 微信公众号扫码登录需要 &ndash;&gt;-->
<!-- <dependency>-->
<!-- <groupId>com.github.binarywang</groupId>-->
<!-- <artifactId>wx-java-mp-spring-boot-starter</artifactId>-->
<!-- <version>4.4.0</version>-->
<!-- </dependency>-->
</dependencies>
<repositories>
<repository>
<id>huawei-public</id>
<url>https://repo.huaweicloud.com/repository/maven/</url>
</repository>
</repositories>
</project>

View File

@ -22,7 +22,7 @@ public @interface RepeatSubmit
/**
* (ms)
*/
public int interval() default 5000;
public int interval() default 1000;
/**
*

View File

@ -0,0 +1,18 @@
package com.mcwl.common.config;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper()
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.setSerializationInclusion(JsonInclude.Include.NON_NULL);
}
}

View File

@ -52,5 +52,19 @@ public class CacheConstants
*/
public static final String WE_CHAT = "we_chat";
/**
*
*/
public static final String ID_CARD_COUNT = "id_card_count:";
/**
*
*/
public static final String MODEL = "model";
/**
*
*/
public static final String WORK_FLOW = "work_flow";
}

View File

@ -1,8 +1,9 @@
package com.mcwl.common.constant;
import java.util.Locale;
import io.jsonwebtoken.Claims;
import java.util.Locale;
/**
*
*
@ -10,6 +11,17 @@ import io.jsonwebtoken.Claims;
*/
public class Constants
{
/**
*
*/
public static final String WORKFLOW = "workflow";
/**
*
*/
public static final String MODEL = "model";
/**
* UTF-8
*/
@ -163,7 +175,12 @@ public class Constants
/**
* 访
*/
public static final String[] JOB_WHITELIST_STR = { "com.mcwl.quartz.task" };
public static final String[] JOB_WHITELIST_STR = {
"com.mcwl.quartz.task",
"com.mcwl.memberCenter.task",
"com.mcwl.pay.task",
"com.mcwl.communityCenter.task"
};
/**
*

View File

@ -0,0 +1,79 @@
package com.mcwl.common.constant;
/**
*
*
* @author DaiZibo
* @date 2025/1/14
* @apiNote
*/
public class DictConstants {
/**
*
*/
public static final String MALL_PRODUCT_STATUS = "mall_product_status";
/**
*
*/
public static final String DICT_TYPE_MODEL_VERSION_HIGH = "dict_type_model_version_high";
/**
*
*/
public static final String MODEL_CATEGORY = "model_category";
/**
*
*/
public static final String MODEL_PART_CATEGORY = "model_part_category";
/**
*
*/
public static final String MODEL_CHILD_CATEGORY = "model_child_category";
/**
*
*/
public static final String WORK_FLOW_THEME = "work_flow_theme";
/**
*
*/
public static final String WORK_FLOW_STYLE = "work_flow_style";
/**
*
*/
public static final String WORK_FLOW_FUNCTIONS = "work_flow_functions";
/**
*
*/
public static final String IMAGE_LABEL = "image_label";
/**
*
*/
public static final String WORK_FLOW_TYPE_CHILD = "work_flow_type_child";
/**
*
*/
public static final String MODEL_TYPE = "model_type";
/**
*
*/
public static final String REPORT_LABEL = "report_label";
/**
* -
*/
public static final String MODE_VERSION_TYPE = "mode_version_type";
}

View File

@ -91,4 +91,9 @@ public class HttpStatus
*
*/
public static final int WARN = 601;
/**
*
*/
public static final int SHOW_ERROR_MSG = 12202;
}

View File

@ -0,0 +1,74 @@
/*
* Copyright (c) 2017. Lorem ipsum dolor sit amet, consectetur adipiscing elit.
* www.hnapay.com
*/
package com.mcwl.common.constant;
/**
*
*/
public class NcountKey {
public static String NCOUNT_URL = "https://ncount.hnapay.com/api/";
//新生签名使用的算法
public static String ALGORITHM = "RSA";
//类型
public static String SIGN_ALGORITHM = "SHA1withRSA";
//前置系统公钥
/*public static String NCOUNT_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9vGvYjivDF5uPBNDXMtoAtjYQ2YPSsfareduDG6kHL/N3A05rFHA11Dbr+UON82Y4V0RFKAQeZFPWcTLjcy6ntZVI8XoYLpuVQBPsb0Ya+PwbzR8/TmUdUf91ru8APtJgqkULgPVrO1hhzZ1tQMznosNLTOqbknMnnMcwzB5yYwIDAQAB";*/
public static String NCOUNT_PUBLIC_KEY = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC9vGvYjivDF5uPBNDXMtoAtjYQ" +
"2YPSsfareduDG6kHL/N3A05rFHA11Dbr+UON82Y4V0RFKAQeZFPWcTLjcy6ntZVI" +
"8XoYLpuVQBPsb0Ya+PwbzR8/TmUdUf91ru8APtJgqkULgPVrO1hhzZ1tQMznosNL" +
"TOqbknMnnMcwzB5yYwIDAQAB";
// public static String MER_PRIVATE_KEY = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOMNbm6VJwmOQh74\r\n" +
// "DyhrKpX+qLKYeeW3sUoXmmstka5AeAVf3UjHCwuZQHviwwGxUIdi0r320aIUetb1\r\n" +
// "gRPm4WDMz9FPsBs54hPhHxIBrt3mXEl9cP4S8YdlivQY7Hbf1WqxNhy5wEf0OpkZ\r\n" +
// "JjS7wEU46JfKwbGuzcSVkgWi+iuTAgMBAAECgYBX9OAO3qDcxss+jAHzOnCo4pof\r\n" +
// "dYnjP6HiffpIAsMoqbjU/CoRA2p398pPM60vfq0fhVz2UiMrkptzom96cjpkNpQ4\r\n" +
// "4uztdoozxKmnHiIV1ttISLqMjfh4xkapxVkFJDcEn8ZTpiMmfjEHX0ao3xk1gprL\r\n" +
// "vLMpRr1ar5vCqFEGIQJBAPgrGYpteTtjpZqskP9Pg9O7E4XuAgJ01Kqd7Mp8s3Ij\r\n" +
// "1nPUmhG+GDDV6MTNDVUfvLWTTvc4MjU2xTQm+6cu2RcCQQDqN72gqLbaKAMULUCt\r\n" +
// "vVST7eT53OBPMjbBi90JRqNPZrXuS+Wr7tw3zVb8j5p0w2qBotK7wEq9Pmjidlma\r\n" +
// "JhblAkAT95vJeH9tmNnlNQdBk4s+yOmMOBcvTWkjBSvdKuVhRKLnlO6EiO/3Ve6x\r\n" +
// "jvIIrFIJpf2PhJT9lReO16gdznYnAkEApvOCpNF+PXUF9Mzo7K8naabKb9yku28E\r\n" +
// "nuPOc/05DbEd/7V0CiFiMhiZZ8AJDi/5bFyesBw6ajjhVIOeDQYXjQJARsJP8PDK\r\n" +
// "8sEtHtXwOn2vKbx1lSpT9aX3uK/eB7zJLUMBcAsLsoHZC+YqjKjoSD4sGM6ukH0w\r\n" +
// "zzlZdaTU3Ued3g==";
//测试环境商户私钥
/*public static String MER_PRIVATE_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAM2Ak5XX86FypU3t\n" +
"DSXlDQp+eXgowPLjBoEt0ZfEfhUtLIrU8J4YzUiz9tUzI6o6mGafDltUasdyRtt3\n" +
"+NdSQuFq7MhZyWwGUqle3ybGswYVkN8+LMADCQEOYphM4p0j/OGw7QYcL/ERHsUW\n" +
"2MGPR6M/9xe0KURIDdeJC0ulxQ8TAgMBAAECgYEAqgTfldBl68PbSb5+60Q25uC+\n" +
"hJBLGmiDwCp1Rng1zDVkrbQBIvvoE2d5Jui5cCQsZHLhwOP1t+8u+nKmuRaA51vB\n" +
"sQ+F01SqYrmS/TV/iD5xjAteSXmTf76doP7FwrHuRQ391KcdIn+W0R7cv1tLBY5B\n" +
"oRnAcAwWhQMiRWf+yPECQQD6TtJ7kETd5Rl3YryFMTvfW73oHxss87jz6/tUIPxF\n" +
"rXYu+ywD4Ut1AWwtN6Td6kZhWOUhG2d4OUVYP0FtjjprAkEA0izql6EQB7SF8AE5\n" +
"j8U7Weg8IqPk8b78neav8y1CpjSuwOaRxcS1Mk+W2/AXRvTRL2VUw+Az4boAz3MS\n" +
"WnP3+QJBAJW6vtfhRgDCQciTjJfUCq+irmgC63upUzK+L7p0fNOlXrPd1ceAZmXY\n" +
"cwBdb8a7lFw5E98JCIz3HU8bj6TcVn8CQQC3EfLBYsSwwXjNBnQaHAVHmfcPgU0B\n" +
"mYc3DuKB4hGk7kytr+iXqHDgQt039FiCMOso6o28FEV8v+TGzgfVjCAZAkA9NWuj\n" +
"VEHwFLZLtftLDQxGfJmWJGl4CipOjv6YpQEw0A2NBtUp5tuiJ09DNq5RaKJbfWUY\n" +
"fQJkAZ0tsrXBWqgK";*/
public static String MER_PRIVATE_KEY = "MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBALAkYQn6emeoRsStWebayuyqMB91j27j+gMJO+YqdK1jVpgp4yh2pja9TxQvoLnd3mJcjyACYvW8imWjgtRDDJK4FOj1pYK+EgbX+32PpD8STDnbC93JertbexKk3NNQi5cur40qGEWRspJEPHZTvobZ+EhsJlH8b/oGG1VKORlXAgMBAAECgYA5qf82tBCEhNt+Ib4vzGroZaLRebwWMn4zpj88z6NY7A96SyQ5p/YsL3eHBTyZ/J+EFgcpFH7vMeUg9xGqibTAexqulCNTvOQBYNGra85yUsnob19sHR/YCx80HI5el8RD2mRL6kbmOnab5yi5O2fc8tl+DRJztKXU3YgNH+OhsQJBAPUENKWJJU/OloKYAvOceAy66ZzEKI/myt5x5jcmZTp7bc0wzsxQQ60TfTqfmpOqEd9cJWxggHvutzCBqPovOZkCQQC4CcaSKs3Z2E9/uPr92Z+DIv/5RHTkq66WstG5iM/5aoz7Hf7mP8xTgcjtKNPTcb+nC5IE6M41IuWnSAz8bCBvAkEAuR/FW3GFFIil5eRPDpuhhRTQn9cCQsABdhMe+3pyL77Elq2TAoJ+r82y59FhrMJqIJZx3DIJwhn6pZbCAs4duQJBAKTMrDIrflY660WWIbu7aqmFZ+6QrJQwYJC15DPeHU5daY1dGOqZ6qBEseYdD0Jis5okNEeNKUpPy5J2ZJqNQKUCQQDdyqJhwxjiQ7BtafYNEf/fmP5bkHSKhzOM6lIN8cLX6h535xHObHdOpmKgUg9mLHgJvlNQy+glh40AF2HdNcLS";
public static String MER_ID = "300050402928";
/**
* id
*/
public static String ZFB_MER_ID = "2405101553133642463";
//测试环境商户ID
//public static String MER_ID = "110000030228";
}

View File

@ -19,6 +19,26 @@ public class QueueConstants {
// 会员账单队列
public static final String MEMBER_BILLING_QUEUE = "memberBillingQueue";
// 模型点赞队列
public static final String MODEL_LIKE_QUEUE = "modelLikeQueue";
// 模型评论点赞队列
public static final String MODEL_COMMENT_LIKE_QUEUE = "modelCommentLikeQueue";
// 图片点赞队列
public static final String IMAGE_LIKE_QUEUE = "imageLikeQueue";
// 图片评论点赞队列
public static final String IMAGE_COMMENT_LIKE_QUEUE = "imageCommentLikeQueue";
// 工作流点赞队列
public static final String WORK_FLOW_LIKE_QUEUE = "workFlowLikeQueue";
// 工作流评论点赞队列
public static final String WORK_FLOW_COMMENT_LIKE_QUEUE = "workFlowCommentLikeQueue";
// 系统消息队列
public static final String SYS_MSG_QUEUE = "sysMsgQueue";

View File

@ -11,4 +11,6 @@ package com.mcwl.common.constant;
public class RedisConstants {
public static final String CODE_PHONE = "code_phone:";
public static final String CODE_UUID = "code_uuid:";
}

View File

@ -1,21 +1,23 @@
package com.mcwl.common.core.domain;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Entity
*
* @author mcwl
*/
public class BaseEntity implements Serializable
{
private static final long serialVersionUID = 1L;
@ -26,17 +28,21 @@ public class BaseEntity implements Serializable
private String searchValue;
/** 创建者 */
@TableField(fill = FieldFill.INSERT)
private String createBy;
/** 创建时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/** 更新者 */
@TableField(fill = FieldFill.UPDATE)
private String updateBy;
/** 更新时间 */
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
// 删除标志0代表存在 2代表删除

View File

@ -2,12 +2,15 @@ package com.mcwl.common.core.domain;
import java.io.Serializable;
import com.mcwl.common.constant.HttpStatus;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
*
*
* @author mcwl
*/
@ApiModel(value = "响应结果")
public class R<T> implements Serializable
{
private static final long serialVersionUID = 1L;
@ -18,10 +21,13 @@ public class R<T> implements Serializable
/** 失败 */
public static final int FAIL = HttpStatus.ERROR;
@ApiModelProperty(value = "状态码")
private int code;
@ApiModelProperty(value = "提示信息")
private String msg;
@ApiModelProperty(value = "数据对象")
private T data;
public static <T> R<T> ok()

View File

@ -1,13 +1,14 @@
package com.mcwl.common.core.domain.entity;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.mcwl.common.annotation.Excel;
import com.mcwl.common.annotation.Excel.ColumnType;
import com.mcwl.common.constant.UserConstants;
import com.mcwl.common.core.domain.BaseEntity;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
/**
* sys_dict_data
@ -52,6 +53,20 @@ public class SysDictData extends BaseEntity
@Excel(name = "状态", readConverterExp = "0=正常,1=停用")
private String status;
/**
* ID
*/
@Excel(name = "父级ID标志")
private Integer partId;
public Integer getPartId() {
return partId;
}
public void setPartId(Integer partId) {
this.partId = partId;
}
public Long getDictCode()
{
return dictCode;

View File

@ -115,12 +115,44 @@ public class SysUser extends BaseEntity
*/
private Double freePoints;
/**
* -
*/
private Double wallet;
/**
*
*/
private Boolean isAttention;
/**
*
*/
private String backgroundImg;
/**
*
*/
private String invitationCode;
/**
*
*/
private String invitationName;
public SysUser()
{
}
public String getBackgroundImg() {
return backgroundImg;
}
public void setBackgroundImg(String backgroundImg) {
this.backgroundImg = backgroundImg;
}
public SysUser(Long userId)
{
this.userId = userId;
@ -168,6 +200,7 @@ public class SysUser extends BaseEntity
this.nickName = nickName;
}
@Xss(message = "用户账号不能包含脚本字符")
@NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
@ -193,6 +226,14 @@ public class SysUser extends BaseEntity
this.email = email;
}
public Long getInviterUserId() {
return inviterUserId;
}
public void setInviterUserId(Long inviterUserId) {
this.inviterUserId = inviterUserId;
}
@Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
public String getPhonenumber()
{
@ -348,13 +389,7 @@ public class SysUser extends BaseEntity
this.brief = brief;
}
public Long getInviterUserId() {
return inviterUserId;
}
public void setInviterUserId(Long inviterUserId) {
this.inviterUserId = inviterUserId;
}
public Double getFreePoints() {
return freePoints;
@ -364,6 +399,30 @@ public class SysUser extends BaseEntity
this.freePoints = freePoints;
}
public Double getWallet() {
return wallet;
}
public void setWallet(Double wallet) {
this.wallet = wallet;
}
public Boolean getAttention() {
return isAttention;
}
public void setAttention(Boolean attention) {
isAttention = attention;
}
public String getInvitationCode() {
return invitationCode;
}
public void setInvitationCode(String invitationCode) {
this.invitationCode = invitationCode;
}
@Override
public String toString() {
return "SysUser{" +
@ -390,6 +449,19 @@ public class SysUser extends BaseEntity
", idCard='" + idCard + '\'' +
", inviterUserId=" + inviterUserId +
", freePoints=" + freePoints +
", wallet=" + wallet +
", isAttention=" + isAttention +
", backgroundImg='" + backgroundImg + '\'' +
", invitationCode='" + invitationCode + '\'' +
", invitationName='" + invitationName + '\'' +
'}';
}
public String getInvitationName() {
return invitationName;
}
public void setInvitationName(String invitationName) {
this.invitationName = invitationName;
}
}

View File

@ -1,27 +1,39 @@
package com.mcwl.common.core.page;
import com.mcwl.common.utils.StringUtils;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import javax.validation.constraints.NotNull;
/**
*
*
* @author mcwl
*/
@ApiModel("分页数据")
public class PageDomain
{
/** 当前记录起始索引 */
@NotNull(message = "当前记录起始索引不能为空")
@ApiModelProperty(value = "当前记录起始索引",required = true)
private Integer pageNum;
/** 每页显示记录数 */
@NotNull(message = "每页显示记录数不能为空")
@ApiModelProperty(value = "每页显示记录数",required = true)
private Integer pageSize;
/** 排序列 */
@ApiModelProperty(value = "排序列")
private String orderByColumn;
/** 排序的方向desc或者asc */
@ApiModelProperty(hidden = true)
private String isAsc = "asc";
/** 分页参数合理化 */
@ApiModelProperty(hidden = true)
private Boolean reasonable = true;
public String getOrderBy()

View File

@ -1,5 +1,8 @@
package com.mcwl.common.core.page;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serializable;
import java.util.List;
@ -8,20 +11,25 @@ import java.util.List;
*
* @author mcwl
*/
@ApiModel("表格分页数据对象")
public class TableDataInfo implements Serializable
{
private static final long serialVersionUID = 1L;
/** 总记录数 */
@ApiModelProperty(value = "总记录数")
private long total;
/** 列表数据 */
@ApiModelProperty(value = "列表数据")
private List<?> rows;
/** 消息状态码 */
@ApiModelProperty(value = "消息状态码")
private int code;
/** 消息内容 */
@ApiModelProperty(value = "消息内容")
private String msg;
/**

View File

@ -1,10 +1,14 @@
package com.mcwl.common.domain;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.List;
@Data
@ApiModel(description = "id集合")
public class IdsParam {
@ApiModelProperty(value = "id集合")
private List<Long> ids;
}

View File

@ -0,0 +1,33 @@
package com.mcwl.common.enums;
/**
* @AuthorChenYan
* @ProjectMcWl
* @Packagecom.mcwl.pay.domain
* @FilenamePaymentStatus
* @Description TODO
* @Date2025/1/3 17:24
*/
public enum PaymentStatus {
PENDING("待支付"),
COMPLETED("已支付"),
FAILED("支付失败"),
REFUNDED("已退款");
private final String description;
PaymentStatus(String description) {
this.description = description;
}
public String getDescription() {
return description;
}
@Override
public String toString() {
return name() + "(" + description + ")";
}
}

View File

@ -12,7 +12,9 @@ public enum ResultCode {
SUCCESS(200),//成功
FAIL(400),//失败
FAIL(400),//
FAIL_MSG(12202),//失败
FAIL_SIGN_IN(401),//登录失败

View File

@ -0,0 +1,114 @@
/**
*
*/
package com.mcwl.common.exception;
import org.apache.commons.lang3.StringUtils;
/**
* NCountDemoException
*/
public class NCountDemoException extends Exception {
/**
*
*/
private static final long serialVersionUID = -7121642511651992156L;
/**
*
*/
@SuppressWarnings("rawtypes")
protected Class errClass = null;
/**
*
*/
protected String errCode = null;
/**
*
*/
protected String errMsg = null;
public NCountDemoException() {
super();
}
public NCountDemoException(String errMsg) {
super("no errMsg");
this.errMsg = errMsg;
}
public NCountDemoException(String errMsg, Exception e) {
super("no errMsg", e);
this.errMsg = errMsg;
}
public NCountDemoException(String errCode, String errMsg) {
super(errMsg);
this.errCode = errCode;
this.errMsg = errMsg;
}
public NCountDemoException(String errCode, String errMsg, Exception e) {
super(errMsg, e);
this.errCode = errCode;
this.errMsg = errMsg;
}
@SuppressWarnings("rawtypes")
public NCountDemoException(String errCode, Class errClass) {
super("no errMsg");
this.errCode = errCode;
this.errClass = errClass;
}
@SuppressWarnings("rawtypes")
public NCountDemoException(String errCode, String errMsg, Class errClass) {
super(errMsg);
this.errCode = errCode;
this.errMsg = errMsg;
this.errClass = errClass;
}
@SuppressWarnings("rawtypes")
public NCountDemoException(String errCode, String errMsg, Class errClass, Exception e) {
super(errMsg, e);
this.errClass = errClass;
this.errCode = errCode;
this.errMsg = errMsg;
}
public String printErrMsg() {
StringBuffer msg = new StringBuffer("");
if (StringUtils.isNotBlank(errCode)) {
msg.append("Exception errCode is [").append(this.errCode).append("];\n");
}
if (this.errClass != null) {
msg.append("Exception Class is [").append(this.errClass.getName()).append("];\n");
}
msg.append("Exception Message is [").append(this.errMsg).append("];\n");
// 打印错误异常堆栈
if (getCause() != null) {
getCause().printStackTrace();
}
return msg.toString();
}
@SuppressWarnings("rawtypes")
public Class getErrClass() {
return errClass;
}
public String getErrCode() {
return errCode;
}
public String getErrMsg() {
return errMsg;
}
}

View File

@ -0,0 +1,46 @@
package com.mcwl.common.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.mcwl.common.utils.SecurityUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.util.Date;
/**
* mybatis-plus
*/
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
try {
this.strictInsertFill(metaObject, "createBy", String.class, SecurityUtils.getLoginUser().getUser().getNickName());
} catch (Exception e) {
this.strictInsertFill(metaObject, "createBy", String.class, "");
}
this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
try {
this.strictInsertFill(metaObject, "tenantId", Long.class, SecurityUtils.getUserId());
} catch (Exception e) {
this.strictInsertFill(metaObject, "tenantId", Long.class, -1L);
}
}
@Override
public void updateFill(MetaObject metaObject) {
try {
this.setFieldValByName("updateBy", SecurityUtils.getLoginUser().getUser().getNickName(), metaObject);
} catch (Exception e) {
this.setFieldValByName("updateBy", "", metaObject);
}
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}

View File

@ -1,53 +0,0 @@
///*
// * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
// *
// * https://www.mall4j.com/
// *
// * 未经允许,不可做商业用途!
// *
// * 版权所有,侵权必究!
// */
//package com.mcwl.common.i18n;
//
//
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.context.i18n.LocaleContextHolder;
//import org.springframework.core.annotation.Order;
//import org.springframework.stereotype.Component;
//
//import javax.servlet.*;
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//import java.io.IOException;
//import java.util.Locale;
//import java.util.Objects;
//
///**
// * RequestContextFilter 会传入默认的Locale优先级(-105) 要比RequestContextFilter优先级高
// * @author LGH
// */
//@Slf4j
//@Component
//@Order(-104)
//public class YamiLocaleChangeFilter implements Filter {
//
// public static String ZH_CN = "zh_CN";
// public static String ZH_CN_L = "zh_cn";
//
// @Override
// public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// HttpServletRequest request = (HttpServletRequest) servletRequest;
// HttpServletResponse response = (HttpServletResponse) servletResponse;
//
// String newLocale = request.getHeader("locale");
// if(Objects.equals(newLocale,ZH_CN)||Objects.equals(newLocale,ZH_CN_L)){
// newLocale = "zh";
// }
// if (newLocale != null) {
// String lowerLocale = newLocale.toLowerCase();
// LocaleContextHolder.setLocale(new Locale(lowerLocale));
// }
// filterChain.doFilter(request, response);
// }
//}

View File

@ -1,58 +0,0 @@
///*
// * Copyright (c) 2018-2999 广州市蓝海创新科技有限公司 All rights reserved.
// *
// * https://www.mall4j.com/
// *
// * 未经允许,不可做商业用途!
// *
// * 版权所有,侵权必究!
// */
//package com.mcwl.common.i18n;
//
//
//
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.web.servlet.LocaleResolver;
//import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
//import org.springframework.web.servlet.support.RequestContextUtils;
//
//import javax.servlet.http.HttpServletRequest;
//import javax.servlet.http.HttpServletResponse;
//
///**
// * @author LGH
// */
//@Component("localeChangeInterceptor")
//@Slf4j
//public class YamiLocaleChangeInterceptor extends LocaleChangeInterceptor {
//
// @Override
// public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
//
// String newLocale = request.getHeader(getParamName());
// if (newLocale != null) {
// LocaleResolver localeResolver = RequestContextUtils.getLocaleResolver(request);
// if (localeResolver == null) {
// throw new IllegalStateException(
// "No LocaleResolver found: not in a DispatcherServlet request?");
// }
// try {
// localeResolver.setLocale(request, response, parseLocaleValue(newLocale));
// }
// catch (IllegalArgumentException ex) {
// if (isIgnoreInvalidLocale()) {
// if (logger.isDebugEnabled()) {
// logger.debug("Ignoring invalid locale value [" + newLocale + "]: " + ex.getMessage());
// }
// }
// else {
// throw ex;
// }
// }
// }
// // Proceed in any case.
// return true;
// }
//
//}

View File

@ -0,0 +1,69 @@
package com.mcwl.common.utils;
/**
* Base64
* @author DaiZibo
* @date 2025/1/16
* @apiNote
*/
public class Base64Util {
private static final char last2byte = (char) Integer.parseInt("00000011", 2);
private static final char last4byte = (char) Integer.parseInt("00001111", 2);
private static final char last6byte = (char) Integer.parseInt("00111111", 2);
private static final char lead6byte = (char) Integer.parseInt("11111100", 2);
private static final char lead4byte = (char) Integer.parseInt("11110000", 2);
private static final char lead2byte = (char) Integer.parseInt("11000000", 2);
private static final char[] encodeTable = new char[]{'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '+', '/'};
public Base64Util() {
}
public static String encode(byte[] from) {
StringBuilder to = new StringBuilder((int) ((double) from.length * 1.34D) + 3);
int num = 0;
char currentByte = 0;
int i;
for (i = 0; i < from.length; ++i) {
for (num %= 8; num < 8; num += 6) {
switch (num) {
case 0:
currentByte = (char) (from[i] & lead6byte);
currentByte = (char) (currentByte >>> 2);
case 1:
case 3:
case 5:
default:
break;
case 2:
currentByte = (char) (from[i] & last6byte);
break;
case 4:
currentByte = (char) (from[i] & last4byte);
currentByte = (char) (currentByte << 2);
if (i + 1 < from.length) {
currentByte = (char) (currentByte | (from[i + 1] & lead2byte) >>> 6);
}
break;
case 6:
currentByte = (char) (from[i] & last2byte);
currentByte = (char) (currentByte << 4);
if (i + 1 < from.length) {
currentByte = (char) (currentByte | (from[i + 1] & lead4byte) >>> 4);
}
}
to.append(encodeTable[currentByte]);
}
}
if (to.length() % 4 != 0) {
for (i = 4 - to.length() % 4; i > 0; --i) {
to.append("=");
}
}
return to.toString();
}
}

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