From c1ec4b541d2de21742d46636401449324ebfcf41 Mon Sep 17 00:00:00 2001 From: licong <2301640570@qq.com> Date: Mon, 23 Jun 2025 19:25:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E9=83=A8=E5=88=86=E6=B8=B8?= =?UTF-8?q?=E6=88=8F=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 101 ------------- .../front/enums/GameErrorCodeConstants.java | 7 + .../vo/GameUserBeehiveRespVO.java | 7 +- .../app/game/AppGameIndexController.java | 58 +++++++- .../app/game/dto/GameUserRespDTO.java | 17 +++ .../app/game/dto/GameUserRespInfo.java | 13 ++ .../controller/app/game/dto/LevelNeedDTO.java | 15 ++ .../app/index/WeiXinMiniController.java | 7 +- .../dataobject/game/GameUserBeehiveDO.java | 3 +- .../dal/mysql/game/GameUserBeehiveMapper.java | 2 +- .../service/game/GameAnnouncementService.java | 2 + .../service/game/GameBeehiveService.java | 16 +- .../service/game/GameBeehiveServiceImpl.java | 140 ++++++++++++++++-- .../service/game/GameHarvestService.java | 1 + .../service/game/GameHarvestServiceImpl.java | 25 +++- .../service/game/GameTaskServiceImpl.java | 2 +- .../service/game/GameUserBeehiveService.java | 2 + .../game/GameUserBeehiveServiceImpl.java | 5 + .../front/service/game/GameUserService.java | 6 + .../service/game/GameUserServiceImpl.java | 58 ++++++++ .../service/index/WeiXinMiniService.java | 4 +- .../service/index/WeiXinMiniServiceImpl.java | 16 +- .../yudao/bee/front/util/ListUtils.java | 34 +++++ .../pay/service/wallet/PayWalletService.java | 2 +- .../service/wallet/PayWalletServiceImpl.java | 5 +- .../mysql/oauth2/OAuth2AccessTokenMapper.java | 14 +- .../service/oauth2/OAuth2TokenService.java | 1 + .../oauth2/OAuth2TokenServiceImpl.java | 10 ++ .../src/main/resources/application-local.yaml | 6 +- .../src/main/resources/application.yaml | 6 +- 30 files changed, 431 insertions(+), 154 deletions(-) create mode 100644 yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/GameUserRespDTO.java create mode 100644 yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/GameUserRespInfo.java create mode 100644 yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/LevelNeedDTO.java create mode 100644 yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/util/ListUtils.java diff --git a/README.md b/README.md index 62252f9ac3..957c4a7116 100644 --- a/README.md +++ b/README.md @@ -4,43 +4,14 @@

