From 43286f10ef6a7c1d16c6b999500296e9108a5efa Mon Sep 17 00:00:00 2001 From: Fdily <2949549024@qq.com> Date: Thu, 24 Sep 2026 14:55:58 +0800 Subject: [PATCH] =?UTF-8?q?swagger=20=E6=8E=A8=E5=B9=BF=E5=90=8E=E5=8F=B0?= =?UTF-8?q?=20=E4=BC=98=E5=8C=96=E5=AF=B9=E6=88=98=E7=99=BE=E4=BD=B3?= =?UTF-8?q?=E5=8E=86=E5=8F=B2=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/README.md | 24 +- mahjong-py/generate_rounds.py | 405 ++++++++++++++++++ pom.xml | 22 - promo-ui2/src/api/login/index.ts | 20 +- .../src/views/Login/components/LoginForm.vue | 69 ++- .../views/Login/components/RegisterForm.vue | 57 ++- promo-ui2/src/views/RollRoom/index.vue | 7 +- ruoyi-admin/pom.xml | 6 - .../system/SysDictDataController.java | 6 - .../controller/system/SysLoginController.java | 2 - .../web/controller/tool/TestController.java | 21 +- .../ruoyi/web/core/config/SwaggerConfig.java | 170 -------- .../src/main/resources/application-dev.yml | 10 +- .../src/main/resources/application-pro.yml | 14 +- .../framework/config/SecurityRulesTest.java | 125 ++++++ ruoyi-common/pom.xml | 7 - .../common/core/domain/model/LoginUser.java | 16 + .../common/utils/file/MimeTypeUtils.java | 4 +- .../framework/config/ResourcesConfig.java | 7 - .../framework/config/SecurityConfig.java | 63 ++- .../web/service/UserDetailsServiceImpl.java | 4 +- .../websocket/connector/WsTokenService.java | 5 + ruoyi-ui/src/views/skins/ttuser/index.vue | 38 +- ruoyi-ui/src/views/tool/swagger/index.vue | 17 - .../dto/packSack/PackSackCondition.java | 4 - .../domain/dto/share/ShareRecordQueryDTO.java | 6 - .../ruoyi/domain/other/ApiShoppingBody.java | 10 - .../ruoyi/domain/other/CreateFightBody.java | 4 - .../ruoyi/domain/other/CreateOrderParam.java | 4 - .../com/ruoyi/domain/other/FightBoutData.java | 4 - .../ruoyi/promo/config/PromoWebConfig.java | 2 +- .../PromoAdminManageController.java | 9 - .../controller/PromoCaptchaController.java | 5 - .../controller/PromoCardKeyController.java | 8 - .../controller/PromoCdkeyController.java | 8 - .../controller/PromoLoginController.java | 28 -- .../promo/controller/PromoMenuController.java | 7 - .../promo/controller/PromoRollController.java | 115 +++-- .../promo/controller/PromoSmsController.java | 98 ++--- .../controller/PromoTurnoverController.java | 31 +- .../ruoyi/promo/model/PromoPhoneRequest.java | 14 + .../promo/service/PromoAccountService.java | 85 ++++ .../promo/service/PromoLoginService.java | 4 +- .../service/impl/PromoLoginServiceImpl.java | 150 +++---- .../controller/MahjongAdminController.java | 7 - .../controller/MahjongClientController.java | 7 - .../controller/AdminWheelController.java | 15 - .../wheel/controller/ApiWheelController.java | 8 - skins-service/pom.xml | 13 - .../AdminGlobalRewardPoolController.java | 7 - .../AdminBlankCardKeyController.java | 4 - .../controller/LossRebateController.java | 7 - .../admin/controller/ShoppingController.java | 6 - .../admin/controller/TtBoxController.java | 12 - .../controller/TtBoxOrnamentsController.java | 6 - .../controller/TtCardMerchantController.java | 5 - .../TtDeliveryRecordController.java | 7 - .../TtOfficialRollConfigController.java | 9 - .../admin/controller/TtOrderController.java | 4 - .../controller/TtOrnamentsController.java | 8 - .../TtOrnamentsLevelController.java | 4 - .../controller/TtPromoTurnoverController.java | 3 - .../controller/TtRedPacketController.java | 4 - .../admin/controller/TtRollController.java | 18 - .../controller/TtRollJackpotController.java | 5 - .../TtRollJackpotOrnamentsController.java | 6 - .../controller/TtTransferApplyController.java | 9 - .../TtUpgradeFailOrnamentsController.java | 6 - .../TtUpgradeOrnamentsController.java | 5 - .../controller/TtUpgradeRecordController.java | 4 - .../TtUpgradeWatermarkController.java | 9 - .../TtUserAmountRecordsController.java | 5 - .../TtUserBlendErcashController.java | 5 - .../admin/controller/TtUserController.java | 10 - .../TurnoverLotteryAdminController.java | 10 - .../TurnoverLotteryPrizeController.java | 8 - .../TurnoverLotteryRecordController.java | 5 - .../TurnoverLotteryUserController.java | 7 - .../controller/WebsitePropertyController.java | 5 - .../ruoyi/admin/mapper/TtOrnamentMapper.java | 1 - .../security/ApiUserDetailsServiceImpl.java | 22 +- .../admin/service/TtFightResultService.java | 4 +- .../ruoyi/admin/service/TtUserService.java | 8 +- .../impl/TtFightResultServiceImpl.java | 191 ++++----- .../admin/service/impl/TtUserServiceImpl.java | 36 +- .../request/ClassicBoxRecordPageRequest.java | 7 - .../api/request/GetRollListParamRequest.java | 3 - .../controller/ApiBindBoxController.java | 34 +- .../controller/ApiBoxRecordsController.java | 6 +- .../controller/ApiCompoundController.java | 9 +- .../controller/ApiExponentController.java | 29 +- .../controller/ApiFightController.java | 47 +- .../controller/ApiFightRoomController.java | 6 +- .../controller/ApiLuckyUpgradeController.java | 16 +- .../controller/ApiRedPackContoller.java | 8 - .../ApiReplacementRecordController.java | 6 +- .../controller/ApiRollController.java | 16 +- .../ApiTtAttendanceRecordController.java | 2 - .../controller/ApiUserAvatarController.java | 7 +- .../controller/ApiWelfareController.java | 18 +- .../ApiWelfareMonthlyRechargesController.java | 12 +- .../ruoyi/playingmethod/model/ApiWelfare.java | 1 - .../model/vo/ApiFightCardVo.java | 26 ++ .../playingmethod/model/vo/ApiFightInfo.java | 87 ++++ .../model/vo/ApiFightRecordVo.java | 42 ++ .../model/vo/ApiFightResultVo.java | 37 ++ .../service/ApiFightService.java | 12 +- .../service/impl/ApiFightServiceImpl.java | 233 +++++++--- .../task/controller/TtTaskController.java | 4 - .../MaYi/controller/MYController.java | 5 - .../abkpay/controller/AbkPayController.java | 7 - .../alipay/controller/AliPayController.java | 4 - .../controller/BaiweiPayController.java | 4 - .../controller/ChengduHipayController.java | 8 - .../controller/ApiCommonController.java | 4 - .../ApiRechargeConfigController.java | 5 - .../controller/ApiRechargeController.java | 6 - .../common/controller/ApiSmsController.java | 30 +- .../controller/DeliverGoodsController.java | 9 - .../thirdparty/common/model/ApiSmsBody.java | 4 - .../common/model/ApiSmsNoSliderBody.java | 16 - .../common/model/UnifiedPayRequest.java | 3 - .../service/impl/ApiSmsServiceImpl.java | 52 ++- .../common/task/LoadAllOrnaments.java | 1 - .../gfht/controller/GfhtController.java | 4 - .../hipay/controller/HiPayController.java | 4 - .../hipay/controller/PayRequest.java | 3 - .../itpay/controller/ItPayController.java | 7 - .../controller/JiuJiaPayController.java | 5 - .../richku/controller/RichKuController.java | 8 - .../snappay/controller/SnapPayController.java | 7 - .../wechat/controller/TianXinController.java | 10 +- .../controller/XinghuoPayController.java | 4 - .../controller/yyyoupingController.java | 9 - .../service/Impl/yyyoupingServiceImpl.java | 1 - .../zbt/controller/ZBTController.java | 5 - .../zyZFB/controller/ZyController.java | 14 +- .../ApiAdvertisementController.java | 4 +- .../controller/ApiAnnouncementController.java | 12 +- .../controller/ApiBlendErcashController.java | 6 +- .../user/controller/ApiBonusController.java | 10 +- .../user/controller/ApiCaptchaController.java | 5 - .../user/controller/ApiLoginController.java | 14 +- .../user/controller/ApiMessageController.java | 14 +- .../user/controller/ApiNoticeController.java | 14 +- .../user/controller/ApiOrderController.java | 6 +- .../ApiPromotionRecordController.java | 2 +- .../controller/ApiRegisterController.java | 4 - .../user/controller/ApiShareController.java | 5 - .../controller/ApiShoppingController.java | 9 +- .../controller/ApiTaskCenterController.java | 12 +- .../ApiUserAmountRecordsController.java | 42 +- .../user/controller/ApiUserController.java | 79 ++-- .../ApiUserCreditsRecordsController.java | 9 +- .../controller/ApiUserPackSackController.java | 16 +- .../ApiUserProfileRecordsController.java | 4 - .../ApiUserSubAccountController.java | 6 - .../controller/ApiWebsiteSetupController.java | 8 +- .../impl/ApiTaskCenterServiceImpl.java | 1 - .../user/service/impl/ApiUserServiceImpl.java | 10 +- 160 files changed, 1710 insertions(+), 1719 deletions(-) create mode 100644 mahjong-py/generate_rounds.py delete mode 100644 ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java create mode 100644 ruoyi-admin/src/test/java/com/ruoyi/framework/config/SecurityRulesTest.java delete mode 100644 ruoyi-ui/src/views/tool/swagger/index.vue create mode 100644 skins-promo/src/main/java/com/ruoyi/promo/model/PromoPhoneRequest.java create mode 100644 skins-promo/src/main/java/com/ruoyi/promo/service/PromoAccountService.java create mode 100644 skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightCardVo.java create mode 100644 skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightInfo.java create mode 100644 skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightRecordVo.java create mode 100644 skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightResultVo.java delete mode 100644 skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/ApiSmsNoSliderBody.java diff --git a/docs/README.md b/docs/README.md index 6ff8cbf..ebf2492 100644 --- a/docs/README.md +++ b/docs/README.md @@ -19,7 +19,7 @@ | 缓存 | Redis(Spring Data Redis + Lettuce) | | 消息 | RabbitMQ(业务侧配置虚拟主机等,详见各 profile) | | 实时 | WebSocket(如 `/ws/**` 等路径,与安全放行配置保持一致) | -| API 文档 | **Springfox 3.x**(主用,Swagger / OAS3 分组);另引入 **springdoc-openapi** Starter,可与 Springfox 并行存在 | +| API 文档 | 已移除(不再依赖 Springfox / springdoc,仓库内无 Swagger UI 与 OpenAPI 端点) | --- @@ -81,7 +81,7 @@ chengdu-backend/ ### 对外匿名接口(简述) -与安全配置对齐的常见分类包括:`/login`、`/register`、`/captchaImage`,以及业务侧的 `/api/**`、`/admin/**`、WebSocket、部分 Swagger 与 Druid 监控路径等。具体请以 `ruoyi-framework` 中 **SecurityFilterChain** 与白名单配置为准。 +与安全配置对齐的常见分类包括:`/login`、`/register`、`/captchaImage`,以及业务侧的 `/api/**`、`/admin/**`、WebSocket、Druid 监控路径等。具体请以 `ruoyi-framework` 中 **SecurityFilterChain** 与白名单配置为准。 --- @@ -130,7 +130,7 @@ mvn -pl ruoyi-admin -am spring-boot:run -DskipTests - 技术栈:Vue CLI、Element UI(`package.json` 声明 Node `>=8.9`,实际开发建议 Node **16 LTS** 或 **18 LTS**,并按需开启 OpenSSL 兼容)。 - 脚本见 `ruoyi-ui/package.json`(Windows 脚本含 `set NODE_OPTIONS=--openssl-legacy-provider`;在 macOS/Linux 上需 `export NODE_OPTIONS=...` 或使用等价脚本)。 - 开发与打包:`npm run dev`、`npm run build:prod` 等。 -- 系统工具内「Swagger」页当前 iframe 指向 **`/doc.html`**;若后端未部署对应聚合页,请改为与下文 **API 文档** 中实际地址一致(例如 `/swagger-ui.html`)。 +- 原「系统工具 → 系统接口」的 Swagger 页已随接口文档一并删除(`views/tool/swagger/index.vue`),若侧边栏仍有该菜单,执行 `DELETE FROM sys_menu WHERE component = 'tool/swagger/index';` 后重新登录。 ### promo-ui2(Vue 3) @@ -158,16 +158,14 @@ mvn -pl ruoyi-admin -am spring-boot:run -DskipTests ## API 文档 -- **Springfox(当前主要使用)**:启动后访问(端口与 `server.port` 一致,仓库默认 **28081**) - `http://localhost:28081/swagger-ui.html` - 在页面右上角切换分组(如 `user`、`thirdParty`、`playingMethod`、`task`、`promo` 等;与 `SwaggerConfig` 中 Docket 一致)。OpenAPI JSON 路径形如 `//api-docs`(Spring Security 已对 `/*/api-docs` 等放行,以实际配置为准)。 -- **springdoc-openapi**:`ruoyi-admin` 已引入依赖;若单独启用 SpringDoc UI,需确保 **Security** 对 `/swagger-ui/**`、`/v3/api-docs` 等路径放行,避免 401。 +- 项目已**移除全部接口文档能力**:删除 Springfox(`springfox-boot-starter`)、springdoc-openapi 依赖、`SwaggerConfig` 与源码中的 `@Api` / `@ApiOperation` / `@ApiModelProperty` 等注解,`SecurityConfig` 与 `ResourcesConfig` 里对应的放行与静态映射也已去掉。 +- 因此 `/swagger-ui.html`、`/v3/api-docs`、`/*/api-docs`、`/doc.html` 均不再对外提供服务(未认证访问会直接落到 401)。 --- ## 版本信息 -- 父 POM:`com.ruoyi:ruoyi:4.8.2`(`spring-boot.version` **4.0.3**,`springdoc.version` **3.0.2**,`swagger` / Springfox **3.0.0**) +- 父 POM:`com.ruoyi:ruoyi:4.8.2`(`spring-boot.version` **4.0.3**) - 若依官网参考: --- @@ -175,7 +173,13 @@ mvn -pl ruoyi-admin -am spring-boot:run -DskipTests ## 安全建议 1. 轮换并私有化所有第三方(支付宝、聚合支付、短信等)密钥;生产环境勿使用仓库内示例明文。 -2. 修改 JWT `token.secret` 与 Druid 监控口令等非默认值。 -3. 按需收紧 Druid、`/actuator`(若启用)及 Swagger 相关路径的访问范围。 +2. 修改 JWT `token.secret` 等非默认值。 +3. Druid 监控台:生产已关闭(`application-pro.yml` 的 `statViewServlet.enabled=false`,`/druid/**` 是匿名放行的,开着等于把全部 SQL 与连接信息暴露到公网); + 开发环境已限制 `allow: 127.0.0.1` 并改用非默认口令。临时排障如需开启,务必保持白名单 + 改口令,用完立即关回。 +4. **三端 token 互不通用**(游戏管理后台 / 推广后台 / 玩家端):三个端共用同一套 JWT 与会话存储, + 靠 `LoginUser.loginScope`(`admin` / `promo` / `player`)区分,判定在 `ruoyi-framework` 的 `SecurityConfig`: + `/admin|/system|/monitor|/tool|/test` 只认后台账号、`/promo/**` 只认推广端签发的 token、`/api/**` 只认玩家端签发的 token。 + 标记由 `ApiUserDetailsServiceImpl` 按登录账号前缀(`api_` / `promo_` / `promo_user_` / 无前缀)写入,随会话缓存在 Redis。 + **注意**:升级到该版本后,不带端标记的旧 token 会被拒绝,推广后台与玩家端需要重新登录一次(后台账号不受影响)。 如有与本说明不一致之处,以当前仓库代码及团队部署文档为准。 diff --git a/mahjong-py/generate_rounds.py b/mahjong-py/generate_rounds.py new file mode 100644 index 0000000..26d05d5 --- /dev/null +++ b/mahjong-py/generate_rounds.py @@ -0,0 +1,405 @@ +"""麻将胡了 · 回合池生成器:把引擎跑出的回合写进 `game_mahjong_round` / `game_mahjong_step`。 + +两种模式: + --mode natural (默认)自然形态:不干预,直接采样落库。**RTP≈5.25,只能测链路,不能当验收**。 + --mode quota 配额构造:先标定每桶池内实测均值 → 二分解出 16 桶配额(空转率锁 65%、目标 RTP 0.80) + → 按配额定量填充。**这才是能上线/能做 RTP 验收的池子**。 + +用法(在 mahjong-py 目录下): + python generate_rounds.py --mode quota --per-box 1000 --dry-run + python generate_rounds.py --mode quota --per-box 1000 --write + python generate_rounds.py --mode natural --per-box 100 --dry-run + python generate_rounds.py --boxes 1,2 --per-box 100 --write --mode quota + +写库内容(两种模式一样): + 1. `game_mahjong_round`:每局一行(bucket_id / actual_mul / 旋数 / 波数 / has_fs / near_miss) + 2. `game_mahjong_step`:每帧一行(逐波;含 grid_state / ways_detail / 下落补位 / 阶梯 / 触发信息) + 3. `game_mahjong_box_bucket`:**配额就是 count**(3 个身份各一套,used=0) + 4. `game_mahjong_box_template`:每箱每身份一条生效模板(= 配额快照,供抽干补桶) + 5. `game_mahjong_box.total_rounds`:回写成本次生成的回合数 +""" +from __future__ import annotations + +import argparse +import json +import math +import random +import sys +from collections import Counter +from pathlib import Path + +sys.path.insert(0, str(Path(__file__).resolve().parent)) + +from mahjong import config as C # noqa: E402 +from mahjong.engine import GRID_COLS, GRID_ROWS, play_round # noqa: E402 + +DB = dict(host="127.0.0.1", port=23306, user="henan", password="iTSJSPPZM3LSGAPC", database="henan") +EMPTY_SHARE = 0.65 # 空转率(桶 1 配额占比,见设计文档 §3.9);未按箱分档时的统一值 + +# 按档调波动(用户 2026-09-22 定):**所有箱子 RTP 都锁 0.80**,但波动不同 —— +# 低档(1~20):空转低 → 剩余配额必须更"平" → 小奖更多、手感热; +# 高档(200~500):空转高 → 剩余配额更"陡" → 中大奖更多、博性更强。 +# 机制:`solve_quotas` 会把"剩余部分"的加权均值凑到 `0.80/(1-空转率)`,所以 +# **只改空转率就能同时改形状**,不用再单独调 power。 +VOLATILITY_LADDER = ( + (20, 0.62, "低档:空转 62%,小奖更多(热)"), + (100, 0.65, "中档:空转 65%(设计基准)"), + (10 ** 9, 0.68, "高档:空转 68%,中大奖更多(陡)"), +) + + +def empty_share_for(box_id: int) -> float: + bet = C.bet_of(box_id) + for upper, share, _ in VOLATILITY_LADDER: + if bet <= upper: + return share + return EMPTY_SHARE +TARGET_RTP = 0.80 +CALIB_ROUNDS = 6000 # 每箱标定样本(用来量每个桶的**池内实测**均值) +MAX_TRIES = 400_000 # 单个桶的采样上限(防低概率桶把时间吃光) + + +# ---------------------------------------------------------------- 行构造 +def grid_rows(flat) -> list: + """扁平 20 格 → 4 行 × 5 列(接口用的 gridState 形状)。""" + return [list(flat[r * GRID_COLS:(r + 1) * GRID_COLS]) for r in range(GRID_ROWS)] + + +def build_steps(round_, round_id: int): + """把一局摊成逐帧行。""" + rows, step_seq = [], 0 + spin_win = 0.0 + for spin in round_.spins: + spin_win_before = spin_win + acc_sym = Counter() + winners = [] + rotations = spin.rotations + frames = rotations or (None,) # 空旋也要发一帧(落定盘面),否则客户端无从渲染 + for i, rot in enumerate(frames, start=1): + step_seq += 1 + if rot is None: + grid_flat = spin.landing + ways, removed, drops, fills, conv, gold = [], [], [], [], [], [] + base_mul, rot_mul = 0.0, C.ladder_mul(1, spin.is_fs) + else: + grid_flat = rot.grid_before + gold = [{"pos": p, "symbol": rot.grid_before[p - 1]} for p in rot.golden_before] + conv = [{"pos": p, "fromSymbol": s} for p, s in rot.converted] + ways = [{"symbol": w.symbol, "reelCount": w.run, "counts": list(w.counts), + "loc": list(w.loc), "ways": w.ways, "payBase": w.pay_base, + "rotationMul": rot.rotation_mul, + "win": round(w.pay_base * rot.rotation_mul, 4)} + for w in rot.wins] + seen = set() + removed = [p for w in rot.wins for p in w.loc if not (p in seen or seen.add(p))] + drops = [{"from": a, "to": b, "symbol": s} for a, b, s in rot.drops] + fills = [{"pos": p, "symbol": s} for p, s in rot.fills] + base_mul, rot_mul = rot.base_mul, rot.rotation_mul + for w in rot.wins: + acc_sym[w.symbol] += len(w.loc) + winners.append({"symbol": w.symbol, "count": w.run, + "win": round(w.pay_base * rot.rotation_mul, 4)}) + spin_win = spin_win_before + sum(r.win_mul for r in rotations[:i]) + is_last = (i == len(frames)) + scat = ({"scatterCount": spin.scatters, "freeSpins": spin.fs_awarded, "extraSpins": 0} + if spin.index == 0 and i == 1 and spin.fs_awarded else None) + retri = ({"scatterCount": spin.scatters, "extraSpins": C.fs_award(spin.scatters)} + if spin.index > 0 and i == 1 and spin.retrigger else None) + rows.append(dict( + id=round_id * 100 + step_seq, + round_id=round_id, + reel_spin_id=spin.index, + rotation_seq=i, + grid_state=json.dumps(grid_rows(grid_flat), ensure_ascii=False) if grid_flat else None, + golden_detail=json.dumps(gold, ensure_ascii=False) if gold else None, + wild_converted=json.dumps(conv, ensure_ascii=False) if conv else None, + ways_detail=json.dumps(ways, ensure_ascii=False) if ways else None, + accumulated_symbols=json.dumps(dict(acc_sym), ensure_ascii=False), + spin_winners=json.dumps(winners, ensure_ascii=False), + removed_positions=json.dumps(removed), + drop_data=json.dumps(drops, ensure_ascii=False) if drops else None, + fill_data=json.dumps(fills, ensure_ascii=False) if fills else None, + scatter_trigger=json.dumps(scat, ensure_ascii=False) if scat else None, + retrigger_info=json.dumps(retri, ensure_ascii=False) if retri else None, + base_score=round(base_mul, 4), + win_amount=round(sum(r.win_mul for r in rotations[:i]), 4), + rotation_mul=rot_mul, + spin_win=round(spin_win, 4), + win_capped=1 if (round_.capped and is_last and spin is round_.spins[-1]) else 0, + bigwin_level=None, + is_final=1 if is_last else 0, + )) + spin_win = spin_win_before + sum(r.win_mul for r in rotations) + return rows + + +def make_round(box_id: int, seq: int, rng: random.Random): + r = play_round(rng, box_id=box_id) + round_id = box_id * 1_000_000 + seq + steps = build_steps(r, round_id=round_id) + row = dict(round_id=round_id, box_id=box_id, bucket_id=C.bucket_of(r.actual_mul), + actual_mul=round(r.actual_mul, 4), free_spin_count=r.free_spins, + total_rotations=sum(len(s.rotations) for s in r.spins), + has_fs=1 if r.has_fs else 0, near_miss=1 if r.near_miss else 0) + return row, steps + + +# ---------------------------------------------------------------- 配额构造 +def calibrate(box_id: int, n: int, seed: int): + """小样本标定:每个桶的**池内实测均值**(自然均值与名义 expect_mul 差很多,必须实测)。""" + rng = random.Random(seed) + tot, cnt = Counter(), Counter() + for _ in range(n): + r = play_round(rng, box_id=box_id) + b = C.bucket_of(r.actual_mul) + tot[b] += r.actual_mul + cnt[b] += 1 + means = {} + for b in C.BUCKETS: + means[b.id] = (tot[b.id] / cnt[b.id]) if cnt[b.id] else b.expect_mul + return means, cnt + + +def _quota_from_power(means, power: float, empty_share: float): + """w_b = 30×0.6^((b-1)×power)(b≥2),桶 1 锁 empty_share;返回 16 个配额(下标 1..16)。""" + ws = {b.id: 30.0 * (0.6 ** ((b.id - 1) * power)) for b in C.BUCKETS if b.id >= 2} + s = sum(ws.values()) + q = {b.id: 0.0 for b in C.BUCKETS} + q[1] = empty_share + for b_id, w in ws.items(): + q[b_id] = (1.0 - empty_share) * w / s + return q + + +def solve_quotas(means, target_rtp=TARGET_RTP, empty_share=EMPTY_SHARE): + """二分 power,使 Σ q_b × mean_b = target_rtp。power 越大越偏向低倍桶(期望越低)。""" + def expected(power): + q = _quota_from_power(means, power, empty_share) + return sum(q[b.id] * means[b.id] for b in C.BUCKETS) + lo, hi = 0.05, 8.0 + # expected(power) 随 power **递减**:power 越大越偏向低倍桶 + for _ in range(80): + mid = (lo + hi) / 2 + if expected(mid) > target_rtp: + lo = mid # 期望偏高 → 还要更大的 power + else: + hi = mid + q = _quota_from_power(means, (lo + hi) / 2, empty_share) + return q, expected((lo + hi) / 2) + + +def _fill(box_id: int, targets: dict, seed: int, max_tries=MAX_TRIES): + """按桶目标条数填充:落进目标桶才收。返回 (pool, bucket_cnt, short)。""" + rng = random.Random(seed) + pool, tries, short = [], Counter(), [] + for b in C.BUCKETS: + got = 0 + while got < targets[b.id] and tries[b.id] < max_tries: + tries[b.id] += 1 + row, steps = make_round(box_id, len(pool) + 1, rng) + if row["bucket_id"] == b.id: + pool.append((row, steps)) + got += 1 + if got < targets[b.id]: + short.append(f"桶{b.id} {got}/{targets[b.id]}") + for i, (row, steps) in enumerate(pool, start=1): + rid = box_id * 1_000_000 + i + row["round_id"] = rid + for j, st in enumerate(steps, start=1): + st["round_id"] = rid + st["id"] = rid * 100 + j + cnt = Counter(row["bucket_id"] for row, _ in pool) + return pool, cnt, short + + +def quota_targets(per_box: int, quotas: dict): + targets = {b.id: int(round(per_box * quotas[b.id])) for b in C.BUCKETS} + diff = per_box - sum(targets.values()) + if diff: + targets[1] += diff + return targets + + +def _sample_bucket(box_id: int, bucket_id: int, rng: random.Random, max_tries=MAX_TRIES): + """采一条落进指定桶的回合(低概率桶会多试几次)。""" + for _ in range(max_tries): + row, steps = make_round(box_id, 0, rng) + if row["bucket_id"] == bucket_id: + return row, steps + return None + + +def _tune(box_id: int, pool: list, target_rtp: float, per_box: int, seed: int, verbose=True): + """整数可执行的定向微调:配额算出来是小数,四舍五入会把「0.4 条」的尾部桶抹成 0 条, + 于是它本该贡献的期望就丢了(实测池内均值会系统性偏低 5~8pt)。 + + 做法:拿空转局(桶 1,倍率 0)去换中高桶的回合,每换一条按**真实倍率**结账, + 直到池内均值落进目标 ±0.005 以内。空转率只会动几条(<0.5pt)。 + """ + rng = random.Random(seed + 31337) + cur = sum(r["actual_mul"] for r, _ in pool) + need = target_rtp * per_box - cur # 还差多少(单位:倍率总和) + empties = [i for i, (r, _) in enumerate(pool) if r["bucket_id"] == 1] + ordered = sorted((x for x in C.BUCKETS if x.id >= 2), key=lambda x: -x.expect_mul) + swaps = 0 + while need > 0.6 and empties and ordered: + cand = next((b for b in ordered if b.expect_mul <= need), None) + if cand is None: + break + got = None + for _ in range(300): # 只收"不超过缺口"的回合,保证不会冲过头 + s = _sample_bucket(box_id, cand.id, rng) + if s and s[0]["actual_mul"] <= need: + got = s + break + if got is None: # 这一档试不出来,退一档 + ordered = [b for b in ordered if b.id != cand.id] + continue + row, steps = got + pool[empties.pop()] = (row, steps) + need -= row["actual_mul"] + swaps += 1 + rng = random.Random(rng.random()) # 让后续采样换流 + if verbose and swaps: + print(f" 微调:换入 {swaps} 条中高桶回合(空转率随之动 {swaps / per_box:.2%})") + cnt = Counter(r["bucket_id"] for r, _ in pool) + rtp = sum(r["actual_mul"] for r, _ in pool) / max(1, len(pool)) + if verbose: + print(f" 微调后池内实测 RTP {rtp:.4f}(与目标差 {abs(rtp - target_rtp):.4f})") + return pool, cnt + + +def generate_quota(box_id: int, per_box: int, seed: int, empty_share: float, target_rtp: float, + verbose=True): + """解配额 → 定条数 → 填充 → 整数微调 → 重排 id。 + + `empty_share`:桶 1 的配额占比。CLI 不传时按 `empty_share_for(box_id)` 取**按档波动**的值 + (低档 62% / 中档 65% / 高档 68%),这样各箱形状不同、但 RTP 都锁在 `target_rtp`。 + + 为什么填完还要微调:运行时按库存消耗(一个 cycle 每条回合正好播一次)⇒ `cycle RTP = 池内均值`, + 而配额是连续解出来的小数,四舍五入会抹掉尾部桶(见 `_tune` 的注释)。 + """ + means, _ = calibrate(box_id, CALIB_ROUNDS, seed) + quotas, exp_rtp = solve_quotas(means, target_rtp, empty_share) + targets = quota_targets(per_box, quotas) + if verbose: + print(f" 标定:配额理论期望 {exp_rtp:.4f}(目标 {target_rtp});桶1 配额 {quotas[1]:.2%};" + f"桶条数(1/2/3/12/16) = {targets[1]}/{targets[2]}/{targets[3]}/{targets[12]}/{targets[16]}") + pool, cnt, short = _fill(box_id, targets, seed + 999 + box_id * 7919) + pool, cnt = _tune(box_id, pool, target_rtp, per_box, seed + box_id, verbose) + for i, (row, steps) in enumerate(pool, start=1): # 重排 id(采样与微调都打乱了顺序) + rid = box_id * 1_000_000 + i + row["round_id"] = rid + for j, st in enumerate(steps, start=1): + st["round_id"] = rid + st["id"] = rid * 100 + j + return pool, quotas, means, exp_rtp, short + + +# ---------------------------------------------------------------- 写库 +def write(conn, pool_by_box, per_box, audiences=C.AUDIENCES): + cur = conn.cursor() + total_r = total_s = 0 + for box, (pool, quotas, bucket_cnt) in pool_by_box.items(): + rounds = [row for row, _ in pool] + steps = [st for _, sts in pool for st in sts] + lo, hi = box * 1_000_000 + 1, box * 1_000_000 + per_box + cur.execute(f"DELETE FROM game_mahjong_step WHERE round_id BETWEEN {lo} AND {hi}") + cur.execute(f"DELETE FROM game_mahjong_round WHERE box_id={box}") + cur.executemany( + "INSERT INTO game_mahjong_round (round_id,box_id,bucket_id,actual_mul,free_spin_count," + "total_rotations,has_fs,near_miss) VALUES (%(round_id)s,%(box_id)s,%(bucket_id)s," + "%(actual_mul)s,%(free_spin_count)s,%(total_rotations)s,%(has_fs)s,%(near_miss)s)", rounds) + cols = ("id", "round_id", "reel_spin_id", "rotation_seq", "grid_state", "golden_detail", + "wild_converted", "ways_detail", "accumulated_symbols", "spin_winners", + "removed_positions", "drop_data", "fill_data", "scatter_trigger", "retrigger_info", + "base_score", "win_amount", "rotation_mul", "spin_win", "win_capped", + "bigwin_level", "is_final") + cur.executemany( + f"INSERT INTO game_mahjong_step ({','.join(cols)}) " + f"VALUES ({','.join('%(' + c + ')s' for c in cols)})", steps) + for aud in audiences: + cur.execute("DELETE FROM game_mahjong_box_bucket WHERE box_id=%s AND audience=%s", (box, aud)) + cur.executemany( + "INSERT INTO game_mahjong_box_bucket (box_id,bucket_id,audience,count,used) " + "VALUES (%s,%s,%s,%s,0)", + [(box, b.id, aud, bucket_cnt.get(b.id, 0)) for b in C.BUCKETS]) + items = json.dumps([{"bucketId": b.id, "count": bucket_cnt.get(b.id, 0)} for b in C.BUCKETS], + ensure_ascii=False) + cur.execute("DELETE FROM game_mahjong_box_template WHERE box_id=%s AND audience=%s", (box, aud)) + cur.execute( + "INSERT INTO game_mahjong_box_template (box_id,audience,name,total_rounds,items_json,is_active) " + "VALUES (%s,%s,%s,%s,%s,1)", + (box, aud, f"配额池-{per_box}局", per_box, items)) + cur.execute("UPDATE game_mahjong_box SET total_rounds=%s WHERE box_id=%s", (per_box, box)) + conn.commit() + total_r += len(rounds) + total_s += len(steps) + rtp = sum(r["actual_mul"] for r in rounds) / max(1, len(rounds)) + print(f" 箱 {box:2d}(赌注 {C.bet_of(box):>3}):回合 {len(rounds):>5} 帧 {len(steps):>6} " + f"**池内实测 RTP {rtp:.4f}** 空转 {bucket_cnt.get(1,0)/max(1,len(rounds)):.1%} " + f"FS 局 {sum(r['has_fs'] for r in rounds)}") + print(f"合计:回合 {total_r},帧 {total_s}") + return total_r, total_s + + +def build_natural(box_id, per_box, seed): + rng = random.Random(seed + box_id) + pool, cnt = [], Counter() + for i in range(1, per_box + 1): + row, steps = make_round(box_id, i, rng) + pool.append((row, steps)) + cnt[row["bucket_id"]] += 1 + return pool, cnt + + +def main() -> None: + ap = argparse.ArgumentParser() + ap.add_argument("--mode", choices=("natural", "quota"), default="natural") + ap.add_argument("--per-box", type=int, default=1000) + ap.add_argument("--boxes", default="") + ap.add_argument("--seed", type=int, default=20260922) + ap.add_argument("--empty-share", type=float, default=None, + help="空转率(桶 1 配额占比);不传=按档取(低档 0.62 / 中档 0.65 / 高档 0.68)") + ap.add_argument("--target-rtp", type=float, default=TARGET_RTP) + ap.add_argument("--write", action="store_true") + ap.add_argument("--dry-run", action="store_true") + ap.add_argument("--host", default=DB["host"]); ap.add_argument("--port", type=int, default=DB["port"]) + ap.add_argument("--user", default=DB["user"]); ap.add_argument("--password", default=DB["password"]) + ap.add_argument("--database", default=DB["database"]) + args = ap.parse_args() + + boxes = [int(x) for x in args.boxes.split(",") if x.strip()] or list(C.BOX_IDS) + print(f"==== {args.mode} 模式:{len(boxes)} 箱 × {args.per_box} 局" + f"{'' if args.write and not args.dry_run else '(干跑,不写库)'} ====") + pool_by_box = {} + for box in boxes: + if args.mode == "natural": + pool, cnt = build_natural(box, args.per_box, args.seed) + quotas = None + pool_by_box[box] = (pool, quotas, cnt) + else: + share = args.empty_share if args.empty_share is not None else empty_share_for(box) + pool, quotas, means, exp_rtp, short = generate_quota( + box, args.per_box, args.seed, share, args.target_rtp) + cnt = Counter(row["bucket_id"] for row, _ in pool) + if short: + print(f" 未填满:{';'.join(short)}") + pool_by_box[box] = (pool, quotas, cnt) + if not (args.write and not args.dry_run): + rows = [r for r, _ in pool_by_box[box][0]] + rtp = sum(r["actual_mul"] for r in rows) / max(1, len(rows)) + print(f" 箱 {box:2d}(赌注 {C.bet_of(box):>3}):回合 {len(rows):>5} " + f"**池内实测 RTP {rtp:.4f}** 空转 {cnt.get(1,0)/max(1,len(rows)):.1%} " + f"FS 局 {sum(r['has_fs'] for r in rows)}") + if not (args.write and not args.dry_run): + return + import pymysql + conn = pymysql.connect(host=args.host, port=args.port, user=args.user, + password=args.password, database=args.database, charset="utf8mb4") + write(conn, pool_by_box, args.per_box) + conn.close() + + +if __name__ == "__main__": + main() diff --git a/pom.xml b/pom.xml index 235899c..bf713db 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,6 @@ 1.2.28 8.1.0 1.21 - 3.0.0 2.3.3 1.5.5 2.1.1 @@ -35,7 +34,6 @@ 4.1.2 2.3 0.9.1 - 3.0.2 @@ -149,26 +147,6 @@ ${oshi.version} - - - org.springdoc - springdoc-openapi-starter-webmvc-ui - ${springdoc.version} - - - - - io.springfox - springfox-boot-starter - ${swagger.version} - - - - - - - - commons-io diff --git a/promo-ui2/src/api/login/index.ts b/promo-ui2/src/api/login/index.ts index ccc43f6..0cf21fe 100644 --- a/promo-ui2/src/api/login/index.ts +++ b/promo-ui2/src/api/login/index.ts @@ -1,14 +1,10 @@ import request from '@/axios' -import type { RegisterUserType, SmsLoginType, UserLoginType, UserType } from './types' +import type { RegisterUserType, SmsLoginType, UserType } from './types' interface RoleParams { roleName: string } -export const loginApi = (data: UserLoginType): Promise> => { - return request.post({ url: '/promo/login', data }) -} - export const smsLoginApi = (data: SmsLoginType): Promise> => { return request.post({ url: '/promo/smsLogin', data }) } @@ -34,6 +30,20 @@ export const getCodeApi = ( }) } +/** 点「获取验证码」时的账号前置校验:无推广后台权限的号在这一步就被拒绝,不用先拖滑块 */ +export const precheckPhoneApi = ( + phoneNumber: string, + parentInvitationCode?: string +): Promise> => { + return request.post({ + url: '/promo/sms/precheck', + data: { + phoneNumber: phoneNumber, + parentInvitationCode + } + }) +} + export const loginOutApi = (): Promise => { return request.get({ url: '/mock/user/loginOut' }) } diff --git a/promo-ui2/src/views/Login/components/LoginForm.vue b/promo-ui2/src/views/Login/components/LoginForm.vue index 736bcc8..aa5045d 100644 --- a/promo-ui2/src/views/Login/components/LoginForm.vue +++ b/promo-ui2/src/views/Login/components/LoginForm.vue @@ -1,5 +1,5 @@ diff --git a/skins-model/src/main/java/com/ruoyi/domain/dto/packSack/PackSackCondition.java b/skins-model/src/main/java/com/ruoyi/domain/dto/packSack/PackSackCondition.java index dccf180..080774c 100644 --- a/skins-model/src/main/java/com/ruoyi/domain/dto/packSack/PackSackCondition.java +++ b/skins-model/src/main/java/com/ruoyi/domain/dto/packSack/PackSackCondition.java @@ -1,6 +1,5 @@ package com.ruoyi.domain.dto.packSack; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -12,7 +11,6 @@ import java.util.List; @Data public class PackSackCondition { - @ApiModelProperty("背包类型(1我的库存 2提货背包 3福利箱子)") private Integer packType; private List uidList; @@ -27,9 +25,7 @@ public class PackSackCondition { private String endTime; - @ApiModelProperty("价格排序方向(1升序 2降序,null不排序)") private Integer priceSort; - @ApiModelProperty("时间排序方向(1升序 2降序,null不排序)") private Integer timeSort; } diff --git a/skins-model/src/main/java/com/ruoyi/domain/dto/share/ShareRecordQueryDTO.java b/skins-model/src/main/java/com/ruoyi/domain/dto/share/ShareRecordQueryDTO.java index 1df40f0..f1ed7e5 100644 --- a/skins-model/src/main/java/com/ruoyi/domain/dto/share/ShareRecordQueryDTO.java +++ b/skins-model/src/main/java/com/ruoyi/domain/dto/share/ShareRecordQueryDTO.java @@ -1,25 +1,19 @@ package com.ruoyi.domain.dto.share; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; /** * 分享记录列表查询参数 */ @Data -@ApiModel("分享记录列表查询参数") public class ShareRecordQueryDTO { /** 可选;按被邀请人用户ID过滤 */ - @ApiModelProperty("下级用户ID(可选)") private Long subUserId; /** 页码(由前端传入) */ - @ApiModelProperty(value = "页码", required = true, example = "1") private Integer pageNum; /** 每页大小(由前端传入) */ - @ApiModelProperty(value = "每页大小", required = true, example = "10") private Integer pageSize; } diff --git a/skins-model/src/main/java/com/ruoyi/domain/other/ApiShoppingBody.java b/skins-model/src/main/java/com/ruoyi/domain/other/ApiShoppingBody.java index ac389d4..03c43ed 100644 --- a/skins-model/src/main/java/com/ruoyi/domain/other/ApiShoppingBody.java +++ b/skins-model/src/main/java/com/ruoyi/domain/other/ApiShoppingBody.java @@ -1,6 +1,5 @@ package com.ruoyi.domain.other; -import io.swagger.annotations.ApiParam; import lombok.Data; import jakarta.validation.constraints.Min; @@ -9,28 +8,20 @@ import java.math.BigDecimal; @Data public class ApiShoppingBody { - @ApiParam("商品名称") private String name; - @ApiParam("类型(0全部饰品 1匕首 2手枪 3步枪 4微型冲锋枪 5重型武器 6手套 7印花 8其它)") private String type; - @ApiParam("品质(1普通 2StatTrak™ 3纪念品 4★ 5★ StatTrak™ 6闪耀 7金色 8全息 9闪亮)") private String quality; - @ApiParam("稀有度") private String rarity; - @ApiParam("外观(1崭新出厂 2略有磨损 3久经沙场 4残损不堪 5战痕累累 6无涂装)") private String exterior; - @ApiParam("最高价格") private BigDecimal maxPrice; - @ApiParam("最低价格") private BigDecimal minPrice = BigDecimal.ZERO; - @ApiParam("1价格升序 2价格降序 3更新时间升序 4更新时间降序") private Integer sortBy; @Min(value = 1, message = "每页长度最小为1") @@ -39,7 +30,6 @@ public class ApiShoppingBody { @Min(value = 1, message = "页码最小为1") private Integer pageNum; - @ApiParam("是否可兑换") private Boolean isExchange; } diff --git a/skins-model/src/main/java/com/ruoyi/domain/other/CreateFightBody.java b/skins-model/src/main/java/com/ruoyi/domain/other/CreateFightBody.java index e037013..ab5cb1c 100644 --- a/skins-model/src/main/java/com/ruoyi/domain/other/CreateFightBody.java +++ b/skins-model/src/main/java/com/ruoyi/domain/other/CreateFightBody.java @@ -1,6 +1,5 @@ package com.ruoyi.domain.other; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; import jakarta.validation.constraints.Max; @@ -12,15 +11,12 @@ import java.util.Map; @Data public class CreateFightBody { - @ApiModelProperty("模式(0欧皇 1非酋)") @NotBlank(message = "模式不能为空") private String model; - @ApiModelProperty("玩家人数") @Max(value = 12, message = "最大值12") private Integer playerNumber; - @ApiModelProperty("组队模式(0或空=个人对战 1=2v2组队,座位0/1为一队、座位2/3为二队)") private Integer teamMode; // 所有宝箱 diff --git a/skins-model/src/main/java/com/ruoyi/domain/other/CreateOrderParam.java b/skins-model/src/main/java/com/ruoyi/domain/other/CreateOrderParam.java index 86f2d69..49af166 100644 --- a/skins-model/src/main/java/com/ruoyi/domain/other/CreateOrderParam.java +++ b/skins-model/src/main/java/com/ruoyi/domain/other/CreateOrderParam.java @@ -1,6 +1,5 @@ package com.ruoyi.domain.other; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; import lombok.NonNull; @@ -21,12 +20,9 @@ public class CreateOrderParam { @Min(value = 1, message = "最小值1") private Integer goodsNum; - @ApiModelProperty("对接qs支付新增:支付方式(alipay/wxpay)") private String payType; - @ApiModelProperty("1:原有支付,2:图片支付") private Integer payWay = 1; - @ApiModelProperty("百度推广bdvid") private String bdVid; } diff --git a/skins-model/src/main/java/com/ruoyi/domain/other/FightBoutData.java b/skins-model/src/main/java/com/ruoyi/domain/other/FightBoutData.java index ee5e237..01fd9ed 100644 --- a/skins-model/src/main/java/com/ruoyi/domain/other/FightBoutData.java +++ b/skins-model/src/main/java/com/ruoyi/domain/other/FightBoutData.java @@ -1,17 +1,13 @@ package com.ruoyi.domain.other; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class FightBoutData { - @ApiModelProperty("对战ID") private Integer fightId; - @ApiModelProperty("对战回合号") private Integer boutNum; - @ApiModelProperty("过期时间") private Integer expirationTime; } diff --git a/skins-promo/src/main/java/com/ruoyi/promo/config/PromoWebConfig.java b/skins-promo/src/main/java/com/ruoyi/promo/config/PromoWebConfig.java index 31aa163..ae04338 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/config/PromoWebConfig.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/config/PromoWebConfig.java @@ -23,6 +23,6 @@ public class PromoWebConfig implements WebMvcConfigurer { public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(promoMaintenanceInterceptor) .addPathPatterns("/promo/**") - .excludePathPatterns("/promo/login", "/promo/smsLogin", "/promo/register"); + .excludePathPatterns("/promo/smsLogin", "/promo/register"); } } diff --git a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoAdminManageController.java b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoAdminManageController.java index 4fa9e6d..f60bc40 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoAdminManageController.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoAdminManageController.java @@ -19,8 +19,6 @@ import com.ruoyi.domain.entity.sys.PromoAdmin; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.promo.domain.entity.PromoCardKey; import com.ruoyi.promo.mapper.PromoCardKeyMapper; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -32,7 +30,6 @@ import java.util.stream.Collectors; /** * 超级管理员专属管理接口 */ -@Api(tags = "超管管理") @RestController @RequestMapping("/promo/adminManage") public class PromoAdminManageController extends BaseController { @@ -63,7 +60,6 @@ public class PromoAdminManageController extends BaseController { /** * 招商管理:查看所有招商及其下属主播汇总数据 */ - @ApiOperation("招商管理列表") @GetMapping("/businessList") public R>> getBusinessList() { if (!isSuperAdmin()) { @@ -207,7 +203,6 @@ public class PromoAdminManageController extends BaseController { /** * 主播管理:查看所有主播及其下属用户汇总数据 */ - @ApiOperation("主播管理列表") @GetMapping("/anchorList") public R>> getAnchorList() { if (!isSuperAdmin()) { @@ -305,7 +300,6 @@ public class PromoAdminManageController extends BaseController { /** * 卡商管理:查看所有卡商及其卡密记录 */ - @ApiOperation("卡商管理列表") @GetMapping("/cardMerchantList") public R>> getCardMerchantList() { if (!isSuperAdmin()) { @@ -420,7 +414,6 @@ public class PromoAdminManageController extends BaseController { // ==================== 推广后台管理员账号管理(仅超管) ==================== - @ApiOperation("管理员列表") @GetMapping("/adminList") public R> adminList() { if (!isSuperAdmin()) { @@ -432,7 +425,6 @@ public class PromoAdminManageController extends BaseController { return R.ok(list); } - @ApiOperation("新增/修改管理员") @PostMapping("/saveAdmin") public R saveAdmin(@RequestBody PromoAdmin body) { if (!isSuperAdmin()) { @@ -511,7 +503,6 @@ public class PromoAdminManageController extends BaseController { .count() > 0; } - @ApiOperation("删除管理员") @PostMapping("/deleteAdmin/{id}") public R deleteAdmin(@PathVariable("id") Integer id) { if (!isSuperAdmin()) { diff --git a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCaptchaController.java b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCaptchaController.java index beb218a..651b37c 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCaptchaController.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCaptchaController.java @@ -10,8 +10,6 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.promo.model.PromoCaptchaCheckRequest; -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; @@ -26,7 +24,6 @@ import java.util.concurrent.TimeUnit; * POST /promo/captcha/gen - 生成验证码 * POST /promo/captcha/check - 校验验证码 */ -@Api(tags = "推广后台滑块验证码") @Slf4j @RestController @RequestMapping("/promo/captcha") @@ -44,7 +41,6 @@ public class PromoCaptchaController extends BaseController { /** * 生成滑块验证码 */ - @ApiOperation("生成滑块验证码") @Anonymous @PostMapping("/gen") public R genCaptcha() { @@ -74,7 +70,6 @@ public class PromoCaptchaController extends BaseController { * 校验滑块验证码 * 通过后在 Redis 写入 promo:captcha:verified:{phoneNumber} = captchaId,有效期 5 分钟 */ - @ApiOperation("校验滑块验证码") @Anonymous @PostMapping("/check") public R checkCaptcha(@RequestBody PromoCaptchaCheckRequest request) { diff --git a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCardKeyController.java b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCardKeyController.java index b6e47cc..eefb0e3 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCardKeyController.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCardKeyController.java @@ -10,8 +10,6 @@ import com.ruoyi.promo.domain.entity.PromoCardKey; import com.ruoyi.promo.service.PromoCardKeyService; import com.ruoyi.promo.service.PromoLoginService; import com.ruoyi.domain.entity.TtRechargeProd; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -20,7 +18,6 @@ import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; -@Api(tags = "卡商卡密管理") @RestController @RequestMapping("/promo/cardKey") public class PromoCardKeyController extends BaseController { @@ -37,7 +34,6 @@ public class PromoCardKeyController extends BaseController { /** * 获取卡商信息(名称、余额) */ - @ApiOperation("获取卡商信息") @GetMapping("/merchantInfo") public R> getMerchantInfo() { var loginUser = getLoginUser(); @@ -56,7 +52,6 @@ public class PromoCardKeyController extends BaseController { /** * 获取充值列表(金额选项) */ - @ApiOperation("获取充值金额列表") @GetMapping("/rechargeList") public R> getRechargeList() { List list = promoLoginService.queryList(); @@ -66,7 +61,6 @@ public class PromoCardKeyController extends BaseController { /** * 生成卡密 */ - @ApiOperation("生成卡密") @PostMapping("/generate") public R> generateCardKeys(@RequestBody Map request) { var loginUser = getLoginUser(); @@ -112,7 +106,6 @@ public class PromoCardKeyController extends BaseController { /** * 销毁未使用卡密(软删除并按面值退回卡商余额;已使用的不可销毁) */ - @ApiOperation("销毁卡密") @PostMapping("/destroy") public R destroyCardKey(@RequestBody Map request) { var loginUser = getLoginUser(); @@ -140,7 +133,6 @@ public class PromoCardKeyController extends BaseController { /** * 获取卡密列表 */ - @ApiOperation("获取卡密列表") @GetMapping("/list") public R> getCardKeyList( @RequestParam(required = false) String usedByName, diff --git a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCdkeyController.java b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCdkeyController.java index 1661d5b..ddf66f2 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCdkeyController.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoCdkeyController.java @@ -9,8 +9,6 @@ import com.ruoyi.domain.common.constant.UserType; import com.ruoyi.promo.domain.entity.PromoCdkey; import com.ruoyi.promo.domain.entity.PromoCdkeyRedeem; import com.ruoyi.promo.service.PromoCdkeyService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -23,7 +21,6 @@ import java.util.concurrent.TimeUnit; /** * 推广CDKEY管理 */ -@Api(tags = "推广CDKEY管理") @RestController @RequestMapping("/promo/cdkey") public class PromoCdkeyController extends BaseController { @@ -37,7 +34,6 @@ public class PromoCdkeyController extends BaseController { /** * 生成CDKEY(仅主播账号可操作) */ - @ApiOperation("生成CDKEY") @PostMapping("/generate") public R> generate(@RequestBody Map form) { var loginUser = getLoginUser(); @@ -70,7 +66,6 @@ public class PromoCdkeyController extends BaseController { /** * 获取创建CDKEY记录列表 */ - @ApiOperation("获取创建CDKEY记录列表") @GetMapping("/createList") public R> createList( @RequestParam(required = false) String startDate, @@ -91,7 +86,6 @@ public class PromoCdkeyController extends BaseController { /** * 获取兑换CDKEY记录列表 */ - @ApiOperation("获取兑换CDKEY记录列表") @GetMapping("/redeemList") public R> redeemList( @RequestParam(required = false) String startDate, @@ -113,7 +107,6 @@ public class PromoCdkeyController extends BaseController { /** * 创建CDKEY日报 */ - @ApiOperation("创建CDKEY日报") @GetMapping("/createDaily") public R>> createDaily( @RequestParam(required = false) String startDate, @@ -133,7 +126,6 @@ public class PromoCdkeyController extends BaseController { /** * 兑换CDKEY日报 */ - @ApiOperation("兑换CDKEY日报") @GetMapping("/redeemDaily") public R>> redeemDaily( @RequestParam(required = false) String startDate, diff --git a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoLoginController.java b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoLoginController.java index c8f1d1f..03ce613 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoLoginController.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoLoginController.java @@ -20,15 +20,12 @@ import com.ruoyi.admin.config.RedisConstants; import com.ruoyi.admin.mapper.PromoAdminMapper; import com.ruoyi.admin.mapper.TtUserMapper; import com.ruoyi.common.redis.config.RedisLock; -import com.ruoyi.domain.other.ApiLoginBody; import com.ruoyi.domain.other.ApiVerificationCodeLoginBody; import com.ruoyi.promo.contract.request.RegisterRequest; import com.ruoyi.promo.contract.request.UpdateInvitationCodeRequest; import com.ruoyi.promo.contract.response.GetShareDomainResponse; import com.ruoyi.promo.service.PromoLoginService; import com.ruoyi.system.service.ISysConfigService; -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.*; @@ -40,7 +37,6 @@ import java.util.Map; import java.util.LinkedHashMap; import java.util.concurrent.TimeUnit; -@Api(tags = "推广后台用户认证") @RestController @RequestMapping("/promo") public class PromoLoginController extends BaseController { @@ -63,7 +59,6 @@ public class PromoLoginController extends BaseController { @Autowired private RedisLock redisLock; - @ApiOperation("获取推广后台用户信息") @PostMapping("/getInfo") public R> getPromoInfo() { var loginUser = getLoginUser(); @@ -134,7 +129,6 @@ public class PromoLoginController extends BaseController { return R.ok(info); } - @ApiOperation("修改个人资料(昵称/手机号/邮箱)") @PostMapping("/updateProfile") public R updateProfile(@RequestBody Map body) { var loginUser = getLoginUser(); @@ -186,7 +180,6 @@ public class PromoLoginController extends BaseController { return R.ok(); } - @ApiOperation("修改头像(超管,前端裁剪后的 base64)") @PostMapping("/updateAvatar") public R updateAvatar(@RequestBody Map body) { var loginUser = getLoginUser(); @@ -216,7 +209,6 @@ public class PromoLoginController extends BaseController { return R.ok(); } - @ApiOperation("修改登录密码") @PostMapping("/updatePassword") public R updatePassword(@RequestBody Map body) { var loginUser = getLoginUser(); @@ -263,21 +255,6 @@ public class PromoLoginController extends BaseController { return R.ok(); } - @ApiOperation("推广后台用户登录") - @Anonymous - @PostMapping("/login") - public AjaxResult login(@RequestBody ApiLoginBody apiLoginBody) { - if ("1".equals(configService.selectConfigByKey("promoMaintenance"))) { - return AjaxResult.error("系统维护中,请稍后再试"); - } - AjaxResult ajax = AjaxResult.success(); - String token = promoLoginService.login(apiLoginBody.getUsername(), apiLoginBody.getPassword()); - ajax.put(Constants.TOKEN, token); - ajax.put("user", null); - return ajax; - } - - @ApiOperation("推广后台短信验证码登录") @Anonymous @PostMapping("/smsLogin") public AjaxResult smsLogin(@RequestBody ApiVerificationCodeLoginBody body) { @@ -294,7 +271,6 @@ public class PromoLoginController extends BaseController { } } - @ApiOperation("推广后台用户注册") @Anonymous @PostMapping("/register") public AjaxResult register(@RequestBody RegisterRequest request) { @@ -311,27 +287,23 @@ public class PromoLoginController extends BaseController { return ajax; } - @ApiOperation("推广后台用户修改推广码") @PostMapping("/updateInvitationCode") public R updateInvitationCode(@RequestBody @Validated UpdateInvitationCodeRequest request) { return promoLoginService.updateInvitationCode(request); } - @ApiOperation("获取主播/招商推广域名") @GetMapping("/getsharedomain") public R getShareDomain() { return promoLoginService.getShareDomain(); } - @ApiOperation("获取充值卡列表") @GetMapping("/card/list") public PageDataInfo cardList() { List list = promoLoginService.queryList(); return getPageData(list); } - @ApiOperation("生成充值卡") @PostMapping("/generateCard/{rechargeListId}/{num}") @UpdateUserCache public R> generateCard(@PathVariable("rechargeListId") Integer rechargeListId, diff --git a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoMenuController.java b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoMenuController.java index 870c2d8..773302f 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoMenuController.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoMenuController.java @@ -5,14 +5,11 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.domain.common.constant.UserType; import com.ruoyi.promo.domain.entity.PromoMenuConfig; import com.ruoyi.promo.service.PromoMenuService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.*; -@Api(tags = "推广后台菜单权限管理") @RestController @RequestMapping("/promo/menu") public class PromoMenuController extends BaseController { @@ -23,7 +20,6 @@ public class PromoMenuController extends BaseController { /** * 获取当前登录用户的菜单权限(根据用户类型) */ - @ApiOperation("获取当前用户菜单权限") @GetMapping("/getMenus") public R> getMenus() { var loginUser = getLoginUser(); @@ -38,7 +34,6 @@ public class PromoMenuController extends BaseController { /** * 获取所有可分配的菜单配置(从数据库读取,前端权限页用) */ - @ApiOperation("获取所有可分配菜单") @GetMapping("/allMenuConfigs") public R> getAllMenuConfigs() { var loginUser = getLoginUser(); @@ -55,7 +50,6 @@ public class PromoMenuController extends BaseController { /** * 超管:获取某角色类型的菜单配置 */ - @ApiOperation("获取角色菜单配置(超管用)") @GetMapping("/getRoleMenus/{roleType}") public R> getRoleMenus(@PathVariable("roleType") String roleType) { var loginUser = getLoginUser(); @@ -72,7 +66,6 @@ public class PromoMenuController extends BaseController { /** * 超管:保存某角色类型的菜单权限 */ - @ApiOperation("保存角色菜单权限(超管用)") @PostMapping("/saveRoleMenus") public R saveRoleMenus(@RequestBody Map request) { var loginUser = getLoginUser(); diff --git a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoRollController.java b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoRollController.java index 9bab192..610b56d 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoRollController.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoRollController.java @@ -13,13 +13,12 @@ import com.ruoyi.domain.entity.TtBoxRecords; import com.ruoyi.domain.entity.TtOrnament; import com.ruoyi.domain.entity.roll.*; import com.ruoyi.domain.entity.sys.TtUser; +import com.ruoyi.domain.common.constant.UserType; import com.ruoyi.domain.common.constant.TtAccountRecordSource; import com.ruoyi.domain.common.constant.TtboxRecordSource; import com.ruoyi.admin.service.TtUserService; import com.ruoyi.admin.mapper.TtUserMapper; import com.ruoyi.promo.mapper.*; -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.transaction.annotation.Transactional; @@ -31,7 +30,6 @@ import java.util.*; /** * 推广 ROLL 房管理 */ -@Api(tags = "推广 ROLL 房管理") @RestController @RequestMapping("/promo/roll") @Slf4j @@ -70,11 +68,24 @@ public class PromoRollController extends BaseController { /** * 获取奖池列表(下拉选择用) */ - @ApiOperation("获取奖池列表") @GetMapping("/jackpotList") public R> jackpotList( @RequestParam(value = "jackpotName", required = false) String jackpotName) { + // 归属校验:只返回自己 Roll 房关联的奖池(此前无过滤,任何推广账号都能看到别人的全部奖池) + List myJackpotIds = new ArrayList<>(); + for (TtRoll roll : new LambdaQueryChainWrapper<>(promoRollMapper) + .eq(TtRoll::getUserId, getUserId().intValue()) + .isNotNull(TtRoll::getJackpotId) + .list()) { + if (!myJackpotIds.contains(roll.getJackpotId())) { + myJackpotIds.add(roll.getJackpotId()); + } + } + if (myJackpotIds.isEmpty()) { + return R.ok(new ArrayList<>()); + } LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); + wrapper.in(TtRollJackpot::getJackpotId, myJackpotIds); if (StringUtils.isNotEmpty(jackpotName)) { wrapper.like(TtRollJackpot::getJackpotName, jackpotName); } @@ -85,7 +96,6 @@ public class PromoRollController extends BaseController { /** * 搜索可用饰品(用于添加到奖池) */ - @ApiOperation("搜索可用饰品") @GetMapping("/ornaments") public R> searchOrnaments( @RequestParam(required = false) String name, @@ -105,7 +115,6 @@ public class PromoRollController extends BaseController { /** * 按价格区间搜索饰品(用于模板选择,价格升序) */ - @ApiOperation("按价格区间搜索饰品(分页)") @GetMapping("/ornamentsByPrice") public R> searchOrnamentsByPrice( @RequestParam(required = false) BigDecimal minPrice, @@ -142,7 +151,6 @@ public class PromoRollController extends BaseController { /** * 获取固定金币饰品列表(唯一Hash名以 jinbi- 开头,按面值升序) */ - @ApiOperation("获取固定金币饰品列表") @GetMapping("/coinOrnaments") public R> coinOrnaments() { LambdaQueryWrapper wrapper = Wrappers.lambdaQuery(); @@ -154,9 +162,12 @@ public class PromoRollController extends BaseController { /** * 获取奖池饰品列表 */ - @ApiOperation("获取奖池饰品列表") @GetMapping("/jackpotOrnaments/{jackpotId}") public R> jackpotOrnaments(@PathVariable("jackpotId") Integer jackpotId) { + R ownerCheck = checkJackpotOwner(jackpotId); + if (ownerCheck != null) { + return R.fail(ownerCheck.getMsg()); + } List list = new LambdaQueryChainWrapper<>(promoJackpotOrnamentsMapper) .eq(TtRollJackpotOrnaments::getJackpotId, jackpotId) .list(); @@ -166,7 +177,6 @@ public class PromoRollController extends BaseController { /** * 向奖池添加饰品 */ - @ApiOperation("向奖池添加饰品") @PostMapping("/addOrnaments") @Transactional(rollbackFor = Exception.class) public R addOrnaments(@RequestBody Map body) { @@ -231,7 +241,6 @@ public class PromoRollController extends BaseController { /** * 从奖池移除饰品 */ - @ApiOperation("从奖池移除饰品") @DeleteMapping("/removeOrnament/{id}") @Transactional(rollbackFor = Exception.class) public R removeOrnament(@PathVariable("id") Integer id) { @@ -266,7 +275,6 @@ public class PromoRollController extends BaseController { /** * 更新奖池饰品数量 */ - @ApiOperation("更新奖池饰品数量") @PutMapping("/updateOrnamentNum") @Transactional(rollbackFor = Exception.class) public R updateOrnamentNum(@RequestBody Map body) { @@ -410,7 +418,6 @@ public class PromoRollController extends BaseController { /** * Roll房列表 */ - @ApiOperation("Roll房列表") @GetMapping("/list") public R> list( @RequestParam(required = false) Integer id, @@ -433,9 +440,13 @@ public class PromoRollController extends BaseController { /** * Roll房详情 */ - @ApiOperation("Roll房详情") @GetMapping("/{rollId}") public R getInfo(@PathVariable("rollId") Integer rollId) { + // 归属校验:只能看自己的 Roll 房(此前传任意 id 都能看到别人房间配置) + R ownerCheck = checkRollOwner(rollId); + if (ownerCheck != null) { + return R.fail(ownerCheck.getMsg()); + } TtRoll roll = promoRollMapper.selectById(rollId); if (roll == null) return R.fail("Roll房不存在"); return R.ok(roll); @@ -444,7 +455,6 @@ public class PromoRollController extends BaseController { /** * 新增Roll房 */ - @ApiOperation("新增Roll房") @PostMapping @RepeatSubmit(interval = 3000, message = "Roll房创建中,请勿重复提交") @Transactional(rollbackFor = Exception.class) @@ -601,7 +611,6 @@ public class PromoRollController extends BaseController { /** * 修改Roll房 */ - @ApiOperation("修改Roll房") @PutMapping public R edit(@RequestBody TtRoll ttRoll) { if (ttRoll.getId() == null) return R.fail("Roll房ID不能为空"); @@ -639,7 +648,6 @@ public class PromoRollController extends BaseController { /** * 删除 Roll 房 */ - @ApiOperation("删除 Roll 房") @DeleteMapping("/{rollId}") @Transactional(rollbackFor = Exception.class) public R remove(@PathVariable("rollId") Integer rollId) { @@ -688,7 +696,6 @@ public class PromoRollController extends BaseController { /** * 指定奖池饰品获奖用户 */ - @ApiOperation("指定奖池饰品获奖用户") @PutMapping("/designateOrnamentUser") public R designateOrnamentUser(@RequestBody Map body) { Integer id = body.get("id") != null ? ((Number) body.get("id")).intValue() : null; @@ -773,7 +780,6 @@ public class PromoRollController extends BaseController { /** * Roll房用户列表 */ - @ApiOperation("Roll 房用户列表") @GetMapping("/users/{rollId}") public R> users(@PathVariable("rollId") Integer rollId) { R ownerCheck = checkRollOwner(rollId); @@ -793,7 +799,6 @@ public class PromoRollController extends BaseController { * Roll房中奖名单(参与用户中了什么饰品) * 数据口径:tt_box_records 中 source=roll房(3) 且 rollId 匹配的记录,为开奖后实际发放的饰品 */ - @ApiOperation("Roll 房中奖名单") @GetMapping("/winners/{rollId}") public R>> winners(@PathVariable("rollId") Integer rollId) { R ownerCheck = checkRollOwner(rollId); @@ -859,36 +864,77 @@ public class PromoRollController extends BaseController { return null; } + /** + * 校验奖池归属:奖池必须关联当前登录用户自己的 Roll 房 + * (读接口用,不要求"未开奖"——已开奖的房间本人仍然要看自己的奖池) + */ + private R checkJackpotOwner(Integer jackpotId) { + TtRoll roll = findRollByJackpot(jackpotId); + if (roll == null) return R.fail("奖池未关联Roll房"); + if (roll.getUserId() == null || !roll.getUserId().equals(getUserId().intValue())) { + return R.fail("无权查看他人奖池"); + } + return null; + } + + /** + * 奖项模板归属校验:只有创建者本人或推广超管可以改/删 + */ + private R checkTemplateOwner(TtRollPrizeTemplate tpl) { + if (tpl == null) return R.fail("模板不存在"); + if (isSuperAdmin() || isTemplateCreator(tpl)) return null; + return R.fail("无权操作他人奖项模板"); + } + + /** 模板是共享库(建房间时可选用任意模板),但 createBy 是创建人手机号,非本人/超管一律置空 */ + private void hideTemplateCreatorIfNotMine(List list) { + for (TtRollPrizeTemplate tpl : list) { + hideTemplateCreatorIfNotMine(tpl); + } + } + + private void hideTemplateCreatorIfNotMine(TtRollPrizeTemplate tpl) { + if (tpl == null || isSuperAdmin() || isTemplateCreator(tpl)) return; + tpl.setCreateBy(null); + } + + private boolean isTemplateCreator(TtRollPrizeTemplate tpl) { + var loginUser = getLoginUser(); + String currentUserName = (loginUser != null && loginUser.getUserData() != null) + ? loginUser.getUserData().getUserName() : null; + return currentUserName != null && currentUserName.equals(tpl.getCreateBy()); + } + + private boolean isSuperAdmin() { + var loginUser = getLoginUser(); + return loginUser != null && loginUser.getUserData() != null + && UserType.SUPER_ADMIN.getCode().equals(loginUser.getUserData().getUserType()); + } + // ==================== 奖项模板管理 ==================== /** * 获取奖项模板列表 */ - @ApiOperation("获取奖项模板列表") @GetMapping("/prizeTemplates") public R> prizeTemplateList() { List list = new LambdaQueryChainWrapper<>(promoRollPrizeTemplateMapper) .orderByDesc(TtRollPrizeTemplate::getCreateTime) .list(); - // 补充每个模板的饰品数量 - for (TtRollPrizeTemplate tpl : list) { - int count = new LambdaQueryChainWrapper<>(promoRollPrizeTemplateDetailMapper) - .eq(TtRollPrizeTemplateDetail::getTemplateId, tpl.getId()) - .count().intValue(); - // 用 description 字段临时存数量(不加新字段) - tpl.setCreateBy(tpl.getCreateBy()); - } + // 模板是共享库(创建房间时可以选择任意模板),但 createBy 存的是 tt_user.user_name(手机号), + // 只有本人和超管能看到,其他人置空,避免泄露他人手机号 + hideTemplateCreatorIfNotMine(list); return R.ok(list); } /** * 获取奖项模板详情(含饰品列表) */ - @ApiOperation("获取奖项模板详情") @GetMapping("/prizeTemplate/{templateId}") public R> prizeTemplateDetail(@PathVariable("templateId") Integer templateId) { TtRollPrizeTemplate tpl = promoRollPrizeTemplateMapper.selectById(templateId); if (tpl == null) return R.fail("模板不存在"); + hideTemplateCreatorIfNotMine(tpl); List details = new LambdaQueryChainWrapper<>(promoRollPrizeTemplateDetailMapper) .eq(TtRollPrizeTemplateDetail::getTemplateId, templateId) .orderByDesc(TtRollPrizeTemplateDetail::getPrice) @@ -902,7 +948,6 @@ public class PromoRollController extends BaseController { /** * 创建奖项模板 */ - @ApiOperation("创建奖项模板") @PostMapping("/prizeTemplate") public R createPrizeTemplate(@RequestBody Map body) { String templateName = body.get("templateName") != null ? body.get("templateName").toString() : null; @@ -933,7 +978,6 @@ public class PromoRollController extends BaseController { /** * 修改奖项模板 */ - @ApiOperation("修改奖项模板") @PutMapping("/prizeTemplate") public R updatePrizeTemplate(@RequestBody Map body) { Integer id = body.get("id") != null ? ((Number) body.get("id")).intValue() : null; @@ -941,6 +985,9 @@ public class PromoRollController extends BaseController { TtRollPrizeTemplate existing = promoRollPrizeTemplateMapper.selectById(id); if (existing == null) return R.fail("模板不存在"); + // 归属校验:只有创建者本人或推广超管能改别人的奖项模板 + R ownerCheck = checkTemplateOwner(existing); + if (ownerCheck != null) return ownerCheck; // 校验模板总价值不低于200金币 BigDecimal total = calcTemplateTotal(body); @@ -967,9 +1014,13 @@ public class PromoRollController extends BaseController { /** * 删除奖项模板 */ - @ApiOperation("删除奖项模板") @DeleteMapping("/prizeTemplate/{templateId}") public R deletePrizeTemplate(@PathVariable("templateId") Integer templateId) { + TtRollPrizeTemplate existing = promoRollPrizeTemplateMapper.selectById(templateId); + if (existing == null) return R.fail("模板不存在"); + // 归属校验:只有创建者本人或推广超管能删别人的奖项模板 + R ownerCheck = checkTemplateOwner(existing); + if (ownerCheck != null) return ownerCheck; promoRollPrizeTemplateMapper.deleteById(templateId); new LambdaUpdateChainWrapper<>(promoRollPrizeTemplateDetailMapper) .eq(TtRollPrizeTemplateDetail::getTemplateId, templateId) diff --git a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoSmsController.java b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoSmsController.java index cc4a3e5..e695a39 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoSmsController.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoSmsController.java @@ -1,20 +1,15 @@ package com.ruoyi.promo.controller; -import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; -import com.ruoyi.admin.mapper.PromoAdminMapper; -import com.ruoyi.admin.service.TtUserService; import com.ruoyi.common.annotation.Anonymous; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.StringUtils; -import com.ruoyi.domain.common.constant.UserType; -import com.ruoyi.domain.entity.sys.TtUser; +import com.ruoyi.promo.model.PromoPhoneRequest; +import com.ruoyi.promo.service.PromoAccountService; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.thirdparty.common.model.ApiSmsBody; import com.ruoyi.thirdparty.common.service.ApiSmsService; -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; @@ -22,39 +17,72 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.concurrent.TimeUnit; + /** * 推广后台短信验证码控制器 - * POST /promo/sms/getVerifyCode - 获取短信验证码(需要滑块验证) + * POST /promo/sms/precheck - 点「获取验证码」时的账号前置校验(不弹滑块) + * POST /promo/sms/getVerifyCode - 获取短信验证码(需要滑块验证,此处再兜底校验一次账号) */ -@Api(tags = "推广后台短信") @Slf4j @RestController @RequestMapping("/promo/sms") public class PromoSmsController extends BaseController { + /** 前置校验节流:同一手机号 10 分钟最多 10 次,避免被拿来批量探测哪些手机号有推广后台账号 */ + private static final int PRECHECK_MAX_COUNT = 10; + private static final int PRECHECK_MINUTES = 10; + private final ISysConfigService sysConfigService; private final ApiSmsService apiSmsService; - private final PromoAdminMapper promoAdminMapper; + private final PromoAccountService promoAccountService; @Autowired private RedisCache redisCache; - @Autowired - private TtUserService userService; - public PromoSmsController(ISysConfigService sysConfigService, ApiSmsService apiSmsService, - PromoAdminMapper promoAdminMapper) { + PromoAccountService promoAccountService) { this.sysConfigService = sysConfigService; this.apiSmsService = apiSmsService; - this.promoAdminMapper = promoAdminMapper; + this.promoAccountService = promoAccountService; + } + + /** + * 取验证码前的账号校验:没权限的号直接在这儿被拦住,不用先拖一次滑块再被拒 + */ + @Anonymous + @PostMapping("/precheck") + public R precheck(@RequestBody PromoPhoneRequest request) { + String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); + if ("1".equals(websiteMaintenance)) { + return R.fail("网站维护中......"); + } + + String phoneNumber = request.getPhoneNumber(); + if (StringUtils.isEmpty(phoneNumber)) { + return R.fail("手机号不能为空"); + } + String throttleKey = "promo:sms:precheck:" + phoneNumber; + Long count = redisCache.redisTemplate.opsForValue().increment(throttleKey); + if (count != null && count == 1L) { + redisCache.expire(throttleKey, PRECHECK_MINUTES, TimeUnit.MINUTES); + } + if (count != null && count > PRECHECK_MAX_COUNT) { + return R.fail("操作过于频繁,请" + PRECHECK_MINUTES + "分钟后再试"); + } + + String denyReason = promoAccountService.checkLoginPermission(phoneNumber, request.getParentInvitationCode()); + if (denyReason != null) { + return R.fail(denyReason); + } + return R.ok("校验通过"); } /** * 获取短信验证码(推广后台版本) * 需要先完成/promo/captcha/check 滑块验证 */ - @ApiOperation("获取短信验证码") @Anonymous @PostMapping("/getVerifyCode") public R getVerifyCode(@RequestBody ApiSmsBody smsBody) { @@ -69,23 +97,10 @@ public class PromoSmsController extends BaseController { return R.fail("验证码类型错误"); } if ("2".equals(smsBody.getType())) { - TtUser user = new LambdaQueryChainWrapper<>(userService.getBaseMapper()) - .eq(TtUser::getPhoneNumber, phoneNumber) - .eq(TtUser::getDelFlag, "0") - .eq(TtUser::getStatus, "0") - .one(); - boolean hasPromoRole = user != null - && (UserType.ANCHOR.getCode().equals(user.getUserType()) - || UserType.BUSINESS_USER.getCode().equals(user.getUserType()) - || UserType.CARD_MERCHANT.getCode().equals(user.getUserType())); - // 超级管理员账号(promo_admin.username / phone_number)也可以是手机号,同样允许短信登录 - boolean isSuperAdmin = !hasPromoRole && promoAdminMapper.findByAccount(phoneNumber) != null; - // 手机号没注册过:带有效招商邀请码时允许发码(登录即自动注册为主播) - boolean canAutoRegister = !hasPromoRole && !isSuperAdmin - && StringUtils.isNotEmpty(smsBody.getParentInvitationCode()) - && findBusinessByInvitationCode(smsBody.getParentInvitationCode()) != null; - if (!hasPromoRole && !isSuperAdmin && !canAutoRegister) { - return R.fail("该手机号无推广后台登录权限"); + // 兜底:前置校验可以被绕过(直接打接口),真正发短信前必须再验一次 + String denyReason = promoAccountService.checkLoginPermission(phoneNumber, smsBody.getParentInvitationCode()); + if (denyReason != null) { + return R.fail(denyReason); } } @@ -100,6 +115,8 @@ public class PromoSmsController extends BaseController { if (StringUtils.isEmpty(storedCaptchaId) || !storedCaptchaId.equals(captchaId)) { return R.fail("滑块验证已过期或无效,请重新验证"); } + // 一次性消费:同一个 captchaId 在 5 分钟有效期内只能换一条短信,否则可重放刷短信 + redisCache.deleteObject(verifiedKey); String msg = apiSmsService.getVerifyCode(smsBody); if (StringUtils.isNotEmpty(msg)) { @@ -113,19 +130,4 @@ public class PromoSmsController extends BaseController { log.info("[推广后台短信发送成功] phone={}", phoneNumber); return R.ok("获取验证码成功,请注意短信通知!"); } - - /** - * 按邀请码找招商账号(必须是 04 招商) - */ - private TtUser findBusinessByInvitationCode(String invitationCode) { - TtUser parent = new LambdaQueryChainWrapper<>(userService.getBaseMapper()) - .eq(TtUser::getInvitationCode, invitationCode.trim().toUpperCase()) - .eq(TtUser::getDelFlag, "0") - .eq(TtUser::getStatus, "0") - .one(); - if (parent == null || !UserType.BUSINESS_USER.getCode().equals(parent.getUserType())) { - return null; - } - return parent; - } } diff --git a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoTurnoverController.java b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoTurnoverController.java index 711fe04..3d7b206 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoTurnoverController.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/controller/PromoTurnoverController.java @@ -31,8 +31,6 @@ import com.ruoyi.promo.domain.param.AnchorDayTurnoverParam; import com.ruoyi.promo.domain.vo.AnchorDayTurnoverVO; import com.ruoyi.promo.mapper.PromoTurnoverMapper; import com.ruoyi.promo.service.PromoTurnoverService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -46,7 +44,6 @@ import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; -@Api(tags = "推广流水") @RestController @RequestMapping("/promo/turnover") public class PromoTurnoverController extends BaseController { @@ -66,28 +63,24 @@ public class PromoTurnoverController extends BaseController { @Autowired private TtUserBlendErcashMapper ttUserBlendErcashMapper; - @ApiOperation("获取实时数据") @GetMapping("/getRealTimeData") public AjaxResult getRealTimeData() { Long userId = SecurityUtils.getUserId(); return promoTurnoverService.getRealTimeData(userId.intValue()); } - @ApiOperation("获取首页游戏返利看板数据") @GetMapping("/getGameCommissionData") public AjaxResult getGameCommissionData() { Long userId = SecurityUtils.getUserId(); return promoTurnoverService.getGameCommissionData(userId.intValue()); } - @ApiOperation("获取近10天推广数据") @GetMapping("getLast10DaysPromotionData") public AjaxResult getLast10DaysPromotionData() { Long userId = SecurityUtils.getUserId(); return promoTurnoverService.getLast10DaysPromotionData(userId.intValue()); } - @ApiOperation("获取主播推广数据") @GetMapping("/getAnchorPromotionData") public TableDataInfo getAnchorPromotionData(AnchorDayTurnoverParam param) { if (param.getPageNum() == null || param.getPageNum() <= 0) { @@ -176,7 +169,6 @@ public class PromoTurnoverController extends BaseController { return pageDataInfo; } - @ApiOperation("获取下级历史数据") @GetMapping("/getSubBranches") public AjaxResult getSubBranches(GetSubBranchesRequest request) { Long userId = getUserId(); @@ -185,22 +177,28 @@ public class PromoTurnoverController extends BaseController { return AjaxResult.success(response); } - @ApiOperation("获取日流水记录") @GetMapping("/getPurchaseByUserId/{userId}") public TableDataInfo getPurchaseByUserId(GetPurchaseByUserIdRequest request) { return promoTurnoverService.getPurchaseByUserId(request); } - @ApiOperation("获取佣金比例") @GetMapping("/getCommissionRateByUserId/{userId}") public AjaxResult getCommissionRateByUserId(@PathVariable("userId") Integer userId) { + // 归属校验:只能查自己或自己直属下级的返佣比例(此前传任意 userId 都能查到别人的比例) + Long currentUserId = getUserId(); + if (!userId.equals(currentUserId.intValue())) { + TtUser targetUser = userMapper.selectById(userId); + if (targetUser == null || targetUser.getParentId() == null + || !targetUser.getParentId().equals(currentUserId.intValue())) { + return AjaxResult.error("无权查看该用户的佣金比例"); + } + } BigDecimal commissionRate = promoTurnoverService.getCommissionRateByUserId(userId); Map map = new HashMap<>(); map.put("commissionRate", commissionRate); return AjaxResult.success(map); } - @ApiOperation("获取佣金比例") @PutMapping("/updateCommissionRate") public AjaxResult updateCommissionRate(@RequestBody TtUser ttUser) { Integer userId = ttUser.getUserId(); @@ -229,7 +227,6 @@ public class PromoTurnoverController extends BaseController { return row >= 1 ? AjaxResult.success("修改成功") : AjaxResult.error("修改失败"); } - @ApiOperation("获取佣金列表") @GetMapping("/getCommissionList") public AjaxResult getCommissionList() { Long userId = getUserId(); @@ -237,7 +234,6 @@ public class PromoTurnoverController extends BaseController { return AjaxResult.success(commissionList); } - @ApiOperation("我的下级列表") @GetMapping("/mySubordinates") public AjaxResult mySubordinates(@RequestParam(required = false) String account) { Long userId = getUserId(); @@ -266,7 +262,6 @@ public class PromoTurnoverController extends BaseController { return AjaxResult.success(result); } - @ApiOperation("解除下级关系") @PostMapping("/removeSubordinate") public AjaxResult removeSubordinate(@RequestParam("subUserId") Integer subUserId) { Long currentUserId = getUserId(); @@ -288,7 +283,6 @@ public class PromoTurnoverController extends BaseController { return success ? AjaxResult.success("解除成功") : AjaxResult.error("解除失败"); } - @ApiOperation("获取已结算佣金总额") @GetMapping("/settledTotalCommission") public AjaxResult settledTotalCommission(@RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate) { @@ -317,7 +311,6 @@ public class PromoTurnoverController extends BaseController { return AjaxResult.success(result); } - @ApiOperation("下级流水记录") @GetMapping("/flowRecord") public AjaxResult flowRecord(@RequestParam(required = false) Integer userId, @RequestParam(required = false) String startDate, @@ -538,7 +531,6 @@ public class PromoTurnoverController extends BaseController { } } - @ApiOperation("招商每日佣金(默认本周,支持 startDate/endDate 自定义范围)") @GetMapping("/weeklyDailyCommission") public AjaxResult weeklyDailyCommission(@RequestParam(required = false) String startDate, @RequestParam(required = false) String endDate) { @@ -822,7 +814,6 @@ public class PromoTurnoverController extends BaseController { return dateObj.toString(); } - @ApiOperation("获取主播推广奖励列表") @GetMapping("/queryPromoteWelfare") public AjaxResult queryPromoteWelfare(QueryPromoteWelfareRequest request) { Long userId = getUserId(); @@ -830,7 +821,6 @@ public class PromoTurnoverController extends BaseController { return AjaxResult.success(response); } - @ApiOperation("佣金明细记录") @GetMapping("/commissionDetail") public AjaxResult commissionDetail( @RequestParam(required = false) String date, @@ -896,7 +886,6 @@ public class PromoTurnoverController extends BaseController { return AjaxResult.success(list); } - @ApiOperation("佣金日报") @GetMapping("/commissionDaily") public AjaxResult commissionDaily( @RequestParam(required = false) String date, @@ -945,7 +934,6 @@ public class PromoTurnoverController extends BaseController { return AjaxResult.success(list); } - @ApiOperation("佣金汇总") @GetMapping("/commissionSummary") public AjaxResult commissionSummary( @RequestParam(required = false) String startDate, @@ -1010,7 +998,6 @@ public class PromoTurnoverController extends BaseController { return userIds; } - @ApiOperation("下级充值报表") @GetMapping("/subordinateRecharge") public AjaxResult subordinateRecharge( @RequestParam(required = false) String month, diff --git a/skins-promo/src/main/java/com/ruoyi/promo/model/PromoPhoneRequest.java b/skins-promo/src/main/java/com/ruoyi/promo/model/PromoPhoneRequest.java new file mode 100644 index 0000000..c413ea6 --- /dev/null +++ b/skins-promo/src/main/java/com/ruoyi/promo/model/PromoPhoneRequest.java @@ -0,0 +1,14 @@ +package com.ruoyi.promo.model; + +import lombok.Data; + +/** + * 手机号入参(取验证码前置校验用) + */ +@Data +public class PromoPhoneRequest { + + private String phoneNumber; + + private String parentInvitationCode; +} diff --git a/skins-promo/src/main/java/com/ruoyi/promo/service/PromoAccountService.java b/skins-promo/src/main/java/com/ruoyi/promo/service/PromoAccountService.java new file mode 100644 index 0000000..460abc2 --- /dev/null +++ b/skins-promo/src/main/java/com/ruoyi/promo/service/PromoAccountService.java @@ -0,0 +1,85 @@ +package com.ruoyi.promo.service; + +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.ruoyi.admin.mapper.PromoAdminMapper; +import com.ruoyi.admin.service.TtUserService; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.domain.common.constant.UserType; +import com.ruoyi.domain.entity.sys.TtUser; +import org.springframework.stereotype.Service; + +/** + * 推广后台登录账号校验。 + * 点「获取验证码」时先跑一遍(不弹滑块),发短信时再跑一遍兜底,两处必须是同一份规则。 + */ +@Service +public class PromoAccountService { + + private final TtUserService userService; + private final PromoAdminMapper promoAdminMapper; + + public PromoAccountService(TtUserService userService, PromoAdminMapper promoAdminMapper) { + this.userService = userService; + this.promoAdminMapper = promoAdminMapper; + } + + /** + * @return null 表示有权登录;否则是给用户看的拒绝原因 + */ + public String checkLoginPermission(String phoneNumber, String parentInvitationCode) { + TtUser user = new LambdaQueryChainWrapper<>(userService.getBaseMapper()) + .eq(TtUser::getPhoneNumber, phoneNumber) + .eq(TtUser::getDelFlag, "0") + .eq(TtUser::getStatus, "0") + .one(); + boolean hasPromoRole = user != null + && (UserType.ANCHOR.getCode().equals(user.getUserType()) + || UserType.BUSINESS_USER.getCode().equals(user.getUserType()) + || UserType.CARD_MERCHANT.getCode().equals(user.getUserType())); + if (hasPromoRole) { + return null; + } + // 超级管理员账号(promo_admin.username / phone_number)也可以是手机号,同样允许短信登录 + if (promoAdminMapper.findByAccount(phoneNumber) != null) { + return null; + } + // 手机号从未注册过 + 有效招商邀请码:允许发码,登录时自动注册为主播(01)。 + // 手机号已被占用(普通用户02 / 机器人 / 白号 / 已停用已删除的老号)时不能走自动注册: + // 自动注册会因手机号已存在而跳过,最后只在建 token 时报「用户不存在」,得在这里拦住。 + boolean canAutoRegister = !phoneRegistered(phoneNumber) + && StringUtils.isNotEmpty(parentInvitationCode) + && findBusinessByInvitationCode(parentInvitationCode) != null; + if (canAutoRegister) { + return null; + } + // 统一提示「无权限」:能走到这里的要么是本来就没推广后台权限的号(含已注册的普通用户), + // 要么是邀请码没填/填错。不区分「已注册」,避免把某个手机号的注册状态暴露出去。 + return "该手机号无推广后台登录权限"; + } + + /** + * 手机号在 tt_user 中是否已存在(含停用/软删除)。 + * 必须与 PromoLoginServiceImpl.autoRegisterAnchorIfNeeded 的存在性口径一致, + * 否则两处判断不一致时会出现「发得出验证码但登录报用户不存在」。 + */ + private boolean phoneRegistered(String phoneNumber) { + return new LambdaQueryChainWrapper<>(userService.getBaseMapper()) + .eq(TtUser::getPhoneNumber, phoneNumber) + .count() > 0; + } + + /** + * 按邀请码找招商账号(必须是 04 招商) + */ + private TtUser findBusinessByInvitationCode(String invitationCode) { + TtUser parent = new LambdaQueryChainWrapper<>(userService.getBaseMapper()) + .eq(TtUser::getInvitationCode, invitationCode.trim().toUpperCase()) + .eq(TtUser::getDelFlag, "0") + .eq(TtUser::getStatus, "0") + .one(); + if (parent == null || !UserType.BUSINESS_USER.getCode().equals(parent.getUserType())) { + return null; + } + return parent; + } +} diff --git a/skins-promo/src/main/java/com/ruoyi/promo/service/PromoLoginService.java b/skins-promo/src/main/java/com/ruoyi/promo/service/PromoLoginService.java index 4c74fe5..3fd85e3 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/service/PromoLoginService.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/service/PromoLoginService.java @@ -11,10 +11,8 @@ import java.util.List; public interface PromoLoginService { - String login(String username, String password); - /** - * 推广后台短信验证码登录;手机号未注册时,带上级邀请码则自动注册为主播 + * 推广后台登录(仅手机号 + 4 位短信验证码);手机号未注册时,带上级邀请码则自动注册为主播 */ String smsLogin(String phoneNumber, String code, String parentInvitationCode); diff --git a/skins-promo/src/main/java/com/ruoyi/promo/service/impl/PromoLoginServiceImpl.java b/skins-promo/src/main/java/com/ruoyi/promo/service/impl/PromoLoginServiceImpl.java index 5488f45..b7dd0c9 100644 --- a/skins-promo/src/main/java/com/ruoyi/promo/service/impl/PromoLoginServiceImpl.java +++ b/skins-promo/src/main/java/com/ruoyi/promo/service/impl/PromoLoginServiceImpl.java @@ -26,7 +26,6 @@ import com.ruoyi.common.utils.uuid.UUID; import com.ruoyi.domain.common.constant.TtAccountRecordSource; import com.ruoyi.domain.common.constant.UserType; import com.ruoyi.domain.entity.TtRechargeProd; -import com.ruoyi.domain.entity.sys.PromoAdmin; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.domain.other.TtRedPacket; import com.ruoyi.domain.other.TtUserAvatar; @@ -35,6 +34,7 @@ import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.promo.contract.request.RegisterRequest; import com.ruoyi.promo.contract.request.UpdateInvitationCodeRequest; import com.ruoyi.promo.contract.response.GetShareDomainResponse; +import com.ruoyi.promo.service.PromoAccountService; import com.ruoyi.promo.service.PromoLoginService; import com.ruoyi.system.domain.SysConfig; import com.ruoyi.system.mapper.SysConfigMapper; @@ -53,6 +53,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Random; +import java.util.concurrent.TimeUnit; @Service @Slf4j @@ -83,6 +84,9 @@ public class PromoLoginServiceImpl implements PromoLoginService { @Autowired private ApiSmsService apiSmsService; + @Autowired + private PromoAccountService promoAccountService; + @Autowired private UserIdGenerator userIdGenerator; @@ -104,110 +108,76 @@ public class PromoLoginServiceImpl implements PromoLoginService { /** 推广码已修改标记 Redis Key 前缀 */ private static final String INVITATION_CODE_MODIFIED_KEY = "promo:invitation_code_modified:"; + /** 登录失败计数:账号维度 / IP 维度,窗口内失败满 10 次锁定 10 分钟 */ + private static final String LOGIN_FAIL_ACCOUNT_KEY = "promo:login_fail:account:"; + private static final String LOGIN_FAIL_IP_KEY = "promo:login_fail:ip:"; + private static final int LOGIN_FAIL_MAX = 10; + private static final int LOGIN_FAIL_LOCK_MINUTES = 10; + /** - * 推广后台账号密码登录(短信未接入前统一走这里): - * ① 超管 → promo_admin(username 或 phone_number) - * ② 招商(04)/主播(01)/卡商(05) → tt_user(账号为手机号) - */ - @Override - public String login(String username, String password) { - sysLoginService.loginPreCheck(username, password); - String account = username.trim(); - - // ① 超级管理员 - PromoAdmin promoAdmin = promoAdminMapper.findByAccount(account); - if (promoAdmin != null) { - if (!SecurityUtils.matchesPassword(password, promoAdmin.getPassword())) { - throw new IllegalArgumentException("账号或密码错误"); - } - // 走 promo_ 前缀,确保拿到的是超管身份(promo_admin 表) - LoginUser loginUser = sysLoginService.createLoginUser("promo_" + promoAdmin.getUsername(), password); - return tokenService.createToken(loginUser); - } - - // ② 招商/主播/卡商 - TtUser user = new LambdaQueryChainWrapper<>(userService.getBaseMapper()) - .and(w -> w.eq(TtUser::getPhoneNumber, account).or().eq(TtUser::getUserName, account)) - .one(); - if (user == null) { - throw new IllegalArgumentException("账号或密码错误"); - } - if (!UserType.ANCHOR.getCode().equals(user.getUserType()) - && !UserType.BUSINESS_USER.getCode().equals(user.getUserType()) - && !UserType.CARD_MERCHANT.getCode().equals(user.getUserType())) { - throw new IllegalArgumentException("该账号无推广后台登录权限"); - } - if (!SecurityUtils.matchesPassword(password, user.getPassword())) { - throw new IllegalArgumentException("账号或密码错误"); - } - return createUserToken(user.getPhoneNumber()); - } - - /** - * 这个框既能填 4 位短信验证码,也能直接填密码: - * ① 非 4 位数字 → 按密码处理(超管 promo_admin / 招商·主播·卡商 tt_user) - * ② 4 位数字 → 按短信验证码处理 + * 推广后台登录:只认「手机号 + 4 位短信验证码」。 + * 账号密码登录已下线(/promo/login 一并删除),避免用密码绕过短信校验被撞库。 */ @Override public String smsLogin(String phoneNumber, String code, String parentInvitationCode) { String account = StringUtils.trim(phoneNumber); String value = StringUtils.trim(code); - - PromoAdmin promoAdmin = StringUtils.isNotEmpty(account) ? promoAdminMapper.findByAccount(account) : null; - TtUser ttUser = StringUtils.isNotEmpty(account) ? findUserByAccount(account) : null; - boolean hasPromoRole = ttUser != null - && !"1".equals(ttUser.getDelFlag()) - && !"1".equals(ttUser.getStatus()) - && (UserType.ANCHOR.getCode().equals(ttUser.getUserType()) - || UserType.BUSINESS_USER.getCode().equals(ttUser.getUserType()) - || UserType.CARD_MERCHANT.getCode().equals(ttUser.getUserType())); - if (promoAdmin == null && ttUser == null && !Validator.isMobile(account)) { - throw new IllegalArgumentException("手机号格式错误,请检查手机号是否输入正确!"); - } - boolean isCode = NumberUtil.isNumber(value) && value.length() == 4; - - // ① 密码登录 - if (!isCode && StringUtils.isNotEmpty(value)) { - if (promoAdmin != null && StringUtils.isNotEmpty(promoAdmin.getPassword()) - && SecurityUtils.matchesPassword(value, promoAdmin.getPassword())) { - // 走 promo_ 前缀,确保拿到的是超管身份 - LoginUser loginUser = sysLoginService.createLoginUser("promo_" + promoAdmin.getUsername(), value); - return tokenService.createToken(loginUser); + checkLoginNotLocked(account); + try { + // 非 4 位数字一律按验证码错误处理,不再兼容「填密码」 + if (!NumberUtil.isNumber(value) || value.length() != 4) { + throw new IllegalArgumentException("验证码错误"); } - if (hasPromoRole && StringUtils.isNotEmpty(ttUser.getPassword()) - && SecurityUtils.matchesPassword(value, ttUser.getPassword())) { - return createUserToken(ttUser.getPhoneNumber()); + String validateCaptcha = apiSmsService.validateCaptcha(value, "ApiLogin_" + account); + if (!"success".equals(validateCaptcha)) { + throw new IllegalArgumentException(validateCaptcha); } - if (promoAdmin != null || hasPromoRole) { - throw new IllegalArgumentException("密码错误"); + // 发码时校验过一次,这里再兜一次:App 登录短信与推广后台共用同一个验证码 key + // (ApiLogin_<手机号>),普通用户拿 App 的码来打本接口时,没有这一步就会走到 + // 建 token 才报「用户不存在」。两处必须是同一份口径。 + String denyReason = promoAccountService.checkLoginPermission(account, parentInvitationCode); + if (denyReason != null) { + throw new IllegalArgumentException(denyReason); } - if (ttUser != null) { - throw new IllegalArgumentException("该账号无推广后台登录权限"); - } - throw new IllegalArgumentException("验证码错误"); + // 手机号没注册过:带上级邀请码则自动注册为主播(口径与 App 的 verificationCodeLoginOrRegister 一致) + autoRegisterAnchorIfNeeded(account, parentInvitationCode); + String token = createUserToken(account); + clearLoginFail(account); + return token; + } catch (IllegalArgumentException e) { + recordLoginFail(account); + throw e; } - - // ② 短信验证码 - if (!isCode) { - throw new IllegalArgumentException("验证码错误"); - } - String validateCaptcha = apiSmsService.validateCaptcha(value, "ApiLogin_" + account); - if (!"success".equals(validateCaptcha)) { - throw new IllegalArgumentException(validateCaptcha); - } - // 手机号没注册过:带上级邀请码则自动注册为主播(口径与 App 的 verificationCodeLoginOrRegister 一致) - autoRegisterAnchorIfNeeded(account, parentInvitationCode); - return createUserToken(account); } /** - * 按手机号或用户名查 tt_user + * 登录失败计数(账号 + IP 双维度):窗口内失败达到阈值直接拒绝,避免无限撞验证码/刷账号 */ - private TtUser findUserByAccount(String account) { - return new LambdaQueryChainWrapper<>(userService.getBaseMapper()) - .and(w -> w.eq(TtUser::getPhoneNumber, account).or().eq(TtUser::getUserName, account)) - .one(); + private void checkLoginNotLocked(String account) { + if (loginFailCount(LOGIN_FAIL_ACCOUNT_KEY + account) >= LOGIN_FAIL_MAX + || loginFailCount(LOGIN_FAIL_IP_KEY + IpUtils.getIpAddr()) >= LOGIN_FAIL_MAX) { + throw new IllegalArgumentException("失败次数过多,请 " + LOGIN_FAIL_LOCK_MINUTES + " 分钟后再试"); + } + } + + private void recordLoginFail(String account) { + bumpLoginFail(LOGIN_FAIL_ACCOUNT_KEY + account); + bumpLoginFail(LOGIN_FAIL_IP_KEY + IpUtils.getIpAddr()); + } + + private void bumpLoginFail(String key) { + redisCache.setCacheObject(key, loginFailCount(key) + 1, LOGIN_FAIL_LOCK_MINUTES, TimeUnit.MINUTES); + } + + /** 登录成功只清账号维度;IP 维度留给它自然过期,避免同一 IP 靠一次成功把失败记录洗掉 */ + private void clearLoginFail(String account) { + redisCache.deleteObject(LOGIN_FAIL_ACCOUNT_KEY + account); + } + + private int loginFailCount(String key) { + Integer count = redisCache.getCacheObject(key); + return count == null ? 0 : count; } /** diff --git a/skins-service/game-mahjong-service/src/main/java/com/ruoyi/game/mahjong/controller/MahjongAdminController.java b/skins-service/game-mahjong-service/src/main/java/com/ruoyi/game/mahjong/controller/MahjongAdminController.java index 169bd78..0b542a2 100644 --- a/skins-service/game-mahjong-service/src/main/java/com/ruoyi/game/mahjong/controller/MahjongAdminController.java +++ b/skins-service/game-mahjong-service/src/main/java/com/ruoyi/game/mahjong/controller/MahjongAdminController.java @@ -32,8 +32,6 @@ import com.ruoyi.game.mahjong.mapper.MahjongRoundMapper; import com.ruoyi.game.mahjong.repository.MahjongCycleRepository; import com.ruoyi.game.mahjong.repository.MahjongRewardPoolCacheRepository; import com.ruoyi.game.mahjong.service.MahjongDistributionService; -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.transaction.annotation.Transactional; @@ -49,7 +47,6 @@ import java.util.stream.Collectors; * 与玫瑰女郎逐行同构,差异:只有 normal 一个模式、桶 16 档、封顶 500x、game_type = MAHJONG。 */ @Slf4j -@Api(tags = "麻将胡了后台") @RestController @RequestMapping("/admin/mahjong") public class MahjongAdminController extends BaseController { @@ -71,7 +68,6 @@ public class MahjongAdminController extends BaseController { // ==================== 箱子配置 ==================== - @ApiOperation("箱子列表(含各身份目标/实时 RTP 与一轮总回合)") @GetMapping("/box/list") public R boxList(@RequestParam(defaultValue = "1") int pageNum, @RequestParam(defaultValue = "10") int pageSize, @@ -154,7 +150,6 @@ public class MahjongAdminController extends BaseController { } /** 某箱某身份的桶分布:含 convergeCount(收敛账本) + fixedRounds/convergeRounds(按该身份分布反推) */ - @ApiOperation("某箱某身份的倍率桶分布") @GetMapping("/box/buckets/{boxId}") public R boxBuckets(@PathVariable Long boxId, @RequestParam(required = false, defaultValue = "common") String audience) { @@ -174,7 +169,6 @@ public class MahjongAdminController extends BaseController { } @Log(title = "箱子配置", action = "保存", businessType = BusinessType.UPDATE) - @ApiOperation("保存某箱某身份的倍率桶分布(items 为固定池回合,反推回写总回合)") @PostMapping("/box/buckets/save") @Transactional(rollbackFor = Exception.class) public R boxBucketsSave(@RequestBody Map params) { @@ -189,7 +183,6 @@ public class MahjongAdminController extends BaseController { } @Log(title = "箱子配置", action = "重算分布", businessType = BusinessType.UPDATE) - @ApiOperation("按目标 RTP 重算某箱某身份分布") @PostMapping("/box/buckets/calc") public R calcDistribution(@RequestBody Map params) { Long boxId = asLong(params.get("boxId")); diff --git a/skins-service/game-mahjong-service/src/main/java/com/ruoyi/game/mahjong/controller/MahjongClientController.java b/skins-service/game-mahjong-service/src/main/java/com/ruoyi/game/mahjong/controller/MahjongClientController.java index 73045df..941cab4 100644 --- a/skins-service/game-mahjong-service/src/main/java/com/ruoyi/game/mahjong/controller/MahjongClientController.java +++ b/skins-service/game-mahjong-service/src/main/java/com/ruoyi/game/mahjong/controller/MahjongClientController.java @@ -19,8 +19,6 @@ import com.ruoyi.game.mahjong.mapper.MahjongPrizeOrnamentMapper; import com.ruoyi.game.mahjong.mapper.MahjongRecordMapper; import com.ruoyi.game.mahjong.service.MahjongGameService; import com.ruoyi.system.service.ISysConfigService; -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.*; @@ -30,7 +28,6 @@ import java.util.stream.Collectors; /** 客户端接口:Base = {host}/api/mahjong,全部 POST + JSON + token 鉴权(对齐设计方案 §7) */ @Slf4j -@Api(tags = "麻将胡了游戏") @RestController @RequestMapping("/api/mahjong") public class MahjongClientController extends BaseController { @@ -44,7 +41,6 @@ public class MahjongClientController extends BaseController { /** 进行中的局不展示:结算时 settle_source=start,播完末帧才改 finish;超过单局缓存 TTL(30分钟) 视为已结束兜底 */ private static final long IN_PROGRESS_MS = 30 * 60 * 1000L; - @ApiOperation("获取箱子列表") @PostMapping("/boxes") public R boxes() { List list = boxMapper.selectList(new LambdaQueryWrapper() @@ -65,7 +61,6 @@ public class MahjongClientController extends BaseController { return R.ok(Map.of("list", boxes)); } - @ApiOperation("执行旋转(新游戏或继续游戏)") @PostMapping("/dospin") public R dospin(@RequestBody SpinRequest req) { Long userId = getUserId(); @@ -91,7 +86,6 @@ public class MahjongClientController extends BaseController { } } - @ApiOperation("查询游戏记录(分页;scope: 0全服/1我的,默认1我的;只含已播完的局)") @PostMapping("/records") public R records(@RequestBody(required = false) RecordPageRequest req) { Long userId = getUserId(); @@ -169,7 +163,6 @@ public class MahjongClientController extends BaseController { return exterior == null || exterior.isEmpty() ? name : name + " (" + exterior + ")"; } - @ApiOperation("查询是否有进行中的游戏(断线重连)") @PostMapping("/hasActive") public R hasActive() { Long userId = getUserId(); diff --git a/skins-service/game-wheel-service/src/main/java/com/ruoyi/game/wheel/controller/AdminWheelController.java b/skins-service/game-wheel-service/src/main/java/com/ruoyi/game/wheel/controller/AdminWheelController.java index 7acf6a3..b4914ed 100644 --- a/skins-service/game-wheel-service/src/main/java/com/ruoyi/game/wheel/controller/AdminWheelController.java +++ b/skins-service/game-wheel-service/src/main/java/com/ruoyi/game/wheel/controller/AdminWheelController.java @@ -15,8 +15,6 @@ import com.ruoyi.game.wheel.constants.WheelPoolType; import com.ruoyi.game.wheel.service.AdminWheelService; import com.ruoyi.game.wheel.vo.WheelBetRecordVO; import com.ruoyi.game.wheel.vo.WheelPoolAdjustmentVO; -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.transaction.annotation.Transactional; @@ -27,7 +25,6 @@ import java.time.format.DateTimeFormatter; import java.util.*; import java.util.stream.Collectors; -@Api(tags = "疯狂转盘") @Slf4j @RestController @RequestMapping("/admin/wheel") @@ -57,20 +54,17 @@ public class AdminWheelController extends BaseController { @Autowired private GameWheelPoolAdjustmentMapper poolAdjustmentMapper; - @ApiOperation("获取疯狂转盘游戏配置") @GetMapping("/gameconfig") public AjaxResult getGameConfig() { return adminWheelService.getGameConfig(); } @Log(title = "游戏配置", action = "保存", businessType = BusinessType.UPDATE) - @ApiOperation("更新疯狂转盘游戏配置") @PostMapping("/gameconfig") public AjaxResult updateGameConfig(@RequestBody String body) { return adminWheelService.updateGameConfig(body); } - @ApiOperation("回合记录列表") @GetMapping("/round/list") public TableDataInfo roundList( @RequestParam(required = false) String date, @@ -88,7 +82,6 @@ public class AdminWheelController extends BaseController { return getDataTable(list); } - @ApiOperation("投注记录列表") @GetMapping("/bet/list") public TableDataInfo betList( @RequestParam(required = false) Long roundId, @@ -101,7 +94,6 @@ public class AdminWheelController extends BaseController { // ======================== 奖励矩阵 CRUD ======================== - @ApiOperation("奖励矩阵列表") @GetMapping("/matrix/list") public AjaxResult matrixList( @RequestParam(required = false) Integer betAmount, @@ -120,7 +112,6 @@ public class AdminWheelController extends BaseController { } @Log(title = "奖励矩阵", action = "保存", businessType = BusinessType.UPDATE) - @ApiOperation("保存奖励矩阵行") @PostMapping("/matrix/save") public AjaxResult matrixSave(@RequestBody GameWheelRewardMatrix matrix) { GameWheelRewardMatrix exist = matrix.getId() == null ? null : rewardMatrixMapper.selectById(matrix.getId()); @@ -145,7 +136,6 @@ public class AdminWheelController extends BaseController { } @Log(title = "奖励矩阵", action = "删除", businessType = BusinessType.DELETE) - @ApiOperation("删除奖励矩阵行(软删:置 status=0)") @DeleteMapping("/matrix/delete/{id}") public AjaxResult matrixDelete(@PathVariable Long id) { rewardMatrixMapper.update(null, new LambdaUpdateWrapper() @@ -156,7 +146,6 @@ public class AdminWheelController extends BaseController { // ======================== 奖池统计 ======================== - @ApiOperation("奖池统计") @GetMapping("/pool/stats") public AjaxResult poolStats() { return AjaxResult.success(adminWheelService.buildPoolStats()); @@ -165,7 +154,6 @@ public class AdminWheelController extends BaseController { // ======================== 奖池调节 ======================== @Log(title = "游戏配置", action = "调整奖池", businessType = BusinessType.GRANT) - @ApiOperation("奖池调整(注水/抽水)") @PostMapping("/pool/adjust") @RepeatSubmit(interval = 3000) public AjaxResult adjustPool(@RequestBody Map params) { @@ -173,7 +161,6 @@ public class AdminWheelController extends BaseController { } @Log(title = "游戏配置", action = "重置奖池", businessType = BusinessType.CLEAN) - @ApiOperation("重置奖池(累计统计与余额一起归零)") @PostMapping("/pool/reset") public AjaxResult resetPool(@RequestBody(required = false) Map params) { Map p = params == null ? Collections.emptyMap() : params; @@ -182,7 +169,6 @@ public class AdminWheelController extends BaseController { return adminWheelService.resetPool(poolType, reason, getUsername()); } - @ApiOperation("奖池调整记录") @GetMapping("/pool/adjustLog") public TableDataInfo adjustLog(@RequestParam(required = false) String poolType) { startPage(); @@ -211,7 +197,6 @@ public class AdminWheelController extends BaseController { return target; } - @ApiOperation("获取奖池余额(含人工调整)") @GetMapping("/pool/balance") public AjaxResult getPoolBalance(@RequestParam(required = false) String poolType) { if (StringUtils.isEmpty(poolType)) { diff --git a/skins-service/game-wheel-service/src/main/java/com/ruoyi/game/wheel/controller/ApiWheelController.java b/skins-service/game-wheel-service/src/main/java/com/ruoyi/game/wheel/controller/ApiWheelController.java index e117afa..559c13b 100644 --- a/skins-service/game-wheel-service/src/main/java/com/ruoyi/game/wheel/controller/ApiWheelController.java +++ b/skins-service/game-wheel-service/src/main/java/com/ruoyi/game/wheel/controller/ApiWheelController.java @@ -18,8 +18,6 @@ import com.ruoyi.game.wheel.contract.api.response.GetRoundResultsResponse; import com.ruoyi.game.wheel.service.ApiWheelService; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.user.service.ApiUserService; -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.validation.annotation.Validated; @@ -29,7 +27,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import java.util.Map; import org.springframework.web.bind.annotation.RestController; -@Api(tags = "疯狂转盘") @Slf4j @RestController @RequestMapping("/api/wheel") @@ -55,7 +52,6 @@ public class ApiWheelController extends BaseController { } } - @ApiOperation("投注") @PostMapping("/dobet") // 这里**不加** @RepeatSubmit:一局允许同一组合重复下注(最多 50 注),连点两次 5 元 = 两注, // 是正常玩法而不是重复提交;加了会把第二次合法下注挡成"不允许重复提交"。 @@ -82,7 +78,6 @@ public class ApiWheelController extends BaseController { return apiWheelService.doBet(request, userId); } - @ApiOperation("获取最新一期游戏状态") @PostMapping("/last_round_info") public R getLastRoundInfo(@RequestBody GetLastRoundInfoRequest request) { R loginCheck = checkLogin(); @@ -91,7 +86,6 @@ public class ApiWheelController extends BaseController { return apiWheelService.getLastRoundInfo(userId); } - @ApiOperation("获取玩家的游戏历史记录") @PostMapping("/history_bet_info") public R getHistoryBetInfo(@RequestBody GetHistoryBetRequest request) { R loginCheck = checkLogin(); @@ -100,7 +94,6 @@ public class ApiWheelController extends BaseController { return apiWheelService.getHistoryBetInfo(request, userId); } - @ApiOperation("获取疯狂转盘游戏历史记录") @PostMapping("/round_history_bet_info") public R getRoundHistoryBetInfo(@RequestBody GetRoundHistoryRequest request) { R loginCheck = checkLogin(); @@ -109,7 +102,6 @@ public class ApiWheelController extends BaseController { return apiWheelService.getRoundHistoryInfo(request); } - @ApiOperation("获取历史开奖结果(每一轮的开奖符号)") @PostMapping("/round_results") public R getRoundResults(@RequestBody GetRoundResultsRequest request) { R loginCheck = checkLogin(); diff --git a/skins-service/pom.xml b/skins-service/pom.xml index 2a52c55..60cb61e 100644 --- a/skins-service/pom.xml +++ b/skins-service/pom.xml @@ -41,19 +41,6 @@ ${ruoyi.version} - - - io.springfox - springfox-boot-starter - ${swagger.version} - - - - - - - - \ No newline at end of file diff --git a/skins-service/reward-service/src/main/java/com/ruoyi/reward/controller/AdminGlobalRewardPoolController.java b/skins-service/reward-service/src/main/java/com/ruoyi/reward/controller/AdminGlobalRewardPoolController.java index bb32c48..57d56b3 100644 --- a/skins-service/reward-service/src/main/java/com/ruoyi/reward/controller/AdminGlobalRewardPoolController.java +++ b/skins-service/reward-service/src/main/java/com/ruoyi/reward/controller/AdminGlobalRewardPoolController.java @@ -5,15 +5,12 @@ import com.ruoyi.reward.contract.admin.request.AdjustRewardPoolRequest; import com.ruoyi.reward.contract.admin.response.QueryGlobalRewardConfig; import com.ruoyi.reward.model.GloalRewardConfig; import com.ruoyi.reward.service.GlobalRewardPoolService; -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.*; import java.math.BigDecimal; -@Api(tags = "全局奖池配置") @Slf4j @RestController @RequestMapping("/admin/globalrewardpool") @@ -21,7 +18,6 @@ public class AdminGlobalRewardPoolController { @Autowired private GlobalRewardPoolService globalRewardPoolService; - @ApiOperation("获取奖池配置和状态") @GetMapping("/config") public R getGameConfig() { var config = globalRewardPoolService.getGameConfig(); @@ -37,7 +33,6 @@ public class AdminGlobalRewardPoolController { return R.ok(result); } - @ApiOperation("更新奖池配置") @PostMapping("/config") public R updateGameConfig(@RequestBody GloalRewardConfig params) { String msg = globalRewardPoolService.updateGameConfig(params); @@ -46,14 +41,12 @@ public class AdminGlobalRewardPoolController { return R.ok(); } - @ApiOperation("重置奖池缓存") @PostMapping("/reset") public R resetRewardPool() { globalRewardPoolService.resetCache(); return R.ok(null, "奖池缓存已清空"); } - @ApiOperation("调整奖池(抽水/放水)") @PostMapping("/adjust") public R adjustRewardPool(@RequestBody AdjustRewardPoolRequest req) { if (req.getAmount() == null || req.getAmount().compareTo(BigDecimal.ZERO) <= 0) { diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/AdminBlankCardKeyController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/AdminBlankCardKeyController.java index 06a4026..25a8253 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/AdminBlankCardKeyController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/AdminBlankCardKeyController.java @@ -14,7 +14,6 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.domain.entity.TtBlankCardKey; import com.ruoyi.domain.entity.TtRechargeProd; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -40,7 +39,6 @@ public class AdminBlankCardKeyController extends BaseController { /** * 获取充值产品列表(金额选项) */ - @ApiOperation("获取充值产品列表") @GetMapping("/rechargeList") public R> getRechargeList() { List list = rechargeProdMapper.selectList( @@ -52,7 +50,6 @@ public class AdminBlankCardKeyController extends BaseController { /** * 生成空白卡密(管理后台,不扣余额) */ - @ApiOperation("生成空白卡密") @PostMapping("/generate") public R> generate(@RequestBody java.util.Map request) { Integer rechargeListId = (Integer) request.get("rechargeListId"); @@ -99,7 +96,6 @@ public class AdminBlankCardKeyController extends BaseController { /** * 获取空白卡密列表 */ - @ApiOperation("获取空白卡密列表") @GetMapping("/list") public R> list( @RequestParam(required = false) String usedByName, diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/LossRebateController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/LossRebateController.java index 4b897d3..5ff286e 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/LossRebateController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/LossRebateController.java @@ -9,8 +9,6 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.domain.entity.TtLossRebate; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; @@ -22,7 +20,6 @@ import java.util.List; * 数据由定时任务 lossRebateService.generateHalfMonthLossRebate() 每半月写入, * 本页只做「查看 + 对超过单期上限的用户人工发放CDK」。 */ -@Api(tags = "管理端 亏损返水") @RestController @RequestMapping("/admin/lossRebate") public class LossRebateController extends BaseController { @@ -33,7 +30,6 @@ public class LossRebateController extends BaseController { this.lossRebateService = lossRebateService; } - @ApiOperation("亏损返水结算明细列表") @GetMapping("/list") public PageDataInfo list(@RequestParam(required = false) String period, @RequestParam(required = false) Integer userId, @@ -45,21 +41,18 @@ public class LossRebateController extends BaseController { @Log(title = "亏损返水", action = "发放CDK", businessType = BusinessType.GRANT, entityClass = TtLossRebate.class, mapperClass = TtLossRebateMapper.class, idField = "id") - @ApiOperation("人工发放CDK(超过单期上限/自动发放失败的记录)") @PostMapping("/grant") public R grant(@RequestBody GrantRequest request) { if (request == null || request.getId() == null) return R.fail("缺少明细ID"); return lossRebateService.grantManually(request.getId(), request.getAmount(), getUsername()); } - @ApiOperation("读取单期返水上限") @GetMapping("/config") public AjaxResult getConfig() { return AjaxResult.success(lossRebateService.getMaxAmount()); } @Log(title = "亏损返水", action = "保存上限", businessType = BusinessType.UPDATE) - @ApiOperation("保存单期返水上限(返水超过该金额不自动发放,转人工;0=不设上限)") @PostMapping("/config") public AjaxResult saveConfig(@RequestParam(required = false) BigDecimal maxAmount) { lossRebateService.saveMaxAmount(maxAmount); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/ShoppingController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/ShoppingController.java index 31d7815..9971141 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/ShoppingController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/ShoppingController.java @@ -12,15 +12,12 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.util.List; import java.util.stream.Collectors; -@Api(tags = "管理端 商城管理") @RestController @RequestMapping("/admin/shopping") public class ShoppingController extends BaseController { @@ -34,7 +31,6 @@ public class ShoppingController extends BaseController { this.ornamentsService = ornamentsService; } - @ApiOperation("商品列表") @GetMapping("/list") public PageDataInfo list(ShoppingBody shoppingBody) { startPage(); @@ -65,7 +61,6 @@ public class ShoppingController extends BaseController { } @Log(title = "商城列表", action = "一键上架", businessType = BusinessType.UPDATE) - @ApiOperation("一键上架所有商品") @PostMapping("/putAwayAll") public R putAwayAll() { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); @@ -82,7 +77,6 @@ public class ShoppingController extends BaseController { } @Log(title = "商城列表", action = "一键下架", businessType = BusinessType.UPDATE) - @ApiOperation("一键下架所有商品") @PostMapping("/soldOutAll") public R soldOutAll() { LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtBoxController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtBoxController.java index 42e5020..9c0c116 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtBoxController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtBoxController.java @@ -20,8 +20,6 @@ import com.ruoyi.domain.other.TtBoxBody; import com.ruoyi.domain.vo.BoxPoolStatisticsVO; import com.ruoyi.domain.vo.TtBoxDataVO; import com.ruoyi.domain.vo.box.TtBoxUserVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import jakarta.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.DeleteMapping; @@ -38,7 +36,6 @@ import java.util.Arrays; import java.util.Date; import java.util.List; -@Api(tags = "管理端 宝箱管理") @RestController @RequestMapping("/admin/box") public class TtBoxController extends BaseController { @@ -57,7 +54,6 @@ public class TtBoxController extends BaseController { return success(); } - @ApiOperation("获取宝箱列表") @GetMapping("/list") public PageDataInfo list(TtBoxBody ttBoxBody) { startPage(); @@ -80,14 +76,12 @@ public class TtBoxController extends BaseController { } @Log(title = "宝箱列表", action = "修改", businessType = BusinessType.UPDATE) - @ApiOperation("修改宝箱") @PutMapping public AjaxResult edit(@RequestBody TtBoxDataVO ttBoxDataVO) { String msg = boxService.updateTtBoxById(ttBoxDataVO); return StringUtils.isEmpty(msg) ? AjaxResult.success() : AjaxResult.error(msg); } - @ApiOperation("清空当前奖池") @GetMapping("clearPrizePool/{boxId}") public R clearPrizePool(@PathVariable("boxId") Integer boxId) { @@ -110,27 +104,23 @@ public class TtBoxController extends BaseController { return AjaxResult.success(); } - @ApiOperation("宝箱统计(按奖池/开箱人类型拆分)") @GetMapping("/statisticsBoxData/{boxId}") public R> statisticsBoxData(@PathVariable Integer boxId, @RequestParam(required = false) Date date) { List poolStatistics = boxService.statisticsBoxData(boxId, date); return R.ok(poolStatistics); } - @ApiOperation("添加宝箱三级爆率玩家范围") @PostMapping("/createTtBoxThirdExplosiveUsers") public AjaxResult createTtBoxThirdExplosiveUsers(@RequestBody TtBoxUserVO ttBoxUserVO) { String msg = boxService.createTtBoxThirdExplosiveUsers(ttBoxUserVO); return StringUtils.isEmpty(msg) ? AjaxResult.success() : AjaxResult.error(msg); } - @ApiOperation("查询宝箱三级爆率玩家范围") @GetMapping("/queryTtBoxThirdExplosiveUsers/{boxId}") public AjaxResult queryBoxUsers(@PathVariable Integer boxId) { return boxService.queryTtBoxThirdExplosiveUsers(boxId); } - @ApiOperation("删除宝箱三级爆率玩家范围") @PostMapping("/deleteTtBoxThirdExplosiveUsers") public AjaxResult deleteTtBoxThirdExplosiveUsers(@RequestBody TtBoxUserVO ttBoxUserVO) { return boxService.deleteTtBoxThirdExplosiveUsers(ttBoxUserVO); @@ -143,13 +133,11 @@ public class TtBoxController extends BaseController { util.exportExcel(response, list.getRows(), "宝箱列表"); } - @ApiOperation("查询开箱临时爆率队列") @GetMapping("/mockresult/list") public R> getBoxMockResult(@RequestParam("uid") Integer uid) { return R.ok(boxMockService.getMockResultList(uid)); } - @ApiOperation("设置开箱临时爆率队列") @PostMapping("/mockresult/list") public R> updateBoxMockResult(@RequestBody BoxMockRequest request) { return R.ok(boxMockService.updateMockResultList(request)); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtBoxOrnamentsController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtBoxOrnamentsController.java index 2ceb2e6..e5175bb 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtBoxOrnamentsController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtBoxOrnamentsController.java @@ -12,8 +12,6 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -26,7 +24,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -@Api(tags = "管理端 宝箱物品") @RestController @RequestMapping("/admin/boxOrnaments") public class TtBoxOrnamentsController extends BaseController { @@ -37,7 +34,6 @@ public class TtBoxOrnamentsController extends BaseController { this.boxOrnamentsService = boxOrnamentsService; } - @ApiOperation("宝箱物品详情") @GetMapping("/list/{boxId}") public PageDataInfo list(@PathVariable("boxId") Integer boxId) { // 在分页之前算总数(避免PageHelper干扰百分比计算) @@ -48,7 +44,6 @@ public class TtBoxOrnamentsController extends BaseController { return getPageData(list); } - @ApiOperation("宝箱统计数据") @GetMapping("/globalData/{boxId}") public R globalData(@PathVariable("boxId") Integer boxId) { return boxOrnamentsService.globalData(boxId); @@ -123,7 +118,6 @@ public class TtBoxOrnamentsController extends BaseController { } @Log(title = "宝箱列表", action = "批量填货", businessType = BusinessType.INSERT) // 宝箱填货 - @ApiOperation("宝箱填货") @PostMapping("/batchAdd") public AjaxResult batchAdd(@RequestBody batchAddParam param) { return boxOrnamentsService.batchAdd(param); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtCardMerchantController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtCardMerchantController.java index 7364dd7..44a1733 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtCardMerchantController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtCardMerchantController.java @@ -20,7 +20,6 @@ import com.ruoyi.domain.common.constant.UserType; import com.ruoyi.domain.entity.TtUserBlendErcash; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.domain.vo.user.TtUserVo; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; @@ -48,7 +47,6 @@ public class TtCardMerchantController extends BaseController { @Autowired private RedisLock redisLock; - @ApiOperation("获取卡商列表") @GetMapping("/list") public PageDataInfo cardMerchantList( @RequestParam(required = false) Integer userId, @@ -86,7 +84,6 @@ public class TtCardMerchantController extends BaseController { @Log(title = "卡商充值", action = "确认充值", businessType = BusinessType.GRANT, entityClass = TtUser.class, mapperClass = TtUserMapper.class, idField = "userId") - @ApiOperation("卡商充值(管理员给卡商增加余额)") @PostMapping("/recharge") public AjaxResult cardMerchantRecharge(@RequestBody Map params) { Integer userId = (Integer) params.get("userId"); @@ -154,7 +151,6 @@ public class TtCardMerchantController extends BaseController { @Log(title = "卡商充值", action = "确认修改", businessType = BusinessType.UPDATE, entityClass = TtUser.class, mapperClass = TtUserMapper.class, idField = "userId") - @ApiOperation("修改卡商余额(直接设为指定值,按差额写审计流水)") @PostMapping("/updateBalance") @Transactional(rollbackFor = Exception.class) public AjaxResult cardMerchantUpdateBalance(@RequestBody Map params) { @@ -234,7 +230,6 @@ public class TtCardMerchantController extends BaseController { } } - @ApiOperation("卡商充值记录") @GetMapping("/rechargeLog") public PageDataInfo cardMerchantRechargeLog(@RequestParam(required = false) Integer userId) { LambdaQueryChainWrapper wrapper = new LambdaQueryChainWrapper<>(blendErcashMapper); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtDeliveryRecordController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtDeliveryRecordController.java index 50ef26e..24b6ded 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtDeliveryRecordController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtDeliveryRecordController.java @@ -11,13 +11,10 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.util.List; -@Api(tags = "管理端 发货管理") @RestController @RequestMapping("/admin/deliverGoods") public class TtDeliveryRecordController extends BaseController { @@ -28,7 +25,6 @@ public class TtDeliveryRecordController extends BaseController { this.deliveryRecordService = deliveryRecordService; } - @ApiOperation("发货申请列表") @GetMapping("/getDeliveryApplyList") public PageDataInfo getDeliveryApplyList(TtDeliveryApplyBody deliveryApplyBody) { startPage(); @@ -36,7 +32,6 @@ public class TtDeliveryRecordController extends BaseController { return getPageData(list); } - @ApiOperation("退回发货申请") @PostMapping("/deliveryFail") public R deliveryFail(@RequestParam("deliveryRecordId") Integer deliveryRecordId, @RequestParam("message") String message) { String msg = deliveryRecordService.deliveryFail(deliveryRecordId, message); @@ -44,14 +39,12 @@ public class TtDeliveryRecordController extends BaseController { } @Log(title = "发货记录", action = "确认发货", businessType = BusinessType.GRANT) - @ApiOperation("审核通过发货申请") @PostMapping("/deliveryApprove") public R deliveryApprove(@RequestParam("deliveryRecordId") Integer deliveryRecordId) { String msg = deliveryRecordService.deliveryApprove(deliveryRecordId); return StringUtils.isEmpty(msg) ? R.ok(true, "操作成功!") : R.fail(false, msg); } - @ApiOperation("发货记录申请") @GetMapping("/getDeliveryRecordList") public PageDataInfo getDeliveryRecordList(TtDeliveryRecordBody deliveryRecordBody) { startPage(); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOfficialRollConfigController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOfficialRollConfigController.java index bd6396d..0064d8a 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOfficialRollConfigController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOfficialRollConfigController.java @@ -13,13 +13,10 @@ import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.domain.entity.roll.TtOfficialRollConfig; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.util.List; -@Api(tags = "管理端 官方周期Roll配置") @RestController @RequestMapping("/admin/officialRollConfig") public class TtOfficialRollConfigController extends BaseController { @@ -30,7 +27,6 @@ public class TtOfficialRollConfigController extends BaseController { this.configService = configService; } - @ApiOperation("配置列表") @GetMapping("/list") public PageDataInfo list( @RequestParam(value = "configName", required = false) String configName, @@ -46,7 +42,6 @@ public class TtOfficialRollConfigController extends BaseController { return getPageData(configList); } - @ApiOperation("配置详情") @GetMapping("/{id}") public R getInfo(@PathVariable("id") Integer id) { return R.ok(configService.getById(id)); @@ -54,7 +49,6 @@ public class TtOfficialRollConfigController extends BaseController { @Log(title = "官方周期Roll配置", action = "新增", businessType = BusinessType.INSERT, entityClass = TtOfficialRollConfig.class, mapperClass = TtOfficialRollConfigMapper.class) - @ApiOperation("新增配置") @PostMapping public AjaxResult add(@RequestBody TtOfficialRollConfig config) { config.setCreateBy(getUsername()); @@ -64,7 +58,6 @@ public class TtOfficialRollConfigController extends BaseController { @Log(title = "官方周期Roll配置", action = "修改", businessType = BusinessType.UPDATE, entityClass = TtOfficialRollConfig.class, mapperClass = TtOfficialRollConfigMapper.class) - @ApiOperation("编辑配置") @PutMapping public AjaxResult edit(@RequestBody TtOfficialRollConfig config) { config.setUpdateBy(getUsername()); @@ -73,13 +66,11 @@ public class TtOfficialRollConfigController extends BaseController { } @Log(title = "官方周期Roll配置", action = "删除", businessType = BusinessType.DELETE) - @ApiOperation("删除配置") @DeleteMapping("/{id}") public AjaxResult remove(@PathVariable("id") Integer id) { return configService.removeById(id) ? AjaxResult.success() : AjaxResult.error("删除失败"); } - @ApiOperation("启用/停用配置") @PutMapping("/changeStatus") public AjaxResult changeStatus(@RequestBody TtOfficialRollConfig config) { if (config.getId() == null) return AjaxResult.error("配置ID不能为空"); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrderController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrderController.java index 939dafe..b444818 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrderController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrderController.java @@ -6,14 +6,11 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.domain.dto.sys.OrderQueryCondition; import com.ruoyi.domain.entity.TtOrder; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; -@Api(tags = "管理端 订单管理") @RestController @RequestMapping("/admin/order") public class TtOrderController extends BaseController { @@ -24,7 +21,6 @@ public class TtOrderController extends BaseController { this.ttOrderService = ttOrderService; } - @ApiOperation("网站支付订单查询") @PostMapping("/list") public R list(@RequestBody @Validated OrderQueryCondition condition) { return ttOrderService.adminList(condition); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrnamentsController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrnamentsController.java index 4aab26b..2c7ae8d 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrnamentsController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrnamentsController.java @@ -15,8 +15,6 @@ import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.utils.poi.ExcelUtil; import com.ruoyi.domain.other.TtOrnamentsPrice; import com.ruoyi.domain.vo.TtOrnamentVO; -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.*; @@ -24,7 +22,6 @@ import org.springframework.web.bind.annotation.*; import jakarta.servlet.http.HttpServletResponse; import java.util.List; -@Api(tags = "管理端 饰品管理") @RestController @RequestMapping("/admin/ornaments") public class TtOrnamentsController extends BaseController { @@ -36,7 +33,6 @@ public class TtOrnamentsController extends BaseController { private TtOrnamentService ttOrnamentService; // 饰品列表多条件筛选 - @ApiOperation("饰品列表多条件筛选") @GetMapping("/list") public R list(TtOrnamentsBody param) { Page ttOrnamentVOPage = ttOrnamentService.listByParam(param); @@ -59,7 +55,6 @@ public class TtOrnamentsController extends BaseController { } @Log(title = "饰品列表", action = "发放饰品", businessType = BusinessType.GRANT) - @ApiOperation("饰品发放") @PostMapping("/grantOrnaments/{userId}/{ornamentsId}/{num}") public AjaxResult grantOrnaments(@PathVariable("userId") Integer userId, @PathVariable("ornamentsId") Long ornamentsId, @@ -75,7 +70,6 @@ public class TtOrnamentsController extends BaseController { @Log(title = "饰品列表", action = "新增饰品", businessType = BusinessType.INSERT, entityClass = TtOrnament.class, mapperClass = TtOrnamentMapper.class) - @ApiOperation("新增饰品") @PostMapping("/addTtOrnament") public AjaxResult add(@RequestBody TtOrnament ttOrnament) { if (ttOrnament.getId() == null) { @@ -86,14 +80,12 @@ public class TtOrnamentsController extends BaseController { @Log(title = "饰品列表", action = "编辑", businessType = BusinessType.UPDATE, entityClass = TtOrnament.class, mapperClass = TtOrnamentMapper.class) - @ApiOperation("修改饰品") @PostMapping("/editTtOrnament") public AjaxResult edit(@RequestBody TtOrnament ttOrnament) { return toAjax(ornamentsService.updateById(ttOrnament)); } @Log(title = "饰品列表", action = "删除", businessType = BusinessType.DELETE) - @ApiOperation("删除饰品(支持批量)") @DeleteMapping("/{ids}") public AjaxResult delete(@PathVariable("ids") List ids) { if (ids == null || ids.isEmpty()) { diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrnamentsLevelController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrnamentsLevelController.java index f8e259f..3b43743 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrnamentsLevelController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtOrnamentsLevelController.java @@ -10,13 +10,10 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.util.List; -@Api(tags = "管理端 饰品等级信息") @RestController @RequestMapping("/admin/ornamentsLevel") public class TtOrnamentsLevelController extends BaseController { @@ -27,7 +24,6 @@ public class TtOrnamentsLevelController extends BaseController { this.ornamentsLevelService = ornamentsLevelService; } - @ApiOperation("获取所有饰品等级背景") @GetMapping("/list") public PageDataInfo list() { startPage(); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtPromoTurnoverController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtPromoTurnoverController.java index a184c96..fe71d5d 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtPromoTurnoverController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtPromoTurnoverController.java @@ -8,7 +8,6 @@ import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.domain.param.promotion.AnchorDailyTurnoverParam; import com.ruoyi.domain.param.promotion.AnchorRechargeParam; import com.ruoyi.domain.vo.promotion.AnchorDailyTurnoverVo; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -22,7 +21,6 @@ public class TtPromoTurnoverController extends BaseController { @Autowired private TtPromoTurnoverService ttPromoTurnoverService; - @ApiOperation("获取主播推广数据") @GetMapping("/getAnchorPromotionData") public PageDataInfo getAnchorPromotionData(AnchorDailyTurnoverParam param) { List list = ttPromoTurnoverService.getAnchorDailyTurnover(param); @@ -38,7 +36,6 @@ public class TtPromoTurnoverController extends BaseController { return pageDataInfo; } - @ApiOperation("主播充值") @PostMapping("/recharge") public AjaxResult recharge(@RequestBody AnchorRechargeParam param) { return ttPromoTurnoverService.recharge(param); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRedPacketController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRedPacketController.java index 811b18c..59b8efb 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRedPacketController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRedPacketController.java @@ -13,14 +13,11 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import java.util.List; -@Api(tags = "管理端 红包") @RestController @RequestMapping("/admin/redPacket") public class TtRedPacketController extends BaseController { @@ -45,7 +42,6 @@ public class TtRedPacketController extends BaseController { } @Log(title = "CDK口令", action = "新增", businessType = BusinessType.INSERT) - @ApiOperation("生成红包") @PostMapping public AjaxResult add(@RequestBody TtRedPacketDataVO ttRedPacketDataVO) { List passwordList = redPacketService.insertRedPacket(ttRedPacketDataVO); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollController.java index 96f4b5e..49f1e60 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollController.java @@ -24,8 +24,6 @@ import com.ruoyi.domain.entity.roll.TtRollUser; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.domain.vo.TtRollPrizeDataVO; import com.ruoyi.domain.vo.roll.RollJackpotOrnamentsByPageVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.Data; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -35,7 +33,6 @@ import jakarta.validation.constraints.NotNull; import java.util.List; import java.util.Map; -@Api(tags = "管理端 roll房") @RestController @RequestMapping("/admin/roll") public class TtRollController extends BaseController { @@ -77,7 +74,6 @@ public class TtRollController extends BaseController { @Log(title = "Roll房列表", action = "新增", businessType = BusinessType.INSERT, entityClass = TtRoll.class, mapperClass = TtRollMapper.class) // 创建roll房 - @ApiOperation("创建roll房") @PostMapping public AjaxResult add(@RequestBody TtRoll ttRoll) { @@ -88,7 +84,6 @@ public class TtRollController extends BaseController { } // roll房拉人 - @ApiOperation("roll房拉人") @PostMapping("/inviteRollUser") public R inviteRollUser(@RequestBody InviteRollUser InviteRollUser) { @@ -97,7 +92,6 @@ public class TtRollController extends BaseController { } // 获取roll房成员信息 - @ApiOperation("获取roll房成员信息") @GetMapping("getRollUsers/{rollId}") public AjaxResult getRollUsers(@PathVariable("rollId") Integer rollId) { return rollService.getRollUsers(rollId); @@ -106,7 +100,6 @@ public class TtRollController extends BaseController { @Log(title = "Roll房列表", action = "修改", businessType = BusinessType.UPDATE, entityClass = TtRoll.class, mapperClass = TtRollMapper.class) - @ApiOperation("编辑roll房") @PutMapping public AjaxResult edit(@RequestBody TtRoll ttRoll) { @@ -117,14 +110,12 @@ public class TtRollController extends BaseController { } @Log(title = "Roll房列表", action = "删除", businessType = BusinessType.DELETE) - @ApiOperation("删除roll房") @DeleteMapping("/remove/{rollId}") public AjaxResult remove(@PathVariable Long rollId) { return rollService.removeRollById(rollId, getUsername()); } - // @ApiOperation("roll房奖品列表") // @PostMapping("/getRollPrizeList") // public R> getRollPrizeList(@RequestBody RollPrizesCondition condition) { // @@ -133,7 +124,6 @@ public class TtRollController extends BaseController { // return R.ok(list); // // } - @ApiOperation("roll房奖品列表") @GetMapping("/getRollPrizeList/{rollId}") public R> getRollPrizeList(@PathVariable("rollId") Integer rollId) { @@ -143,40 +133,34 @@ public class TtRollController extends BaseController { } - @ApiOperation("获取 roll房奖池详情") @PostMapping("/getRollPrizePool") public R getRollPrizePool(@RequestBody @Validated GetRollPrizePool param) { return rollService.getRollPrizePool(param); } - @ApiOperation("roll房的指定获奖人名单") @GetMapping("/rollWinners/{rollId}") public R rollWinners(@PathVariable Integer rollId) { return rollUserService.rollWinners(rollId); } - @ApiOperation("roll房实际中奖记录(开奖后参与用户中了什么饰品)") @GetMapping("/winningRecords/{rollId}") public R>> winningRecords(@PathVariable("rollId") Integer rollId) { return rollService.winningRecords(rollId); } @Log(title = "装备列表", action = "指定获奖者", businessType = BusinessType.INSERT) - @ApiOperation("指定roll房winner") @PostMapping("/namedWinner") public AjaxResult namedWinner(@RequestBody @Validated TtRollPrizeDataVO param) { return rollService.namedWinner(param); } @Log(title = "装备列表", action = "取消奖品", businessType = BusinessType.DELETE) - @ApiOperation("取消指定roll房奖品") @DeleteMapping("/cancelNamedWinner") public R cancelNamedWinner(@RequestBody List rollUserPrizeIds) { return rollService.cancelNamedWinner(rollUserPrizeIds); } - @ApiOperation("获取ROLL房用户") @GetMapping("/getRollUser/{rollId}") public AjaxResult getRollUser(@PathVariable("rollId") Integer rollId) { List rollUserList = rollService.getRollUser(rollId); @@ -184,13 +168,11 @@ public class TtRollController extends BaseController { } @Log(title = "房间用户", action = "加入机器人", businessType = BusinessType.INSERT) - @ApiOperation("加入机器人") @PostMapping("/addRobot") public AjaxResult addRobot(@RequestBody AddRobotBody addRobotBody) { return rollService.addRobot(addRobotBody); } @Log(title = "房间用户", action = "加入用户", businessType = BusinessType.INSERT) - @ApiOperation("强制加入普通用户") @PostMapping("/addUser") public AjaxResult addUser(@RequestBody AddUserBody addUserBody) { return rollService.addUser(addUserBody); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollJackpotController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollJackpotController.java index c09c8c2..4a77ea8 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollJackpotController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollJackpotController.java @@ -13,14 +13,11 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.util.List; -@Api(tags = "管理端 roll奖池") @RestController @RequestMapping("/admin/rollJackpot") public class TtRollJackpotController extends BaseController { @@ -31,7 +28,6 @@ public class TtRollJackpotController extends BaseController { this.rollJackpotService = rollJackpotService; } - @ApiOperation("奖池列表") @GetMapping("/list") public PageDataInfo list(@RequestParam(value = "jackpotName", required = false) String jackpotName) { startPage(); @@ -51,7 +47,6 @@ public class TtRollJackpotController extends BaseController { @Log(title = "奖池列表", action = "新增", businessType = BusinessType.INSERT, entityClass = TtRollJackpot.class, mapperClass = TtRollJackpotMapper.class) - @ApiOperation("添加奖池") @PostMapping public AjaxResult add(@RequestBody TtRollJackpot ttRollJackpot) { ttRollJackpot.setCreateBy(getUsername()); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollJackpotOrnamentsController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollJackpotOrnamentsController.java index 0f3fef6..4780b17 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollJackpotOrnamentsController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtRollJackpotOrnamentsController.java @@ -16,14 +16,11 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import java.util.List; -@Api(tags = "管理端 roll奖池物品管理") @RestController @RequestMapping("/admin/rollJackpotOrnaments") public class TtRollJackpotOrnamentsController extends BaseController { @@ -37,7 +34,6 @@ public class TtRollJackpotOrnamentsController extends BaseController { this.rollJackpotOrnamentsService = rollJackpotOrnamentsService; } - @ApiOperation("物品列表") @GetMapping("/list") public PageDataInfo list(TtRollJackpotOrnamentsBody rollJackpotOrnamentsBody) { startPage(); @@ -61,7 +57,6 @@ public class TtRollJackpotOrnamentsController extends BaseController { @Log(title = "奖池列表", action = "修改", businessType = BusinessType.UPDATE, entityClass = TtRollJackpotOrnaments.class, mapperClass = TtRollJackpotOrnamentsMapper.class) - @ApiOperation("修改奖池道具") @PutMapping public AjaxResult edit(@RequestBody TtRollJackpotOrnaments rollJOEdit) { String msg = rollJackpotOrnamentsService.updateRollJackpotOrnamentsById(rollJOEdit); @@ -82,7 +77,6 @@ public class TtRollJackpotOrnamentsController extends BaseController { return toAjax(ok); } - @ApiOperation("奖池批量填货") @PostMapping("/batchAdd/{rollJackpotId}/{OrnamentsIds}") public AjaxResult batchAdd(@PathVariable Integer rollJackpotId, @PathVariable Long[] OrnamentsIds) { String msg = rollJackpotOrnamentsService.batchAdd(rollJackpotId, Arrays.asList(OrnamentsIds)); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtTransferApplyController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtTransferApplyController.java index a67c7db..3af6647 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtTransferApplyController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtTransferApplyController.java @@ -11,14 +11,11 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.domain.other.TransferApplyBody; import com.ruoyi.domain.vo.transfer.TransferApplyBatchVO; import com.ruoyi.domain.vo.transfer.TransferApplyVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.concurrent.TimeUnit; -@Api(tags = "管理端 转赠申请管理") @RestController @RequestMapping("/admin/transferApply") public class TtTransferApplyController extends BaseController { @@ -32,7 +29,6 @@ public class TtTransferApplyController extends BaseController { this.redisLock = redisLock; } - @ApiOperation("转赠申请列表(按饰品逐条)") @GetMapping("/list") public PageDataInfo list(TransferApplyBody body) { startPage(); @@ -40,7 +36,6 @@ public class TtTransferApplyController extends BaseController { return getPageData(list); } - @ApiOperation("转赠申请批次列表(按批次聚合,含饰品明细)") @GetMapping("/batchList") public PageDataInfo batchList(TransferApplyBody body) { startPage(); @@ -48,7 +43,6 @@ public class TtTransferApplyController extends BaseController { return getPageData(list); } - @ApiOperation("审核通过(单条,兼容旧接口)") @Log(title = "转赠申请", action = "同意", businessType = BusinessType.GRANT) @PostMapping("/approve") public R approve(@RequestParam("id") Integer id) { @@ -64,7 +58,6 @@ public class TtTransferApplyController extends BaseController { } } - @ApiOperation("审核驳回(单条,兼容旧接口)") @Log(title = "转赠申请", action = "驳回", businessType = BusinessType.GRANT) @PostMapping("/reject") public R reject(@RequestParam("id") Integer id, @@ -81,7 +74,6 @@ public class TtTransferApplyController extends BaseController { } } - @ApiOperation("批次审核通过(整个批次一起通过)") @Log(title = "转赠申请", action = "确定同意", businessType = BusinessType.GRANT) @PostMapping("/approveBatch") public R approveBatch(@RequestParam("batchId") String batchId) { @@ -97,7 +89,6 @@ public class TtTransferApplyController extends BaseController { } } - @ApiOperation("批次审核驳回(整个批次一起驳回)") @Log(title = "转赠申请", action = "驳回", businessType = BusinessType.GRANT) @PostMapping("/rejectBatch") public R rejectBatch(@RequestParam("batchId") String batchId, diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeFailOrnamentsController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeFailOrnamentsController.java index 85c0fd6..2d219d7 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeFailOrnamentsController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeFailOrnamentsController.java @@ -9,9 +9,6 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiModelProperty; -import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -25,7 +22,6 @@ import java.util.Arrays; import java.util.List; import java.util.Map; -@Api(tags = "管理端 失败物品奖励") @RestController @RequestMapping("/admin/upgradeFailOrnaments") public class TtUpgradeFailOrnamentsController extends BaseController { @@ -43,7 +39,6 @@ public class TtUpgradeFailOrnamentsController extends BaseController { @NotNull(message = "参与升级物品id不能为空") private Integer upgradeOrnamentId; } - @ApiOperation("失败奖励列表") @PostMapping("/list") public PageDataInfo list(@RequestBody listParam param) { startPage(); @@ -67,7 +62,6 @@ public class TtUpgradeFailOrnamentsController extends BaseController { private Boolean useAllFlag; } @Log(title = "失败奖励", action = "新增", businessType = BusinessType.INSERT) - @ApiOperation("批量添加失败奖励") @PostMapping("/batchAdd") public AjaxResult batchAdd(@RequestBody @Validated BatchAddParam param) { return upgradeFailOrnamentsService.batchAdd(param); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeOrnamentsController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeOrnamentsController.java index 0a20c70..1af8f06 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeOrnamentsController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeOrnamentsController.java @@ -14,8 +14,6 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; @@ -24,7 +22,6 @@ import java.util.List; import java.util.Map; import java.util.stream.Collectors; -@Api(tags = "管理端 幸运升级") @RestController @RequestMapping("/admin/upgradeOrnaments") public class TtUpgradeOrnamentsController extends BaseController { @@ -38,7 +35,6 @@ public class TtUpgradeOrnamentsController extends BaseController { this.upgradeOrnamentsService = upgradeOrnamentsService; } - @ApiOperation("获取参与幸运升级的物品") @GetMapping("/list") public PageDataInfo list(TtUpgradeOrnamentsBody ttUpgradeOrnamentsBody){ startPage(); @@ -53,7 +49,6 @@ public class TtUpgradeOrnamentsController extends BaseController { } @Log(title = "饰品列表", action = "新增", businessType = BusinessType.INSERT) - @ApiOperation("批量填货") @PostMapping("/batchAdd/{ornamentsIds}") public AjaxResult batchAdd(@PathVariable Long[] ornamentsIds) { String msg = upgradeOrnamentsService.batchAdd(Arrays.asList(ornamentsIds)); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeRecordController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeRecordController.java index 0c39cc2..8bbf33f 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeRecordController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeRecordController.java @@ -10,14 +10,11 @@ import com.ruoyi.domain.other.TtUpgradeRecordBody; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.domain.vo.upgrade.UpgradeRecordVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.List; -@Api(tags = "管理端 幸运升级日志") @RestController @RequestMapping("/admin/upgradeRecord") public class TtUpgradeRecordController extends BaseController { @@ -28,7 +25,6 @@ public class TtUpgradeRecordController extends BaseController { this.upgradeRecordService = upgradeRecordService; } - @ApiOperation("幸运升级日志") @PostMapping("/list") public R> list(@RequestBody @Validated UpgradeCondition param){ return upgradeRecordService.adminGetLog(param); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeWatermarkController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeWatermarkController.java index 0872753..94b2596 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeWatermarkController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUpgradeWatermarkController.java @@ -6,8 +6,6 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.enums.BusinessType; import com.ruoyi.domain.other.UpgradeWatermarkSettingBody; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -21,7 +19,6 @@ import java.util.Map; * 后台只配一个「目标水位(%)」:水位高于它 → 随机数中心下移(放水);低于它 → 上移(收紧), * 长期自动收敛回目标值。随机数的取值范围仍由每个饰品自己的区间限定。 */ -@Api(tags = "幸运升级·奖池水位") @RestController @RequestMapping("/admin/upgradeWatermark") public class TtUpgradeWatermarkController extends BaseController { @@ -29,13 +26,11 @@ public class TtUpgradeWatermarkController extends BaseController { @Autowired private UpgradeWatermarkService watermarkService; - @ApiOperation("当前水位快照 + 目标水位策略 + 按目标水位推算的随机数中心") @GetMapping("/info") public R> info() { return R.ok(watermarkService.info()); } - @ApiOperation("保存目标水位策略(目标水位 + 灵敏度)") @Log(title = "幸运升级水位策略", action = "保存", businessType = BusinessType.UPDATE) @PostMapping("/setting") public R> saveSetting(@RequestBody UpgradeWatermarkSettingBody body) { @@ -46,7 +41,6 @@ public class TtUpgradeWatermarkController extends BaseController { return R.ok(watermarkService.info()); } - @ApiOperation("注水/抽水(type 1注水 2抽水;调整原因必填)") @Log(title = "幸运升级水位", action = "注水/抽水", businessType = BusinessType.GRANT) @PostMapping("/adjust") public R> adjust(@RequestBody Map body) { @@ -60,7 +54,6 @@ public class TtUpgradeWatermarkController extends BaseController { } } - @ApiOperation("重置人工调整(插入抵消日志,SUM(delta) 归零,历史保留)") @Log(title = "幸运升级水位", action = "重置调整", businessType = BusinessType.CLEAN) @PostMapping("/adjustReset") public R> adjustReset(@RequestBody(required = false) Map body) { @@ -72,14 +65,12 @@ public class TtUpgradeWatermarkController extends BaseController { } } - @ApiOperation("调整历史(分页)") @GetMapping("/adjustLog") public R> adjustLog(@RequestParam(defaultValue = "1") int page, @RequestParam(defaultValue = "10") int size) { return R.ok(watermarkService.pageLog(page, size)); } - @ApiOperation("按历史记录全量重算累计下注/返奖(纠正 Redis 计数漂移)") @Log(title = "幸运升级水位", action = "重算累计量", businessType = BusinessType.CLEAN) @PostMapping("/recalc") public R> recalc() { diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserAmountRecordsController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserAmountRecordsController.java index 33a8e32..12cd4c9 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserAmountRecordsController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserAmountRecordsController.java @@ -9,8 +9,6 @@ import com.ruoyi.system.config.ArchiveDaysConfig; import com.ruoyi.domain.other.TtUserAmountRecordsBody; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.page.PageDataInfo; -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.validation.annotation.Validated; @@ -22,7 +20,6 @@ import java.util.List; import java.util.Map; @Slf4j -@Api(tags = "管理端 金币账户") @RestController @RequestMapping("/admin/userAmountRecords") public class TtUserAmountRecordsController extends BaseController { @@ -38,7 +35,6 @@ public class TtUserAmountRecordsController extends BaseController { this.userAmountRecordsService = userAmountRecordsService; } - @ApiOperation("获取列表") @PostMapping("/list") public R list(@RequestBody @Validated TtUserAmountRecordsBody ttUserAmountRecordsBody) { return userAmountRecordsService.queryList(ttUserAmountRecordsBody); @@ -55,7 +51,6 @@ public class TtUserAmountRecordsController extends BaseController { * - userId 排序 → 快速模式(先分页用户再聚合当页数据,Java内存排序) * - 聚合字段排序 → 全局排序模式(先聚合所有用户→SQL排序→分页),确保全局排序正确 */ - @ApiOperation("用户流水统计") @GetMapping("/userTurnover") public R userTurnover( @RequestParam(required = false) Integer userId, diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserBlendErcashController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserBlendErcashController.java index 38bb7bc..1e2673e 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserBlendErcashController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserBlendErcashController.java @@ -5,8 +5,6 @@ import com.ruoyi.admin.service.TtUserBlendErcashService; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.domain.dto.userRecord.BlendErcashCondition; -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.validation.annotation.Validated; @@ -15,7 +13,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -@Api(tags = "管理端 收支明细") @RestController @RequestMapping("/admin/blendErcash") @Slf4j @@ -24,13 +21,11 @@ public class TtUserBlendErcashController extends BaseController { @Autowired private TtUserBlendErcashService ttUserBlendErcashService; - @ApiOperation("收支明细") @PostMapping("/list") public R list(@RequestBody @Validated BlendErcashCondition condition) { return ttUserBlendErcashService.byCondition(condition); } - @ApiOperation("收支明细-仅归档表") @PostMapping("/archive/list") public R archiveList(@RequestBody @Validated BlendErcashCondition condition) { return ttUserBlendErcashService.byConditionArchive(condition); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserController.java index 80f2655..c28126b 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TtUserController.java @@ -27,7 +27,6 @@ import com.ruoyi.domain.other.TtUserBody; import com.ruoyi.domain.other.TtUserPackSackBody; import com.ruoyi.domain.vo.TtUserPackSackDataVO; import com.ruoyi.domain.vo.user.TtUserVo; -import io.swagger.annotations.ApiOperation; import jakarta.servlet.http.HttpServletResponse; import lombok.Data; import lombok.extern.slf4j.Slf4j; @@ -89,14 +88,12 @@ public class TtUserController extends BaseController { } @Log(title = "用户列表", action = "生成招商账号", businessType = BusinessType.INSERT) - @ApiOperation("生成招商账号") @PostMapping("/generateAccount") public void generateAccount(HttpServletResponse response, @RequestBody GenerateAccountBody body) { List userList = userService.getAccountList(body.getNum(), body.getCustomPhoneNumbers()); userService.generateAccount(response, userList); } - @ApiOperation("生成账号") @GetMapping("/generateAccountByPhoneNum") public R generateAccountByPhoneNum(HttpServletResponse response, @RequestParam("phoneNum") String phoneNum, @RequestParam("password") String password) { @@ -105,7 +102,6 @@ public class TtUserController extends BaseController { } @Log(title = "用户列表", action = "生成机器人", businessType = BusinessType.INSERT) - @ApiOperation("生成机器人") @PostMapping("/generateRobot/{num}") public void generateRobot(HttpServletResponse response, @PathVariable("num") Integer num) { List userList = userService.getRobotList(num); @@ -113,7 +109,6 @@ public class TtUserController extends BaseController { } @Log(title = "用户列表", action = "生成白号", businessType = BusinessType.INSERT) - @ApiOperation("生成白号") @PostMapping("/generateBlankAccount") public void generateBlankAccount(HttpServletResponse response, @RequestBody GenerateAccountBody body) { List userList = userService.getBlankAccountList(body.getNum(), body.getCustomPhoneNumbers()); @@ -121,7 +116,6 @@ public class TtUserController extends BaseController { } @Log(title = "用户列表", action = "生成卡商账号", businessType = BusinessType.INSERT) - @ApiOperation("生成卡商账号") @PostMapping("/generateCardMerchant") public void generateCardMerchant(HttpServletResponse response, @RequestBody GenerateAccountBody body) { List userList = userService.getCardMerchantList(body.getNum(), body.getCustomPhoneNumbers()); @@ -130,7 +124,6 @@ public class TtUserController extends BaseController { @Log(title = "用户列表", action = "修改", businessType = BusinessType.UPDATE, entityClass = TtUser.class, mapperClass = TtUserMapper.class) - @ApiOperation("修改用户信息") @PutMapping public AjaxResult edit(@RequestBody TtUser ttUser) { ttUser.setUpdateBy(getUsername()); @@ -146,7 +139,6 @@ public class TtUserController extends BaseController { @Log(title = "用户列表", action = "修改邀请码", businessType = BusinessType.UPDATE, entityClass = TtUser.class, mapperClass = TtUserMapper.class) - @ApiOperation("修改邀请码") @PostMapping("/editInvitationCode") public AjaxResult editInvitationCode(@RequestBody TtUser ttUser) { ttUser.setUpdateBy(getUsername()); @@ -225,7 +217,6 @@ public class TtUserController extends BaseController { @Log(title = "用户列表", action = "重置余额积分", businessType = BusinessType.CLEAN, entityClass = TtUser.class, mapperClass = TtUserMapper.class, idField = "userId") - @ApiOperation("重置用户余额和积分") @PostMapping("/resetBalance/{userId}") public AjaxResult resetUserBalance(@PathVariable("userId") Integer userId){ TtUser ttUser = new TtUser(); @@ -239,7 +230,6 @@ public class TtUserController extends BaseController { } @Log(title = "用户列表", action = "真删除", businessType = BusinessType.FORCE) - @ApiOperation("真删除用户(数据库删除,不可恢复)") @DeleteMapping("/forceDelete/{userId}") public AjaxResult forceDelete(@PathVariable("userId") Integer userId) { // 0. 先清登录态:物理删除后 tt_user 查不到该用户,若不清 Redis Token, diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryAdminController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryAdminController.java index 83358d0..4316ff6 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryAdminController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryAdminController.java @@ -18,8 +18,6 @@ import com.ruoyi.domain.entity.TtOrnament; import com.ruoyi.domain.entity.lottery.TtTurnoverLottery; import com.ruoyi.domain.entity.lottery.TtTurnoverLotteryPrize; import com.ruoyi.domain.entity.lottery.TtTurnoverLotteryRecord; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -31,7 +29,6 @@ import java.util.concurrent.TimeUnit; /** * 后台管理 - 流水抽奖配置 */ -@Api(tags = "后台流水抽奖管理") @RestController @RequestMapping("/admin/turnoverLottery") public class TurnoverLotteryAdminController extends BaseController { @@ -57,7 +54,6 @@ public class TurnoverLotteryAdminController extends BaseController { /** * 获取抽奖活动列表 */ - @ApiOperation("获取抽奖活动列表") @GetMapping("/list") public PageDataInfo list( @RequestParam(required = false) String lotteryName, @@ -92,7 +88,6 @@ public class TurnoverLotteryAdminController extends BaseController { /** * 保存抽奖奖品配置 */ - @ApiOperation("保存抽奖奖品") @PostMapping("/save/{lotteryId}") public R savePrizes( @PathVariable("lotteryId") Long lotteryId, @@ -112,7 +107,6 @@ public class TurnoverLotteryAdminController extends BaseController { /** * 更新抽奖活动状态 */ - @ApiOperation("更新抽奖状态") @PostMapping("/toggleStatus") public R toggleStatus(@RequestBody Map body) { Long lotteryId = body.get("lotteryId") != null ? ((Number) body.get("lotteryId")).longValue() : null; @@ -139,7 +133,6 @@ public class TurnoverLotteryAdminController extends BaseController { /** * 创建新的抽奖活动 */ - @ApiOperation("创建抽奖活动") @PostMapping("/create") public R create(@RequestBody Map body) { String lotteryName = body.get("lotteryName") != null ? body.get("lotteryName").toString() : null; @@ -170,7 +163,6 @@ public class TurnoverLotteryAdminController extends BaseController { /** * 删除抽奖活动 */ - @ApiOperation("删除抽奖活动") @DeleteMapping("/delete/{lotteryId}") public R delete(@PathVariable("lotteryId") Long lotteryId) { lotteryMapper.deleteById(lotteryId); @@ -180,7 +172,6 @@ public class TurnoverLotteryAdminController extends BaseController { /** * 搜索饰品 (用于奖品配置时调用) */ - @ApiOperation("搜索饰品") @GetMapping("/searchOrnaments") public R> searchOrnaments( @RequestParam(value = "name", required = false) String name, @@ -205,7 +196,6 @@ public class TurnoverLotteryAdminController extends BaseController { /** * 更新抽奖活动基础信息 */ - @ApiOperation("更新抽奖活动") @PostMapping("/update") public R update(@RequestBody Map body) { Long lotteryId = body.get("lotteryId") != null ? ((Number) body.get("lotteryId")).longValue() : null; diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryPrizeController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryPrizeController.java index 5cf0eb8..49adfca 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryPrizeController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryPrizeController.java @@ -18,8 +18,6 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.domain.entity.lottery.TtTurnoverLottery; import com.ruoyi.domain.entity.lottery.TtTurnoverLotteryPrize; import com.ruoyi.domain.other.TtOrnamentsLevel; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -33,7 +31,6 @@ import java.util.stream.Collectors; /** * 流水抽奖奖品管理 (仿宝箱饰品管理 boxOrnaments) */ -@Api(tags = "流水抽奖奖品管理") @RestController @RequestMapping("/admin/turnoverLotteryPrize") public class TurnoverLotteryPrizeController extends BaseController { @@ -56,7 +53,6 @@ public class TurnoverLotteryPrizeController extends BaseController { /** * 获取奖品列表 (分页,含爆率百分比计算) */ - @ApiOperation("奖品列表") @GetMapping("/list/{lotteryId}") public PageDataInfo list(@PathVariable("lotteryId") Long lotteryId) { // 先算总数(避免 PageHelper 干扰百分比计算) @@ -108,7 +104,6 @@ public class TurnoverLotteryPrizeController extends BaseController { /** * 获取单个奖品详情 */ - @ApiOperation("奖品详情") @GetMapping("/{id}") public R getInfo(@PathVariable("id") Long id) { return R.ok(prizeMapper.selectById(id)); @@ -118,7 +113,6 @@ public class TurnoverLotteryPrizeController extends BaseController { /** * 新增奖品 */ - @ApiOperation("新增奖品") @PostMapping public AjaxResult add(@RequestBody TtTurnoverLotteryPrize prize) { if (prize == null || prize.getLotteryId() == null) { @@ -165,7 +159,6 @@ public class TurnoverLotteryPrizeController extends BaseController { /** * 修改奖品 */ - @ApiOperation("修改奖品") @PutMapping public AjaxResult edit(@RequestBody TtTurnoverLotteryPrize prize) { Long lotteryId = prize.getLotteryId(); @@ -211,7 +204,6 @@ public class TurnoverLotteryPrizeController extends BaseController { /** * 删除奖品 */ - @ApiOperation("删除奖品") @DeleteMapping("/{lotteryId}/{ids}") public AjaxResult remove(@PathVariable Long lotteryId, @PathVariable Long[] ids) { String lockKey = RedisConstants.TURNOVER_LOTTERY_DRAW_BOX_LOCK + lotteryId; diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryRecordController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryRecordController.java index 6921f99..7390953 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryRecordController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryRecordController.java @@ -9,8 +9,6 @@ import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.domain.entity.lottery.TtTurnoverLotteryRecord; import com.ruoyi.domain.entity.lottery.TtTurnoverLottery; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -19,7 +17,6 @@ import java.util.List; /** * 后台管理 - 抽奖记录查询 */ -@Api(tags = "后台抽奖记录管理") @RestController @RequestMapping("/admin/turnoverLotteryRecord") public class TurnoverLotteryRecordController extends BaseController { @@ -33,7 +30,6 @@ public class TurnoverLotteryRecordController extends BaseController { /** * 查询抽奖记录列表 */ - @ApiOperation("查询抽奖记录") @GetMapping("/list") public PageDataInfo list( @RequestParam(value = "userId", required = false) Long userId, @@ -58,7 +54,6 @@ public class TurnoverLotteryRecordController extends BaseController { /** * 获取所有抽奖活动(用于下拉选择) */ - @ApiOperation("获取抽奖活动选项") @GetMapping("/lotteryOptions") public R> lotteryOptions() { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryUserController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryUserController.java index c22c333..40b087d 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryUserController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/TurnoverLotteryUserController.java @@ -6,8 +6,6 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.redis.config.RedisLock; import com.ruoyi.common.utils.StringUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -18,7 +16,6 @@ import java.util.concurrent.TimeUnit; /** * 用户端 - 流水抽奖 */ -@Api(tags = "用户流水抽奖") @RestController @RequestMapping("/api/turnoverLottery") public class TurnoverLotteryUserController extends BaseController { @@ -32,7 +29,6 @@ public class TurnoverLotteryUserController extends BaseController { /** * 获取用户今日流水统计和可参与的抽奖宝箱 */ - @ApiOperation("获取抽奖信息") @PostMapping("/myStats") public R> getMyStats() { Integer userId = getUserId().intValue(); @@ -42,7 +38,6 @@ public class TurnoverLotteryUserController extends BaseController { /** * 执行抽奖 */ - @ApiOperation("执行抽奖") @PostMapping("/draw") public R> draw(@RequestBody Map params) { Integer userId = getUserId().intValue(); @@ -82,7 +77,6 @@ public class TurnoverLotteryUserController extends BaseController { /** * 查询我的抽奖记录(分页) */ - @ApiOperation("我的抽奖记录") @PostMapping("/myRecords") public R> myRecords(@RequestBody(required = false) Map params) { Integer userId = getUserId().intValue(); @@ -109,7 +103,6 @@ public class TurnoverLotteryUserController extends BaseController { /** * 查询全服中奖记录(分页,已排除白号/机器人/封禁/已删除用户) */ - @ApiOperation("全服中奖记录") @PostMapping("/globalRecords") public R> globalRecords(@RequestBody(required = false) Map params) { Long lotteryId = null; diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/WebsitePropertyController.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/WebsitePropertyController.java index 5dde4e7..1d41092 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/WebsitePropertyController.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/controller/WebsitePropertyController.java @@ -13,15 +13,12 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.domain.vo.upgrade.SimpleOrnamentVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import java.util.List; -@Api(tags = "管理端 道具管理") @RestController @RequestMapping("/admin/websiteProperty") @Slf4j @@ -36,7 +33,6 @@ public class WebsitePropertyController extends BaseController { this.ornamentsService = ornamentsService; } - // @ApiOperation("获取道具列表") // @GetMapping("/list") // public PageDataInfo list() { // startPage(); @@ -44,7 +40,6 @@ public class WebsitePropertyController extends BaseController { // return getPageData(Arrays.asList()); // } - @ApiOperation("获取道具列表") @GetMapping("/list") public TableDataInfo list(OrnamentCondition condition) { startPage(); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/mapper/TtOrnamentMapper.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/mapper/TtOrnamentMapper.java index 93cbae2..d229f64 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/mapper/TtOrnamentMapper.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/mapper/TtOrnamentMapper.java @@ -7,7 +7,6 @@ import com.ruoyi.domain.entity.TtOrnament; import com.ruoyi.domain.entity.TtOrnamentsYY; import com.ruoyi.domain.vo.WebsitePropertyDataVO; import com.ruoyi.domain.vo.upgrade.SimpleOrnamentVO; -import io.swagger.models.auth.In; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/security/ApiUserDetailsServiceImpl.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/security/ApiUserDetailsServiceImpl.java index 39b5262..8b0ea3b 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/security/ApiUserDetailsServiceImpl.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/security/ApiUserDetailsServiceImpl.java @@ -78,7 +78,7 @@ public class ApiUserDetailsServiceImpl implements UserDetailsService { } else { userData.setParentInvitationCode(ParentUser.getInvitationCode()); } - return createLoginUser(userData); + return createLoginUser(userData, LoginUser.SCOPE_PLAYER); } else if (username.startsWith("promo_user_")) { String phoneNumber = username.substring(11); TtUser user = new LambdaQueryChainWrapper<>(ttUserService.getBaseMapper()) @@ -93,7 +93,7 @@ public class ApiUserDetailsServiceImpl implements UserDetailsService { if (hasPromoRole) { UserData userData = UserData.builder().build(); BeanUtils.copyBeanProp(userData, user); - return createLoginUser(userData); + return createLoginUser(userData, LoginUser.SCOPE_PROMO); } // 超级管理员账号(promo_admin.username / phone_number)也可以是手机号 PromoAdmin promoAdmin = promoAdminMapper.findByAccount(phoneNumber); @@ -105,7 +105,7 @@ public class ApiUserDetailsServiceImpl implements UserDetailsService { .userType(UserType.SUPER_ADMIN.getCode()) .password(promoAdmin.getPassword()) .build(); - return createLoginUser(userData); + return createLoginUser(userData, LoginUser.SCOPE_PROMO); } // 以下报错语义与原逻辑保持一致 if (StringUtils.isNull(user)) { @@ -137,7 +137,7 @@ public class ApiUserDetailsServiceImpl implements UserDetailsService { .userType(UserType.SUPER_ADMIN.getCode()) .password(promoAdmin.getPassword()) .build(); - return createLoginUser(userData); + return createLoginUser(userData, LoginUser.SCOPE_PROMO); } else { SysUser user = userService.selectUserByUserName(username); if (StringUtils.isNull(user)) { @@ -157,11 +157,19 @@ public class ApiUserDetailsServiceImpl implements UserDetailsService { } } - private UserDetails createLoginUser(UserData userData) { - return new LoginUser(userData.getUserId().longValue(), userData); + /** + * 玩家 / 推广端登录:账号前缀决定登录端标记,token 只能用于对应端的接口 + */ + private UserDetails createLoginUser(UserData userData, String loginScope) { + LoginUser loginUser = new LoginUser(userData.getUserId().longValue(), userData); + loginUser.setLoginScope(loginScope); + return loginUser; } + /** 后台账号登录(sys_user) */ private UserDetails createLoginUser(SysUser user) { - return new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user)); + LoginUser loginUser = new LoginUser(user.getUserId(), user.getDeptId(), user, permissionService.getMenuPermission(user)); + loginUser.setLoginScope(LoginUser.SCOPE_ADMIN); + return loginUser; } } diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/TtFightResultService.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/TtFightResultService.java index 0319bd2..655818a 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/TtFightResultService.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/TtFightResultService.java @@ -12,7 +12,9 @@ public interface TtFightResultService extends IService { FightResultVO getFightResult(Integer fightId); /** - * 批量获取多个对战的详细结果(替代循环调用 getFightResult 的 N+1 问题) + * 批量获取多个对战的结果(替代循环调用 getFightResult 的 N+1 问题)。 + * 只算卡片要展示的金额,开箱明细(fightResult/winnerPrize/endGamePrize)不组装, + * 客户端点卡片进观战/回顾时自己请求 getFightResult 取权威明细。 * * @param fightIds 对战ID列表 * @return 按入参顺序返回的 FightResultVO 列表(跳过不存在的 fightId) diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/TtUserService.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/TtUserService.java index 789c2e1..24506bd 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/TtUserService.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/TtUserService.java @@ -38,9 +38,7 @@ public interface TtUserService extends IService { void generateAccount(HttpServletResponse response, List accountList); - List getAccountList(Integer num); - - // 生成招商账号:支持按位置传入自定义手机号(为空的位置随机生成) + // 生成招商账号:手机号必填(推广后台靠手机号收短信验证码登录,随机号收不到码) List getAccountList(Integer num, List customPhoneNumbers); TtUser getAccountList(String phoneNumber, String password); @@ -52,9 +50,7 @@ public interface TtUserService extends IService { // 生成白号:支持按位置传入自定义手机号(为空的位置随机生成) List getBlankAccountList(Integer num, List customPhoneNumbers); - List getCardMerchantList(Integer num); - - // 生成卡商账号:支持按位置传入自定义手机号(为空的位置随机生成) + // 生成卡商账号:手机号必填(推广后台靠手机号收短信验证码登录,随机号收不到码) List getCardMerchantList(Integer num, List customPhoneNumbers); boolean checkUserNameUnique(TtUser user); diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/impl/TtFightResultServiceImpl.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/impl/TtFightResultServiceImpl.java index 0abfcb9..cc1374c 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/impl/TtFightResultServiceImpl.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/impl/TtFightResultServiceImpl.java @@ -306,7 +306,7 @@ public class TtFightResultServiceImpl extends ServiceImpl fightMap = fights.stream() .collect(Collectors.toMap(TtFight::getId, f -> f, (a, b) -> a)); - // 2. 批量查询所有座位玩家的 vipLevel + // 2. 批量查询座位玩家 vipLevel + 房主实时昵称(一次查询覆盖两类用户) List allPlayerIds = fights.stream() .filter(f -> f.getSeats() != null) .flatMap(f -> f.getSeats().stream()) @@ -314,30 +314,42 @@ public class TtFightResultServiceImpl extends ServiceImpl vipMap = new HashMap<>(); - if (!allPlayerIds.isEmpty()) { + List allUserIds = new ArrayList<>(allPlayerIds); + fights.stream().map(TtFight::getUserId).filter(Objects::nonNull).forEach(allUserIds::add); + allUserIds = allUserIds.stream().distinct().collect(Collectors.toList()); + Map userMap = new HashMap<>(); + if (!allUserIds.isEmpty()) { List users = new LambdaQueryChainWrapper<>(ttUserMapper) - .in(TtUser::getUserId, allPlayerIds) - .select(TtUser::getUserId, TtUser::getVipLevel) + .in(TtUser::getUserId, allUserIds) + .select(TtUser::getUserId, TtUser::getVipLevel, TtUser::getNickName) .list(); - vipMap = users.stream() - .collect(Collectors.toMap(TtUser::getUserId, - u -> u.getVipLevel() != null && u.getVipLevel() > 0 ? u.getVipLevel() - 1 : 0, (a, b) -> a)); + userMap = users.stream().filter(Objects::nonNull) + .collect(Collectors.toMap(TtUser::getUserId, u -> u, (a, b) -> a)); } for (TtFight fight : fights) { if (fight.getSeats() != null) { for (FightSeat seat : fight.getSeats()) { if (seat.getPlayerId() != null) { - seat.setVipLevel(vipMap.getOrDefault(seat.getPlayerId(), 0)); + TtUser user = userMap.get(seat.getPlayerId()); + Integer vipLevel = user != null ? user.getVipLevel() : null; + seat.setVipLevel(vipLevel != null && vipLevel > 0 ? vipLevel - 1 : 0); } } } + // 用户存在时用实时昵称覆盖;用户被物理删除时保留入库的 ownerNickName + TtUser owner = userMap.get(fight.getUserId()); + if (owner != null && owner.getNickName() != null) { + fight.setOwnerNickName(owner.getNickName()); + } } - // 3. 批量查询所有 TtBoxRecords(按 fight_id 分组,只取本场玩家的记录) + // 3. 批量查询所有 TtBoxRecords(按 fight_id 分组,只取本场玩家的记录;只查算金额需要的列) LambdaQueryWrapper boxRecordsQuery = new LambdaQueryWrapper<>(); boxRecordsQuery.in(TtBoxRecords::getFightId, fightIds) - .in(TtBoxRecords::getUserId, allPlayerIds); + .in(TtBoxRecords::getUserId, allPlayerIds) + .select(TtBoxRecords::getFightId, TtBoxRecords::getUserId, TtBoxRecords::getHolderUserId, + TtBoxRecords::getOrnamentId, TtBoxRecords::getOrnamentsPrice, + TtBoxRecords::getFightRoundNumber, TtBoxRecords::getCreateTime); List allBoxRecords = boxRecordsService.list(boxRecordsQuery); // 过滤旧数据:回合数不超过对战实际总回合数 + 时间过滤 @@ -377,25 +389,7 @@ public class TtFightResultServiceImpl extends ServiceImpl b.getBoxName() != null ? b.getBoxName() : "", (a, b) -> a)); } - // 5. 批量查询所有饰品 exteriorName - List allOrnamentIds = allBoxRecords.stream() - .filter(r -> r.getOrnamentId() != null) - .map(TtBoxRecords::getOrnamentId) - .distinct() - .collect(Collectors.toList()); - Map exteriorNameMap = new HashMap<>(); - if (!allOrnamentIds.isEmpty()) { - List ornaments = new LambdaQueryChainWrapper<>(ttOrnamentMapper) - .in(TtOrnament::getId, allOrnamentIds) - .select(TtOrnament::getId, TtOrnament::getExteriorName) - .list(); - exteriorNameMap = ornaments.stream() - .collect(Collectors.toMap(TtOrnament::getId, - o -> normalizeExterior(o.getExteriorName()), - (a, b) -> a)); - } - - // 6. 逐个构建 FightResultVO + // 5. 逐个构建结果(只算金额,不组装开箱明细列表) List result = new ArrayList<>(); for (Integer fightId : fightIds) { TtFight fight = fightMap.get(fightId); @@ -420,46 +414,23 @@ public class TtFightResultServiceImpl extends ServiceImpl boxData = fight.getBoxData(); - ArrayList fightBoxVOList = new ArrayList<>(); if (boxData != null) { - final Map finalBoxPriceMap = boxPriceMap; - final Map finalBoxNameMap = batchBoxNameMap; - boxData.keySet().stream() - .sorted(Comparator.comparingInt(Integer::parseInt)) - .forEach(boxId -> { - Object value = boxData.get(boxId); - if (value instanceof LinkedHashMap) { - Map map = (LinkedHashMap) value; - FightBoxVO vo = new FightBoxVO( - map.get("boxId") != null ? Integer.valueOf(map.get("boxId").toString()) : null, - map.get("number") != null ? Integer.valueOf(map.get("number").toString()) : null, - map.get("boxImg01") != null ? map.get("boxImg01").toString() : null, - map.get("boxImg02") != null ? map.get("boxImg02").toString() : null); - vo.setPrice(finalBoxPriceMap.getOrDefault(vo.getBoxId(), BigDecimal.ZERO)); - vo.setBoxName(finalBoxNameMap.getOrDefault(vo.getBoxId(), "")); - fightBoxVOList.add(vo); - } else { - FightBoxVO vo = boxData.get(boxId); - vo.setPrice(finalBoxPriceMap.getOrDefault(vo.getBoxId(), BigDecimal.ZERO)); - vo.setBoxName(finalBoxNameMap.getOrDefault(vo.getBoxId(), "")); - fightBoxVOList.add(vo); - } - }); + for (Map.Entry entry : boxData.entrySet()) { + FightBoxVO box = resolveFightBoxVO(entry.getValue()); + if (box == null) { + continue; + } + box.setPrice(boxPriceMap.getOrDefault(box.getBoxId(), BigDecimal.ZERO)); + box.setBoxName(batchBoxNameMap.getOrDefault(box.getBoxId(), "")); + box.setBoxImg02(null); + entry.setValue(box); + } } - // 分离正常回合结果和赛后奖励 - List roundResults = fightBoxRecords.stream() - .filter(r -> r.getFightRoundNumber() != null && r.getFightRoundNumber() > 0) - .collect(Collectors.toList()); - List endGameRecords = fightBoxRecords.stream() - .filter(r -> r.getFightRoundNumber() == null || r.getFightRoundNumber() <= 0) - .collect(Collectors.toList()); - - // 胜利方获得的回合饰品(排除赛后奖励) + // 胜利方:DB winner_ids 为空时,从 Redis 对战状态快照兜底(单场处理,异常不影响批量流程) List winnerIds = fight.getWinnerIds() != null ? fight.getWinnerIds() : new ArrayList<>(); - // 数据库 winner_ids 为空时,从 Redis 对战状态快照兜底(单个 fight 处理,异常不影响批量流程) if (winnerIds.isEmpty()) { try { FightState state = redisCache.getCacheObject("fight_state:" + fightId); @@ -471,63 +442,57 @@ public class TtFightResultServiceImpl extends ServiceImpl finalWinnerIds = winnerIds; - List winnerPrize = roundResults.stream() - .filter(r -> r.getHolderUserId() != null && finalWinnerIds.contains(r.getHolderUserId())) - .filter(r -> r.getOrnamentId() != null) - .collect(Collectors.toList()); - // 平分奖:赛后奖励中持有人为赢家的记录,计入赢家所得 - winnerPrize.addAll(endGameRecords.stream() - .filter(r -> r.getHolderUserId() != null && finalWinnerIds.contains(r.getHolderUserId())) - .filter(r -> r.getOrnamentId() != null) - .collect(Collectors.toList())); - // 失败方安慰奖 - List endGamePrize = endGameRecords.stream() - .filter(r -> r.getHolderUserId() != null && !finalWinnerIds.contains(r.getHolderUserId())) - .collect(Collectors.toList()); - - // 填充 exteriorName - List allPrizeRecords = new ArrayList<>(); - allPrizeRecords.addAll(winnerPrize); - allPrizeRecords.addAll(endGamePrize); - final Map finalExteriorNameMap = exteriorNameMap; - allPrizeRecords.forEach(r -> { - if (r.getOrnamentId() != null) { - r.setExteriorName(finalExteriorNameMap.getOrDefault(r.getOrnamentId(), "崭新出厂")); + // 明细列表(fightResult/winnerPrize/endGamePrize)不组装,直接把口径累加成金额: + // 赢家所得 = 持有人为赢家的全部记录(回合饰品 + 赛后平分奖),只算真实饰品(ornamentId 非空); + // 失败方安慰奖 = 赛后记录(回合数<=0)中持有人非赢家的部分。 + BigDecimal winnerTotalPrice = BigDecimal.ZERO; + BigDecimal loserTotalPrice = BigDecimal.ZERO; + BigDecimal totalOrnamentsPrice = BigDecimal.ZERO; + for (TtBoxRecords record : fightBoxRecords) { + BigDecimal price = record.getOrnamentsPrice(); + if (price == null) { + continue; } - }); + totalOrnamentsPrice = totalOrnamentsPrice.add(price); + Integer holderUserId = record.getHolderUserId(); + if (holderUserId == null) { + continue; + } + if (winnerIds.contains(holderUserId)) { + if (record.getOrnamentId() != null) { + winnerTotalPrice = winnerTotalPrice.add(price); + } + } else if (record.getFightRoundNumber() == null || record.getFightRoundNumber() <= 0) { + loserTotalPrice = loserTotalPrice.add(price); + } + } - // 获得的饰品按价格降序,空价格放最后 - roundResults.sort(ORNAMENT_PRICE_DESC); - winnerPrize.sort(ORNAMENT_PRICE_DESC); - endGamePrize.sort(ORNAMENT_PRICE_DESC); - - // 计算金额 - BigDecimal winnerTotalPrice = winnerPrize.stream() - .map(r -> r.getOrnamentsPrice() != null ? r.getOrnamentsPrice() : BigDecimal.ZERO) - .reduce(BigDecimal.ZERO, BigDecimal::add); - BigDecimal loserTotalPrice = endGamePrize.stream() - .map(r -> r.getOrnamentsPrice() != null ? r.getOrnamentsPrice() : BigDecimal.ZERO) - .reduce(BigDecimal.ZERO, BigDecimal::add); - BigDecimal totalOrnamentsPrice = fightBoxRecords.stream() - .filter(r -> r.getOrnamentsPrice() != null) - .map(TtBoxRecords::getOrnamentsPrice) - .reduce(BigDecimal.ZERO, BigDecimal::add); - - FightResultVO resultVO = FightResultVO.builder() + result.add(FightResultVO.builder() .fight(fight) .winnerIds(winnerIds) - .fightResult(roundResults) - .winnerPrize(winnerPrize) - .endGamePrize(endGamePrize) .winnerTotalPrice(winnerTotalPrice) .loserTotalPrice(loserTotalPrice) .totalOrnamentsPrice(totalOrnamentsPrice) - .fightBoxVOList(fightBoxVOList) - .build(); - result.add(resultVO); + .build()); } return result; } + + /** + * boxData 反序列化后可能是 FightBoxVO,也可能是原始 Map(历史脏数据),统一取成 FightBoxVO。 + */ + private FightBoxVO resolveFightBoxVO(Object value) { + if (value == null) return null; + if (value instanceof FightBoxVO) return (FightBoxVO) value; + if (value instanceof LinkedHashMap) { + Map map = (LinkedHashMap) value; + return new FightBoxVO( + map.get("boxId") != null ? Integer.valueOf(map.get("boxId").toString()) : null, + map.get("number") != null ? Integer.valueOf(map.get("number").toString()) : null, + map.get("boxImg01") != null ? map.get("boxImg01").toString() : null, + map.get("boxImg02") != null ? map.get("boxImg02").toString() : null); + } + return null; + } } diff --git a/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/impl/TtUserServiceImpl.java b/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/impl/TtUserServiceImpl.java index 9519d28..21e353b 100644 --- a/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/impl/TtUserServiceImpl.java +++ b/skins-service/service-admin/src/main/java/com/ruoyi/admin/service/impl/TtUserServiceImpl.java @@ -473,11 +473,6 @@ public class TtUserServiceImpl extends ServiceImpl impleme } } - @Override - public List getAccountList(Integer num) { - return getAccountList(num, null); - } - @Override @Transactional(rollbackFor = Exception.class) public List getAccountList(Integer num, List customPhoneNumbers) { @@ -490,8 +485,8 @@ public class TtUserServiceImpl extends ServiceImpl impleme .list(); List userList = new ArrayList<>(); for (int i = 0; i < num; i++) { - // 优先使用第 i 个自定义手机号,为空则随机生成 - String phoneNumber = getCustomPhoneOrRandom(customPhoneNumbers, i); + // 招商账号必须逐个指定手机号,不随机生成 + String phoneNumber = getRequiredPhone(customPhoneNumbers, i, "招商账号"); String nickName = RandomUtils.getRandomName(new Random().nextInt(2)); String password = generateMixedPassword(10); String invitationCode = getInvitationCode(); @@ -523,7 +518,7 @@ public class TtUserServiceImpl extends ServiceImpl impleme } /** - * 取第 index 个自定义手机号;为空或越界时返回随机生成的手机号 + * 取第 index 个自定义手机号;为空或越界时返回随机生成的手机号(仅白号使用) */ private String getCustomPhoneOrRandom(List customPhoneNumbers, int index) { if (customPhoneNumbers != null && index < customPhoneNumbers.size() @@ -533,6 +528,22 @@ public class TtUserServiceImpl extends ServiceImpl impleme return getRandomPhoneNumber(); } + /** + * 取第 index 个手机号(必填)。招商/卡商账号是推广后台的登录账号, + * 登录只认「手机号 + 短信验证码」,随机号收不到码就等于发一个登不进去的号,所以不兜底随机生成。 + */ + private String getRequiredPhone(List customPhoneNumbers, int index, String label) { + String phone = customPhoneNumbers != null && index < customPhoneNumbers.size() + ? StringUtils.trim(customPhoneNumbers.get(index)) : null; + if (StringUtils.isBlank(phone)) { + throw new ServiceException("请填写第 " + (index + 1) + " 个" + label + "的手机号"); + } + if (!phone.matches("^1[3-9]\\d{9}$")) { + throw new ServiceException("第 " + (index + 1) + " 个手机号格式不正确,请输入 11 位有效手机号"); + } + return phone; + } + /** * 校验自定义手机号:批次内不可重复,且不可与库中已存在(用户名/手机号)冲突。 * 忽略 del_flag,连软删除记录也拦截,避免直接 insert 触发唯一键冲突。 @@ -722,11 +733,6 @@ public class TtUserServiceImpl extends ServiceImpl impleme return userList; } - @Override - public List getCardMerchantList(Integer num) { - return getCardMerchantList(num, null); - } - @Override @Transactional(rollbackFor = Exception.class) public List getCardMerchantList(Integer num, List customPhoneNumbers) { @@ -739,8 +745,8 @@ public class TtUserServiceImpl extends ServiceImpl impleme .list(); List userList = new ArrayList<>(); for (int i = 0; i < num; i++) { - // 优先使用第 i 个自定义手机号,为空则随机生成 - String phoneNumber = getCustomPhoneOrRandom(customPhoneNumbers, i); + // 卡商账号必须逐个指定手机号,不随机生成 + String phoneNumber = getRequiredPhone(customPhoneNumbers, i, "卡商账号"); String nickName = RandomUtils.getRandomName(new Random().nextInt(2)); String password = generateMixedPassword(10); String invitationCode = getInvitationCode(); diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/contract/api/request/ClassicBoxRecordPageRequest.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/contract/api/request/ClassicBoxRecordPageRequest.java index 8802220..e965798 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/contract/api/request/ClassicBoxRecordPageRequest.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/contract/api/request/ClassicBoxRecordPageRequest.java @@ -1,7 +1,5 @@ package com.ruoyi.playingmethod.contract.api.request; -import io.swagger.annotations.ApiModel; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -18,25 +16,20 @@ import jakarta.validation.constraints.Min; * - boxId 为空:查询全部箱子的记录 * - boxId 不为空:仅查询当前选中箱子的记录 */ -@ApiModel("经典开箱记录查询参数") @AllArgsConstructor @NoArgsConstructor @Data @Builder public class ClassicBoxRecordPageRequest { - @ApiModelProperty("页码,默认 1") @Min(value = 1, message = "页码最小 1") private Integer page = 1; - @ApiModelProperty("每页条数,默认 20") @Range(min = 1, max = 50, message = "每页条数 1-50") private Integer size = 20; - @ApiModelProperty("选中箱子 ID:为空则查询全部箱子的记录,不为空则仅查询该箱子") private Integer boxId; - @ApiModelProperty("排序方式:0-时间降序,1-时间升序,2-价格降序,默认 0") @Builder.Default private Integer orderByFie = 0; } diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/contract/api/request/GetRollListParamRequest.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/contract/api/request/GetRollListParamRequest.java index 3260fad..bce2448 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/contract/api/request/GetRollListParamRequest.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/contract/api/request/GetRollListParamRequest.java @@ -1,6 +1,5 @@ package com.ruoyi.playingmethod.contract.api.request; -import io.swagger.annotations.ApiModelProperty; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -15,11 +14,9 @@ public class GetRollListParamRequest { private Integer rollId; // 0官方 1主播 - @ApiModelProperty("0官方 1主播") private Integer rollType; // 0全部 1可参与 2我的 3已结束 - @ApiModelProperty("0全部 1可参与 2我的 3已结束") private Integer rollStatus; private Integer userId; diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiBindBoxController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiBindBoxController.java index 3a06f6f..a52338a 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiBindBoxController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiBindBoxController.java @@ -33,10 +33,6 @@ import com.ruoyi.playingmethod.contract.api.request.ClassicBoxRecordPageRequest; import com.ruoyi.playingmethod.service.ApiBindBoxService; import com.ruoyi.playingmethod.service.ApiBoxRecordsService; import com.ruoyi.system.service.ISysConfigService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -46,7 +42,6 @@ import java.math.BigDecimal; import java.util.*; import java.util.concurrent.TimeUnit; -@Api(tags = "玩转盲盒模式") @Slf4j @RestController @RequestMapping("/api/bindbox") @@ -79,7 +74,6 @@ public class ApiBindBoxController extends BaseController { @Autowired private RedisLock redisLock; - @ApiOperation("获取宝箱信息") @Anonymous @PostMapping("/boxData") public R getBoxData(@RequestBody BoxIdRequest request) { @@ -95,17 +89,12 @@ public class ApiBindBoxController extends BaseController { return R.ok(boxData); } - @ApiOperation("获取补偿箱信息") - @PostMapping("/getCompBoxData") + // [停用-前端零调用] @PostMapping("/getCompBoxData") public AjaxResult getCompBoxData(@RequestBody BoxIdRequest request) { List compBoxData = bindBoxService.getCompBoxData(request.getBoxId()); return success(compBoxData); } - @ApiOperation("获取宝箱列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "boxType", value = "宝箱类型(1普通箱 2对战箱 3补偿箱 4九宫格)", dataType = "String", dataTypeClass = String.class) - }) @Anonymous @PostMapping("/getBoxList") public R> getBoxList(@RequestBody(required=false) GetBoxListRequest request) { @@ -123,7 +112,6 @@ public class ApiBindBoxController extends BaseController { /** * 盲盒开箱模式开箱 */ - @ApiOperation("盲盒开箱") @UpdateUserCache @RateLimiter(time = 60, count = 30, limitType = LimitType.IP) @PostMapping("/openBox") @@ -182,8 +170,7 @@ public class ApiBindBoxController extends BaseController { } } - @ApiOperation("获取历史开箱信息") - @PostMapping("/getBindBoxHistory") + // [停用-前端零调用] @PostMapping("/getBindBoxHistory") public R getBindBoxHistory(@RequestBody @Validated queryCondition param) { if (param.getStatus().equals(1) || param.getStatus().equals(10)) { return R.fail("非法的状态参数。"); @@ -193,7 +180,6 @@ public class ApiBindBoxController extends BaseController { return R.ok(ttBoxRecordsVOS); } - @ApiOperation("获取个人历史开箱记录") @PostMapping("/myBoxHistory") public R> myBoxHistory(@RequestBody queryCondition param) { Long userId = getUserId(); @@ -217,8 +203,7 @@ public class ApiBindBoxController extends BaseController { return R.ok(list); } - @ApiOperation("获取当前补偿值") - @PostMapping("/getCompValue") + // [停用-前端零调用] @PostMapping("/getCompValue") public AjaxResult getCompValue(@RequestBody BoxIdRequest request) { Long userId = getUserId(); TtUser ttUser = userService.getById(userId); @@ -230,8 +215,7 @@ public class ApiBindBoxController extends BaseController { return success(bindBoxService.getCompValue(ttUser, ttBox)); } - @ApiOperation("盲盒top") - @PostMapping("/top") + // [停用-前端零调用] @PostMapping("/top") public R> topBlinkBox() { Long userId = getUserId(); if (ObjectUtil.isNull(userId)) { @@ -253,8 +237,7 @@ public class ApiBindBoxController extends BaseController { return R.ok(ttBoxRecordsVOS); } - @ApiOperation("十佳掉落") - @PostMapping("/tenTop") + // [停用-前端零调用] @PostMapping("/tenTop") public R> tenTop() { TenTopQuery param = new TenTopQuery(); param.setSource(Collections.singletonList(TtboxRecordSource.BLIND_BOX.getCode())); @@ -266,7 +249,6 @@ public class ApiBindBoxController extends BaseController { return R.ok(ttBoxRecordsVOS); } - @ApiOperation("今日百佳") @PostMapping("/todayTopHundred") public R> todayTopHundred() { List status = Arrays.asList( @@ -283,8 +265,7 @@ public class ApiBindBoxController extends BaseController { return R.ok(list); } - @ApiOperation("历史百佳") - @PostMapping("/historyTopHundred") + // [停用-前端零调用] @PostMapping("/historyTopHundred") public R> historyTopHundred() { List status = Arrays.asList( TtboxRecordStatus.IN_PACKSACK_ON.getCode(), @@ -300,7 +281,6 @@ public class ApiBindBoxController extends BaseController { return R.ok(list); } - @ApiOperation("实时 - 所有人历史开箱按时间排序") @Anonymous @PostMapping("/realtime") public R> realtime(@RequestBody @Validated BoxRecordPageRequest request) { @@ -324,7 +304,6 @@ public class ApiBindBoxController extends BaseController { return R.ok(list); } - @ApiOperation("欧皇 - 所有人开箱按最高价格排序") @Anonymous @PostMapping("/luckyKing") public R> luckyKing(@RequestBody @Validated BoxRecordPageRequest request) { @@ -357,7 +336,6 @@ public class ApiBindBoxController extends BaseController { * - 全服全部箱子:不传参数 / 不登录 → 查看所有用户的所有箱子的开箱记录 * - 全服当前箱子:不传 userId + 传 boxId / 不登录 → 查看指定箱子的全服记录 */ - @ApiOperation("经典开箱记录") @Anonymous @PostMapping("/classicRecords") public R> classicRecords(@RequestBody @Validated ClassicBoxRecordPageRequest request) { diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiBoxRecordsController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiBoxRecordsController.java index 6993e15..cb1e903 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiBoxRecordsController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiBoxRecordsController.java @@ -6,8 +6,6 @@ import com.ruoyi.common.utils.PageUtils; import com.ruoyi.domain.dto.boxRecords.queryCondition; import com.ruoyi.domain.vo.boxRecords.TtBoxRecordsVO; import com.ruoyi.playingmethod.service.ApiBoxRecordsService; -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.PostMapping; @@ -17,7 +15,6 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; -@Api(tags = "出货记录") @RestController @RequestMapping("/api/boxRecords") public class ApiBoxRecordsController { @@ -25,8 +22,7 @@ public class ApiBoxRecordsController { @Autowired private ApiBoxRecordsService apiBoxRecordsService; - @ApiOperation("获取历史出货记录") - @PostMapping("/historyByCondition") + // [停用-前端零调用] @PostMapping("/historyByCondition") public R getBindBoxHistory(@RequestBody @Validated queryCondition param) { if (param.getStatus().contains(1) || param.getStatus().contains(10)) { return R.fail("非法的状态参数。"); diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiCompoundController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiCompoundController.java index ef9d002..03f5de7 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiCompoundController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiCompoundController.java @@ -8,13 +8,10 @@ import com.ruoyi.common.core.page.PageDataInfo; import com.ruoyi.playingmethod.service.ApiCompoundService; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.domain.vo.UserPackSackDataVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.util.List; -@Api(tags = "合成") @RestController @RequestMapping("/api/compound") public class ApiCompoundController extends BaseController { @@ -31,8 +28,7 @@ public class ApiCompoundController extends BaseController { this.compoundService = compoundService; } - @ApiOperation("合成") - @PostMapping("/compound") + // [停用-前端零调用] @PostMapping("/compound") public R compound(@RequestBody List packSackIds) { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); if ("1".equals(websiteMaintenance)) { @@ -46,8 +42,7 @@ public class ApiCompoundController extends BaseController { return compoundService.compound(packSackIds, ttUser); } - @ApiOperation("获取用户合成记录") - @PostMapping("/getUserCompoundRecord") + // [停用-前端零调用] @PostMapping("/getUserCompoundRecord") public PageDataInfo getUserCompoundRecord() { startPage(); List userCompoundRecord = compoundService.getUserCompoundRecord(getUserId().intValue()); diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiExponentController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiExponentController.java index 357881e..a3052bb 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiExponentController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiExponentController.java @@ -19,10 +19,6 @@ import com.ruoyi.playingmethod.contract.api.request.BoxIdRequest; import com.ruoyi.playingmethod.contract.api.request.OpenBoxRequest; import com.ruoyi.playingmethod.mapper.ApiBindBoxMapper; import com.ruoyi.playingmethod.service.ApiExponentService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -34,7 +30,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; -@Api(tags = "指数盲盒") @RestController @RequestMapping("/api/exponent") public class ApiExponentController extends BaseController { @@ -57,10 +52,9 @@ public class ApiExponentController extends BaseController { @Autowired private RedisLock redisLock; - @ApiOperation("加入指数盲盒") @Anonymous @UpdateUserCache - @PostMapping("/join") + // [停用-前端零调用] @PostMapping("/join") public R join(@RequestBody @Validated ExponentJoinParam param) { TtUser ttUser = ttUserService.getById(getUserId()); if ("0".equals(ttUser.getIsRealCheck())) { @@ -95,53 +89,44 @@ public class ApiExponentController extends BaseController { } } - @ApiOperation("获取宝箱列表") - @ApiImplicitParams({ - @ApiImplicitParam(name = "boxType", value = "宝箱类型(1普通箱 2对战箱 3补偿箱 4九宫格 5指数盲盒)", dataType = "String", dataTypeClass = String.class) - }) @Anonymous - @PostMapping("/box") + // [停用-前端零调用] @PostMapping("/box") public R box(@RequestBody BoxIdRequest request) { TtUser ttUser = ttUserService.getById(getUserId()); return apiExponentService.box(ttUser, request.getBoxId()); } - @ApiOperation("最近十期结果") @Anonymous - @PostMapping("/recenttenperiod") + // [停用-前端零调用] @PostMapping("/recenttenperiod") public R recenttenperiod() { PageUtils.clearPage(); return apiExponentService.recenttenperiod(); } - @ApiOperation("结果信息") @Anonymous - @PostMapping("/info") + // [停用-前端零调用] @PostMapping("/info") public R info() { PageUtils.clearPage(); TtUser ttUser = ttUserService.getById(getUserId()); return apiExponentService.info(ttUser); } - @ApiOperation("指数记录") @Anonymous - @PostMapping("/records") + // [停用-前端零调用] @PostMapping("/records") public R records() { startPage(); TtUser ttUser = ttUserService.getById(getUserId()); return apiExponentService.records(ttUser); } - @ApiOperation("我的箱子") @Anonymous - @PostMapping("/mybox") + // [停用-前端零调用] @PostMapping("/mybox") public R mybox() { TtUser ttUser = ttUserService.getById(getUserId()); return apiExponentService.mybox(ttUser); } - @ApiOperation("盲盒开箱") @UpdateUserCache - @PostMapping("/openBox") + // [停用-前端零调用] @PostMapping("/openBox") public R openBox(@RequestBody OpenBoxRequest request) { TtUser ttUser = ttUserService.getById(getUserId()); if ("0".equals(ttUser.getIsRealCheck())) { diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiFightController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiFightController.java index 1cf9cb7..904bec6 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiFightController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiFightController.java @@ -34,16 +34,15 @@ import com.ruoyi.domain.other.TtBoxVO; import com.ruoyi.domain.vo.ApiFightListDataVO; import com.ruoyi.domain.vo.FightResultDataVO; import com.ruoyi.domain.vo.fight.FightBoxVO; -import com.ruoyi.domain.vo.fight.FightResultVO; import com.ruoyi.domain.vo.upgrade.SimpleOrnamentVO; +import com.ruoyi.playingmethod.model.vo.ApiFightCardVo; import com.ruoyi.playingmethod.model.vo.ApiFightRankingVO; +import com.ruoyi.playingmethod.model.vo.ApiFightResultVo; import com.ruoyi.playingmethod.service.ApiBindBoxService; import com.ruoyi.playingmethod.service.ApiFightService; import com.ruoyi.playingmethod.contract.api.request.BoxIdRequest; import com.ruoyi.domain.other.TtBoxA; import com.ruoyi.system.service.ISysConfigService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.MapUtils; @@ -58,13 +57,11 @@ import java.util.*; import java.util.stream.Collectors; import java.util.concurrent.TimeUnit; -@Api(tags = "对战模式") @Slf4j @RestController @RequestMapping("/api/fight") public class ApiFightController extends BaseController { - private final TtFightResultService fightResultService; private final ISysConfigService sysConfigService; private final TtUserService userService; private final ApiFightService apiFightService; @@ -85,12 +82,10 @@ public class ApiFightController extends BaseController { @Autowired private TtUserMapper ttUserMapper; - public ApiFightController(TtFightResultService fightResultService, - ISysConfigService sysConfigService, + public ApiFightController(ISysConfigService sysConfigService, TtUserService userService, ApiFightService apiFightService, RedisCache redisCache) { - this.fightResultService = fightResultService; this.sysConfigService = sysConfigService; this.userService = userService; this.apiFightService = apiFightService; @@ -117,7 +112,6 @@ public class ApiFightController extends BaseController { /** * Step1 创建对战房间 */ - @ApiOperation("创建对战房间") @UpdateUserCache @PostMapping("/createFight") public R createFight(@Validated @RequestBody CreateFightBody createFightParam) { @@ -157,7 +151,6 @@ public class ApiFightController extends BaseController { /** * 复刻对战房间:复制目标房间的宝箱配置、人数、组队模式等,创建一个新房间,当前用户成为房主 */ - @ApiOperation("复刻对战房间") @UpdateUserCache @PostMapping("/copyFight") public R copyFight(@RequestBody FightDetailParam param) { @@ -196,7 +189,6 @@ public class ApiFightController extends BaseController { /** * Step2 加入房间(占座),先行HTTP */ - @ApiOperation("加入对战房间") @PostMapping("/joinFightRoom") public R joinFightRoom(@RequestBody FightDetailParam param) { Integer fightId = param.getFightId(); @@ -234,8 +226,7 @@ public class ApiFightController extends BaseController { /** * 退出房间 */ - @ApiOperation("退出房间") - @PostMapping("/fightRoomExit") + // [停用-前端零调用] @PostMapping("/fightRoomExit") public R fightRoomExit(@RequestBody FightDetailParam param) { Integer fightId = param.getFightId(); String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); @@ -255,7 +246,6 @@ public class ApiFightController extends BaseController { /** * Step3 玩家准备游戏 */ - @ApiOperation("玩家准备游戏") @UpdateUserCache @PostMapping("/seatrReady") public R seatrReady(@RequestBody FightDetailParam param) { @@ -281,7 +271,6 @@ public class ApiFightController extends BaseController { /** * Step4 开始游戏(前端满人自动开始) */ - @ApiOperation("开始游戏") @PostMapping("/fightBegin") public R fightBegin(@RequestBody FightDetailParam param) { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); @@ -305,7 +294,6 @@ public class ApiFightController extends BaseController { /** * 游戏结束标记 */ - @ApiOperation("游戏结束标记") @PostMapping("/fightEnd") public R fightEnd(@RequestBody FightDetailParam param) { Integer fightId = param.getFightId(); @@ -323,7 +311,6 @@ public class ApiFightController extends BaseController { /** * 抽奖机测试 */ - // @ApiOperation("抽奖机测试") // @GetMapping("LotteryMachineTest") public R LotteryMachineTest() { R checkLogin = checkLogin(); @@ -337,7 +324,6 @@ public class ApiFightController extends BaseController { return R.ok(ornamentId); } - @ApiOperation("我参与的历史对战记录") @PostMapping("/fightOnMyOwn") public R fightOnMyOwn(@RequestBody FightOnMyOwnParam param) { Long userId = getUserId(); @@ -345,7 +331,7 @@ public class ApiFightController extends BaseController { param.setPlayerId(userId.intValue()); - List list = apiFightService.getFightList(param); + List list = apiFightService.getFightList(param); return R.ok(list); } @@ -353,7 +339,6 @@ public class ApiFightController extends BaseController { * 快速加入对战房间 - 在本阵营(model 0=欧皇 1=非酋)内返回等待中且有空座位、 * 总价不超过用户余额的最高价房间 id(不落座,需登录) */ - @ApiOperation("快速加入对战房间") @UpdateUserCache @PostMapping("/quickJoinFightRoom") public R quickJoinFightRoom(@RequestBody QuickJoinFightParam param) { @@ -365,26 +350,22 @@ public class ApiFightController extends BaseController { return apiFightService.quickJoinFightRoom(userId, param != null ? param.getModel() : null); } - @ApiOperation("全服历史对战记录") @PostMapping("/fightOnAll") public R fightOnAll(@RequestBody FightOnMyOwnParam param) { - List list = apiFightService.getFightList(param); + List list = apiFightService.getFightList(param); return R.ok(list); } - @ApiOperation("历史对战详情") @PostMapping("/fightDetail") public R fightDetail(@RequestBody FightDetailParam param) { return apiFightService.fightDetail(param); } - @ApiOperation("获取指定记录更早的历史对战") @PostMapping("/earlierHistory") public R earlierHistory(@RequestBody FightDetailParam param) { return apiFightService.earlierHistory(param); } - @ApiOperation("获取对战宝箱详情") @PostMapping("/simpleBoxDetail") public PageDataInfo simpleBoxDetail(@RequestBody Map param) { startPage(); @@ -393,7 +374,6 @@ public class ApiFightController extends BaseController { return getPageData(list); } - @ApiOperation("获取对战宝箱") @PostMapping("/getFightBoxList") @Anonymous public R> getFightBoxList(@RequestBody(required = false) Map param) { @@ -403,7 +383,6 @@ public class ApiFightController extends BaseController { return R.ok(boxData); } - @ApiOperation("获取对战列表") @Anonymous @PostMapping("/getFightList") public PageDataInfo getFightList(@RequestBody(required = false) Map param) { @@ -415,7 +394,6 @@ public class ApiFightController extends BaseController { return getPageData(list); } - @ApiOperation("获取对战大厅房间列表(HTTP)") @Anonymous @PostMapping("/hall") public R> fightHall(@RequestBody(required = false) Map param) { @@ -509,28 +487,24 @@ public class ApiFightController extends BaseController { return R.ok(result, "所有对战房间"); } - @ApiOperation("获取对战数据") @PostMapping("/getFightData") public R getFightData(@RequestBody FightDetailParam param) { ApiFightListDataVO apiFightListDataVO = apiFightService.getFightList(null, null, null, param.getFightId()).get(0); return R.ok(apiFightListDataVO); } - // @ApiOperation("获取对战结果") // @GetMapping("/getFightResult/{fightId}") // public R getFightResult(@PathVariable("fightId") Integer fightId) { // FightResultDataVO fightResultDataVO = fightResultService.getFightResult(fightId); // return R.ok(fightResultDataVO); // } - @ApiOperation("获取对战结果") @PostMapping("/getFightResult") - public R getFightResult(@RequestBody FightDetailParam param) { - FightResultVO fightResultVO = fightResultService.getFightResult(param.getFightId()); + public R getFightResult(@RequestBody FightDetailParam param) { + ApiFightResultVo fightResultVO = apiFightService.getFightResultForClient(param.getFightId()); return R.ok(fightResultVO); } - @ApiOperation("存储对战回合数据") @PostMapping("/saveFightBoutData") public R saveFightBoutData(@RequestBody FightBoutData fightBoutData) { R checkLogin = checkLogin(); @@ -540,7 +514,6 @@ public class ApiFightController extends BaseController { return R.ok(); } - @ApiOperation("获取对战回合数") @PostMapping("/getFightBoutNum") public R getFightBoutNum(@RequestBody FightDetailParam param) { Integer fightId = param.getFightId(); @@ -580,7 +553,6 @@ public class ApiFightController extends BaseController { return R.ok(fightResultDataVO); } - @ApiOperation("获取对战排行榜") @Anonymous @PostMapping("/fightRanking") public AjaxResult getFightRanking() { @@ -605,14 +577,12 @@ public class ApiFightController extends BaseController { return AjaxResult.success(map); } - @ApiOperation("十佳对战, 1:最大金额,2:最大增长,3:最大倍数") @Anonymous @PostMapping("/tenTopFight") public AjaxResult tenTopFight(@RequestBody BaiJiaFightParam param) { return AjaxResult.success(apiFightService.tenTopFight(param.getMaxType(), param.getModel(), param.getMinPrice(), param.getMaxPrice(), param.getKeyword())); } - @ApiOperation("邀请机器人加入对战房间") @PostMapping({"/joinFightRoomForRobot"}) public R joinFightRoomForRobot(@RequestBody FightDetailParam param) { R checkLogin = checkLogin(); @@ -653,7 +623,6 @@ public class ApiFightController extends BaseController { } } - @ApiOperation("对战宝箱详情") @Anonymous @PostMapping("/boxData") public R getFightBoxData(@RequestBody BoxIdRequest request) { diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiFightRoomController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiFightRoomController.java index 1dceb64..3425661 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiFightRoomController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiFightRoomController.java @@ -18,8 +18,6 @@ import com.ruoyi.domain.vo.fight.FightBoxVO; import com.ruoyi.domain.vo.fight.FightResultVO; import com.ruoyi.playingmethod.contract.api.request.FightRoomInfoRequest; import com.ruoyi.playingmethod.service.ApiFightService; -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; @@ -39,7 +37,6 @@ import java.util.stream.Collectors; /** * 对战房间 HTTP 接口(原 WsFightRoom WebSocket 接口的 HTTP 替代) */ -@Api(tags = "对战房间HTTP接口") @Slf4j @RestController @RequestMapping("/api/fight/room") @@ -60,8 +57,7 @@ public class ApiFightRoomController extends BaseController { @Autowired private RedisCache redisCache; - @ApiOperation("获取对战房间信息/结果") - @PostMapping("/info") + // [停用-前端零调用] @PostMapping("/info") public R info(@RequestBody FightRoomInfoRequest request) { Long userId = getUserId(); Integer fightId = request.getFightId(); diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiLuckyUpgradeController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiLuckyUpgradeController.java index 6286973..a5cad8c 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiLuckyUpgradeController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiLuckyUpgradeController.java @@ -21,8 +21,6 @@ import com.ruoyi.playingmethod.service.ApiLuckyUpgradeService; import com.ruoyi.playingmethod.service.ApiUpgradeRecordService; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.user.service.ApiUserPackSackService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -32,7 +30,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -@Api(tags = "幸运升级模式") @RestController @RequestMapping("/api/luckyUpgrade") public class ApiLuckyUpgradeController extends BaseController { @@ -66,7 +63,6 @@ public class ApiLuckyUpgradeController extends BaseController { } } - @ApiOperation("获取可升级的饰品列表") @Anonymous @PostMapping("/getOrnamentsList") public R> getOrnamentsList(@RequestBody ApiLuckyUpgradeBody apiLuckyUpgradeBody){ @@ -89,7 +85,6 @@ public class ApiLuckyUpgradeController extends BaseController { return R.ok(list); } - @ApiOperation("幸运升级") @UpdateUserCache @PostMapping("/upgrade") public R upgrade(@RequestBody @Validated UpgradeBodyA upgradeParam){ @@ -109,14 +104,12 @@ public class ApiLuckyUpgradeController extends BaseController { return apiLuckyUpgradeService.upgrade(ttUser, upgradeParam); } - @ApiOperation("获取幸运升级历史记录") - @PostMapping("/getUpgradeRecord") + // [停用-前端零调用] @PostMapping("/getUpgradeRecord") public R getUpgradeRecord(@RequestBody @Validated UpgradeCondition param){ return upgradeRecordService.historyDetail(param); } - @ApiOperation("获取幸运升级十佳记录") - @PostMapping("/tenTopUpgradeRecord") + // [停用-前端零调用] @PostMapping("/tenTopUpgradeRecord") public R tenTopUpgradeRecord(@RequestBody(required = false) TenTopUpgradeRequest request){ Boolean isVictory = (request == null) ? null : request.getIsVictory(); R result = upgradeRecordService.tenTopDetail(isVictory); @@ -134,8 +127,7 @@ public class ApiLuckyUpgradeController extends BaseController { return result; } - @ApiOperation("获取个人幸运升级历史记录列表") - @PostMapping("/myHistoryRecord") + // [停用-前端零调用] @PostMapping("/myHistoryRecord") public R myHistoryRecord(@RequestBody(required = false) @Validated MyUpgradeRecordRequest request){ R check = checkLogin(); if (!check.getCode().equals(200)) { @@ -148,7 +140,6 @@ public class ApiLuckyUpgradeController extends BaseController { return upgradeRecordService.myHistoryRecord(userId, request); } - @ApiOperation("获取当前饰品最近100条拉取记录(含用户头像、概率、饰品全名、磨损度、品质图、图片、价格)") @PostMapping("/recentPulls") public R> recentPulls(@RequestBody @Validated UpgradeCondition param) { if (param.getUpgradeRecordId() == null) { @@ -158,7 +149,6 @@ public class ApiLuckyUpgradeController extends BaseController { return R.ok(list); } - @ApiOperation("幸运升级记录分页(scope: 0全服/1我的;itemScope: 0全部饰品/1当前饰品;均需登录)") @PostMapping("/recordPage") public R recordPage(@RequestBody @Validated UpgradeRecordPageRequest req) { // 记录页无论全服/我的均需登录 diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiRedPackContoller.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiRedPackContoller.java index 39d0e29..5c8b472 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiRedPackContoller.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiRedPackContoller.java @@ -15,8 +15,6 @@ import com.ruoyi.playingmethod.contract.api.request.GetRedPackRequest; import com.ruoyi.playingmethod.service.ApiRedPackService; import com.ruoyi.thirdparty.wechat.domain.PtLoginUser; import com.ruoyi.thirdparty.wechat.service.ApiTokenService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import jakarta.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -29,7 +27,6 @@ import java.util.List; @Deprecated @RestController @RequestMapping("/api/redPackData") -@Api(tags = "红包") public class ApiRedPackContoller extends BaseController { @Autowired @@ -42,7 +39,6 @@ public class ApiRedPackContoller extends BaseController { // @PostMapping("/getRedPackList") @UserPermission @NoRepeatSubmit - @ApiOperation(value = "获取红包列表") public TableDataInfo getRedPackList(HttpServletRequest request, @RequestBody GetRedPackListRequest getRedPackListRequest) { PtLoginUser user = tokenService.getLoginUser(request); @@ -57,7 +53,6 @@ public class ApiRedPackContoller extends BaseController { // @PostMapping("/getRedPack") @UserPermission @NoRepeatSubmit - @ApiOperation(value = "领取红包") public AjaxResult getRedPack(@RequestBody GetRedPackRequest request) { Long userId = getUserId(); return redPackService.getRedPack(userId, request.getRedPackId()); @@ -67,7 +62,6 @@ public class ApiRedPackContoller extends BaseController { // @PostMapping("/getRedPackByKey") @UserPermission @NoRepeatSubmit - @ApiOperation(value = "根据红包口令兑换红包") public AjaxResult getRedPackByKey(@RequestBody GetRedPackByKeyRequest request) { LoginUser loginUser = getLoginUser(); if (request.getRedPackKey() == null || "".equals(request.getRedPackKey())) { @@ -80,7 +74,6 @@ public class ApiRedPackContoller extends BaseController { // @PostMapping("/getActivityDataHis") @UserPermission @NoRepeatSubmit - @ApiOperation(value = "查询参与的红包活动记录") public TableDataInfo getBoxDataHis(HttpServletRequest request) { PtLoginUser user = tokenService.getLoginUser(request); startPage(); @@ -93,7 +86,6 @@ public class ApiRedPackContoller extends BaseController { // @PostMapping("/getRedPackDataDetail") @UserPermission @NoRepeatSubmit - @ApiOperation(value = "查询历史记录") public AjaxResult getRedPackDataDetail(HttpServletRequest request, @RequestBody GetRedPackDetailRequest getRedPackDetailRequest) { PtLoginUser user = tokenService.getLoginUser(request); return redPackService.getRedPackDataDetail(user, getRedPackDetailRequest.getRecordId()); diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiReplacementRecordController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiReplacementRecordController.java index 22a60ee..349ec4d 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiReplacementRecordController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiReplacementRecordController.java @@ -7,8 +7,6 @@ import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.playingmethod.model.body.SynthesizeRequest; import com.ruoyi.playingmethod.service.IApiReplacementRecordService; -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; @@ -26,15 +24,13 @@ import jakarta.servlet.http.HttpServletRequest; */ @RestController @RequestMapping("/api/replacementRecord") -@Api(tags = "汰换记录") public class ApiReplacementRecordController extends BaseController { @Autowired private IApiReplacementRecordService ttReplacementRecordService; - @PostMapping("/synthesizeItems") + // [停用-前端零调用] @PostMapping("/synthesizeItems") @UserPermission - @ApiOperation("汰换饰品") public AjaxResult synthesizeItems(@RequestBody SynthesizeRequest synthesizeRequest) { LoginUser loginUser = getLoginUser(); return ttReplacementRecordService.synthesizeItems(loginUser, synthesizeRequest.getBoIds()); diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiRollController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiRollController.java index ac8267e..9afe4aa 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiRollController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiRollController.java @@ -24,9 +24,6 @@ import com.ruoyi.playingmethod.service.ApiRollService; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.domain.vo.RollDetailsDataVO; import com.ruoyi.domain.vo.RollListDataVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiModelProperty; -import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -42,7 +39,6 @@ import jakarta.validation.constraints.NotNull; import java.util.ArrayList; import java.util.List; -@Api(tags = "ROLL房模式") @RestController @RequestMapping("/api/roll") public class ApiRollController extends BaseController { @@ -69,7 +65,6 @@ public class ApiRollController extends BaseController { private String rollPassword; } - @ApiOperation("加入 ROLL 房") @RepeatSubmit(message = "操作过于频繁,请稍后重试!") @PostMapping("/joinRoll") public R joinRoll(@RequestBody @Validated JoinRollParam param) { @@ -91,7 +86,6 @@ public class ApiRollController extends BaseController { } - @ApiOperation("获取ROLL房列表") @Anonymous @PostMapping("/getRollList") public TableDataInfo getRollList(@RequestBody GetRollListParamRequest param) { @@ -119,33 +113,28 @@ public class ApiRollController extends BaseController { return getPageData(list); } - @ApiOperation("获取ROLL房详情") @PostMapping("/getRollDetails") public R getRollDetails(@RequestBody RollIdRequest request) { Long userId = getUserId(); return apiRollService.getRollDetails(request.getRollId(), userId); } - @ApiOperation("获取ROLL房参与人员详情") @PostMapping("/getRollPlayers") public R> getRollPlayers(@RequestBody @Validated GetRollPlayersParam param) { return apiRollService.getRollPlayers(param); } - @ApiOperation("获取ROLL房奖池详情") @PostMapping("/getRollPrizePool") public R> getRollPrizePool(@RequestBody @Validated GetRollPrizePool param) { return apiRollService.getRollPrizePool(param); } - @ApiOperation("获取ROLL开奖详情") @PostMapping("/getRollOpenPrize") public R> getRollOpenPrize(@RequestBody @Validated GetRollOpenPrizeParam param) { return apiRollService.getRollOpenPrize(param); } - @ApiOperation("开奖测试,正式环境删除") - @PostMapping("/endRoll") + // [停用-前端零调用] @PostMapping("/endRoll") public R endRoll(@RequestBody RollIdRequest request){ // TODO: 移除或添加管理员权限校验 return apiRollService.endROLL(request.getRollId()); @@ -176,8 +165,7 @@ public class ApiRollController extends BaseController { return "1"; } - @ApiOperation("roll房间号搜索") - @PostMapping("/searchRollId") + // [停用-前端零调用] @PostMapping("/searchRollId") public TableDataInfo searchRoll(@RequestBody RollIdRequest request){ GetRollListParamRequest param = new GetRollListParamRequest(); param.setRollId(request.getRollId()); diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiTtAttendanceRecordController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiTtAttendanceRecordController.java index 3ee98af..8af462f 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiTtAttendanceRecordController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiTtAttendanceRecordController.java @@ -4,7 +4,6 @@ import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.playingmethod.entity.TtAttendanceRecord; import com.ruoyi.playingmethod.service.IApiAttendanceRecordService; -import io.swagger.annotations.Api; import org.apache.poi.ss.formula.functions.T; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -12,7 +11,6 @@ import org.springframework.web.bind.annotation.RestController; import java.util.List; -@Api(tags = "签到记录") @RestController @RequestMapping("/api/attendanceRecord") public class ApiTtAttendanceRecordController extends BaseController { diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiUserAvatarController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiUserAvatarController.java index 9eec425..09f21cf 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiUserAvatarController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiUserAvatarController.java @@ -5,14 +5,11 @@ import com.ruoyi.admin.service.TtUserAvatarService; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.domain.other.TtUserAvatar; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.stream.Collectors; -@Api(tags = "用户头像") @RestController @RequestMapping("/api/userAvatar") public class ApiUserAvatarController extends BaseController { @@ -23,8 +20,7 @@ public class ApiUserAvatarController extends BaseController { this.userAvatarService = userAvatarService; } - @ApiOperation("用户头像列表") - @PostMapping("/list") + // [停用-前端零调用] @PostMapping("/list") public R> list() { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(TtUserAvatar::getStatus, "0") @@ -33,7 +29,6 @@ public class ApiUserAvatarController extends BaseController { return R.ok(list); } - @ApiOperation("获取头像图片资源路径列表") @PostMapping("/images") public R> getAvatarImages() { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiWelfareController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiWelfareController.java index 5c26c79..feff6b9 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiWelfareController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiWelfareController.java @@ -15,16 +15,12 @@ import com.ruoyi.playingmethod.contract.api.request.OpenWelfareBoxRequest; import com.ruoyi.playingmethod.model.ApiWelfare; import com.ruoyi.playingmethod.service.ApiWelfareService; import com.ruoyi.system.service.ISysConfigService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.*; -@Api(tags = "福利") @RestController @RequestMapping("/api/welfare") public class ApiWelfareController extends BaseController { @@ -41,10 +37,7 @@ public class ApiWelfareController extends BaseController { @Autowired private TtUserService userService; - @ApiOperation("获取福利列表") - @ApiResponse(code = 200, message = "eligible【是否具备领取条件(0否 1是)】" + - "
claimStatus【领取状态(0未领取 1已领取)】") - @PostMapping("/getWelfareList") + // [停用-前端零调用] @PostMapping("/getWelfareList") public TableDataInfo getWelfareList() { startPage(); Long userId = getUserId(); @@ -52,8 +45,7 @@ public class ApiWelfareController extends BaseController { return getDataTable(list); } - @ApiOperation("领取福利") - @PostMapping("/claimWelfare") + // [停用-前端零调用] @PostMapping("/claimWelfare") public AjaxResult claimWelfare(@RequestBody ClaimWelfareRequest request) { Long userId = getUserId(); // 检查福利是否存在 @@ -82,8 +74,7 @@ public class ApiWelfareController extends BaseController { return AjaxResult.success(openBoxVO); } - @ApiOperation("每日领取福利箱子") - @PostMapping("/claimDailyBox") + // [停用-前端零调用] @PostMapping("/claimDailyBox") public R claimDailyBox() { Long userId = getUserId(); try { @@ -94,8 +85,7 @@ public class ApiWelfareController extends BaseController { } } - @ApiOperation("批量开启福利箱子(1-15个)") - @PostMapping("/openBoxes") + // [停用-前端零调用] @PostMapping("/openBoxes") public R openBoxes(@RequestBody @Validated OpenWelfareBoxRequest request) { Long userId = getUserId(); String bindBoxMaintenance = sysConfigService.selectConfigByKey("bindBoxMaintenance"); diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiWelfareMonthlyRechargesController.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiWelfareMonthlyRechargesController.java index fa754b6..8ab4230 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiWelfareMonthlyRechargesController.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/controller/ApiWelfareMonthlyRechargesController.java @@ -14,16 +14,12 @@ import com.ruoyi.playingmethod.model.ApiWelfare; import com.ruoyi.playingmethod.model.vo.ApiWelfareMonthlyRechargesVO; import com.ruoyi.playingmethod.service.ApiWelfareMonthlyRechargesService; import com.ruoyi.system.service.ISysConfigService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Objects; -@Api(tags = "每月充值福利") @RestController @RequestMapping("/api/welfare/monthlyRecharges") public class ApiWelfareMonthlyRechargesController extends BaseController { @@ -40,10 +36,7 @@ public class ApiWelfareMonthlyRechargesController extends BaseController { @Autowired private TtUserService userService; - @ApiOperation("获取每月充值福利列表") - @ApiResponse(code = 200, message = "eligible【是否具备领取条件(0否 1是)】" + - "
claimStatus【领取状态(0未领取 1已领取)】") - @PostMapping("/list") + // [停用-前端零调用] @PostMapping("/list") public TableDataInfo getWelfareList() { startPage(); Long userId = SecurityUtils.getUserId(); @@ -51,8 +44,7 @@ public class ApiWelfareMonthlyRechargesController extends BaseController { return getDataTable(list); } - @ApiOperation("领取福利") - @PostMapping("/claimWelfare") + // [停用-前端零调用] @PostMapping("/claimWelfare") public AjaxResult claimWelfare(@RequestBody ClaimWelfareRequest request) { Long userId = SecurityUtils.getUserId(); // 检查福利是否存在 diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/ApiWelfare.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/ApiWelfare.java index 3c8717e..1b34052 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/ApiWelfare.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/ApiWelfare.java @@ -1,7 +1,6 @@ package com.ruoyi.playingmethod.model; import com.ruoyi.domain.other.TtBox; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.math.BigDecimal; diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightCardVo.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightCardVo.java new file mode 100644 index 0000000..7ccdca2 --- /dev/null +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightCardVo.java @@ -0,0 +1,26 @@ +package com.ruoyi.playingmethod.model.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 对战卡片数据:天选战场/历史百佳(tenTopFight)与全服历史/我的对局(fightOnAll/fightOnMyOwn)共用。 + */ +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ApiFightCardVo { + + private ApiFightInfo fight; + + /** + * 赢家所得(卡片“结算”金额) + */ + private BigDecimal winnerTotalPrice; + + /** + * 开箱饰品总金额(点卡片进观战/回顾时房间页展示) + */ + private BigDecimal totalOrnamentsPrice; +} diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightInfo.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightInfo.java new file mode 100644 index 0000000..9bab985 --- /dev/null +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightInfo.java @@ -0,0 +1,87 @@ +package com.ruoyi.playingmethod.model.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.math.BigDecimal; +import java.sql.Timestamp; +import java.util.List; +import java.util.Map; + +/** + * 客户端对战信息(卡片与对战结果接口共用),只含客户端读取的字段,null 字段不下发。 + */ +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ApiFightInfo { + + private Integer id; + + private Integer userId; + + // 1、欧皇 2、非酋(卡片皮肤) + private String model; + + // 0或null=个人对战(1v1、1v1v1) 1=2v2组队;2v2 时座位 code 0/1 为A队、2/3 为B队 + private Integer teamMode; + + // 2=1v1 3=1v1v1 4=2v2,决定卡片槽位数与房间页滚轮列数 + private Integer playerNum; + + private Integer roundNumber; + + // 卡片赢家角标用;对战结果接口的赢家ID走外层 winnerIds,这里不下发 + private List winnerIds; + + // 2结束 3超时强制结束 + private Integer status; + + // 仅对战开始过的房间有值(房间页实时进度用) + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private Timestamp beginTime; + + private List seats; + + private Map boxData; + + /** + * 入场金额(宝箱总价) + */ + private BigDecimal boxPriceTotal; + + @Data + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class Seat { + + // 座位号:1v1 为 0/1,1v1v1 为 0/1/2,2v2 按 0/1、2/3 分队;卡片槽位与房间页均以此定位 + private Integer code; + + // 是否入座只判 playerId(空位占位 seat 的 playerId 为空),与 seat.status 无关 + private Integer playerId; + + private String avatar; + + private String nickName; + + private Integer vipLevel; + + // 该玩家本场所得(房间页席位金额) + private BigDecimal awardTotalPrices; + } + + @Data + @JsonInclude(JsonInclude.Include.NON_NULL) + public static class Box { + + private Integer boxId; + + private Integer number; + + private String boxImg01; + + private BigDecimal price; + + private String boxName; + } +} diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightRecordVo.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightRecordVo.java new file mode 100644 index 0000000..7cecb23 --- /dev/null +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightRecordVo.java @@ -0,0 +1,42 @@ +package com.ruoyi.playingmethod.model.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.math.BigDecimal; + +/** + * 开箱记录(回合掉落 / 赢家所得 / 安慰奖共用),只含客户端展示读取的字段: + * 饰品图、名称、磨损、品质、价格、持有者与所属回合。 + */ +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ApiFightRecordVo { + + private Long id; + + private Integer userId; + + private Integer boxId; + + // 价格兜底按 ornamentId 从宝箱饰品池反查 + private Long ornamentId; + + private String ornamentName; + + private BigDecimal ornamentsPrice; + + private String imageUrl; + + private Integer ornamentsLevelId; + + private String ornamentLevelImg; + + private String exteriorName; + + // 该饰品归谁(结算/席位金额按持有者归属) + private Integer holderUserId; + + // 所属回合(0或负=赛后安慰奖/平分奖) + private Integer fightRoundNumber; +} diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightResultVo.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightResultVo.java new file mode 100644 index 0000000..3934f6b --- /dev/null +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/model/vo/ApiFightResultVo.java @@ -0,0 +1,37 @@ +package com.ruoyi.playingmethod.model.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +/** + * 对战结果(观战/回顾/结算):客户端用 fight 拿对战基础信息、三个记录列表渲染逐轮掉落与结算, + * 另有 totalOrnamentsPrice 与宝箱清单。currentRound/loserTotalPrice/winnerTotalPrice 客户端不读,不下发。 + */ +@Data +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ApiFightResultVo { + + private ApiFightInfo fight; + + private List winnerIds; + + // 各回合开箱记录(fightRoundNumber > 0) + private List fightResult; + + // 赢家所得(含平分奖) + private List winnerPrize; + + // 失败方安慰奖(fightRoundNumber <= 0 且持有人非赢家) + private List endGamePrize; + + /** + * 开箱饰品总金额 + */ + private BigDecimal totalOrnamentsPrice; + + // 宝箱清单:客户端读 boxId/number/boxImg01/price/boxName + private List fightBoxVOList; +} diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/service/ApiFightService.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/service/ApiFightService.java index 5538430..6bbdb50 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/service/ApiFightService.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/service/ApiFightService.java @@ -10,9 +10,10 @@ import com.ruoyi.domain.entity.fight.TtFight; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.domain.vo.ApiFightListDataVO; import com.ruoyi.domain.vo.FightResultDataVO; -import com.ruoyi.domain.vo.fight.FightResultVO; import com.ruoyi.domain.vo.fight.TtFightVO; +import com.ruoyi.playingmethod.model.vo.ApiFightCardVo; import com.ruoyi.playingmethod.model.vo.ApiFightRankingVO; +import com.ruoyi.playingmethod.model.vo.ApiFightResultVo; import java.util.Date; import java.util.List; @@ -46,7 +47,7 @@ public interface ApiFightService extends IService { R fightRoomExit(Integer fightId, TtUser player); - List getFightList(FightOnMyOwnParam param); + List getFightList(FightOnMyOwnParam param); R fightDetail(FightDetailParam param); @@ -56,7 +57,12 @@ public interface ApiFightService extends IService { List getFightRankingByDate(String date); - Map> tenTopFight(Integer maxType, String model, Integer minPrice, Integer maxPrice, String keyword); + Map> tenTopFight(Integer maxType, String model, Integer minPrice, Integer maxPrice, String keyword); + + /** + * 对战结果(观战/回顾/结算):只下发客户端读取的字段,完整明细见 TtFightResultService#getFightResult + */ + ApiFightResultVo getFightResultForClient(Integer fightId); /** * 批量填充房主昵称(供 controller 中直接操作 TtFight 列表的场景使用) diff --git a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/service/impl/ApiFightServiceImpl.java b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/service/impl/ApiFightServiceImpl.java index 9b6fe5a..8705c18 100644 --- a/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/service/impl/ApiFightServiceImpl.java +++ b/skins-service/service-playingmethod/src/main/java/com/ruoyi/playingmethod/service/impl/ApiFightServiceImpl.java @@ -69,7 +69,11 @@ import com.ruoyi.framework.websocket.connector.WsResult; import com.ruoyi.playingmethod.mapper.ApiBindBoxMapper; import com.ruoyi.playingmethod.mapper.ApiFightMapper; import com.ruoyi.playingmethod.mapper.ApiTtUserBlendErcashMapper; +import com.ruoyi.playingmethod.model.vo.ApiFightCardVo; +import com.ruoyi.playingmethod.model.vo.ApiFightInfo; import com.ruoyi.playingmethod.model.vo.ApiFightRankingVO; +import com.ruoyi.playingmethod.model.vo.ApiFightRecordVo; +import com.ruoyi.playingmethod.model.vo.ApiFightResultVo; import com.ruoyi.playingmethod.model.vo.ApiFightTenTopVo; import com.ruoyi.playingmethod.service.ApiBindBoxService; import com.ruoyi.playingmethod.service.ApiFightService; @@ -1410,7 +1414,7 @@ public class ApiFightServiceImpl extends ServiceImpl imp } @Override - public List getFightList(FightOnMyOwnParam param) { + public List getFightList(FightOnMyOwnParam param) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper @@ -1507,85 +1511,59 @@ public class ApiFightServiceImpl extends ServiceImpl imp } } - var result = page.stream().map(fight -> { - ApiFightListDataVO build = ApiFightListDataVO.builder().build(); - BeanUtil.copyProperties(fight, build); - build.setBoxData(JSONUtil.toJsonStr(fight.getBoxData())); - build.setSeats(fight.getSeats()); - build.setRoundNumber(fight.getRoundNumber()); - // 设置 winnerIdList 以便 getWinnerIds() getter 正确返回 - if (fight.getWinnerIds() != null && !fight.getWinnerIds().isEmpty()) { - build.setWinnerIdList(JSONUtil.toJsonStr(fight.getWinnerIds())); - } - return build; - }).collect(Collectors.toList()); - - List fightIds = result.stream().filter(Objects::nonNull).map(ApiFightListDataVO::getId).collect(Collectors.toList()); - List voList = apiFightMapper.fightOrnamentsPrice(fightIds); - Map fightIdToPrice = voList.stream() + List fightIds = page.stream().filter(Objects::nonNull).map(TtFight::getId).collect(Collectors.toList()); + Map fightIdToPrice = apiFightMapper.fightOrnamentsPrice(fightIds).stream() .filter(Objects::nonNull) // 过滤掉空值 .collect(Collectors.toMap( ApiFightTenTopVo::getId, ApiFightTenTopVo::getTotalOrnamentsPrice )); - for (ApiFightListDataVO vo : result) { - vo.setTotalOrnamentsPrice(fightIdToPrice.getOrDefault(vo.getId(), BigDecimal.ZERO)); - } - // 批量填充每个玩家开出的饰品总和(seats[].awardTotalPrices) - List holderPriceList = apiFightMapper.holderOrnamentsPrice(fightIds); - // 构建 fightId:holderUserId -> totalOrnamentsPrice 映射 + // 构建 fightId:holderUserId -> 该玩家开出的饰品总额(seats[].awardTotalPrices) Map holderPriceMap = new HashMap<>(); - for (ApiFightTenTopVo hp : holderPriceList) { + for (ApiFightTenTopVo hp : apiFightMapper.holderOrnamentsPrice(fightIds)) { if (hp != null && hp.getId() != null && hp.getUserId() != null) { holderPriceMap.put(hp.getId() + ":" + hp.getUserId(), hp.getTotalOrnamentsPrice()); } } - for (ApiFightListDataVO vo : result) { - if (vo.getSeats() == null) continue; - List winIds = vo.getWinnerIds() != null ? vo.getWinnerIds() : Collections.emptyList(); - BigDecimal winTotal = BigDecimal.ZERO; - BigDecimal loseTotal = BigDecimal.ZERO; - for (FightSeat seat : vo.getSeats()) { - if (seat.getPlayerId() != null) { - BigDecimal playerPrice = holderPriceMap.getOrDefault(vo.getId() + ":" + seat.getPlayerId(), BigDecimal.ZERO); - seat.setAwardTotalPrices(playerPrice); - if (winIds.contains(seat.getPlayerId())) { - winTotal = winTotal.add(playerPrice); - } else { - loseTotal = loseTotal.add(playerPrice); - } - } - } - vo.setWinnerTotalPrice(winTotal); - vo.setLoserTotalPrice(loseTotal); - } - - enrichOwnerNickNamesForVO(result); // 批量填充 seats 中的 vipLevel - List allPlayerIds = result.stream() - .filter(v -> v.getSeats() != null) - .flatMap(v -> v.getSeats().stream()) + List allPlayerIds = page.stream() + .filter(f -> f.getSeats() != null) + .flatMap(f -> f.getSeats().stream()) .map(FightSeat::getPlayerId) .filter(Objects::nonNull) .distinct() .collect(Collectors.toList()); + Map vipMap = new HashMap<>(); if (!allPlayerIds.isEmpty()) { List users = new LambdaQueryChainWrapper<>(ttUserMapper) .in(TtUser::getUserId, allPlayerIds) .select(TtUser::getUserId, TtUser::getVipLevel) .list(); - Map vipMap = users.stream().filter(Objects::nonNull) + vipMap = users.stream().filter(Objects::nonNull) .collect(Collectors.toMap(TtUser::getUserId, u -> u.getVipLevel() != null && u.getVipLevel() > 0 ? u.getVipLevel() - 1 : 0, (a, b) -> a)); - for (ApiFightListDataVO vo : result) { - if (vo.getSeats() == null) continue; - for (FightSeat seat : vo.getSeats()) { - if (seat.getPlayerId() != null) { + } + + List result = new ArrayList<>(page.size()); + for (TtFight fight : page) { + if (fight == null) continue; + List winnerIds = fight.getWinnerIds() != null ? fight.getWinnerIds() : Collections.emptyList(); + BigDecimal winnerTotalPrice = BigDecimal.ZERO; + if (fight.getSeats() != null) { + for (FightSeat seat : fight.getSeats()) { + if (seat.getPlayerId() == null) continue; + BigDecimal playerPrice = holderPriceMap.getOrDefault(fight.getId() + ":" + seat.getPlayerId(), BigDecimal.ZERO); + seat.setAwardTotalPrices(playerPrice); + if (!vipMap.isEmpty()) { seat.setVipLevel(vipMap.getOrDefault(seat.getPlayerId(), 0)); } + if (winnerIds.contains(seat.getPlayerId())) { + winnerTotalPrice = winnerTotalPrice.add(playerPrice); + } } } + result.add(buildCard(fight, winnerIds, fightIdToPrice.getOrDefault(fight.getId(), BigDecimal.ZERO), winnerTotalPrice)); } return result; @@ -2282,7 +2260,7 @@ public class ApiFightServiceImpl extends ServiceImpl imp } @Override - public Map> tenTopFight(Integer maxType, String model, Integer minPrice, Integer maxPrice, String keyword) { + public Map> tenTopFight(Integer maxType, String model, Integer minPrice, Integer maxPrice, String keyword) { if (maxType == null || maxType < 0 || maxType > 3) { return Collections.emptyMap(); } @@ -2316,7 +2294,7 @@ public class ApiFightServiceImpl extends ServiceImpl imp // 获取昨天凌晨时间 calendar.add(Calendar.DAY_OF_MONTH, -2); // 从今天凌晨减去2天 - List todayFightResult = new ArrayList<>(); + List todayFightResult = new ArrayList<>(); // 超神模式(maxType=0)不传日期,查全历史 String startDate = (maxType == 0) ? null : formattedTodayMidnight; @@ -2337,26 +2315,147 @@ public class ApiFightServiceImpl extends ServiceImpl imp ApiFightTenTopVo::getTotalOrnamentsPrice, (a, b) -> a)); List batchResults = ttFightResultService.getFightResultBatch(fightIds); for (FightResultVO vo : batchResults) { - if (vo != null && vo.getFight() != null) { - vo.setTotalOrnamentsPrice(priceMap.getOrDefault(vo.getFight().getId(), vo.getTotalOrnamentsPrice())); - todayFightResult.add(vo); - } + if (vo == null || vo.getFight() == null) continue; + TtFight fight = vo.getFight(); + // 榜单金额以 SQL 统计值为准,与排序口径一致 + BigDecimal totalOrnamentsPrice = priceMap.getOrDefault(fight.getId(), vo.getTotalOrnamentsPrice()); + todayFightResult.add(buildCard(fight, vo.getWinnerIds(), totalOrnamentsPrice, vo.getWinnerTotalPrice())); } } log.info("today for time is {}", System.currentTimeMillis() - beginTime); - // 填充房主昵称 - List fightList = todayFightResult.stream() - .map(FightResultVO::getFight) - .filter(Objects::nonNull) - .collect(Collectors.toList()); - enrichOwnerNickNames(fightList); - - Map> map = new HashMap<>(); + Map> map = new HashMap<>(); map.put("todayFightResult", todayFightResult); return map; } + @Override + public ApiFightResultVo getFightResultForClient(Integer fightId) { + FightResultVO source = ttFightResultService.getFightResult(fightId); + if (source == null || source.getFight() == null) return null; + return buildFightResult(source); + } + + /** + * 卡片只下发客户端读取的字段:fight{id/userId/model/teamMode/playerNum/roundNumber/winnerIds/status/ + * beginTime/seats/boxData/boxPriceTotal} + winnerTotalPrice(结算)/totalOrnamentsPrice。 + * createTime/endTime/updateTime/remark/spectatorNum/ownerNickName、座位 fightId/status、 + * 宝箱 boxImg02/ornaments 与开箱明细客户端均不读,不下发。 + * + * @param winnerIds 赢家ID,百佳传 FightResultVO 的值(DB 为空时已从 Redis 状态快照兜底) + */ + private ApiFightCardVo buildCard(TtFight fight, List winnerIds, BigDecimal totalOrnamentsPrice, BigDecimal winnerTotalPrice) { + ApiFightCardVo card = new ApiFightCardVo(); + card.setFight(buildFightInfo(fight, winnerIds)); + card.setWinnerTotalPrice(winnerTotalPrice); + card.setTotalOrnamentsPrice(totalOrnamentsPrice); + return card; + } + + private ApiFightInfo buildFightInfo(TtFight fight, List winnerIds) { + ApiFightInfo info = new ApiFightInfo(); + info.setId(fight.getId()); + info.setUserId(fight.getUserId()); + info.setModel(fight.getModel()); + info.setTeamMode(fight.getTeamMode()); + info.setPlayerNum(fight.getPlayerNum()); + info.setRoundNumber(fight.getRoundNumber()); + info.setWinnerIds(winnerIds); + info.setStatus(fight.getStatus()); + info.setBeginTime(fight.getBeginTime()); + info.setBoxPriceTotal(fight.getBoxPriceTotal()); + info.setSeats(toSeats(fight.getSeats())); + info.setBoxData(toBoxMap(fight.getBoxData())); + return info; + } + + private List toSeats(List seats) { + if (CollectionUtils.isEmpty(seats)) return Collections.emptyList(); + List list = new ArrayList<>(seats.size()); + for (FightSeat seat : seats) { + if (seat == null) continue; + ApiFightInfo.Seat vo = new ApiFightInfo.Seat(); + vo.setCode(seat.getCode()); + vo.setPlayerId(seat.getPlayerId()); + vo.setAvatar(seat.getAvatar()); + vo.setNickName(seat.getNickName()); + vo.setVipLevel(seat.getVipLevel()); + vo.setAwardTotalPrices(seat.getAwardTotalPrices()); + list.add(vo); + } + return list; + } + + private Map toBoxMap(Map boxData) { + if (MapUtils.isEmpty(boxData)) return Collections.emptyMap(); + // 保持库中顺序,客户端按 boxData 顺序渲染宝箱行 + Map map = new LinkedHashMap<>(boxData.size()); + for (Map.Entry entry : boxData.entrySet()) { + ApiFightInfo.Box vo = toBox(entry.getValue()); + if (vo != null) map.put(entry.getKey(), vo); + } + return map; + } + + private ApiFightInfo.Box toBox(FightBoxVO source) { + FightBoxVO box = resolveFightBoxVO(source); + if (box == null) return null; + ApiFightInfo.Box vo = new ApiFightInfo.Box(); + vo.setBoxId(box.getBoxId()); + vo.setNumber(box.getNumber()); + vo.setBoxImg01(box.getBoxImg01()); + vo.setPrice(box.getPrice()); + vo.setBoxName(box.getBoxName()); + return vo; + } + + /** + * 对战结果只下发客户端读取的内容:fight 基础信息 + winnerIds + 三个记录列表 + totalOrnamentsPrice + 宝箱清单。 + * 记录里的 boxName/boxPrice/periodNo/marketHashName/status/source/fightId/rollId/isShow/时间等客户端不读; + * 外层 currentRound/loserTotalPrice/winnerTotalPrice 也不读(结算金额由客户端按 winnerPrize 汇总)。 + */ + private ApiFightResultVo buildFightResult(FightResultVO source) { + ApiFightResultVo vo = new ApiFightResultVo(); + vo.setFight(buildFightInfo(source.getFight(), null)); + vo.setWinnerIds(source.getWinnerIds()); + vo.setFightResult(toRecords(source.getFightResult())); + vo.setWinnerPrize(toRecords(source.getWinnerPrize())); + vo.setEndGamePrize(toRecords(source.getEndGamePrize())); + vo.setTotalOrnamentsPrice(source.getTotalOrnamentsPrice()); + List boxList = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(source.getFightBoxVOList())) { + for (FightBoxVO box : source.getFightBoxVOList()) { + ApiFightInfo.Box item = toBox(box); + if (item != null) boxList.add(item); + } + } + vo.setFightBoxVOList(boxList); + return vo; + } + + private List toRecords(List records) { + if (CollectionUtils.isEmpty(records)) return Collections.emptyList(); + List list = new ArrayList<>(records.size()); + for (TtBoxRecords record : records) { + if (record == null) continue; + ApiFightRecordVo vo = new ApiFightRecordVo(); + vo.setId(record.getId()); + vo.setUserId(record.getUserId()); + vo.setBoxId(record.getBoxId()); + vo.setOrnamentId(record.getOrnamentId()); + vo.setOrnamentName(record.getOrnamentName()); + vo.setOrnamentsPrice(record.getOrnamentsPrice()); + vo.setImageUrl(record.getImageUrl()); + vo.setOrnamentsLevelId(record.getOrnamentsLevelId()); + vo.setOrnamentLevelImg(record.getOrnamentLevelImg()); + vo.setExteriorName(record.getExteriorName()); + vo.setHolderUserId(record.getHolderUserId()); + vo.setFightRoundNumber(record.getFightRoundNumber()); + list.add(vo); + } + return list; + } + private void enrichBoxPrices(List fights) { List boxIds = new ArrayList<>(); for (TtFight fight : fights) { diff --git a/skins-service/service-task/src/main/java/com/ruoyi/task/controller/TtTaskController.java b/skins-service/service-task/src/main/java/com/ruoyi/task/controller/TtTaskController.java index c4d74f9..1ba81c2 100644 --- a/skins-service/service-task/src/main/java/com/ruoyi/task/controller/TtTaskController.java +++ b/skins-service/service-task/src/main/java/com/ruoyi/task/controller/TtTaskController.java @@ -8,15 +8,12 @@ import com.ruoyi.task.contract.request.GetAwardRequest; import com.ruoyi.task.contract.request.TaskTestRequest; import com.ruoyi.task.scheduled.TaskUpdate; import com.ruoyi.task.service.TtTaskService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; -@Api(tags = "任务模块") @RestController @RequestMapping("/api/ttTask") public class TtTaskController extends BaseController { @@ -27,7 +24,6 @@ public class TtTaskController extends BaseController { @Autowired private TaskUpdate taskUpdate; - @ApiOperation("关于我的任务") @PostMapping("/taskOfme") @Anonymous // public List taskOfme(@PathVariable("page") Integer page,@PathVariable("size") Integer size) { diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/MaYi/controller/MYController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/MaYi/controller/MYController.java index c133995..75d7a68 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/MaYi/controller/MYController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/MaYi/controller/MYController.java @@ -12,8 +12,6 @@ import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.domain.other.CreateOrderParam; import com.ruoyi.thirdparty.MaYi.config.MYConfig; import com.ruoyi.thirdparty.MaYi.service.MYService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -28,7 +26,6 @@ import org.springframework.web.bind.annotation.RestController; import jakarta.servlet.http.HttpServletRequest; import java.util.Map; -@Api(tags = "聚合支付") @Slf4j @RestController @RequestMapping("api/mayi") @@ -41,7 +38,6 @@ public class MYController extends BaseController { private TtUserService userService; // 下单 - @ApiOperation("预下单") @PostMapping("/ApiAddTrans") @UpdateUserCache public R ApiAddTrans(HttpServletRequest request, @RequestBody @Validated CreateOrderParam param) { @@ -58,7 +54,6 @@ public class MYController extends BaseController { } // 支付回调 - @ApiOperation("支付回调") // @PostMapping("/notify") public String addTransNotify(@RequestBody PayNotifyRequest data) { log.info("聚合支付支付回调 {}", JSONUtil.toJsonStr(data)); diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/abkpay/controller/AbkPayController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/abkpay/controller/AbkPayController.java index f4bd449..a7905ca 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/abkpay/controller/AbkPayController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/abkpay/controller/AbkPayController.java @@ -12,8 +12,6 @@ import com.ruoyi.thirdparty.abkpay.service.AbkPayPaymentService; import com.ruoyi.thirdparty.chengduhipay.controller.OrderStatusRequest; import com.ruoyi.thirdparty.chengduhipay.controller.PayRequest; import com.ruoyi.thirdparty.chengduhipay.controller.PayResponse; -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.validation.annotation.Validated; @@ -36,7 +34,6 @@ import java.util.Map; * orderStatus —— 查询本地订单支付状态(供前端轮询) * queryPay —— 主动查询平台订单 */ -@Api(tags = "abkpay充值") @Slf4j @RestController @RequestMapping("/api/abkpay") @@ -51,7 +48,6 @@ public class AbkPayController { /** * 创建充值订单(默认由统一充值路由调用,独立入口默认关闭) */ - @ApiOperation("创建充值订单") @UserPermission @PostMapping("/pay") public R pay(@RequestBody @Validated PayRequest param) { @@ -71,7 +67,6 @@ public class AbkPayController { * 平台订单成功或失败都会回调,商户须返回字符串 "SUCCESS"(大小写均可)。 * 处理失败(验签失败/订单不存在等)返回非 SUCCESS,促使平台重推。 */ - @ApiOperation("充值回调通知") @Anonymous @PostMapping("/notify") @ResponseBody @@ -88,7 +83,6 @@ public class AbkPayController { /** * 查询本地订单支付状态(供前端轮询) */ - @ApiOperation("查询本地订单支付状态") @UserPermission @PostMapping("/orderStatus") public R> orderStatus(@RequestBody @Validated OrderStatusRequest param) { @@ -99,7 +93,6 @@ public class AbkPayController { /** * 主动查询平台订单(仅允许查询本人订单) */ - @ApiOperation("查询充值订单") @UserPermission @GetMapping("/queryPay") public R queryPay(@RequestParam String outTradeNo) { diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/alipay/controller/AliPayController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/alipay/controller/AliPayController.java index f630efc..249bdaf 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/alipay/controller/AliPayController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/alipay/controller/AliPayController.java @@ -10,14 +10,11 @@ import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.domain.other.CreateOrderParam; import com.ruoyi.thirdparty.alipay.service.AliPayService; import com.ruoyi.thirdparty.wechat.service.ApiTokenService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import java.util.Map; -@Api(tags = "支付宝") @RestController @RequestMapping("/api/alipay") public class AliPayController { @@ -34,7 +31,6 @@ public class AliPayController { this.ttUserService = ttUserService; } - @ApiOperation("支付") @UserPermission @PostMapping(value = "/trade/page/pay") public R pay(@RequestBody @Validated CreateOrderParam param) { diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/baiweipay/controller/BaiweiPayController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/baiweipay/controller/BaiweiPayController.java index 82e53f1..2e21b2b 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/baiweipay/controller/BaiweiPayController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/baiweipay/controller/BaiweiPayController.java @@ -8,8 +8,6 @@ import com.ruoyi.common.utils.ip.IpUtils; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.domain.other.CreateOrderParam; import com.ruoyi.thirdparty.baiweipay.service.BaiweiPayService; -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.validation.annotation.Validated; @@ -17,7 +15,6 @@ import org.springframework.web.bind.annotation.*; import java.util.Map; -@Api(tags = "百威支付") @Slf4j @RestController @RequestMapping("api/baiweipay") @@ -29,7 +26,6 @@ public class BaiweiPayController { @Autowired private BaiweiPayService baiweiPayService; - @ApiOperation("支付") @UserPermission @PostMapping(value = "/pay") public R pay(@RequestBody @Validated CreateOrderParam param) { diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/chengduhipay/controller/ChengduHipayController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/chengduhipay/controller/ChengduHipayController.java index fb81160..425c22d 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/chengduhipay/controller/ChengduHipayController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/chengduhipay/controller/ChengduHipayController.java @@ -10,8 +10,6 @@ import com.ruoyi.common.utils.ip.IpUtils; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.thirdparty.chengduhipay.model.PaymentData; import com.ruoyi.thirdparty.chengduhipay.service.ChengduHipayPaymentService; -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.validation.annotation.Validated; @@ -28,7 +26,6 @@ import java.util.Map; * GET /api/chengduhipay/queryPay —— 查询充值订单 * GET /api/chengduhipay/balance —— 查询商户余额 */ -@Api(tags = "成都Hipay充值") @Slf4j @RestController @RequestMapping("/api/chengduhipay") @@ -44,7 +41,6 @@ public class ChengduHipayController { * 创建充值订单 * 对应API文档2.1节:POST /pay/pay/createpay */ - @ApiOperation("创建充值订单") @UserPermission // @PostMapping("/pay") public R pay(@RequestBody @Validated PayRequest param) { @@ -63,7 +59,6 @@ public class ChengduHipayController { * 通用返回格式: {"code":1, "msg":"success", "data":"{...}"} * data字段为JSON字符串,需要反序列化 */ - @ApiOperation("充值回调通知") @Anonymous // @PostMapping("/notify") public String notify(@RequestBody Map params) { @@ -77,7 +72,6 @@ public class ChengduHipayController { * 前端轮询逻辑建议:每 2~3 秒调一次,最多 60 秒,遇到 success=true 即弹出“充值成功”并刷新余额。 * @param param 请求体,包含创建充值接口返回的本地订单号 orderId */ - @ApiOperation("查询本地订单支付状态") @UserPermission @PostMapping("/orderStatus") public R> orderStatus(@RequestBody @Validated OrderStatusRequest param) { @@ -90,7 +84,6 @@ public class ChengduHipayController { * 对应API文档2.3节:GET /pay/pay/getpay * @param Id Hipay平台返回的订单唯一编号 */ - @ApiOperation("查询充值订单") @GetMapping("/queryPay") public R queryPay(@RequestParam String Id) { return chengduHipayPaymentService.getPay(Id); @@ -100,7 +93,6 @@ public class ChengduHipayController { * 查询商户余额 * 对应API文档4节:GET /pay/pay/getbalance */ - @ApiOperation("查询商户余额") @GetMapping("/balance") public R balance() { return chengduHipayPaymentService.getBalance(); diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiCommonController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiCommonController.java index 36cf6ea..b20cb05 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiCommonController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiCommonController.java @@ -2,8 +2,6 @@ package com.ruoyi.thirdparty.common.controller; import com.ruoyi.common.core.domain.R; import com.ruoyi.thirdparty.common.service.ApiCommonService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -12,7 +10,6 @@ import org.springframework.web.bind.annotation.RestController; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; -@Api(tags = "第三方公共接口") @RestController @RequestMapping("/api/thirdparty/common") public class ApiCommonController { @@ -23,7 +20,6 @@ public class ApiCommonController { this.commonService = commonService; } - @ApiOperation("生成二维码") @PostMapping("/skipLinkToQRCode") public R skipLinkToQRCode(HttpServletResponse response, @RequestParam("contents") String contents) throws IOException { return commonService.writerPayImage(response, contents); diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiRechargeConfigController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiRechargeConfigController.java index 8d3f67d..604a33c 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiRechargeConfigController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiRechargeConfigController.java @@ -11,8 +11,6 @@ import com.ruoyi.domain.common.constant.PayOrderStatus; import com.ruoyi.domain.dto.recharge.RechargeConfigOrderVo; import com.ruoyi.domain.entity.TtOrder; import com.ruoyi.domain.entity.TtRechargeConfig; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.apache.commons.collections4.CollectionUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -26,7 +24,6 @@ import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; -@Api(tags = "充值配置接口") @RestController @RequestMapping("/api/recharge/config") public class ApiRechargeConfigController extends BaseController { @@ -37,7 +34,6 @@ public class ApiRechargeConfigController extends BaseController { @Autowired private TtOrderService ttOrderService; - @ApiOperation("充值结果列表") @PostMapping("/order") public R> order() { startPage(); @@ -72,7 +68,6 @@ public class ApiRechargeConfigController extends BaseController { } - @ApiOperation("充值列表") @PostMapping("/list") public R> list() { startPage(); diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiRechargeController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiRechargeController.java index 480ccf4..de006df 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiRechargeController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiRechargeController.java @@ -29,8 +29,6 @@ import com.ruoyi.thirdparty.common.service.PayFrequencyGuard; import com.ruoyi.thirdparty.abkpay.service.AbkPayPaymentService; import com.ruoyi.thirdparty.itpay.service.ItPayPaymentService; import com.ruoyi.thirdparty.snappay.service.SnapPayPaymentService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; @@ -42,7 +40,6 @@ import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; @Slf4j -@Api(tags = "充值") @RestController @RequestMapping("/api/recharge") public class ApiRechargeController extends BaseController { @@ -86,7 +83,6 @@ public class ApiRechargeController extends BaseController { this.payFrequencyGuard = payFrequencyGuard; } - @ApiOperation("卡支付") @UpdateUserCache @RateLimiter(time = 60, count = 30, limitType = LimitType.IP) @PostMapping("/cardPay") @@ -124,7 +120,6 @@ public class ApiRechargeController extends BaseController { } } - @ApiOperation("充值列表") // @UpdateUserCache @Anonymous @PostMapping("/list") @@ -159,7 +154,6 @@ public class ApiRechargeController extends BaseController { return R.ok(result); } - @ApiOperation("统一充值下单(按权重分配支付公司)") @UserPermission @PostMapping("/unifiedPay") public R unifiedPay(@RequestBody UnifiedPayRequest request) { diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiSmsController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiSmsController.java index b35a6bd..6a3c091 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiSmsController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/ApiSmsController.java @@ -8,17 +8,13 @@ import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.thirdparty.common.model.ApiSmsBody; -import com.ruoyi.thirdparty.common.model.ApiSmsNoSliderBody; import com.ruoyi.thirdparty.common.service.ApiSmsService; -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; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -@Api(tags = "短信") @RestController @RequestMapping("/api/sms") public class ApiSmsController extends BaseController { @@ -35,7 +31,6 @@ public class ApiSmsController extends BaseController { this.apiSmsService = apiSmsService; } - @ApiOperation("获取短信验证码") @Anonymous @PostMapping("/getVerifyCode") public R getVerifyCode(@RequestBody ApiSmsBody smsBody) { @@ -56,6 +51,8 @@ public class ApiSmsController extends BaseController { if (StringUtils.isEmpty(storedCaptchaId) || !storedCaptchaId.equals(captchaId)) { return R.fail("滑块验证已过期或无效,请重新验证"); } + // 一次性消费:同一个 captchaId 在 5 分钟有效期内只能换一条短信,否则可重放刷短信 + redisCache.deleteObject(verifiedKey); String msg = apiSmsService.getVerifyCode(smsBody); if (StringUtils.isNotEmpty(msg)) { @@ -67,27 +64,4 @@ public class ApiSmsController extends BaseController { } return R.ok("获取验证码成功,请注意短信通知!"); } - - @ApiOperation("获取短信验证码(免滑块)") - @Anonymous - @PostMapping("/getVerifyCodeNoSlider") - public R getVerifyCodeNoSlider(@RequestBody ApiSmsNoSliderBody body) { - String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); - if ("1".equals(websiteMaintenance)) { - return R.fail("网站维护中......"); - } - - // 不校验滑块,直接发送验证码;适配 service 层入参不含 captchaId - ApiSmsBody smsBody = new ApiSmsBody(); - smsBody.setPhoneNumber(body.getPhoneNumber()); - smsBody.setType(body.getType()); - String msg = apiSmsService.getVerifyCode(smsBody); - if (StringUtils.isNotEmpty(msg)) { - if (msg.contains("次数") || msg.contains("余额") || msg.contains("不足")) { - return R.fail(999, "短信发送次数不足"); - } - return R.fail(msg); - } - return R.ok("获取验证码成功,请注意短信通知!"); - } } diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/DeliverGoodsController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/DeliverGoodsController.java index 0b6d90e..bf1e812 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/DeliverGoodsController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/controller/DeliverGoodsController.java @@ -8,8 +8,6 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.thirdparty.common.service.DeliverGoodsService; import com.ruoyi.thirdparty.zbt.param.ProductListParams; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -17,7 +15,6 @@ import org.springframework.web.bind.annotation.*; import java.util.List; -@Api(tags = "管理端发货管理") @RestController @RequestMapping("/admin/deliverGoods") public class DeliverGoodsController extends BaseController { @@ -38,14 +35,12 @@ public class DeliverGoodsController extends BaseController { } // 获取饰品在各个平台的在售信息 - @ApiOperation("获取饰品在各个平台的在售信息") @PostMapping("/getAvailableMarketList") public R getAvailableMarketList(@RequestBody GetAvailableMarketListParam param) { return deliverGoodsService.getAvailableMarketList(param); } // 根据饰品hashName获取所有平台的在售列表(弃用接口) - @ApiOperation("根据饰品hashName获取所有平台的在售列表(弃用接口)") @GetMapping("/getAvailableMarketListByHashName/{marketHashName}") public R> getAvailableMarketListByHashName(@PathVariable("marketHashName") String marketHashName, ProductListParams productListParams) { @@ -54,26 +49,22 @@ public class DeliverGoodsController extends BaseController { return R.ok(list); } - @ApiOperation("购买发货") @PostMapping("/tradeBuy") public R tradeBuy(@RequestBody TradeBuyParam param) { return deliverGoodsService.tradeBuy(param); } - @ApiOperation("手动确认发货") @PostMapping("/tradeConfirm") public R tradeConfirm(@RequestBody TradeManualConfirmParam param) { return deliverGoodsService.tradeConfirm(param); } - @ApiOperation("同步状态") @GetMapping("/synchronousStatus") public R synchronousStatus(String outTradeNo) { String msg = deliverGoodsService.synchronousStatus(outTradeNo); return StringUtils.isEmpty(msg) ? R.ok(true, "同步成功!") : R.fail(false, msg); } - @ApiOperation("一键同步状态") @GetMapping("/syncAllStatus") public R syncAllStatus() { int row = deliverGoodsService.syncAllStatus(); diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/ApiSmsBody.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/ApiSmsBody.java index ea1b1c5..b6a8b03 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/ApiSmsBody.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/ApiSmsBody.java @@ -1,15 +1,11 @@ package com.ruoyi.thirdparty.common.model; -import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data public class ApiSmsBody { private String phoneNumber; - @ApiModelProperty("1注册 2登录 3更换手机号 4找回密码 5实名认证") private String type; - @ApiModelProperty("滑块验证码ID") private String captchaId; - @ApiModelProperty("上级邀请码(推广后台登录:手机号未注册时用它校验是否可自动注册为主播)") private String parentInvitationCode; } diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/ApiSmsNoSliderBody.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/ApiSmsNoSliderBody.java deleted file mode 100644 index 383d779..0000000 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/ApiSmsNoSliderBody.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.ruoyi.thirdparty.common.model; - -import io.swagger.annotations.ApiModelProperty; -import lombok.Data; - -/** - * 免滑块短信验证码请求体(不含 captchaId) - */ -@Data -public class ApiSmsNoSliderBody { - @ApiModelProperty("手机号") - private String phoneNumber; - - @ApiModelProperty("1注册 2登录 3更换手机号 4找回密码 5实名认证") - private String type; -} diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/UnifiedPayRequest.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/UnifiedPayRequest.java index e1bf036..9dc4f61 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/UnifiedPayRequest.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/model/UnifiedPayRequest.java @@ -1,6 +1,5 @@ package com.ruoyi.thirdparty.common.model; -import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -12,9 +11,7 @@ public class UnifiedPayRequest { @NotNull(message = "商品id不能为空") private Integer goodsId; - @ApiModelProperty("支付方式:1=支付宝,2=银联") private Integer payType; - @ApiModelProperty("1:原有支付,2:图片支付") private Integer payWay = 1; } diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/service/impl/ApiSmsServiceImpl.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/service/impl/ApiSmsServiceImpl.java index b42d970..7bf20be 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/service/impl/ApiSmsServiceImpl.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/service/impl/ApiSmsServiceImpl.java @@ -57,6 +57,9 @@ public class ApiSmsServiceImpl implements ApiSmsService { private static final int SMS_RATE_LIMIT_MAX_COUNT = 3; private static final int SMS_RATE_LIMIT_MINUTES = 10; + /** 单个验证码试错上限:4 位码不设上限可被穷举,超过即作废重发 */ + private static final int CAPTCHA_MAX_ATTEMPTS = 5; + @Override public String getVerifyCode(ApiSmsBody smsBody) { String phoneNumber = smsBody.getPhoneNumber(); @@ -71,12 +74,7 @@ public class ApiSmsServiceImpl implements ApiSmsService { if (!Validator.isMobile(phoneNumber)) { return "手机号格式错误,请检查手机号是否输入正确!"; } - // 频率限制:同一手机号 10 分钟内最多发送 3 次(不限类型,防止跨类型刷短信) - String rateLimitKey = "sms:rate_limit:" + phoneNumber; - Integer sendCount = redisCache.getCacheObject(rateLimitKey); - if (sendCount != null && sendCount >= SMS_RATE_LIMIT_MAX_COUNT) { - return "操作过于频繁,请" + SMS_RATE_LIMIT_MINUTES + "分钟后再试"; - } + // 手机号格式错误、无权限这类校验不占发送额度,额度只在真正要发短信时扣 if ("1".equals(type) && !userService.checkPhoneUnique(TtUser.builder().phoneNumber(phoneNumber).build())) { return "手机号'" + phoneNumber + "'已被注册!"; } @@ -100,6 +98,16 @@ public class ApiSmsServiceImpl implements ApiSmsService { if (StringUtils.isNotEmpty(cacheCode)) { return "验证码已发送,请注意手机短信信息!"; } + // 频率限制:同一手机号 10 分钟内最多发送 3 次(不限类型,防止跨类型刷短信)。 + // 用 Redis INCR 原子扣额度:读-改-写会被并发点两下绕过(两端都读到 2,各写 3,实发 4 条) + String rateLimitKey = "sms:rate_limit:" + phoneNumber; + Long sendCount = redisCache.redisTemplate.opsForValue().increment(rateLimitKey); + if (sendCount != null && sendCount == 1L) { + redisCache.expire(rateLimitKey, SMS_RATE_LIMIT_MINUTES, TimeUnit.MINUTES); + } + if (sendCount != null && sendCount > SMS_RATE_LIMIT_MAX_COUNT) { + return "操作过于频繁,请" + SMS_RATE_LIMIT_MINUTES + "分钟后再试"; + } String randomCode = RandomUtil.randomNumbers(4); // 网易云信 // String code = yunXinNoteService.sendNote(phoneNumber, randomCode); @@ -128,24 +136,30 @@ public class ApiSmsServiceImpl implements ApiSmsService { // if (!"000".equals(code)) { // return "发送短信验证码时出现异常!"; // } - // 更新发送频率计数(保留剩余 TTL,避免重置窗口) - if (sendCount == null) { - redisCache.setCacheObject(rateLimitKey, 1, SMS_RATE_LIMIT_MINUTES, TimeUnit.MINUTES); - } else { - long remainTtl = redisCache.getExpire(rateLimitKey); - redisCache.setCacheObject(rateLimitKey, sendCount + 1, - remainTtl > 0 ? (int) remainTtl : SMS_RATE_LIMIT_MINUTES * 60, TimeUnit.SECONDS); - } + // 发送额度已在上面原子扣减(撞额度上限时已提前 return),这里只写验证码 redisCache.setCacheObject(verifyKey, randomCode, 5, TimeUnit.MINUTES); return ""; } @Override public String validateCaptcha(String code, String verifyKey) { - verifyKey = CacheConstants.CAPTCHA_CODE_KEY + verifyKey; - String captcha = redisCache.getCacheObject(verifyKey); - if (!code.equalsIgnoreCase(captcha)) return "验证码错误"; - redisCache.deleteObject(verifyKey); - return "success"; + String codeKey = CacheConstants.CAPTCHA_CODE_KEY + verifyKey; + String attemptKey = codeKey + ":fail"; + String captcha = redisCache.getCacheObject(codeKey); + if (code != null && code.equalsIgnoreCase(captcha)) { + redisCache.deleteObject(codeKey); + redisCache.deleteObject(attemptKey); + return "success"; + } + Integer attempts = redisCache.getCacheObject(attemptKey); + int fails = (attempts == null ? 0 : attempts) + 1; + if (fails >= CAPTCHA_MAX_ATTEMPTS) { + // 试错超限:作废验证码,必须重新获取 + redisCache.deleteObject(codeKey); + redisCache.deleteObject(attemptKey); + return "验证码错误次数过多,请重新获取验证码"; + } + redisCache.setCacheObject(attemptKey, fails, 5, TimeUnit.MINUTES); + return "验证码错误"; } } diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/task/LoadAllOrnaments.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/task/LoadAllOrnaments.java index 8f7f2d3..7f9c9e7 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/task/LoadAllOrnaments.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/common/task/LoadAllOrnaments.java @@ -28,7 +28,6 @@ import com.ruoyi.thirdparty.zbt.param.SearchParams; import com.ruoyi.thirdparty.zbt.result.ResultZbt; import com.ruoyi.thirdparty.zbt.result.product.SearchData; import com.ruoyi.thirdparty.zbt.service.ZBTService; -import io.swagger.models.auth.In; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/gfht/controller/GfhtController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/gfht/controller/GfhtController.java index b2d9cdc..b759075 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/gfht/controller/GfhtController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/gfht/controller/GfhtController.java @@ -9,8 +9,6 @@ import com.ruoyi.common.utils.ip.IpUtils; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.domain.other.CreateOrderParam; import com.ruoyi.thirdparty.gfht.service.GfhtService; -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.validation.annotation.Validated; @@ -18,7 +16,6 @@ import org.springframework.web.bind.annotation.*; import java.util.Map; -@Api(tags = "国富汇通") @Slf4j @RestController @RequestMapping("api/gfht") @@ -30,7 +27,6 @@ public class GfhtController extends BaseController { @Autowired private GfhtService gfhtService; - @ApiOperation("支付") @UserPermission @PostMapping(value = "/pay") public R pay(@RequestBody @Validated CreateOrderParam param) { diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/hipay/controller/HiPayController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/hipay/controller/HiPayController.java index 517ca73..8f3a147 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/hipay/controller/HiPayController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/hipay/controller/HiPayController.java @@ -9,8 +9,6 @@ import com.ruoyi.common.utils.ip.IpUtils; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.domain.other.CreateOrderParam; import com.ruoyi.thirdparty.hipay.service.HipayPaymentService; -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.validation.annotation.Validated; @@ -18,7 +16,6 @@ import org.springframework.web.bind.annotation.*; import java.util.Map; -@Api(tags = "") @Slf4j @RestController @RequestMapping("/api/hipay") @@ -30,7 +27,6 @@ public class HiPayController { @Autowired private HipayPaymentService hipayPaymentService; - @ApiOperation("支付") @UserPermission // @PostMapping(value = "/pay") public R pay(@RequestBody @Validated PayRequest param) { diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/hipay/controller/PayRequest.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/hipay/controller/PayRequest.java index db7b0a8..936b49d 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/hipay/controller/PayRequest.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/hipay/controller/PayRequest.java @@ -1,6 +1,5 @@ package com.ruoyi.thirdparty.hipay.controller; -import io.swagger.annotations.ApiModelProperty; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotNull; import lombok.Data; @@ -14,9 +13,7 @@ public class PayRequest { @Min(value = 1, message = "最小值1") private Integer goodsNum; - @ApiModelProperty("1:支付宝1 2:支付宝2") private Integer payType; - @ApiModelProperty("1:原有支付,2:图片支付") private Integer payWay = 1; } diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/itpay/controller/ItPayController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/itpay/controller/ItPayController.java index 0524f7a..cf3ea84 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/itpay/controller/ItPayController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/itpay/controller/ItPayController.java @@ -12,8 +12,6 @@ import com.ruoyi.thirdparty.chengduhipay.controller.PayRequest; import com.ruoyi.thirdparty.chengduhipay.controller.PayResponse; import com.ruoyi.thirdparty.itpay.model.ItPayCreateResult; import com.ruoyi.thirdparty.itpay.service.ItPayPaymentService; -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.validation.annotation.Validated; @@ -29,7 +27,6 @@ import java.util.Map; * orderStatus —— 查询本地订单支付状态(供前端轮询) * queryPay —— 主动查询平台订单 */ -@Api(tags = "itpay充值") @Slf4j @RestController @RequestMapping("/api/itpay") @@ -44,7 +41,6 @@ public class ItPayController { /** * 创建充值订单 */ - @ApiOperation("创建充值订单") @UserPermission // @PostMapping("/pay") public R pay(@RequestBody @Validated PayRequest param) { @@ -61,7 +57,6 @@ public class ItPayController { * 平台订单成功或失败都会回调,商户须返回字符串 "success"。 * 处理失败(验签失败/订单不存在等)返回非 success,促使平台重推。 */ - @ApiOperation("充值回调通知") @Anonymous @PostMapping("/notify") @ResponseBody @@ -78,7 +73,6 @@ public class ItPayController { /** * 查询本地订单支付状态(供前端轮询) */ - @ApiOperation("查询本地订单支付状态") @UserPermission @PostMapping("/orderStatus") public R> orderStatus(@RequestBody @Validated OrderStatusRequest param) { @@ -89,7 +83,6 @@ public class ItPayController { /** * 主动查询平台订单 */ - @ApiOperation("查询充值订单") @GetMapping("/queryPay") public R queryPay(@RequestParam String merOrderTid) { return itPayPaymentService.queryPay(merOrderTid); diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/jiujia/controller/JiuJiaPayController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/jiujia/controller/JiuJiaPayController.java index 3d0090b..24a8f43 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/jiujia/controller/JiuJiaPayController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/jiujia/controller/JiuJiaPayController.java @@ -9,14 +9,11 @@ import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.thirdparty.jiujia.domain.CallbackBody; import com.ruoyi.thirdparty.jiujia.service.JiuJiaPayService; import com.ruoyi.domain.other.CreateOrderParam; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; 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; -@Api(tags = "九嘉支付") @RestController @RequestMapping("/api/jiuJiaPay") public class JiuJiaPayController extends BaseController { @@ -34,14 +31,12 @@ public class JiuJiaPayController extends BaseController { } // TODO: 2024/4/11 要修改!!! - @ApiOperation("回滚") @Anonymous @PostMapping("/callback") public String callback(@RequestBody CallbackBody callbackBody) { return jiuJiaPayService.callback(callbackBody); } - @ApiOperation("九嘉预下单") @PostMapping("/createPay") public R createPay(@RequestBody CreateOrderParam createOrderBody) { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/richku/controller/RichKuController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/richku/controller/RichKuController.java index cb27f9c..10c0397 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/richku/controller/RichKuController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/richku/controller/RichKuController.java @@ -12,8 +12,6 @@ import com.ruoyi.thirdparty.chengduhipay.controller.OrderStatusRequest; import com.ruoyi.thirdparty.chengduhipay.controller.PayRequest; import com.ruoyi.thirdparty.chengduhipay.controller.PayResponse; import com.ruoyi.thirdparty.richku.service.RichKuPaymentService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -27,7 +25,6 @@ import java.util.Map; /** * RichKu 充值接口 */ -@Api(tags = "RichKu充值") @Slf4j @RestController @RequestMapping("/api/richku") @@ -42,7 +39,6 @@ public class RichKuController { /** * 创建充值订单 */ - @ApiOperation("创建充值订单") @UserPermission // @PostMapping("/pay") public R pay(@RequestBody @Validated PayRequest param, HttpServletRequest request) { @@ -60,7 +56,6 @@ public class RichKuController { * RichKu 平台在用户支付成功后通过 x-www-form-urlencoded 方式 POST 通知 * 必须返回纯文本 "OK" */ - @ApiOperation("充值回调通知") @Anonymous @PostMapping(value = "/notify", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE) @ResponseBody @@ -76,7 +71,6 @@ public class RichKuController { /** * 查询本地订单支付状态(供前端轮询) */ - @ApiOperation("查询本地订单支付状态") @UserPermission @PostMapping("/orderStatus") public R> orderStatus(@RequestBody @Validated OrderStatusRequest param) { @@ -87,7 +81,6 @@ public class RichKuController { /** * 查询外部订单 */ - @ApiOperation("查询充值订单") @GetMapping("/queryPay") public R> queryPay(@RequestParam String orderId) { return richKuPaymentService.queryPay(orderId); @@ -96,7 +89,6 @@ public class RichKuController { /** * 查询商户余额 */ - @ApiOperation("查询商户余额") @GetMapping("/balance") public R balance() { return richKuPaymentService.getBalance(); diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/snappay/controller/SnapPayController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/snappay/controller/SnapPayController.java index 84b20e2..5989480 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/snappay/controller/SnapPayController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/snappay/controller/SnapPayController.java @@ -12,8 +12,6 @@ import com.ruoyi.thirdparty.chengduhipay.controller.OrderStatusRequest; import com.ruoyi.thirdparty.chengduhipay.controller.PayRequest; import com.ruoyi.thirdparty.chengduhipay.controller.PayResponse; import com.ruoyi.thirdparty.snappay.service.SnapPayPaymentService; -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.validation.annotation.Validated; @@ -35,7 +33,6 @@ import java.util.Map; * orderStatus —— 查询本地订单支付状态(供前端轮询) * queryPay —— 主动查询平台交易 */ -@Api(tags = "snappay充值") @Slf4j @RestController @RequestMapping("/api/snappay") @@ -50,7 +47,6 @@ public class SnapPayController { /** * 创建充值订单(默认由统一充值路由调用) */ - @ApiOperation("创建充值订单") @UserPermission @PostMapping("/pay") public R pay(@RequestBody @Validated PayRequest param) { @@ -70,7 +66,6 @@ public class SnapPayController { * 交易进入终态时平台会回调,商户须返回字符串 "success"。 * 处理失败(验签失败/订单不存在等)返回非 success,促使平台重推。 */ - @ApiOperation("充值回调通知") @Anonymous @PostMapping("/notify") @ResponseBody @@ -87,7 +82,6 @@ public class SnapPayController { /** * 查询本地订单支付状态(供前端轮询) */ - @ApiOperation("查询本地订单支付状态") @UserPermission @PostMapping("/orderStatus") public R> orderStatus(@RequestBody @Validated OrderStatusRequest param) { @@ -98,7 +92,6 @@ public class SnapPayController { /** * 主动查询平台交易(仅允许查询本人订单) */ - @ApiOperation("查询充值订单") @UserPermission @GetMapping("/queryPay") public R queryPay(@RequestParam String merchantOrderId) { diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/wechat/controller/TianXinController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/wechat/controller/TianXinController.java index 9949fe9..2001bde 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/wechat/controller/TianXinController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/wechat/controller/TianXinController.java @@ -8,8 +8,6 @@ import com.ruoyi.thirdparty.wechat.domain.PayOrderParam; import com.ruoyi.thirdparty.wechat.service.ApiTokenService; import com.ruoyi.thirdparty.wechat.service.TianXinService; import com.ruoyi.thirdparty.wechat.utils.GetIpUtil; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; @@ -19,7 +17,6 @@ import jakarta.servlet.http.HttpServletRequest; import static com.ruoyi.common.utils.SecurityUtils.getUserId; -@Api(tags = "田心支付") @RestController @RequestMapping("/api/tianxinOrder") public class TianXinController { @@ -36,9 +33,8 @@ public class TianXinController { this.ttUserService = ttUserService; } - @ApiOperation("预下单") @UserPermission - @PostMapping("/createOrder") + // [停用-前端零调用] @PostMapping("/createOrder") public AjaxResult createOrder(@RequestBody PayOrderParam param, HttpServletRequest request) { // 判断是否开启田心支付 @@ -58,14 +54,12 @@ public class TianXinController { // return tianXinService.createOrder(param, ttUser, ip); } - @ApiOperation("查询订单状态") @UserPermission - @PostMapping(value = "/queryOrderStatus") + // [停用-前端零调用] @PostMapping(value = "/queryOrderStatus") public AjaxResult queryOrderStatus(String sdorderno) { return tianXinService.queryOrderStatus(sdorderno); } - @ApiOperation("回调") // @RequestMapping(value = "/callBack") public String returnCallBack(HttpServletRequest request) { return tianXinService.callBack(request); diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/xinghuopay/controller/XinghuoPayController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/xinghuopay/controller/XinghuoPayController.java index a84bed4..74bc543 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/xinghuopay/controller/XinghuoPayController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/xinghuopay/controller/XinghuoPayController.java @@ -9,8 +9,6 @@ import com.ruoyi.common.utils.ip.IpUtils; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.domain.other.CreateOrderParam; import com.ruoyi.thirdparty.xinghuopay.service.XinghuoPayService; -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.validation.annotation.Validated; @@ -18,7 +16,6 @@ import org.springframework.web.bind.annotation.*; import java.util.Map; -@Api(tags = "XinghuoPay") @Slf4j @RestController @RequestMapping("api/xinghuopay") @@ -30,7 +27,6 @@ public class XinghuoPayController extends BaseController { @Autowired private XinghuoPayService xinghuoService; - @ApiOperation("支付") @UserPermission @PostMapping(value = "/pay") public R pay(@RequestBody @Validated CreateOrderParam param) { diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/yyyouping/controller/yyyoupingController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/yyyouping/controller/yyyoupingController.java index 7df3339..1a4beee 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/yyyouping/controller/yyyoupingController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/yyyouping/controller/yyyoupingController.java @@ -10,8 +10,6 @@ import com.ruoyi.domain.entity.TtOrnamentsYY; import com.ruoyi.thirdparty.yyyouping.service.yyyoupingService; import com.ruoyi.thirdparty.yyyouping.utils.YYClient; import com.ruoyi.thirdparty.yyyouping.utils.common.YYResult; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; @@ -28,7 +26,6 @@ import java.util.List; import java.util.Map; @Slf4j -@Api(tags = "YYYouPing") @RestController @RequestMapping("api/yyyouping") public class yyyoupingController { @@ -49,7 +46,6 @@ public class yyyoupingController { private TtOrnamentYYService ttOrnamentYYService; // 加载平台的饰品数据 - @ApiOperation("加载平台的饰品数据") @GetMapping("loadData") public R loadData(){ // 读json @@ -62,7 +58,6 @@ public class yyyoupingController { } // 通过此接口可获取悠悠有品所有商品对应的模板ID的下载链接。 - @ApiOperation("查询模板ID下载链接") @GetMapping("yyApiTemplateQuery") public R yyApiTemplateQuery(){ YYResult yyResult = yyyoupingService.yyApiTemplateQuery(new HashMap<>()); @@ -70,14 +65,12 @@ public class yyyoupingController { return R.ok(yyResult); } - @ApiOperation("查询商品列表") @PostMapping("yyApiGoodsQuery") public R yyApiGoodsQuery(@RequestBody Map map){ yyyoupingService.yyApiGoodsQuery(map); return R.ok(); } - @ApiOperation("余额查询") @PostMapping("yyApiGetAssetsInfo") public R yyApiGetAssetsInfo(){ YYResult yyResult = yyyoupingService.yyApiGetAssetsInfo(); @@ -85,7 +78,6 @@ public class yyyoupingController { return R.ok(yyResult); } - @ApiOperation("批量查询模板饰品的在售列表") @PostMapping("/yyApiBatchGetOnSaleCommodityInfo") public R balance(@RequestBody List ids) { ArrayList list = new ArrayList<>(); @@ -100,7 +92,6 @@ public class yyyoupingController { return R.ok(yyResult); } - @ApiOperation("按类别查询模板销售") @GetMapping("/yyApiQueryTemplateSaleByCategory") public R yyApiQueryTemplateSaleByCategory() throws Exception { HashMap map = new HashMap<>(); diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/yyyouping/service/Impl/yyyoupingServiceImpl.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/yyyouping/service/Impl/yyyoupingServiceImpl.java index 644ec62..b0c127a 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/yyyouping/service/Impl/yyyoupingServiceImpl.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/yyyouping/service/Impl/yyyoupingServiceImpl.java @@ -10,7 +10,6 @@ import com.ruoyi.thirdparty.yyyouping.config.YYConfig; import com.ruoyi.thirdparty.yyyouping.service.yyyoupingService; import com.ruoyi.thirdparty.yyyouping.utils.common.RSAUtils; import com.ruoyi.thirdparty.yyyouping.utils.common.YYResult; -import io.swagger.annotations.Api; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/zbt/controller/ZBTController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/zbt/controller/ZBTController.java index 6c48e68..2fbb189 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/zbt/controller/ZBTController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/zbt/controller/ZBTController.java @@ -8,14 +8,11 @@ import com.ruoyi.thirdparty.zbt.result.user.BusinessData; import com.ruoyi.thirdparty.zbt.result.user.UserAccountModel; import com.ruoyi.thirdparty.zbt.service.ZBTService; import com.ruoyi.thirdparty.zbt.util.ZBTUtils; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Map; -@Api(tags = "扎比特") @RestController @RequestMapping public class ZBTController { @@ -26,7 +23,6 @@ public class ZBTController { this.zbtService = zbtService; } - @ApiOperation("管理端查询用户余额") @GetMapping("/admin/zbt/balance") public R balance() { ResultZbt balance = zbtService.balance(); @@ -34,7 +30,6 @@ public class ZBTController { return R.fail("用户余额查询失败"); } - @ApiOperation("管理端获取开发者信息") @GetMapping("/admin/zbt/developmentInfo") public R developmentInfo() { ResultZbt developmentInfo = zbtService.developmentInfo(); diff --git a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/zyZFB/controller/ZyController.java b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/zyZFB/controller/ZyController.java index 0e9ba4d..f70f159 100644 --- a/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/zyZFB/controller/ZyController.java +++ b/skins-service/service-thirdparty/src/main/java/com/ruoyi/thirdparty/zyZFB/controller/ZyController.java @@ -10,8 +10,6 @@ import com.ruoyi.domain.other.CreateOrderParam; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.thirdparty.zyZFB.config.ZYConfig; import com.ruoyi.thirdparty.zyZFB.service.zyService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @@ -24,7 +22,6 @@ import org.springframework.web.bind.annotation.RestController; import jakarta.servlet.http.HttpServletRequest; import java.util.Map; -@Api(tags = "中云支付宝") @Slf4j @RestController @RequestMapping("api/zyZFB") @@ -40,7 +37,6 @@ public class ZyController extends BaseController { private TtUserService userService; // 下单 - @ApiOperation("预下单接口") @PostMapping("/ApiAddTrans") @UpdateUserCache public R ApiAddTrans(HttpServletRequest request, CreateOrderParam param) { @@ -71,7 +67,6 @@ public class ZyController extends BaseController { } // 支付回调 - @ApiOperation("支付回调") // @PostMapping("/addTransNotify") public String addTransNotify(PayNotifyData data) { log.info("支付回调 {}", JSONUtil.toJsonStr(data)); @@ -79,22 +74,19 @@ public class ZyController extends BaseController { } // 查询订单接口 - @ApiOperation("查询订单") - @PostMapping("/ApiQueryTrans") + // [停用-前端零调用] @PostMapping("/ApiQueryTrans") public String ApiQueryTrans(HttpServletRequest request, Map param) { return "success"; } // 代付接口 - @ApiOperation("代付") - @PostMapping("/ApiPropayTrans") + // [停用-前端零调用] @PostMapping("/ApiPropayTrans") public String ApiPropayTrans(HttpServletRequest request, Map param) { return "success"; } // 查询余额接口 - @ApiOperation("查询余额") - @PostMapping("/ApiQueryBalancePHP") + // [停用-前端零调用] @PostMapping("/ApiQueryBalancePHP") public String ApiQueryBalancePHP(HttpServletRequest request, Map param) { return "success"; } diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiAdvertisementController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiAdvertisementController.java index 50a0ab5..cfbb450 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiAdvertisementController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiAdvertisementController.java @@ -4,10 +4,8 @@ import com.ruoyi.admin.service.TtAdvertisementService; import com.ruoyi.common.core.domain.R; import com.ruoyi.domain.other.TtAdvertisement; import com.ruoyi.user.contract.api.request.GetAdvertisementRequest; -import io.swagger.annotations.Api; import org.springframework.web.bind.annotation.*; -@Api(tags = "广告查询") @RestController @RequestMapping("/api/advertisement") public class ApiAdvertisementController { @@ -18,7 +16,7 @@ public class ApiAdvertisementController { this.ttAdvertisementService = ttAdvertisementService; } - @PostMapping("/getInfo") + // [停用-前端零调用] @PostMapping("/getInfo") public R getInfo(@RequestBody GetAdvertisementRequest getAdvertisementRequest) { TtAdvertisement ttAdvertisement = ttAdvertisementService.getById(getAdvertisementRequest.getId()); // ttBanner.setPicture(""); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiAnnouncementController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiAnnouncementController.java index e6c5fad..8e20154 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiAnnouncementController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiAnnouncementController.java @@ -14,9 +14,6 @@ import com.ruoyi.user.model.vo.ApiNoticeVO; import com.ruoyi.user.model.vo.MessageItemVO; import com.ruoyi.user.service.ApiAnnouncementService; import com.ruoyi.user.service.ApiNoticeService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -24,7 +21,6 @@ import java.util.ArrayList; import java.util.Comparator; import java.util.List; -@Api(tags = "公告") @RestController @RequestMapping("/api/announcement") public class ApiAnnouncementController extends BaseController { @@ -35,8 +31,6 @@ public class ApiAnnouncementController extends BaseController { @Autowired private ApiNoticeService apiNoticeService; - @ApiOperation("获取公告列表(含用户通知,统一结构返回)") - @ApiResponse(code = 200, message = "read【阅读状态(0未读 1已读)】") @PostMapping("/list") public AjaxResult list(@RequestBody(required = false) GetAnnouncementListRequest request) { Integer tabType = request == null ? null : request.getTabType(); @@ -74,7 +68,6 @@ public class ApiAnnouncementController extends BaseController { return AjaxResult.success(result); } - @ApiOperation("获取系统公告列表(免登录)") @PostMapping("/systemList") public TableDataInfo systemList() { startPage(); @@ -82,7 +75,6 @@ public class ApiAnnouncementController extends BaseController { return getDataTable(announcementList); } - @ApiOperation("获取公告/通知详情(统一结构返回)") @PostMapping("/detail") public AjaxResult getAnnouncementByAnnouncementId(@RequestBody GetAnnouncementRequest request) { Long userId = SecurityUtils.getUserId(); @@ -153,7 +145,6 @@ public class ApiAnnouncementController extends BaseController { return 0; } - @ApiOperation("获取未读公告数量(含未读通知)") @PostMapping("/countUnreadAnnouncement") public AjaxResult countUnreadAnnouncement() { Long userId = SecurityUtils.getUserId(); @@ -162,8 +153,7 @@ public class ApiAnnouncementController extends BaseController { return AjaxResult.success(announcementUnread + noticeUnread); } - @ApiOperation("批量设置指定分类的通知为已读(游戏/系统)") - @PostMapping("/markAsReadByCategory") + // [停用-前端零调用] @PostMapping("/markAsReadByCategory") public AjaxResult markNoticesAsReadByCategory(@RequestBody MarkAsReadRequest request) { int result = apiNoticeService.markNoticesAsReadByCategory(request.getCategoryPrefix()); return AjaxResult.success(result); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiBlendErcashController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiBlendErcashController.java index 9b15a7a..788b92f 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiBlendErcashController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiBlendErcashController.java @@ -10,8 +10,6 @@ import com.ruoyi.domain.dto.ChildDetailByBoss; import com.ruoyi.domain.vo.ChildDetailByBossVO; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.user.service.ApiShoppingService; -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.PostMapping; @@ -19,7 +17,6 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -@Api(tags = "用户收支记录") @RestController @RequestMapping("/api/blendErcash") public class ApiBlendErcashController extends BaseController { @@ -37,8 +34,7 @@ public class ApiBlendErcashController extends BaseController { private TtUserService userService; // 下级消费明细 - @ApiOperation("粉丝消费明细") - @PostMapping("/childDetailByBoss") + // [停用-前端零调用] @PostMapping("/childDetailByBoss") // @Anonymous public R> childDetailByBoss(@RequestBody @Validated ChildDetailByBoss param){ diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiBonusController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiBonusController.java index d0f441c..7b6480f 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiBonusController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiBonusController.java @@ -10,11 +10,8 @@ import com.ruoyi.user.contract.api.request.ReceiveRedPacketRequest; import com.ruoyi.user.contract.api.response.QueryVipRewardResponse; import com.ruoyi.user.contract.api.response.VipFlowRewardResponse; import com.ruoyi.user.service.ApiBonusService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; -@Api(tags = "福利补贴") @RestController @RequestMapping("/api/bonus") public class ApiBonusController extends BaseController { @@ -31,7 +28,6 @@ public class ApiBonusController extends BaseController { this.userService = userService; } - @ApiOperation("领取红包") @UpdateUserCache @PostMapping("/receiveRedPacket") public R receiveRedPacket(@RequestBody ReceiveRedPacketRequest request) { @@ -43,8 +39,7 @@ public class ApiBonusController extends BaseController { return apiBonusService.receiveRedPacket(request.getCode(), ttUser); } - @ApiOperation("查询vip流水奖励") - @PostMapping("/vipreward/list") + // [停用-前端零调用] @PostMapping("/vipreward/list") public R vipRewardList() { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); if ("1".equals(websiteMaintenance)) { @@ -54,8 +49,7 @@ public class ApiBonusController extends BaseController { return apiBonusService.vipRewardList(ttUser); } - @ApiOperation("VIP流水奖励(精简版)") - @PostMapping("/vipFlowReward") + // [停用-前端零调用] @PostMapping("/vipFlowReward") public R vipFlowReward() { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); if ("1".equals(websiteMaintenance)) { diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiCaptchaController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiCaptchaController.java index 2d31e19..2a5658d 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiCaptchaController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiCaptchaController.java @@ -10,8 +10,6 @@ import com.ruoyi.common.core.domain.AjaxResult; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.domain.other.ApiCaptchaCheckRequest; -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; @@ -26,7 +24,6 @@ import java.util.concurrent.TimeUnit; * POST /api/captcha/gen - 生成验证码 * POST /api/captcha/check - 校验验证码,通过后在 Redis 写入标记供后续短信/密码登录使用 */ -@Api(tags = "滑块验证码") @Slf4j @RestController @RequestMapping("/api") @@ -43,7 +40,6 @@ public class ApiCaptchaController extends BaseController { /** * 生成滑块验证码 */ - @ApiOperation("生成滑块验证码") @Anonymous @PostMapping("/captcha/gen") public AjaxResult genCaptcha() { @@ -73,7 +69,6 @@ public class ApiCaptchaController extends BaseController { * 校验滑块验证码 * 通过后在 Redis 写入 captcha:verified:{phoneNumber} = captchaId,有效期 5 分钟 */ - @ApiOperation("校验滑块验证码") @Anonymous @PostMapping("/captcha/check") public AjaxResult checkCaptcha(@RequestBody ApiCaptchaCheckRequest request) { diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiLoginController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiLoginController.java index 0f782d3..a2d99d1 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiLoginController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiLoginController.java @@ -23,8 +23,6 @@ import com.ruoyi.framework.web.service.TokenService; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.user.service.ApiLoginService; import com.ruoyi.user.service.ApiUserService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.tuple.Pair; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.validation.annotation.Validated; @@ -44,7 +42,6 @@ import java.util.Objects; /** * 登录Controller */ -@Api(tags = "客户端用户认证") @RestController @RequestMapping("/api") public class ApiLoginController extends BaseController { @@ -71,7 +68,6 @@ public class ApiLoginController extends BaseController { @Autowired private TtPromotionUpdateMapper ttPromotionUpdateMapper; - @ApiOperation("客户端用户登录") @Anonymous @PostMapping("/login") public AjaxResult login(@RequestBody @Validated ApiLoginBody loginBody) { @@ -100,9 +96,8 @@ public class ApiLoginController extends BaseController { return ajax; } - @ApiOperation("客户端用户验证码登录") @Anonymous - @PostMapping("/verificationCodeLogin") + // [停用-前端零调用] @PostMapping("/verificationCodeLogin") public AjaxResult verificationCodeLogin(@RequestBody @Validated ApiVerificationCodeLoginBody apiVerificationCodeLoginBody) { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); if ("1".equals(websiteMaintenance)) { @@ -111,7 +106,6 @@ public class ApiLoginController extends BaseController { return loginService.verificationCodeLogin(apiVerificationCodeLoginBody.getPhoneNumber(), apiVerificationCodeLoginBody.getCode()); } - @ApiOperation("客户端用户验证码登录或注册") @Anonymous @PostMapping("/verificationCodeLoginOrRegister") public AjaxResult verificationCodeLoginOrRegister(@RequestBody @Validated ApiVerificationCodeLoginOrRegisterBody req) { @@ -123,9 +117,8 @@ public class ApiLoginController extends BaseController { } - @ApiOperation("获取用户信息") @NewUserInfo - @PostMapping("/getInfo") + // [停用-前端零调用] @PostMapping("/getInfo") public R getInfo() { UserData userData = getLoginUser().getUserData(); TtUser ttUser = userService.getById(getUserId()); @@ -143,7 +136,6 @@ public class ApiLoginController extends BaseController { return R.ok(userData); } - @ApiOperation("获取用户余额信息") @NewUserInfo @PostMapping("/getAccountAmount") public R getAccountAmount() { @@ -162,7 +154,6 @@ public class ApiLoginController extends BaseController { return dbVipLevel != null && dbVipLevel > 0 ? dbVipLevel - 1 : 0; } - @ApiOperation("获取用户信息") @NewUserInfo @PostMapping("/getParentInfo") public R> getParentInfo() { @@ -202,7 +193,6 @@ public class ApiLoginController extends BaseController { return R.ok(r); } - @ApiOperation("客户端用户退出") @PostMapping("/logout") public R logout() { if (StringUtils.isNotNull(getLoginUser())) { diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiMessageController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiMessageController.java index f2498a2..3bd5ece 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiMessageController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiMessageController.java @@ -11,15 +11,12 @@ import com.ruoyi.user.contract.api.request.BatchOperationMessageRequest; import com.ruoyi.user.contract.api.request.MessageRequest; import com.ruoyi.user.service.ApiMessageService; import com.ruoyi.domain.vo.ApiMessageDataVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.Arrays; import java.util.List; -@Api(tags = "消息") @RestController @RequestMapping("/api/message") public class ApiMessageController extends BaseController { @@ -33,7 +30,7 @@ public class ApiMessageController extends BaseController { @Autowired private TtMessageService ttMessageService; - @PostMapping("/list") + // [停用-前端零调用] @PostMapping("/list") public PageDataInfo list() { startPage(); QueryWrapper queryWrapper = new QueryWrapper<>(); @@ -42,23 +39,20 @@ public class ApiMessageController extends BaseController { return getPageData(list); } - @ApiOperation("获取消息列表") - @PostMapping("/getMessageList") + // [停用-前端零调用] @PostMapping("/getMessageList") public PageDataInfo getMessageList(@RequestBody(required = false) MessageRequest request){ startPage(); List list = apiMessageService.getMessageList(getUserId(), request.getId()); return getPageData(list); } - @ApiOperation("已读Message") - @PostMapping("/view") + // [停用-前端零调用] @PostMapping("/view") public R view(@RequestBody MessageRequest request){ ApiMessageDataVO data = apiMessageService.view(getUserId(), request.getId()); return R.ok(data); } - @ApiOperation("分批操作Message") - @PostMapping("/batchOperation") + // [停用-前端零调用] @PostMapping("/batchOperation") public R batchOperation(@RequestBody BatchOperationMessageRequest request){ String msg = apiMessageService.batchOperation(getUserId(), Arrays.asList(request.getIds()), request.getStatus()); return StringUtils.isEmpty(msg) ? R.ok(true, "操作成功!") : R.fail(false, msg); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiNoticeController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiNoticeController.java index a6be0bc..739de67 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiNoticeController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiNoticeController.java @@ -10,16 +10,12 @@ import com.ruoyi.domain.other.TtNotice; import com.ruoyi.user.contract.api.request.GetNoticeRequest; import com.ruoyi.user.model.vo.ApiNoticeVO; import com.ruoyi.user.service.ApiNoticeService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Objects; -@Api(tags = "通知") @RestController @RequestMapping("/api/notice") public class ApiNoticeController extends BaseController { @@ -27,9 +23,7 @@ public class ApiNoticeController extends BaseController { @Autowired private ApiNoticeService apiNoticeService; - @ApiOperation("获取通知列表") - @ApiResponse(code = 200, message = "read【阅读状态(0未读 1已读)】") - @PostMapping("/list") + // [停用-前端零调用] @PostMapping("/list") public TableDataInfo list() { startPage(); Long userId = SecurityUtils.getUserId(); @@ -37,8 +31,7 @@ public class ApiNoticeController extends BaseController { return getDataTable(apiNoticeVOList); } - @ApiOperation("获取通知详情") - @PostMapping("/detail") + // [停用-前端零调用] @PostMapping("/detail") public AjaxResult getNoticeByNoticeId(@RequestBody GetNoticeRequest request) { Long userId = SecurityUtils.getUserId(); ApiNoticeVO apiNoticeVO = apiNoticeService.getNoticeByNoticeId(userId, request.getNoticeId()); @@ -48,8 +41,7 @@ public class ApiNoticeController extends BaseController { return AjaxResult.success(apiNoticeVO); } - @ApiOperation("获取未读通知数量") - @PostMapping("/countUnreadNotice") + // [停用-前端零调用] @PostMapping("/countUnreadNotice") public AjaxResult countUnreadNotice() { Long userId = SecurityUtils.getUserId(); return AjaxResult.success(apiNoticeService.countUnreadNotice(userId)); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiOrderController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiOrderController.java index 49163c6..cbc6479 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiOrderController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiOrderController.java @@ -5,13 +5,10 @@ import com.ruoyi.admin.service.TtOrderService; import com.ruoyi.common.core.controller.BaseController; import com.ruoyi.common.core.domain.R; import com.ruoyi.user.contract.api.request.RechargeDetailsRequest; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -@Api(tags = "订单信息") @RestController @RequestMapping("/api/order") public class ApiOrderController extends BaseController { @@ -19,8 +16,7 @@ public class ApiOrderController extends BaseController { @Autowired private TtOrderService ttOrderService; - @ApiOperation("充值明细") - @PostMapping("/list") + // [停用-前端零调用] @PostMapping("/list") public R list(@RequestBody RechargeDetailsRequest request) { Long userId = getUserId(); if (ObjectUtil.isNull(userId)) return R.fail("登录过期。"); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiPromotionRecordController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiPromotionRecordController.java index 174cbbf..399a25c 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiPromotionRecordController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiPromotionRecordController.java @@ -19,7 +19,7 @@ public class ApiPromotionRecordController extends BaseController { @Autowired private ApiPromotionRecordService apiPromotionRecordService; - @PostMapping("/getPromotionRecord") + // [停用-前端零调用] @PostMapping("/getPromotionRecord") public PageDataInfo getPromotionRecord(){ startPage(); Long userId = getUserId(); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiRegisterController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiRegisterController.java index f24e9a1..1a5aaca 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiRegisterController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiRegisterController.java @@ -7,15 +7,12 @@ import com.ruoyi.common.utils.StringUtils; import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.user.service.ApiRegisterService; import com.ruoyi.domain.other.ApiRegisterBody; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -@Api(tags = "用户注册") @RestController @RequestMapping("/api/register") public class ApiRegisterController extends BaseController { @@ -29,7 +26,6 @@ public class ApiRegisterController extends BaseController { this.apiRegisterService = apiRegisterService; } - @ApiOperation("用户注册") @PostMapping @Anonymous public R register(@RequestBody @Validated ApiRegisterBody registerBody) { diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiShareController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiShareController.java index ccf4225..02b0176 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiShareController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiShareController.java @@ -6,8 +6,6 @@ import com.ruoyi.domain.dto.share.ShareRecordQueryDTO; import com.ruoyi.domain.vo.share.ShareCenterVO; import com.ruoyi.domain.vo.share.ShareRecordPageVO; import com.ruoyi.user.service.ApiShareService; -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; @@ -17,7 +15,6 @@ import org.springframework.web.bind.annotation.RestController; /** * 客户端 - 主页"游戏分享"模块 */ -@Api(tags = "客户端-游戏分享") @RestController @RequestMapping("/api/share") public class ApiShareController extends BaseController { @@ -28,7 +25,6 @@ public class ApiShareController extends BaseController { /** * 分享中心顶部数据:邀请码、今日收益、累计收益、邀请人数、分享链接 */ - @ApiOperation("获取分享中心顶部数据") @PostMapping("/center") public R getCenter() { return R.ok(apiShareService.getShareCenter(getUserId())); @@ -39,7 +35,6 @@ public class ApiShareController extends BaseController { * * @param query 查询参数:subUserId(可选)、pageNum、pageSize(均由前端传入) */ - @ApiOperation("查询分享记录列表") @PostMapping("/records") public R records(@RequestBody ShareRecordQueryDTO query) { return R.ok(apiShareService.listShareRecords(getUserId(), query.getSubUserId(), query.getPageNum(), query.getPageSize())); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiShoppingController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiShoppingController.java index 9f1df9f..98e2c96 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiShoppingController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiShoppingController.java @@ -22,8 +22,6 @@ import com.ruoyi.user.contract.api.request.IntegratingConversionRequest; import com.ruoyi.user.service.ApiShoppingService; import com.ruoyi.domain.other.ApiShoppingBody; import com.ruoyi.domain.vo.ApiShoppingDataVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -35,7 +33,6 @@ import java.util.Map; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -@Api(tags = "商城") @Slf4j @RestController @RequestMapping("/api/shopping") @@ -56,7 +53,6 @@ public class ApiShoppingController extends BaseController { this.userService = userService; } - @ApiOperation("获取不同类型的商品") @PostMapping("/getShoppingQuery") public R>> getShoppingQuery(@RequestBody GetShoppingValueRequest request){ List dictCache = null; @@ -74,7 +70,6 @@ public class ApiShoppingController extends BaseController { return R.ok(list); } - @ApiOperation("商品列表") @PostMapping("/list") public PageDataInfo list(@RequestBody @Validated ApiShoppingBody shoppingBody) { // 仅显示可兑换:必须拿到当前登录用户的积分才能过滤。 @@ -97,7 +92,6 @@ public class ApiShoppingController extends BaseController { return getPageData(list); } - @ApiOperation("商品兑换") @PostMapping("/exchange") @RateLimiter(time = 60, count = 30, limitType = LimitType.IP) @UpdateUserCache @@ -128,10 +122,9 @@ public class ApiShoppingController extends BaseController { } } - @ApiOperation("积分转换") @UpdateUserCache @RateLimiter(time = 60, count = 30, limitType = LimitType.IP) - @PostMapping("/integratingConversion") + // [停用-前端零调用] @PostMapping("/integratingConversion") public R integratingConversion(@RequestBody IntegratingConversionRequest request) { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); if ("1".equals(websiteMaintenance)) return R.fail("网站维护中......"); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiTaskCenterController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiTaskCenterController.java index 6edde30..1a74b1e 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiTaskCenterController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiTaskCenterController.java @@ -7,9 +7,6 @@ import com.ruoyi.user.contract.api.request.GetRewardRequest; import com.ruoyi.user.model.TtTaskCenterUser; import com.ruoyi.user.model.vo.ApiTaskCenterVO; import com.ruoyi.user.service.ApiTaskCenterService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; @@ -17,7 +14,6 @@ import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Objects; -@Api(tags = "任务中心") @RestController @RequestMapping("/api/taskCenter") public class ApiTaskCenterController extends BaseController { @@ -25,11 +21,8 @@ public class ApiTaskCenterController extends BaseController { @Autowired private ApiTaskCenterService apiTaskCenterService; - @ApiOperation("查询任务列表") - @ApiResponse(code = 200, message = "status【领取条件(0不满足 1满足)】" + - "
claimed【是否已领取(1已领取)】") @PreAuthorize("isAuthenticated()") - @PostMapping("/list") + // [停用-前端零调用] @PostMapping("/list") public TableDataInfo list() { startPage(); Long userId = getUserId(); @@ -37,9 +30,8 @@ public class ApiTaskCenterController extends BaseController { return getDataTable(list); } - @ApiOperation("领取任务奖励") @PreAuthorize("isAuthenticated()") - @PostMapping("/getReward") + // [停用-前端零调用] @PostMapping("/getReward") public AjaxResult getReward(@RequestBody GetRewardRequest request) { Long userId = getUserId(); // 判断是否具备领取条件 diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserAmountRecordsController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserAmountRecordsController.java index c4c000b..e07cab5 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserAmountRecordsController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserAmountRecordsController.java @@ -41,9 +41,6 @@ import com.ruoyi.user.contract.api.response.PersonalRecordResponse; import com.ruoyi.user.mapper.ApiUserBlendErcashMapper; import com.ruoyi.user.model.vo.ApiConsumeRankingVO; import com.ruoyi.user.model.vo.ApiRechargeRankingVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiModelProperty; -import io.swagger.annotations.ApiOperation; import jakarta.validation.constraints.Min; import jakarta.validation.constraints.NotEmpty; import lombok.AllArgsConstructor; @@ -77,7 +74,6 @@ import java.util.stream.Collectors; import static com.ruoyi.domain.common.constant.TtAccountRecordSource.RECEIVE_RED_PACKET; import static com.ruoyi.domain.common.constant.TtAccountRecordSource.RECHARGE; -@Api(tags = "用户充值记录") @RestController @RequestMapping("/api/userAmountRecords") @Slf4j @@ -121,9 +117,8 @@ public class ApiUserAmountRecordsController extends BaseController { * 充值网流水排行榜 * 1今天 2昨天 3近一周 */ - @ApiOperation("充值网流水排行榜") @Anonymous - @PostMapping("/amountRank") + // [停用-前端零调用] @PostMapping("/amountRank") public Page amountRank(@RequestBody AmountRankRequest request) { Calendar c = Calendar.getInstance(); @@ -153,8 +148,7 @@ public class ApiUserAmountRecordsController extends BaseController { /** * 充值网推广奖励明细 */ - @ApiOperation("充值网推广奖励明细") - @PostMapping("/pWelfareRecords") + // [停用-前端零调用] @PostMapping("/pWelfareRecords") public R pWelfareRecords(@RequestBody PWelfareRecordsRequest request) { if (request.getPage() < 1) { return R.fail("page > 0"); @@ -169,8 +163,7 @@ public class ApiUserAmountRecordsController extends BaseController { /** * 综合排行榜 */ - @ApiOperation("流水排行榜") - @PostMapping("/blendErcashRank") + // [停用-前端零调用] @PostMapping("/blendErcashRank") public R> blendErcashRank(@RequestBody RankParam param) { param.setPage(1); param.setSize(10); @@ -220,8 +213,7 @@ public class ApiUserAmountRecordsController extends BaseController { return R.ok(rank); } - @ApiOperation("获取个人综合收支明细") - @PostMapping("/userAccountDetail") + // [停用-前端零调用] @PostMapping("/userAccountDetail") public R> userAccountDetail(@RequestBody @Validated AmountRecordsDetailCondition param) { param.setUserId(null); @@ -230,8 +222,7 @@ public class ApiUserAmountRecordsController extends BaseController { return R.ok(list); } - @ApiOperation("获取个人记录") - @PostMapping("/personalRecord") + // [停用-前端零调用] @PostMapping("/personalRecord") public R queryPersonalRecord(@RequestBody @Validated PersonalRecordRequest request) { final int TYPE_TODAY = 1; final int TYPE_YESTERDAY = 2; @@ -324,8 +315,7 @@ public class ApiUserAmountRecordsController extends BaseController { return R.ok(response); } - @ApiOperation("获取个人提货记录") - @PostMapping("/deliveryRecords") + // [停用-前端零调用] @PostMapping("/deliveryRecords") public R deliveryRecords(@RequestBody @Validated DeliveryRecordsConfition param) { param.setUIdList(null); int userId = getUserId().intValue(); @@ -337,9 +327,8 @@ public class ApiUserAmountRecordsController extends BaseController { return R.ok(list); } - @ApiOperation("获取团队用户列表") // @Anonymous - @PostMapping("/teamUsers") + // [停用-前端零调用] @PostMapping("/teamUsers") public R> teamUsers(@RequestBody @Validated TeamUsersParam param) { param.setBossIds(null); param.setEmployeeIds(null); @@ -486,8 +475,7 @@ public class ApiUserAmountRecordsController extends BaseController { // return userService.teamUsers(param); } - @ApiOperation("获取个人充值明细") - @PostMapping("/rechargeRecords") + // [停用-前端零调用] @PostMapping("/rechargeRecords") public R rechargeRecords(@RequestBody @Validated OrderCondition param) { Long userId = getUserId(); if (ObjectUtil.isNull(userId)) return R.fail(401, "登录过期,请重新登录。"); @@ -498,10 +486,12 @@ public class ApiUserAmountRecordsController extends BaseController { return R.ok(list); } + // 2026-09-23 停用:原来同时标了 @Anonymous + @PostMapping,任何人(连 token 都不用)就能拉全站今日/昨日消费排行榜 + //(getRechargeRankingByDate 聚合消费数据,含昵称/金额/排名)。两个 Cocos 客户端与后台/推广前端均未调用; + // 后台的充值排行奖励配置走 /admin/rechargeRankingReward/*(另一个 Controller),不受影响。 @Deprecated - @ApiOperation("获取消费排行榜") - @Anonymous - @PostMapping("/rechargeRanking") + // @Anonymous + // @PostMapping("/rechargeRanking") public AjaxResult getRechargeRanking() { // 创建日期格式化对象,指定日期格式 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); @@ -525,8 +515,7 @@ public class ApiUserAmountRecordsController extends BaseController { return AjaxResult.success(map); } - @ApiOperation("消费排行榜奖励说明") - @PostMapping("/rechargeRankingRewardsIntroduction") + // [停用-前端零调用] @PostMapping("/rechargeRankingRewardsIntroduction") public AjaxResult rechargeRankingRewardsIntroduction() { List ttRechargeRankingRewards = ttRechargeRankingRewardService.selectTtRechargeRankingRewardList(null); ttRechargeRankingRewards.forEach(r -> r.setRewardStr(MoneyUtil.toStr(r.getReward()))); @@ -538,7 +527,6 @@ public class ApiUserAmountRecordsController extends BaseController { * 统计口径:tt_user_blend_ercash 中 type=0(OUTPUT)且 source 命中 *排除机器人 (user_type='03'),按总消费降序,返回前 10。 */ - @ApiOperation("今日消费流水排行榜 Top10") @Anonymous @PostMapping("/consumeRanking/top10") public R> consumeRankingTop10() { @@ -574,7 +562,6 @@ public class ApiUserAmountRecordsController extends BaseController { /** * 今日消费流水排行榜中【当前登录用户】的个人排名。 */ - @ApiOperation("今日消费流水个人排名") @PostMapping("/consumeRanking/myRank") public R consumeRankingMyRank() { Long userId = getUserId(); @@ -646,7 +633,6 @@ public class ApiUserAmountRecordsController extends BaseController { @Data public static class RankParam { - @ApiModelProperty("类型(1今天 2昨天 3近七天)") @NotEmpty(message = "时间区间不能为空") private Integer type; @Min(value = 1, message = "最小1") diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserController.java index 220ed66..b11ff51 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserController.java @@ -43,8 +43,6 @@ import com.ruoyi.thirdparty.baidu.service.BaiduService; import com.ruoyi.user.contract.api.request.*; import com.ruoyi.user.contract.api.response.PeakMomentResponse; import com.ruoyi.user.service.ApiUserService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import jakarta.servlet.http.HttpServletRequest; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -68,7 +66,6 @@ import java.util.stream.Collectors; // 解析 fightBisectPrize 配置(饰品ID数组 JSON) import cn.hutool.json.JSONUtil; -@Api(tags = "用户管理") @RestController @RequestMapping("/api/user") @Slf4j @@ -109,7 +106,6 @@ public class ApiUserController extends BaseController { @Autowired private BaiduService baiduService; - @ApiOperation("头像上传") @UpdateUserCache @PostMapping(value = "/profilePictureUpload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) public R profilePictureUpload(@RequestPart("file") MultipartFile file) { @@ -125,7 +121,6 @@ public class ApiUserController extends BaseController { return StringUtils.isEmpty(msg) ? R.ok("头像上传成功!") : R.fail(msg); } - @ApiOperation("更新个人信息") @UpdateUserCache @PostMapping("/updateUserDetails") public R updateUserDetails(@RequestBody ApiUpdateUserDetailsBody updateUserDetailsBody) { @@ -140,9 +135,8 @@ public class ApiUserController extends BaseController { return StringUtils.isEmpty(msg) ? R.ok("个人信息更新成功!") : R.fail(msg); } - @ApiOperation("更新收货地址") @UpdateUserCache - @PostMapping("/updateDeliveryAddress") + // [停用-前端零调用] @PostMapping("/updateDeliveryAddress") public R updateDeliveryAddress(@RequestBody ApiUpdateUserDetailsBody updateUserDetailsBody) { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); if ("1".equals(websiteMaintenance)) { @@ -155,9 +149,8 @@ public class ApiUserController extends BaseController { return StringUtils.isEmpty(msg) ? R.ok("收货地址更新成功!") : R.fail(msg); } - @ApiOperation("绑定推广人") @UpdateUserCache - @PostMapping("/bindBoss") + // [停用-前端零调用] @PostMapping("/bindBoss") public R bindBoss(@RequestBody ApiUpdateUserDetailsBody updateUserDetailsBody) { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); if ("1".equals(websiteMaintenance)) { @@ -168,7 +161,6 @@ public class ApiUserController extends BaseController { return apiUserService.bindBoss(ttUser, updateUserDetailsBody); } - @ApiOperation("绑定邀请码") @UpdateUserCache @PostMapping("/bindInvitationCode") public R bindInvitationCode(@RequestBody @Validated BindInvitationCodeRequest request) { @@ -180,9 +172,8 @@ public class ApiUserController extends BaseController { return apiUserService.bindInvitationCode(ttUser, request.getInvitationCode()); } - @ApiOperation("修改密码") // @UpdateUserCache - @PostMapping("/changePW") + // [停用-前端零调用] @PostMapping("/changePW") public R changePW(@RequestBody @Validated ApiUpdateUserDetailsBody updateUserDetailsBody, HttpServletRequest request) { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); if ("1".equals(websiteMaintenance)) { @@ -195,8 +186,7 @@ public class ApiUserController extends BaseController { return apiUserService.changePW(ttUser, updateUserDetailsBody, token); } - @ApiOperation("忘记密码") - @PostMapping("/forgetPassword") + // [停用-前端零调用] @PostMapping("/forgetPassword") public R forgetPassword(@RequestBody ApiForgetPasswordBody apiForgetPasswordBody) { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); if ("1".equals(websiteMaintenance)) { @@ -206,7 +196,6 @@ public class ApiUserController extends BaseController { return StringUtils.isEmpty(msg) ? R.ok(true, "密码修改成功!") : R.fail(msg); } - @ApiOperation("设置安全密码(提货校验用,与登录密码独立)") @PostMapping("/setSafePassword") public R setSafePassword(@RequestBody ApiSafePasswordBody apiSafePasswordBody) { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); @@ -217,7 +206,6 @@ public class ApiUserController extends BaseController { return apiUserService.setSafePassword(ttUser, apiSafePasswordBody); } - @ApiOperation("实名认证") @RepeatSubmit(interval = 60000, message = "操作过于频繁,请60秒后重试!") @UpdateUserCache @PostMapping("/realNameAuthentication") @@ -233,7 +221,6 @@ public class ApiUserController extends BaseController { return msg.startsWith("alipays") ? R.ok(msg) : R.fail(msg); } - @ApiOperation("认证成功") @UpdateUserCache @PostMapping("/authenticationOk") public R authenticationOk() { @@ -242,17 +229,15 @@ public class ApiUserController extends BaseController { return StringUtils.isEmpty(msg) ? R.ok(true, "认证成功!") : R.fail(false, msg); } - @ApiOperation("获取下级人数") // @UpdateUserCache - @PostMapping("/rechargeCount") + // [停用-前端零调用] @PostMapping("/rechargeCount") public R rechargeCount() { TtUser ttUser = userService.getById(getUserId()); return R.ok((int) userService.count(new QueryWrapper().eq("parent_id", ttUser.getUserId()))); } - @ApiOperation("获取下级提取数") @UpdateUserCache - @PostMapping("/getExtracts") + // [停用-前端零调用] @PostMapping("/getExtracts") public R getExtracts() { TtUser ttUser = userService.getById(getUserId()); List ttUsers = userService.list(new QueryWrapper().eq("parent_id", ttUser.getUserId())); @@ -270,9 +255,8 @@ public class ApiUserController extends BaseController { return R.ok(bigDecimal); } - @ApiOperation("获取下级充值总金额") // @UpdateUserCache - @PostMapping("/getOrdersAmounts") + // [停用-前端零调用] @PostMapping("/getOrdersAmounts") public R getOrdersAmounts() { TtUser ttUser = userService.getById(getUserId()); List ttUsers = userService.list(new QueryWrapper().eq("parent_id", ttUser.getUserId())); @@ -291,8 +275,7 @@ public class ApiUserController extends BaseController { return R.ok(bigDecimal); } - @ApiOperation("获取下级流水详情") - @PostMapping("/getLsjlList") + // [停用-前端零调用] @PostMapping("/getLsjlList") public PageDataInfo getLsjlList(@RequestBody TtUserAmountRecordsBody ttUserAmountRecordsBody) { startPage(); TtUser ttUser = userService.getById(getUserId()); @@ -319,8 +302,7 @@ public class ApiUserController extends BaseController { return getPageData(list); } - @ApiOperation("获取出货记录") - @PostMapping("/getDeliveryRecordList") + // [停用-前端零调用] @PostMapping("/getDeliveryRecordList") public PageDataInfo getDeliveryRecordList(@RequestBody TtDeliveryRecordBody deliveryRecordBody) { startPage(); TtUser ttUser = userService.getById(getUserId()); @@ -332,8 +314,7 @@ public class ApiUserController extends BaseController { /** * 每日出货排行榜1今天 2昨天 3近一周 */ - @ApiOperation("每日出货排行榜") - @PostMapping("/propRankOfDa") + // [停用-前端零调用] @PostMapping("/propRankOfDa") public R propRankOfDay(@RequestBody PropRankOfDayRequest request) { Calendar c = Calendar.getInstance(); @@ -362,15 +343,13 @@ public class ApiUserController extends BaseController { return R.ok(list); } - @ApiOperation("VIP等级说明") @PostMapping("/vipLevelIntroduction") public AjaxResult vipLevelIntroduction() { List list = vipLevelService.list(); return success(list); } - @ApiOperation("VIP等级转赠/提货次数配置") - @PostMapping("/vipLevelCounts") + // [停用-前端零调用] @PostMapping("/vipLevelCounts") public AjaxResult vipLevelCounts() { List list = vipLevelService.list(); List result = list.stream() @@ -388,74 +367,69 @@ public class ApiUserController extends BaseController { return success(result); } - @ApiOperation("VIP等级进度") @PostMapping("/userVipLeverRate") public AjaxResult userVipLeverRate() { TtUserVipLevelVo vipLevel = userService.userVipLeverRate(getUserId().intValue()); return success(vipLevel); } - @ApiOperation("VIP等级经验进度(1元=1经验)") @PostMapping("/vipProgress") public AjaxResult vipProgress() { TtUserVipProgressVo vo = userService.userVipProgress(getUserId().intValue()); return success(vo); } - @ApiOperation("用户信息包含下级信息") - @PostMapping("/userInfo") + // [停用-前端零调用] @PostMapping("/userInfo") public AjaxResult userInfo() { TtUserInfoVo userInfo = userService.userInfo(getUserId().intValue()); return success(userInfo); } - @ApiOperation("用户信息包含下级用户信息") - @PostMapping("/userChildInfo") + // [停用-前端零调用] @PostMapping("/userChildInfo") public AjaxResult userChildInfo() { List userInfo = userService.userChildInfos(getUserId().intValue()); return success(userInfo); } - @ApiOperation("用户领取VIP等级(支持一次传多个等级一起领取)") @UpdateUserCache @PostMapping("/userVipLevelRechargeThreshold") public AjaxResult userVipLevelRechargeThreshold(@RequestBody UserVipLevelRequest request) { return userService.userVipLevelRechargeThreshold(getUserId().intValue(), request.getVipLevels()); } - @ApiOperation("用户已经领取VIP等级") @PostMapping("/userHasVipLevelRechargeThreshold") public AjaxResult userHasVipLevelRechargeThreshold() { return userService.userHasVipLevelRechargeThreshold(getUserId().intValue()); } - @ApiOperation("检查是否有可领取的VIP等级红包") @PostMapping("/checkVipLevelClaimable") public AjaxResult checkVipLevelClaimable() { return userService.checkVipLevelClaimable(getUserId().intValue()); } - @ApiOperation("用户领取充值门槛达标奖励") - @UpdateUserCache - @PostMapping("/userRechargeBonus") - public AjaxResult userRechargeBonus(@RequestBody UserRechargeBonusRequest request) { - return userService.userRechargeBonus(getUserId().intValue(), request.getRecharge(), request.getBonus()); - } + // 2026-09-23 停用:金额 bonus 与门槛 recharge 都由请求体传入,bonus 被直接拼进 + // `account_amount = account_amount + bonus`,可凭空加余额;判重键 remark 只到 recharge 粒度且限当日, + // 同一天换 recharge 值即可重复领,recharge 传 0 还能绕过"今日充值未达门槛"。 + // 前端(两个 Cocos 客户端 + ruoyi-ui + promo-ui2)均无调用,故整体注释。 + // 恢复前必须先改造:金额改为服务端按档位算(tt_vip_level.addedBonus 或 tt_bonus 的 awardSection 随机), + // 忽略请求体的 bonus/recharge,判重键换成服务端值(levelId / bonusId)。 + // @UpdateUserCache + // @PostMapping("/userRechargeBonus") + // public AjaxResult userRechargeBonus(@RequestBody UserRechargeBonusRequest request) { + // return userService.userRechargeBonus(getUserId().intValue(), request.getRecharge(), request.getBonus()); + // } - @ApiOperation("用户已领取充值门槛达标奖励") - @PostMapping("/userHasRechargeBonus") + // [停用-前端零调用] @PostMapping("/userHasRechargeBonus") public AjaxResult userHasRechargeBonus() { return userService.userHasRechargeBonus(getUserId().intValue()); } - @ApiOperation("用户积分兑换金币") @UpdateUserCache - @PostMapping("/userCreditsToAmount") + // [停用-前端零调用] @PostMapping("/userCreditsToAmount") public AjaxResult userCreditsToAmount(@RequestBody UserCreditsToAmountRequest request) { return userService.userCreditsToAmount(getUserId().intValue(), request.getCredits()); } - @ApiOperation("回调百度接口") @UpdateUserCache @PostMapping("/baidu") public AjaxResult baidu(@RequestBody BaiduCallbackRequest request) { @@ -463,7 +437,6 @@ public class ApiUserController extends BaseController { return AjaxResult.success(); } - @ApiOperation("巅峰时刻 - 高品质TOP10") @PostMapping("/peakMoment") public R peakMoment() { // 获取当前登录用户信息 diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserCreditsRecordsController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserCreditsRecordsController.java index 8dafdfd..0ee6ce2 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserCreditsRecordsController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserCreditsRecordsController.java @@ -8,15 +8,12 @@ import com.ruoyi.domain.entity.recorde.TtUserCreditsRecords; import com.ruoyi.domain.vo.TtUserCreditsRecordsRankVO; import com.ruoyi.user.contract.api.request.CreditsRankRequest; import com.ruoyi.user.contract.api.request.PWelfareCreditsRecordsRequest; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.*; import java.sql.Timestamp; import java.util.Calendar; -@Api(tags = "用户信用记录") @RestController @RequestMapping("/api/userCreditsRecords") @Slf4j @@ -31,8 +28,7 @@ public class ApiUserCreditsRecordsController extends BaseController { /** * 积分排行榜 1今天 2昨天 3近一周 */ - @ApiOperation("流水网流水排行榜") - @PostMapping("/creditsRank") + // [停用-前端零调用] @PostMapping("/creditsRank") @Anonymous public Page creditsRank(@RequestBody CreditsRankRequest request) { @@ -63,8 +59,7 @@ public class ApiUserCreditsRecordsController extends BaseController { /** * 流水网推广奖励明细 1、今天;2、昨天;3、近七天 */ - @ApiOperation("流水网推广奖励明细") - @PostMapping("/pWelfareRecords") + // [停用-前端零调用] @PostMapping("/pWelfareRecords") public Page pWelfareRecords(@RequestBody PWelfareCreditsRecordsRequest request) { Long userId = getUserId(); return ttUserCreditsRecordsService.pWelfareRecords(Integer.valueOf(String.valueOf(userId)),request.getType(),request.getPage(),request.getSize()); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserPackSackController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserPackSackController.java index 2209e9a..4508cd3 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserPackSackController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserPackSackController.java @@ -37,8 +37,6 @@ import com.ruoyi.user.model.TransferParam; import com.ruoyi.user.model.vo.ApiTransferRecordVO; import com.ruoyi.user.service.ApiUserPackSackService; import com.ruoyi.user.service.ApiUserService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.ObjectUtils; @@ -51,7 +49,6 @@ import java.util.Objects; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; -@Api(tags = "玩家背包") @RestController @RequestMapping("/api/userPackSack") public class ApiUserPackSackController extends BaseController { @@ -90,7 +87,6 @@ public class ApiUserPackSackController extends BaseController { this.userService = userService; } - @ApiOperation("用户申请提货") @PostMapping("/delivery") public R delivery(@RequestBody @Validated DeliveryParam param) { String websiteMaintenance = sysConfigService.selectConfigByKey("websiteMaintenance"); @@ -124,7 +120,6 @@ public class ApiUserPackSackController extends BaseController { return userPackSackService.delivery(param, ttUser); } - @ApiOperation("分解饰品") @UpdateUserCache @PostMapping("/decompose") public R decompose(@RequestBody @Validated DecomposeParam param) { @@ -140,9 +135,8 @@ public class ApiUserPackSackController extends BaseController { return R.ok("成功分解" + result + "件饰品"); } - @ApiOperation("饰品分解记录") //@UpdateUserCache - @PostMapping("/decomposeLog") + // [停用-前端零调用] @PostMapping("/decomposeLog") public PageDataInfo decomposeLog(@RequestBody @Validated DecomposeLogCondition param) { param.setUserId(null); param.setUserId(getUserId().intValue()); @@ -151,7 +145,6 @@ public class ApiUserPackSackController extends BaseController { return getPageData(ttBoxRecords); } - @ApiOperation("玩家背包") @PostMapping("/getPackSack") public R getPackSack(@RequestBody @Validated PackSackCondition condition) { Long userId = getUserId(); @@ -187,8 +180,7 @@ public class ApiUserPackSackController extends BaseController { return R.ok(result); } - @ApiOperation("玩家背包统计数据") - @PostMapping("/packSackGlobalData") + // [停用-前端零调用] @PostMapping("/packSackGlobalData") public R packSackGlobalData(@RequestBody(required = false) PackSackCondition condition) { Long userId = getUserId(); if (ObjectUtil.isNull(userId)) { @@ -198,7 +190,6 @@ public class ApiUserPackSackController extends BaseController { return userPackSackService.packSackGlobalData(userId.intValue(), packType); } - @ApiOperation("饰品转赠") @PostMapping({"/transfer"}) public R transfer(@RequestBody @Validated TransferParam param) { TtUser ttUser = this.userService.getById(this.getUserId()); @@ -264,8 +255,7 @@ public class ApiUserPackSackController extends BaseController { return null; } - @ApiOperation("饰品转赠记录") - @PostMapping({"/transfer/records"}) + // [停用-前端零调用] @PostMapping({"/transfer/records"}) public R queryTransferRecords(@RequestBody QueryTransferRecordRequest param) { if (param.getPageNum() == null) { param.setPageNum(1); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserProfileRecordsController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserProfileRecordsController.java index ce39957..37dfed1 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserProfileRecordsController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserProfileRecordsController.java @@ -6,8 +6,6 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.domain.dto.userRecord.ProfileRecordsRequest; import com.ruoyi.domain.vo.userRecord.ProfileRecordsResponse; import com.ruoyi.user.service.ApiProfileRecordsService; -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.validation.annotation.Validated; @@ -21,7 +19,6 @@ import org.springframework.web.bind.annotation.RestController; * 一个接口承载 4 个 Tab:余额/充值/提货/赠送。 * 前端 4 个 Tab 共用同一份请求/响应类型,切换 tab 只改 tab 与 subFilter。 */ -@Api(tags = "个人资产详情-我的记录") @Slf4j @RestController @RequestMapping("/api/user/profile") @@ -30,7 +27,6 @@ public class ApiUserProfileRecordsController extends BaseController { @Autowired private ApiProfileRecordsService profileRecordsService; - @ApiOperation("我的记录 聚合查询(余额/充值/提货/赠送)") @PostMapping("/records") public R queryRecords(@RequestBody @Validated ProfileRecordsRequest request) { Long userId = getUserId(); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserSubAccountController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserSubAccountController.java index 521cbeb..cf10a35 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserSubAccountController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiUserSubAccountController.java @@ -7,8 +7,6 @@ import com.ruoyi.common.core.domain.R; import com.ruoyi.domain.entity.TtUserSubAccount; import com.ruoyi.domain.entity.sys.TtUser; import com.ruoyi.user.service.ApiUserSubAccountService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import lombok.Data; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -21,7 +19,6 @@ import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; -@Api(tags = "副号管理") @RestController @RequestMapping("/api/subAccount") public class ApiUserSubAccountController extends BaseController { @@ -48,21 +45,18 @@ public class ApiUserSubAccountController extends BaseController { private Date createTime; } - @ApiOperation("绑定副号") @PostMapping("/bind") public R bindSubAccount(@RequestBody BindSubAccountParam param) { Long mainUid = getUserId(); return subAccountService.bindSubAccount(mainUid, param.getSubUid()); } - @ApiOperation("解绑副号") @PostMapping("/unbind") public R unbindSubAccount(@RequestBody BindSubAccountParam param) { Long mainUid = getUserId(); return subAccountService.unbindSubAccount(mainUid, param.getSubUid()); } - @ApiOperation("查询已绑定的副号列表") @PostMapping("/list") public R> getSubAccounts() { Long mainUid = getUserId(); diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiWebsiteSetupController.java b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiWebsiteSetupController.java index 2fb1201..fa87bb7 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiWebsiteSetupController.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/controller/ApiWebsiteSetupController.java @@ -7,8 +7,6 @@ import com.ruoyi.system.service.ISysConfigService; import com.ruoyi.user.contract.api.request.ContentByTypeRequest; import com.ruoyi.user.service.ApiWebsiteSetupService; import com.ruoyi.domain.vo.ApiContentDataVO; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; import jakarta.servlet.http.HttpServletResponse; import org.springframework.web.bind.annotation.*; @@ -16,7 +14,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -@Api(tags = "网站设置") @RestController @RequestMapping("/api/websiteSetup") public class ApiWebsiteSetupController { @@ -30,7 +27,6 @@ public class ApiWebsiteSetupController { this.sysConfigService = sysConfigService; } - @ApiOperation("获取横幅列表") @Anonymous @PostMapping("/getBannerList") public R> getBannerList() { @@ -38,8 +34,7 @@ public class ApiWebsiteSetupController { return R.ok(list); } - @ApiOperation("获取类型内容") - @PostMapping("/getContentByType") + // [停用-前端零调用] @PostMapping("/getContentByType") @Anonymous public R getContentByType(@RequestBody ContentByTypeRequest request) { ApiContentDataVO data = apiWebsiteSetupService.getContentByType(request.getAlias()); @@ -51,7 +46,6 @@ public class ApiWebsiteSetupController { *

供前端启动时/轮询调用:status=1 正常访问;status=0 全站维护中(前端展示全站维护页面)。 *

响应禁用浏览器缓存,即使前端存在缓存也能实时拿到最新维护状态。 */ - @ApiOperation("获取全站维护状态") @Anonymous @PostMapping("/siteMaintenance") public R> getSiteMaintenanceStatus(HttpServletResponse response) { diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/service/impl/ApiTaskCenterServiceImpl.java b/skins-service/service-user/src/main/java/com/ruoyi/user/service/impl/ApiTaskCenterServiceImpl.java index 5a1ef9f..ca0676a 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/service/impl/ApiTaskCenterServiceImpl.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/service/impl/ApiTaskCenterServiceImpl.java @@ -16,7 +16,6 @@ import com.ruoyi.user.model.TtTaskCenterUser; import com.ruoyi.user.model.dto.YesterdayExpenditureDTO; import com.ruoyi.user.model.vo.ApiTaskCenterVO; import com.ruoyi.user.service.ApiTaskCenterService; -import io.swagger.models.auth.In; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/skins-service/service-user/src/main/java/com/ruoyi/user/service/impl/ApiUserServiceImpl.java b/skins-service/service-user/src/main/java/com/ruoyi/user/service/impl/ApiUserServiceImpl.java index 0696a16..98f7620 100644 --- a/skins-service/service-user/src/main/java/com/ruoyi/user/service/impl/ApiUserServiceImpl.java +++ b/skins-service/service-user/src/main/java/com/ruoyi/user/service/impl/ApiUserServiceImpl.java @@ -154,7 +154,6 @@ public class ApiUserServiceImpl implements ApiUserService { String email = updateUserDetailsBody.getEmail(); String phoneNumber = updateUserDetailsBody.getPhoneNumber(); String code = updateUserDetailsBody.getCode(); - String password = updateUserDetailsBody.getPassword(); String parentInvitationCode = updateUserDetailsBody.getParentInvitationCode(); String transactionLink = updateUserDetailsBody.getTransactionLink(); @@ -195,14 +194,7 @@ public class ApiUserServiceImpl implements ApiUserService { ttUser.setPhoneNumber(phoneNumber); ttUser.setUserName(phoneNumber); } - if (StringUtils.isNotEmpty(password)) { - if (password.length() < UserConstants.PASSWORD_MIN_LENGTH || password.length() > UserConstants.PASSWORD_MAX_LENGTH) { - return "密码长度必须在5到20个字符之间"; - } - if (SecurityUtils.matchesPassword(password, ttUser.getPassword())) return ""; - ttUser.setPassword(SecurityUtils.encryptPassword(password)); - ttUser.setRemark("明文密码:" + password); - } + // 改密码只走 changePW(需校验旧密码);updateUserDetails 收到的 password 一律忽略 if (StringUtils.isNotEmpty(parentInvitationCode)) { if (ObjectUtil.isNotEmpty(ttUser.getParentId())) return "绑定失败,您已绑定上级邀请码!"; if (parentInvitationCode.trim().length() != 6) return "绑定失败,上级邀请码填写错误";