-**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!** - -**「我喜欢写代码,乐此不疲」** -**「我喜欢做开源,以此为乐」** - -我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。 - -如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 ## 🐶 新手必读 -* 演示地址【Vue3 + element-plus】: -* 演示地址【Vue3 + vben(ant-design-vue)】: -* 演示地址【Vue2 + element-ui】: * 启动文档: * 视频教程: -## 🐰 版本说明 - -| 版本 | JDK 8 + Spring Boot 2.7 | JDK 17/21 + Spring Boot 3.2 | -|---------------------------------------------------------------------|---------------------------------------------------------------------------|---------------------------------------------------------------------------------------| -| 【完整版】[ruoyi-vue-pro](https://gitee.com/zhijiantianya/ruoyi-vue-pro) | [`master`](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master-jdk17/) 分支 | -| 【精简版】[yudao-boot-mini](https://gitee.com/yudaocode/yudao-boot-mini) | [`master`](https://gitee.com/yudaocode/yudao-boot-mini/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/yudaocode/yudao-boot-mini/tree/master-jdk17/) 分支 | - -* 【完整版】:包括系统功能、基础设施、会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP 等功能 -* 【精简版】:只包括系统功能、基础设施功能,不包括会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP 等功能 - -可参考 [《迁移文档》](https://doc.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】 - ## 🐯 平台简介 -**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。 - -> 有任何问题,或者想要的功能,可以在 _Issues_ 中提给艿艿。 -> -> 😜 给项目点点 Star 吧,这对我们真的很重要! - ![架构图](/.image/common/ruoyi-vue-pro-architecture.png) * Java 后端:`master` 分支为 JDK 8 + Spring Boot 2.7,`master-jdk17` 分支为 JDK 17/21 + Spring Boot 3.2 @@ -59,31 +30,6 @@ * 集成阿里云、腾讯云等短信渠道,集成 MinIO、阿里云、腾讯云、七牛云等云存储服务 * 集成报表设计器、大屏设计器,通过拖拽即可生成酷炫的报表与大屏 -## 🐳 项目关系 - -![架构演进](/.image/common/yudao-roadmap.png) - -三个项目的功能对比,可见社区共同整理的 [国产开源项目对比](https://www.yuque.com/xiatian-bsgny/lm0ec1/wqf8mn) 表格。 - -### 后端项目 - -| 项目 | Star | 简介 | -|-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------| -| [ruoyi-vue-pro](https://gitee.com/zhijiantianya/ruoyi-vue-pro) | [![Gitee star](https://gitee.com/zhijiantianya/ruoyi-vue-pro/badge/star.svg?theme=white)](https://gitee.com/zhijiantianya/ruoyi-vue-pro) [![GitHub stars](https://img.shields.io/github/stars/YunaiV/ruoyi-vue-pro.svg?style=social&label=Stars)](https://github.com/YunaiV/ruoyi-vue-pro) | 基于 Spring Boot 多模块架构 | -| [yudao-cloud](https://gitee.com/zhijiantianya/yudao-cloud) | [![Gitee star](https://gitee.com/zhijiantianya/yudao-cloud/badge/star.svg?theme=white)](https://gitee.com/zhijiantianya/yudao-cloud) [![GitHub stars](https://img.shields.io/github/stars/YunaiV/yudao-cloud.svg?style=social&label=Stars)](https://github.com/YunaiV/yudao-cloud) | 基于 Spring Cloud 微服务架构 | -| [Spring-Boot-Labs](https://gitee.com/yudaocode/SpringBoot-Labs) | [![Gitee star](https://gitee.com/yudaocode/SpringBoot-Labs/badge/star.svg?theme=white)](https://gitee.com/zhijiantianya/yudao-cloud) [![GitHub stars](https://img.shields.io/github/stars/yudaocode/SpringBoot-Labs.svg?style=social&label=Stars)](https://github.com/yudaocode/SpringBoot-Labs) | 系统学习 Spring Boot & Cloud 专栏 | - -### 前端项目 - -| 项目 | Star | 简介 | -|----------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------| -| [yudao-ui-admin-vue3](https://gitee.com/yudaocode/yudao-ui-admin-vue3) | [![Gitee star](https://gitee.com/yudaocode/yudao-ui-admin-vue3/badge/star.svg?theme=white)](https://gitee.com/yudaocode/yudao-ui-admin-vue3) [![GitHub stars](https://img.shields.io/github/stars/yudaocode/yudao-ui-admin-vue3.svg?style=social&label=Stars)](https://github.com/yudaocode/yudao-ui-admin-vue3) | 基于 Vue3 + element-plus 实现的管理后台 | -| [yudao-ui-admin-vben](https://gitee.com/yudaocode/yudao-ui-admin-vben) | [![Gitee star](https://gitee.com/yudaocode/yudao-ui-admin-vben/badge/star.svg?theme=white)](https://gitee.com/yudaocode/yudao-ui-admin-vben) [![GitHub stars](https://img.shields.io/github/stars/yudaocode/yudao-ui-admin-vben.svg?style=social&label=Stars)](https://github.com/yudaocode/yudao-ui-admin-vben) | 基于 Vue3 + vben(ant-design-vue) 实现的管理后台 | -| [yudao-mall-uniapp](https://gitee.com/yudaocode/yudao-mall-uniapp) | [![Gitee star](https://gitee.com/yudaocode/yudao-mall-uniapp/badge/star.svg?theme=white)](https://gitee.com/yudaocode/yudao-mall-uniapp) [![GitHub stars](https://img.shields.io/github/stars/yudaocode/yudao-mall-uniapp.svg?style=social&label=Stars)](https://github.com/yudaocode/yudao-mall-uniapp) | 基于 uni-app 实现的商城小程序 | -| [yudao-ui-admin-vue2](https://gitee.com/yudaocode/yudao-ui-admin-vue2) | [![Gitee star](https://gitee.com/yudaocode/yudao-ui-admin-vue2/badge/star.svg?theme=white)](https://gitee.com/yudaocode/yudao-ui-admin-vue2) [![GitHub stars](https://img.shields.io/github/stars/yudaocode/yudao-ui-admin-vue2.svg?style=social&label=Stars)](https://github.com/yudaocode/yudao-ui-admin-vue2) | 基于 Vue2 + element-ui 实现的管理后台 | -| [yudao-ui-admin-uniapp](https://gitee.com/yudaocode/yudao-ui-admin-uniapp) | [![Gitee star](https://gitee.com/yudaocode/yudao-ui-admin-uniapp/badge/star.svg?theme=white)](https://gitee.com/yudaocode/yudao-ui-admin-uniapp) [![GitHub stars](https://img.shields.io/github/stars/yudaocode/yudao-ui-admin-uniapp.svg?style=social&label=Stars)](https://github.com/yudaocode/yudao-ui-admin-uniapp) | 基于 Vue2 + element-ui 实现的管理后台 | -| [yudao-ui-go-view](https://gitee.com/yudaocode/yudao-ui-go-view) | [![Gitee star](https://gitee.com/yudaocode/yudao-ui-go-view/badge/star.svg?theme=white)](https://gitee.com/yudaocode/yudao-ui-go-view) [![GitHub stars](https://img.shields.io/github/stars/yudaocode/yudao-ui-go-view.svg?style=social&label=Stars)](https://github.com/yudaocode/yudao-ui-go-view) | 基于 Vue3 + naive-ui 实现的大屏报表 | - ## 😎 开源协议 **为什么推荐使用本项目?** @@ -96,30 +42,6 @@ ③ 代码整洁、架构整洁,遵循《阿里巴巴 Java 开发手册》规范,代码注释详细,113770 行 Java 代码,42462 行代码注释。 -## 🤝 项目外包 - -我们也是接外包滴,如果你有项目想要外包,可以微信联系【**Aix9975**】。 - -团队包含专业的项目经理、架构师、前端工程师、后端工程师、测试工程师、运维工程师,可以提供全流程的外包服务。 - -项目可以是商城、SCRM 系统、OA 系统、物流系统、ERP 系统、CMS 系统、HIS 系统、支付系统、IM 聊天、微信公众号、微信小程序等等。 - -## 🐼 内置功能 - -系统内置多种多种业务功能,可以用于快速你的业务系统: - -![功能分层](/.image/common/ruoyi-vue-pro-biz.png) - -* 通用模块(必选):系统功能、基础设施 -* 通用模块(可选):工作流程、支付系统、数据报表、会员中心 -* 业务系统(按需):ERP 系统、CRM 系统、商城系统、微信公众号、AI 大模型 - -> 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。 -> -> * 额外新增的功能,我们使用 🚀 标记。 -> * 重新实现的功能,我们使用 ⭐️ 标记。 - -🙂 所有功能,都通过 **单元测试** 保证高质量。 ### 系统功能 @@ -245,10 +167,6 @@ | 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 | | 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 | -### 商城系统 - -演示地址: - ![功能图](/.image/common/mall-feature.png) ![功能图](/.image/common/mall-preview.png) @@ -263,25 +181,6 @@ | 🚀 | 会员分组 | 对会员进行分组,用于用户画像、内容推送等运营手段 | | 🚀 | 积分签到 | 回馈给签到、消费等行为的积分,会员可订单抵现、积分兑换等途径消耗 | -### ERP 系统 - -演示地址: - -![功能图](/.image/common/erp-feature.png) - -### CRM 系统 - -演示地址: - -![功能图](/.image/common/crm-feature.png) - -### AI 大模型 - -演示地址: - -![功能图](/.image/common/ai-feature.png) - -![功能图](/.image/common/ai-preview.gif) ## 🐨 技术栈 diff --git a/yudao-bee-front/yudao-bee-front-api/src/main/java/cn/iocoder/yudao/bee/front/enums/GameErrorCodeConstants.java b/yudao-bee-front/yudao-bee-front-api/src/main/java/cn/iocoder/yudao/bee/front/enums/GameErrorCodeConstants.java index ef575182f3..03d4638291 100644 --- a/yudao-bee-front/yudao-bee-front-api/src/main/java/cn/iocoder/yudao/bee/front/enums/GameErrorCodeConstants.java +++ b/yudao-bee-front/yudao-bee-front-api/src/main/java/cn/iocoder/yudao/bee/front/enums/GameErrorCodeConstants.java @@ -7,6 +7,13 @@ public interface GameErrorCodeConstants { ErrorCode GAME_USER_NOT_EXISTS = new ErrorCode(2_001_110_002, "养蜂游戏用户不存在"); ErrorCode INSUFFICIENT_NECTAR = new ErrorCode(2_001_110_102, "花蜜不足"); + ErrorCode STAGE_CAP = new ErrorCode(2_001_110_202, "蜂箱已达到当前阶段上限,请选择升级或收获"); + ErrorCode LEVEL_UP_EXCEPTION = new ErrorCode(2_001_110_702, "条件设置异常"); + ErrorCode PROGRESS_NOT_ENOUGH = new ErrorCode(2_001_110_302, "未达到收获进度"); + ErrorCode UPGRADE_CONDITIONS_ARE_NOT_MET = new ErrorCode(2_001_110_402, "不满足升级条件"); + ErrorCode LEVEL_FULL = new ErrorCode(2_001_110_502, "蜂箱已完成,请收获"); + ErrorCode LEVEL_NOT_ENOUGH = new ErrorCode(2_001_110_602, "蜂箱等级不足,无法收获"); + ErrorCode GAME_STRATEGY_NOT_EXISTS = new ErrorCode(2_001_110_003, "养蜂游戏丰收攻略不存在"); diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/admin/game/gameuserbeehive/vo/GameUserBeehiveRespVO.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/admin/game/gameuserbeehive/vo/GameUserBeehiveRespVO.java index 07f26ec7fe..926e738d5b 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/admin/game/gameuserbeehive/vo/GameUserBeehiveRespVO.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/admin/game/gameuserbeehive/vo/GameUserBeehiveRespVO.java @@ -2,7 +2,6 @@ package cn.iocoder.yudao.bee.front.controller.admin.game.gameuserbeehive.vo; import io.swagger.v3.oas.annotations.media.Schema; import lombok.*; -import java.util.*; import com.alibaba.excel.annotation.*; @Schema(description = "管理后台 - 养蜂游戏用户蜂箱中间 Response VO") @@ -26,8 +25,8 @@ public class GameUserBeehiveRespVO { @ExcelProperty("进度") private Integer progress; - @Schema(description = "阶段") - @ExcelProperty("阶段") - private Integer process; + @Schema(description = "等级") + @ExcelProperty("等级") + private Integer level; } \ No newline at end of file diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/AppGameIndexController.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/AppGameIndexController.java index 5d7a531195..67a0069368 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/AppGameIndexController.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/AppGameIndexController.java @@ -2,14 +2,18 @@ package cn.iocoder.yudao.bee.front.controller.app.game; import cn.iocoder.yudao.bee.front.controller.admin.game.gameactivity.vo.GameActivityRespVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gameannouncement.vo.GameAnnouncementRespVO; +import cn.iocoder.yudao.bee.front.controller.admin.game.gamebeehive.vo.GameBeehiveRespVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gameexchangerecords.vo.GameExchangeRecordsRespVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gameharvest.vo.GameHarvestRespVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gamestrategy.vo.GameStrategyRespVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gametask.vo.GameTaskRespVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gameuser.vo.GameUserRespVO; import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameBeehiveInfoDTO; +import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameUserRespDTO; +import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameUserRespInfo; import cn.iocoder.yudao.bee.front.service.beeuser.BeeUserService; import cn.iocoder.yudao.bee.front.service.game.*; +import cn.iocoder.yudao.bee.front.controller.app.game.dto.LevelNeedDTO; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import io.swagger.v3.oas.annotations.Operation; @@ -19,6 +23,7 @@ import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import javax.annotation.security.PermitAll; +import javax.servlet.http.HttpServletRequest; import java.util.List; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -91,9 +96,30 @@ public class AppGameIndexController { return success(BeanUtils.toBean(gameAnnouncementService.getGameAnnouncement(id),GameAnnouncementRespVO.class)); } - @GetMapping("/get/my/beehive") + @GetMapping("/get/userList") + @Operation(summary = "获取其他用户列表") + @PermitAll + public CommonResult> getUserList() { + return success(gameUserService.getUserList()); + } + + @GetMapping("/visit/user") + @Operation(summary = "访问其他用户") + @PermitAll + public CommonResult getUserList(@RequestParam("userId") Integer userId) { + return success(gameUserService.getGameUserRespInfo(userId)); + } + + @GetMapping("/get/beehive") @Operation(summary = "获取蜂箱列表") @PermitAll + public CommonResult> getBeehiveList() { + return success(BeanUtils.toBean(gameBeehiveService.getBeehiveList(),GameBeehiveRespVO.class)); + } + + @GetMapping("/get/my/beehive") + @Operation(summary = "获取我的蜂箱列表") + @PermitAll public CommonResult> getMyBeehive() { return success(gameBeehiveService.getGameAnnouncementList()); } @@ -102,8 +128,34 @@ public class AppGameIndexController { @Operation(summary = "领取蜜蜂") @Parameter(name = "id", description = "蜂箱编号", required = true, example = "1024") @PermitAll - public CommonResult receiveBee(@RequestParam("id")Integer id){ - gameBeehiveService.receiveBee(id); + public CommonResult receiveBee(HttpServletRequest request, @RequestParam("id")Integer id){ + gameBeehiveService.receiveBee(request,id); + return success(true); + } + + @GetMapping("/get/escalationConditions") + @Operation(summary = "查看升级条件") + @Parameter(name = "id", description = "蜂箱编号", required = true, example = "1024") + @PermitAll + public CommonResult getEscalationConditions(@RequestParam("id") Integer id) { + return success(gameBeehiveService.getNeed(id)); + } + + @PostMapping("/upgrade/beehive") + @Operation(summary = "升级蜂箱") + @Parameter(name = "id", description = "蜂箱编号", required = true, example = "1024") + @PermitAll + public CommonResult upgrade(@RequestParam("id")Integer id){ + gameBeehiveService.levelUp(id); + return success(true); + } + + @PostMapping("/harvest/beehive") + @Operation(summary = "收获蜂箱") + @Parameter(name = "id", description = "蜂箱编号", required = true, example = "1024") + @PermitAll + public CommonResult harvestBeehive(@RequestParam("id")Integer id){ + gameBeehiveService.HarvestBeehive(id); return success(true); } diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/GameUserRespDTO.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/GameUserRespDTO.java new file mode 100644 index 0000000000..66c56ccb5a --- /dev/null +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/GameUserRespDTO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.bee.front.controller.app.game.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +public class GameUserRespDTO { + + @Schema(description = "用户编号") + private Integer userId; + + @Schema(description = "用户名", example = "张三") + private String name; + + @Schema(description = "收获数量,单位:罐",example = "24") + private Long harvestNumber; +} diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/GameUserRespInfo.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/GameUserRespInfo.java new file mode 100644 index 0000000000..f6b5366040 --- /dev/null +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/GameUserRespInfo.java @@ -0,0 +1,13 @@ +package cn.iocoder.yudao.bee.front.controller.app.game.dto; + +import cn.iocoder.yudao.bee.front.controller.admin.game.gameuserbeehive.vo.GameUserBeehiveRespVO; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "养蜂游戏-其他用户信息 RespVO") +public class GameUserRespInfo extends GameUserRespDTO { + + private GameUserBeehiveRespVO gameBeehive; + +} diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/LevelNeedDTO.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/LevelNeedDTO.java new file mode 100644 index 0000000000..29c04247ed --- /dev/null +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/game/dto/LevelNeedDTO.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.bee.front.controller.app.game.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Data +@Schema(description = "蜂箱升级条件 DTO") +public class LevelNeedDTO { + + @Schema(description = "当前等级") + private Integer level; + + @Schema(description = "升级所需M币") + private Integer levelNeed; +} diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/index/WeiXinMiniController.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/index/WeiXinMiniController.java index b30c3002c9..cfcf8da98e 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/index/WeiXinMiniController.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/controller/app/index/WeiXinMiniController.java @@ -8,14 +8,17 @@ import cn.iocoder.yudao.bee.front.service.banner.BannerService; import cn.iocoder.yudao.bee.front.service.index.WeiXinMiniService; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import com.alipay.api.kms.aliyun.http.HttpRequest; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import javax.annotation.security.PermitAll; +import javax.servlet.http.HttpServletRequest; import java.util.List; @RestController @@ -55,7 +58,7 @@ public class WeiXinMiniController { @GetMapping("/get/MyBeehiveInfo") @Operation(summary = "获取首页我的蜂箱列表") @PermitAll - public CommonResult> getMyBeehiveInfo() { - return CommonResult.success(weiXinMiniService.getMyBeehiveAdoptList()); + public CommonResult> getMyBeehiveInfo(@RequestParam("id") Integer id) { + return CommonResult.success(weiXinMiniService.getMyBeehiveAdoptList(id)); } } diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/dal/dataobject/game/GameUserBeehiveDO.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/dal/dataobject/game/GameUserBeehiveDO.java index 46b8c6282b..85ab005536 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/dal/dataobject/game/GameUserBeehiveDO.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/dal/dataobject/game/GameUserBeehiveDO.java @@ -1,7 +1,6 @@ package cn.iocoder.yudao.bee.front.dal.dataobject.game; import lombok.*; -import java.util.*; import com.baomidou.mybatisplus.annotation.*; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; @@ -40,6 +39,6 @@ public class GameUserBeehiveDO extends BaseDO { /** * 阶段 */ - private Integer process; + private Integer level; } \ No newline at end of file diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/dal/mysql/game/GameUserBeehiveMapper.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/dal/mysql/game/GameUserBeehiveMapper.java index 87c90f069e..716ee4f40e 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/dal/mysql/game/GameUserBeehiveMapper.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/dal/mysql/game/GameUserBeehiveMapper.java @@ -20,7 +20,7 @@ public interface GameUserBeehiveMapper extends BaseMapperX { .eqIfPresent(GameUserBeehiveDO::getBeehiveId, reqVO.getBeehiveId()) .eqIfPresent(GameUserBeehiveDO::getUserId, reqVO.getUserId()) .eqIfPresent(GameUserBeehiveDO::getProgress, reqVO.getProgress()) - .eqIfPresent(GameUserBeehiveDO::getProcess, reqVO.getProcess()) + .eqIfPresent(GameUserBeehiveDO::getLevel, reqVO.getProcess()) .orderByDesc(GameUserBeehiveDO::getId)); } diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameAnnouncementService.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameAnnouncementService.java index fdabd5fa38..2f02714dbc 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameAnnouncementService.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameAnnouncementService.java @@ -4,6 +4,7 @@ import java.util.*; import cn.iocoder.yudao.bee.front.controller.admin.game.gameannouncement.vo.GameAnnouncementPageReqVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gameannouncement.vo.GameAnnouncementSaveReqVO; +import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameUserRespDTO; import cn.iocoder.yudao.bee.front.dal.dataobject.game.GameAnnouncementDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; @@ -56,4 +57,5 @@ public interface GameAnnouncementService { PageResult getGameAnnouncementPage(GameAnnouncementPageReqVO pageReqVO); List getGameAnnouncementList(); + } \ No newline at end of file diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameBeehiveService.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameBeehiveService.java index d47d954c58..be2c773c3e 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameBeehiveService.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameBeehiveService.java @@ -6,9 +6,11 @@ import cn.iocoder.yudao.bee.front.controller.admin.game.gamebeehive.vo.GameBeehi import cn.iocoder.yudao.bee.front.controller.admin.game.gamebeehive.vo.GameBeehiveSaveReqVO; import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameBeehiveInfoDTO; import cn.iocoder.yudao.bee.front.dal.dataobject.game.GameBeehiveDO; +import cn.iocoder.yudao.bee.front.controller.app.game.dto.LevelNeedDTO; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.transaction.annotation.Transactional; +import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; /** @@ -58,7 +60,17 @@ public interface GameBeehiveService { List getGameAnnouncementList(); - void receiveBee(Integer id); + void receiveBee(HttpServletRequest request, Integer id); void fedBee(Integer id); + + LevelNeedDTO getNeed(Integer id); + + @Transactional(rollbackFor = Exception.class) + void levelUp(Integer id); + + @Transactional(rollbackFor = Exception.class) + void HarvestBeehive(Integer id); + + List getBeehiveList(); } \ No newline at end of file diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameBeehiveServiceImpl.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameBeehiveServiceImpl.java index 5a412499e3..1087c480a4 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameBeehiveServiceImpl.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameBeehiveServiceImpl.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.bee.front.service.game; import cn.iocoder.yudao.bee.front.controller.admin.game.gamebeehive.vo.GameBeehivePageReqVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gamebeehive.vo.GameBeehiveSaveReqVO; +import cn.iocoder.yudao.bee.front.controller.admin.game.gameharvest.vo.GameHarvestSaveReqVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gameuser.vo.GameUserSaveReqVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gameuserbeehive.vo.GameUserBeehiveSaveReqVO; import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameBeehiveInfoDTO; @@ -10,23 +11,31 @@ import cn.iocoder.yudao.bee.front.dal.dataobject.game.GameBeehiveDO; import cn.iocoder.yudao.bee.front.dal.dataobject.game.GameUserBeehiveDO; import cn.iocoder.yudao.bee.front.dal.dataobject.game.GameUserDO; import cn.iocoder.yudao.bee.front.dal.mysql.game.GameBeehiveMapper; +import cn.iocoder.yudao.bee.front.enums.game.GameHarvestStatusEnum; import cn.iocoder.yudao.bee.front.service.beeuser.BeeUserService; +import cn.iocoder.yudao.bee.front.controller.app.game.dto.LevelNeedDTO; import cn.iocoder.yudao.bee.front.util.AssertUtils; +import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; +import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService; +import cn.iocoder.yudao.module.system.api.dict.DictDataApi; +import cn.iocoder.yudao.module.system.api.dict.dto.DictDataRespDTO; +import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; +import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import static cn.iocoder.yudao.bee.front.enums.GameErrorCodeConstants.*; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -51,6 +60,14 @@ public class GameBeehiveServiceImpl implements GameBeehiveService { @Resource private GameUserBeehiveService gameUserBeehiveService; + @Autowired + private OAuth2TokenService oAuth2TokenService; + @Autowired + private GameHarvestService gameHarvestService; + @Autowired + private DictDataApi dictDataApi; + @Autowired + private PayWalletService payWalletService; @Override public Integer createGameBeehive(GameBeehiveSaveReqVO createReqVO) { @@ -98,12 +115,9 @@ public class GameBeehiveServiceImpl implements GameBeehiveService { @Override public List getGameAnnouncementList() { // 获取当前用户 - BeeUserDO userInfo = beeUserService.getLoginUserInfo(); + BeeUserDO userInfo = beeUserService.getLoginUserInfoException(); // 获取游戏用户信息,无则创建 GameUserDO gameUser = gameUserService.getGameUserByUserId(userInfo.getId()); - if (gameUser == null) { - return Collections.emptyList(); - } // 获取用户蜂箱列表 List userBeehiveList = gameUserBeehiveService.getGameUserBeehiveList(gameUser.getId()); @@ -138,7 +152,7 @@ public class GameBeehiveServiceImpl implements GameBeehiveService { for (GameUserBeehiveDO userBeehive : userBeehiveList) { GameBeehiveInfoDTO dto = beehiveMap.get(userBeehive.getBeehiveId()); if (dto != null) { - dto.setProcess(userBeehive.getProcess()); + dto.setProcess(userBeehive.getLevel()); dto.setProgress(userBeehive.getProgress()); } } @@ -147,10 +161,12 @@ public class GameBeehiveServiceImpl implements GameBeehiveService { } @Override - public void receiveBee(Integer id) { + public void receiveBee(HttpServletRequest request, Integer id) { Integer userId = beeUserService.getUserIdException(); GameUserDO gameUserDO = gameUserService.getGameUserByUserId(userId); GameUserBeehiveSaveReqVO gameUserBeehiveDO = new GameUserBeehiveSaveReqVO(); + GameBeehiveDO gameBeehiveDO = gameBeehiveMapper.selectById(id); + if (gameBeehiveDO == null) throw exception(GAME_BEEHIVE_NOT_EXISTS); gameUserBeehiveDO.setBeehiveId(id).setUserId(gameUserDO.getId()).setProcess(0).setProgress(0); gameUserBeehiveService.createGameUserBeehive(gameUserBeehiveDO); } @@ -168,11 +184,113 @@ public class GameBeehiveServiceImpl implements GameBeehiveService { else { nectarNumber -= 500; gameUserService.updateGameUser(new GameUserSaveReqVO().setId(gameUser.getId()).setNectarNumber(nectarNumber)); - gameUserBeehiveDO.setProgress(gameUserBeehiveDO.getProgress() + 1); - if (gameUserBeehiveDO.getProgress() == 10) { - gameUserBeehiveDO.setProcess(gameUserBeehiveDO.getProcess() + 1); - } + Integer level = gameUserBeehiveDO.getLevel(); + String levelUpCount = getDictValue("level_up_count", level); + + if (gameUserBeehiveDO.getProgress() == Integer.parseInt(levelUpCount)) throw exception(STAGE_CAP); + else gameUserBeehiveDO.setProgress(gameUserBeehiveDO.getProgress() + 1); + gameUserBeehiveService.updateGameUserBeehive(BeanUtils.toBean(gameUserBeehiveDO, GameUserBeehiveSaveReqVO.class)); } } + + @Override + public LevelNeedDTO getNeed(Integer id) { + Integer userId = beeUserService.getUserIdException(); + GameUserBeehiveDO gameUserBeehiveDO = gameUserBeehiveService.getGameUserBeehiveByBeehiveId(id,userId); + AssertUtils.notNull(gameUserBeehiveDO,GAME_BEEHIVE_NOT_EXISTS); + GameUserDO gameUser = gameUserService.getGameUser(gameUserBeehiveDO.getUserId()); + AssertUtils.notNull(gameUser,GAME_USER_NOT_EXISTS); + Integer level = gameUserBeehiveDO.getLevel(); + LevelNeedDTO dto = new LevelNeedDTO(); + dto.setLevel(level); + String levelNeed = getDictValue("level_need",level); + dto.setLevelNeed(Integer.parseInt(levelNeed)); + return dto; + } + + private String getDictValue(String type, Integer level) { + String levelName = (level +1) + "级"; + DictDataRespDTO dictDataRespDTO = dictDataApi.parseDictData(type, levelName); + if (dictDataRespDTO == null) throw exception(LEVEL_UP_EXCEPTION); + return dictDataRespDTO.getValue(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void levelUp(Integer id) { + Integer userId = beeUserService.getUserIdException(); + GameUserBeehiveDO gameUserBeehiveDO = gameUserBeehiveService.getGameUserBeehiveByBeehiveId(id,userId); + AssertUtils.notNull(gameUserBeehiveDO,GAME_BEEHIVE_NOT_EXISTS); + GameUserDO gameUser = gameUserService.getGameUser(gameUserBeehiveDO.getUserId()); + AssertUtils.notNull(gameUser,GAME_USER_NOT_EXISTS); + Integer level = gameUserBeehiveDO.getLevel(); + PayWalletDO wallet = payWalletService.getWalletByUserId(gameUser.getBeeUserId()); + String levelNeed = getDictValue("level_need",level); + switch (level) { + case 1: + case 2: + case 3: + if (gameUserBeehiveDO.getProgress() == 10 && wallet.getCoin()>Integer.parseInt(levelNeed)) { + gameUserBeehiveDO.setLevel(level + 1); + gameUserBeehiveDO.setProgress(0); + wallet.setCoin(wallet.getCoin()-Integer.parseInt(levelNeed)); + }else throw exception(UPGRADE_CONDITIONS_ARE_NOT_MET); + break; + case 4:throw exception(LEVEL_FULL); + default:throw exception(UPGRADE_CONDITIONS_ARE_NOT_MET); + } + payWalletService.updateCoins(wallet); + gameUserBeehiveService.updateGameUserBeehive(BeanUtils.toBean(gameUserBeehiveDO, GameUserBeehiveSaveReqVO.class)); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public void HarvestBeehive(Integer id) { + Integer userId = beeUserService.getUserIdException(); + GameUserBeehiveDO gameUserBeehiveDO = gameUserBeehiveService.getGameUserBeehiveByBeehiveId(id,userId); + AssertUtils.notNull(gameUserBeehiveDO,GAME_BEEHIVE_NOT_EXISTS); + GameUserDO gameUser = gameUserService.getGameUser(gameUserBeehiveDO.getUserId()); + AssertUtils.notNull(gameUser,GAME_USER_NOT_EXISTS); + Integer level = gameUserBeehiveDO.getLevel(); + String dictKey = level < 4 ? (level + 1) + "级" : level + "级"; + //校验收获阶段是否满足 + DictDataRespDTO dictDataRespDTO = dictDataApi.parseDictData("level_up_count", dictKey); + if (dictDataRespDTO == null) throw exception(LEVEL_UP_EXCEPTION); + String value = dictDataRespDTO.getValue(); + Integer harvestCount = Integer.parseInt(value); + + if (gameUserBeehiveDO.getProgress() < harvestCount) throw exception(PROGRESS_NOT_ENOUGH); + //创建收获 + GameHarvestSaveReqVO gameHarvestDO = new GameHarvestSaveReqVO(); + gameHarvestDO.setBeehiveId(id) + .setUserId(userId) + .setStatus(GameHarvestStatusEnum.REDEEMABLE.getStatus()) + .setExpireTime(LocalDateTime.now().plusDays(7L)); + //设置收获价值 + switch (level) { + case 1: + gameHarvestDO.setName("普通蜂蜜").setPrice(Integer.parseInt(dictDataApi.parseDictData("harvest_level","普通蜂蜜").getValue())); + break; + case 2: + gameHarvestDO.setName("中级蜂蜜").setPrice(Integer.parseInt(dictDataApi.parseDictData("harvest_level","中级蜂蜜").getValue())); + break; + case 3: + gameHarvestDO.setName("高级蜂蜜").setPrice(Integer.parseInt(dictDataApi.parseDictData("harvest_level","高级蜂蜜").getValue())); + break; + case 4: + gameHarvestDO.setName("稀有蜂蜜").setPrice(Integer.parseInt(dictDataApi.parseDictData("harvest_level","稀有蜂蜜").getValue())); + break; + default:throw exception(LEVEL_NOT_ENOUGH); + } + //创建收获信息 + gameHarvestService.createGameHarvest(gameHarvestDO); + //收获后清理蜂箱数据 + gameUserBeehiveService.deleteGameUserBeehive(gameUserBeehiveDO.getUserId()); + } + + @Override + public List getBeehiveList() { + return gameBeehiveMapper.selectList(null); + } } \ No newline at end of file diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameHarvestService.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameHarvestService.java index fecd14c19b..41accfe0fc 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameHarvestService.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameHarvestService.java @@ -59,4 +59,5 @@ public interface GameHarvestService { void redeemCoin(Integer id); + Long getGameHarvestCount(Integer id); } \ No newline at end of file diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameHarvestServiceImpl.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameHarvestServiceImpl.java index 7284c4b548..9987152105 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameHarvestServiceImpl.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameHarvestServiceImpl.java @@ -10,7 +10,6 @@ import cn.iocoder.yudao.bee.front.enums.game.GameHarvestStatusEnum; import cn.iocoder.yudao.bee.front.service.beeuser.BeeUserService; import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO; import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import org.springframework.transaction.annotation.Transactional; @@ -18,7 +17,6 @@ import org.springframework.transaction.annotation.Transactional; import java.time.LocalDateTime; import java.util.*; import cn.iocoder.yudao.framework.common.pojo.PageResult; -import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; @@ -94,9 +92,18 @@ public class GameHarvestServiceImpl implements GameHarvestService { @Override public List getGameHarvestList() { - Integer userIdException = beeUserService.getUserIdException(); - GameUserDO gameUserDO = gameUserService.getGameUserByUserId(userIdException); - return gameHarvestMapper.selectList(GameHarvestDO::getUserId, gameUserDO.getId()); + Integer loginUser = beeUserService.getUserIdException(); + GameUserDO gameUserDO = gameUserService.getGameUserByUserId(loginUser); + if (gameUserDO == null) return Collections.emptyList(); + List gameHarvestDOS = gameHarvestMapper.selectList(GameHarvestDO::getUserId, gameUserDO.getId()); + if (gameHarvestDOS == null || gameHarvestDOS.isEmpty()) return Collections.emptyList(); + gameHarvestDOS.forEach(gameHarvestDO -> { + if (LocalDateTime.now().isAfter(gameHarvestDO.getExpireTime())) { + gameHarvestDO.setStatus(GameHarvestStatusEnum.EXPIRED.getStatus()); + gameHarvestMapper.updateById(gameHarvestDO); + } + }); + return gameHarvestDOS; } @Transactional(rollbackFor = Exception.class) @@ -108,8 +115,14 @@ public class GameHarvestServiceImpl implements GameHarvestService { if (gameHarvest == null || gameHarvest.getExpireTime().isBefore(LocalDateTime.now())) throw exception(GAME_HARVEST_NOT_EXISTS); if (!gameHarvest.getStatus().equals(GameHarvestStatusEnum.REDEEMABLE.getStatus()))throw exception(GAME_HARVEST_NOT_REDEEM); wallet.setCoin(wallet.getCoin()+gameHarvest.getPrice()); - payWalletService.addCoins(new PayWalletDO().setId(wallet.getId()).setCoin(wallet.getCoin())); + payWalletService.updateCoins(new PayWalletDO().setId(wallet.getId()).setCoin(wallet.getCoin())); gameHarvest.setStatus(GameHarvestStatusEnum.REDEEMED.getStatus()); gameHarvestMapper.updateById(gameHarvest); } + + @Override + public Long getGameHarvestCount(Integer id) { + Long count = gameHarvestMapper.selectCount(GameHarvestDO::getUserId, id); + return count == null ? 0 : count; + } } \ No newline at end of file diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameTaskServiceImpl.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameTaskServiceImpl.java index e5354fad84..0b3fb70a55 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameTaskServiceImpl.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameTaskServiceImpl.java @@ -94,7 +94,7 @@ public class GameTaskServiceImpl implements GameTaskService { Integer userId = beeUserService.getUserIdException(); List gameTaskDOS = taskMapper.selectList(null); GameUserDO gameUser = gameUserService.getGameUserByUserId(userId); - + if (gameUser == null) return Collections.emptyList(); //获取今日任务记录 List gameTaskRecordsDOS = gameTaskRecordsMapper .selectList(GameTaskRecordsDO::getGameUserId, gameUser.getId(), GameTaskRecordsDO::getCreateTime, LocalDate.now()); diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserBeehiveService.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserBeehiveService.java index 225bc25882..bcea7952c2 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserBeehiveService.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserBeehiveService.java @@ -57,4 +57,6 @@ public interface GameUserBeehiveService { List getGameUserBeehiveList(Integer id); GameUserBeehiveDO getGameUserBeehiveByBeehiveId(Integer beehiveId, Integer userId); + + GameUserBeehiveDO getGameUserBeehiveByUserId(Integer userId); } \ No newline at end of file diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserBeehiveServiceImpl.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserBeehiveServiceImpl.java index 1f0c8f8777..3468243fef 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserBeehiveServiceImpl.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserBeehiveServiceImpl.java @@ -83,4 +83,9 @@ public class GameUserBeehiveServiceImpl implements GameUserBeehiveService { public GameUserBeehiveDO getGameUserBeehiveByBeehiveId(Integer beehiveId, Integer userId) { return gameUserBeehiveMapper.selectOne(GameUserBeehiveDO::getBeehiveId,beehiveId,GameUserBeehiveDO::getUserId,userId); } + + @Override + public GameUserBeehiveDO getGameUserBeehiveByUserId(Integer userId) { + return gameUserBeehiveMapper.selectOne(GameUserBeehiveDO::getUserId,userId); + } } \ No newline at end of file diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserService.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserService.java index b7fa84c434..50112e9859 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserService.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserService.java @@ -2,11 +2,14 @@ package cn.iocoder.yudao.bee.front.service.game; import cn.iocoder.yudao.bee.front.controller.admin.game.gameuser.vo.GameUserPageReqVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gameuser.vo.GameUserSaveReqVO; +import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameUserRespDTO; +import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameUserRespInfo; import cn.iocoder.yudao.bee.front.dal.dataobject.beeuser.BeeUserDO; import cn.iocoder.yudao.bee.front.dal.dataobject.game.GameUserDO; import cn.iocoder.yudao.framework.common.pojo.PageResult; import javax.validation.Valid; +import java.util.List; /** * 养蜂游戏用户 Service 接口 @@ -57,4 +60,7 @@ public interface GameUserService { GameUserDO getOrCreateGameUserByUserId(BeeUserDO userDO); + List getUserList(); + + GameUserRespInfo getGameUserRespInfo(Integer userId); } \ No newline at end of file diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserServiceImpl.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserServiceImpl.java index ba3d4bdbd9..9ecb0b5f0f 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserServiceImpl.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/game/GameUserServiceImpl.java @@ -2,7 +2,11 @@ package cn.iocoder.yudao.bee.front.service.game; import cn.iocoder.yudao.bee.front.controller.admin.game.gameuser.vo.GameUserPageReqVO; import cn.iocoder.yudao.bee.front.controller.admin.game.gameuser.vo.GameUserSaveReqVO; +import cn.iocoder.yudao.bee.front.controller.admin.game.gameuserbeehive.vo.GameUserBeehiveRespVO; +import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameUserRespDTO; +import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameUserRespInfo; import cn.iocoder.yudao.bee.front.dal.dataobject.beeuser.BeeUserDO; +import cn.iocoder.yudao.bee.front.dal.dataobject.game.GameUserBeehiveDO; import cn.iocoder.yudao.bee.front.dal.dataobject.game.GameUserDO; import cn.iocoder.yudao.bee.front.dal.mysql.game.GameUserMapper; import cn.iocoder.yudao.bee.front.service.beeuser.BeeUserService; @@ -16,7 +20,11 @@ import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + import static cn.iocoder.yudao.bee.front.enums.GameErrorCodeConstants.GAME_USER_NOT_EXISTS; +import static cn.iocoder.yudao.bee.front.util.ListUtils.getRandomElementsOptimized; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; /** @@ -30,6 +38,12 @@ public class GameUserServiceImpl implements GameUserService { @Resource private GameUserMapper gameUserMapper; + @Autowired + private BeeUserService beeUserService; + @Autowired + private GameHarvestService gameHarvestService; + @Autowired + private GameUserBeehiveService gameUserBeehiveService; @Override public Integer createGameUser(GameUserSaveReqVO createReqVO) { @@ -92,4 +106,48 @@ public class GameUserServiceImpl implements GameUserService { public GameUserDO getGameUserByUserId(Integer userId) { return gameUserMapper.selectOne(GameUserDO::getBeeUserId, userId); } + + @Override + public List getUserList() { + // 获取当前用户信息 + Integer userId = beeUserService.getUserIdException(); + GameUserDO currentUser = getGameUserByUserId(userId); + + // 构建当前用户响应对象 + GameUserRespDTO currentUserResp = getGameUserRespDTO(currentUser); + + // 获取所有用户 + List allUsers = gameUserMapper.selectList(null); + + // 移除当前用户(避免重复) + allUsers.removeIf(user -> user.getId().equals(userId)); + + // 随机选择4个用户 + List randomUsers = getRandomElementsOptimized(allUsers, 4); + + // 构建随机用户响应列表 + List randomUserResps = randomUsers.stream() + .map(this::getGameUserRespDTO) + .collect(Collectors.toList()); + + // 将当前用户添加到结果列表的第一个位置 + randomUserResps.add(0, currentUserResp); + + return randomUserResps; + } + + private GameUserRespDTO getGameUserRespDTO(GameUserDO gameUser) { + return new GameUserRespDTO().setUserId(gameUser.getId()) + .setName(gameUser.getName()) + .setHarvestNumber(gameHarvestService.getGameHarvestCount(gameUser.getId())); + } + + @Override + public GameUserRespInfo getGameUserRespInfo(Integer userId){ + GameUserRespDTO gameUserRespDTO = getGameUserRespDTO(gameUserMapper.selectById(userId)); + GameUserRespInfo gameUserRespInfo = BeanUtils.toBean(gameUserRespDTO, GameUserRespInfo.class); + GameUserBeehiveDO gameUserBeehiveDO= gameUserBeehiveService.getGameUserBeehiveByUserId(userId); + gameUserRespInfo.setGameBeehive(BeanUtils.toBean(gameUserBeehiveDO, GameUserBeehiveRespVO.class)); + return gameUserRespInfo; + } } \ No newline at end of file diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/index/WeiXinMiniService.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/index/WeiXinMiniService.java index e9c086fe28..19331c0d81 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/index/WeiXinMiniService.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/index/WeiXinMiniService.java @@ -6,7 +6,9 @@ import cn.iocoder.yudao.bee.front.dal.dataobject.beehive.BeehiveDO; import cn.iocoder.yudao.bee.front.dal.dataobject.beehiveadopt.BeehiveAdoptDO; import cn.iocoder.yudao.bee.front.dal.dataobject.honeyproduct.HoneyProductDO; import cn.iocoder.yudao.bee.front.dal.dataobject.product.ProductDO; +import com.alipay.api.kms.aliyun.http.HttpRequest; +import javax.servlet.http.HttpServletRequest; import java.util.List; public interface WeiXinMiniService { @@ -38,5 +40,5 @@ public interface WeiXinMiniService { */ List getProductList(); - List getMyBeehiveAdoptList(); + List getMyBeehiveAdoptList(Integer userId); } diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/index/WeiXinMiniServiceImpl.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/index/WeiXinMiniServiceImpl.java index b2f9feba53..5eac142303 100644 --- a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/index/WeiXinMiniServiceImpl.java +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/service/index/WeiXinMiniServiceImpl.java @@ -18,10 +18,14 @@ import cn.iocoder.yudao.bee.front.service.product.ProductService; import cn.iocoder.yudao.bee.front.util.AssertUtils; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum; +import cn.iocoder.yudao.module.system.service.oauth2.OAuth2TokenService; +import com.alipay.api.kms.aliyun.http.HttpRequest; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.*; import java.util.stream.Collectors; @@ -33,13 +37,13 @@ import static cn.iocoder.yudao.bee.front.enums.ErrorCodeConstants.HONEY_PRODUCT_ public class WeiXinMiniServiceImpl implements WeiXinMiniService { @Resource - BeeFarmService beeFarmService; + private BeeFarmService beeFarmService; @Resource - BeeUserService beeUserService; + private BeeUserService beeUserService; @Resource - BeehiveService beehiveService; + private BeehiveService beehiveService; @Resource private ProductService productService; @@ -50,6 +54,9 @@ public class WeiXinMiniServiceImpl implements WeiXinMiniService { @Resource HoneyProductService honeyProductService; + @Resource + private OAuth2TokenService oAuth2TokenService; + @Override public BeeFarmTotalRespVO getInfo() { BeeFarmTotalRespVO result = new BeeFarmTotalRespVO(); @@ -94,8 +101,7 @@ public class WeiXinMiniServiceImpl implements WeiXinMiniService { } @Override - public List getMyBeehiveAdoptList() { - Integer userId = beeUserService.getUserId(); + public List getMyBeehiveAdoptList(Integer userId) { if (userId == null) return Collections.emptyList(); //获取用户蜂箱认养单信息 List adoptDOS = beehiveAdoptService.getBeehiveAdoptListByUserId(userId); diff --git a/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/util/ListUtils.java b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/util/ListUtils.java new file mode 100644 index 0000000000..50cc6c5471 --- /dev/null +++ b/yudao-bee-front/yudao-bee-front-biz/src/main/java/cn/iocoder/yudao/bee/front/util/ListUtils.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.bee.front.util; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class ListUtils { + + public static List getRandomElementsOptimized(List list, int count) { + if (list == null || list.isEmpty() || count <= 0) { + return new ArrayList<>(); + } + + int size = list.size(); + if (count >= size) { + return new ArrayList<>(list); + } + + List result = new ArrayList<>(count); + Random random = new Random(); + List selectedIndices = new ArrayList<>(count); + + // 随机选择不重复的索引 + while (result.size() < count) { + int randomIndex = random.nextInt(size); + if (!selectedIndices.contains(randomIndex)) { + selectedIndices.add(randomIndex); + result.add(list.get(randomIndex)); + } + } + + return result; + } +} diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java index 7aeecc1b4e..79dca5df4c 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletService.java @@ -99,5 +99,5 @@ public interface PayWalletService { PayWalletDO getWalletByUserId(Integer userId); - void addCoins(PayWalletDO wallet); + void updateCoins(PayWalletDO wallet); } diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java index 79994260c4..a6077f5b75 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/java/cn/iocoder/yudao/module/pay/service/wallet/PayWalletServiceImpl.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.pay.service.wallet; import cn.hutool.core.lang.Assert; +import cn.iocoder.yudao.framework.common.enums.UserTypeEnum; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.date.DateUtils; import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO; @@ -228,7 +229,7 @@ public class PayWalletServiceImpl implements PayWalletService { @Override public PayWalletDO getWalletByUserId(Integer userId) { - return walletMapper.selectOne(PayWalletDO::getUserId, userId); + return getOrCreateWallet(userId.longValue(), UserTypeEnum.MEMBER.getValue()); } @Override @@ -240,7 +241,7 @@ public class PayWalletServiceImpl implements PayWalletService { } @Override - public void addCoins(PayWalletDO wallet) { + public void updateCoins(PayWalletDO wallet) { walletMapper.updateById(wallet); } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java index b262d58835..68d85fb63c 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/oauth2/OAuth2AccessTokenMapper.java @@ -33,10 +33,12 @@ public interface OAuth2AccessTokenMapper extends BaseMapperX() - .eq(OAuth2AccessTokenDO::getRefreshToken,refreshToken) - .orderByDesc(OAuth2AccessTokenDO::getExpiresTime) - .last("limit 1")) - .get(0); - }; + List oAuth2AccessTokenDOS = selectList(new LambdaQueryWrapperX() + .eq(OAuth2AccessTokenDO::getRefreshToken, refreshToken) + .orderByDesc(OAuth2AccessTokenDO::getExpiresTime) + .last("limit 1")); + if (oAuth2AccessTokenDOS != null && !oAuth2AccessTokenDOS.isEmpty()){ + return oAuth2AccessTokenDOS.get(0); + }else return null; + } } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenService.java index 470c8fc0dd..c3208b4a42 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenService.java @@ -78,4 +78,5 @@ public interface OAuth2TokenService { */ PageResult getAccessTokenPage(OAuth2AccessTokenPageReqVO reqVO); + Integer getUserIdByAccessToken(String token); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java index d9bfa59373..9cd23838f2 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java @@ -163,6 +163,16 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService { return oauth2AccessTokenMapper.selectPage(reqVO); } + @Override + public Integer getUserIdByAccessToken(String token) { + OAuth2AccessTokenDO oAuth2AccessTokenDO = oauth2AccessTokenMapper.selectByAccessToken(token); + if (oAuth2AccessTokenDO != null && !DateUtils.isExpired(oAuth2AccessTokenDO.getExpiresTime())) { + Long userId = oAuth2AccessTokenDO.getUserId(); + return userId.intValue(); + } + return null; + } + private OAuth2AccessTokenDO createOAuth2AccessToken(OAuth2RefreshTokenDO refreshTokenDO, OAuth2ClientDO clientDO) { OAuth2AccessTokenDO accessTokenDO = new OAuth2AccessTokenDO().setAccessToken(generateAccessToken()) .setUserId(refreshTokenDO.getUserId()).setUserType(refreshTokenDO.getUserType()) diff --git a/yudao-server/src/main/resources/application-local.yaml b/yudao-server/src/main/resources/application-local.yaml index af22f118a7..d4e8281e2f 100644 --- a/yudao-server/src/main/resources/application-local.yaml +++ b/yudao-server/src/main/resources/application-local.yaml @@ -124,10 +124,10 @@ rocketmq: spring: # RabbitMQ 配置项,对应 RabbitProperties 配置类 rabbitmq: - host: 124.220.236.38 # RabbitMQ 服务的地址 + host: 8.153.204.174 # RabbitMQ 服务的地址 port: 5672 # RabbitMQ 服务的端口 - username: admin # RabbitMQ 服务的账号 - password: Cd5XhnCt # RabbitMQ 服务的密码 + username: rabbitmq # RabbitMQ 服务的账号 + password: rabbitmq # RabbitMQ 服务的密码 # Kafka 配置项,对应 KafkaProperties 配置类 kafka: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 diff --git a/yudao-server/src/main/resources/application.yaml b/yudao-server/src/main/resources/application.yaml index 863b304b37..adf4ef7e09 100644 --- a/yudao-server/src/main/resources/application.yaml +++ b/yudao-server/src/main/resources/application.yaml @@ -48,7 +48,7 @@ springdoc: default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档 knife4j: - enable: false # TODO 芋艿:需要关闭增强,具体原因见:https://github.com/xiaoymin/knife4j/issues/874 + enable: false # TODO 需要关闭增强,具体原因见:https://github.com/xiaoymin/knife4j/issues/874 setting: language: zh_cn @@ -361,7 +361,7 @@ yudao: kd100: key: pLXUGAwK5305 customer: E77DF18BE109F454A5CD319E44BF5177 - pay: #微信支付配置 todo 请自行配置 + pay: #微信支付配置 TODO 请自行配置 wechat: app-id: wxed3e5106f6adce94 mch-id: 1312305301 @@ -370,7 +370,7 @@ yudao: notify-url: https://www.weixin.qq.com/wxpay/pay.php debug: false -# 插件配置 TODO 芋艿:【IOT】需要处理下 +# 插件配置 TODO 【IOT】需要处理下 pf4j: pluginsDir: /Users/anhaohao/code/gitee/ruoyi-vue-pro/plugins # 插件目录