新增部分游戏接口
This commit is contained in:
101
README.md
101
README.md
@@ -4,43 +4,14 @@
|
|||||||
<img src="https://img.shields.io/github/license/YunaiV/ruoyi-vue-pro"/>
|
<img src="https://img.shields.io/github/license/YunaiV/ruoyi-vue-pro"/>
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!**
|
|
||||||
|
|
||||||
**「我喜欢写代码,乐此不疲」**
|
|
||||||
**「我喜欢做开源,以此为乐」**
|
|
||||||
|
|
||||||
我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。
|
|
||||||
|
|
||||||
如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。
|
|
||||||
|
|
||||||
## 🐶 新手必读
|
## 🐶 新手必读
|
||||||
|
|
||||||
* 演示地址【Vue3 + element-plus】:<http://dashboard-vue3.yudao.iocoder.cn>
|
|
||||||
* 演示地址【Vue3 + vben(ant-design-vue)】:<http://dashboard-vben.yudao.iocoder.cn>
|
|
||||||
* 演示地址【Vue2 + element-ui】:<http://dashboard.yudao.iocoder.cn>
|
|
||||||
* 启动文档:<https://doc.iocoder.cn/quick-start/>
|
* 启动文档:<https://doc.iocoder.cn/quick-start/>
|
||||||
* 视频教程:<https://doc.iocoder.cn/video/>
|
* 视频教程:<https://doc.iocoder.cn/video/>
|
||||||
|
|
||||||
## 🐰 版本说明
|
|
||||||
|
|
||||||
| 版本 | 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 吧,这对我们真的很重要!
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
* Java 后端:`master` 分支为 JDK 8 + Spring Boot 2.7,`master-jdk17` 分支为 JDK 17/21 + Spring Boot 3.2
|
* Java 后端:`master` 分支为 JDK 8 + Spring Boot 2.7,`master-jdk17` 分支为 JDK 17/21 + Spring Boot 3.2
|
||||||
@@ -59,31 +30,6 @@
|
|||||||
* 集成阿里云、腾讯云等短信渠道,集成 MinIO、阿里云、腾讯云、七牛云等云存储服务
|
* 集成阿里云、腾讯云等短信渠道,集成 MinIO、阿里云、腾讯云、七牛云等云存储服务
|
||||||
* 集成报表设计器、大屏设计器,通过拖拽即可生成酷炫的报表与大屏
|
* 集成报表设计器、大屏设计器,通过拖拽即可生成酷炫的报表与大屏
|
||||||
|
|
||||||
## 🐳 项目关系
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
三个项目的功能对比,可见社区共同整理的 [国产开源项目对比](https://www.yuque.com/xiatian-bsgny/lm0ec1/wqf8mn) 表格。
|
|
||||||
|
|
||||||
### 后端项目
|
|
||||||
|
|
||||||
| 项目 | Star | 简介 |
|
|
||||||
|-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------|
|
|
||||||
| [ruoyi-vue-pro](https://gitee.com/zhijiantianya/ruoyi-vue-pro) | [](https://gitee.com/zhijiantianya/ruoyi-vue-pro) [](https://github.com/YunaiV/ruoyi-vue-pro) | 基于 Spring Boot 多模块架构 |
|
|
||||||
| [yudao-cloud](https://gitee.com/zhijiantianya/yudao-cloud) | [](https://gitee.com/zhijiantianya/yudao-cloud) [](https://github.com/YunaiV/yudao-cloud) | 基于 Spring Cloud 微服务架构 |
|
|
||||||
| [Spring-Boot-Labs](https://gitee.com/yudaocode/SpringBoot-Labs) | [](https://gitee.com/zhijiantianya/yudao-cloud) [](https://github.com/yudaocode/SpringBoot-Labs) | 系统学习 Spring Boot & Cloud 专栏 |
|
|
||||||
|
|
||||||
### 前端项目
|
|
||||||
|
|
||||||
| 项目 | Star | 简介 |
|
|
||||||
|----------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------|
|
|
||||||
| [yudao-ui-admin-vue3](https://gitee.com/yudaocode/yudao-ui-admin-vue3) | [](https://gitee.com/yudaocode/yudao-ui-admin-vue3) [](https://github.com/yudaocode/yudao-ui-admin-vue3) | 基于 Vue3 + element-plus 实现的管理后台 |
|
|
||||||
| [yudao-ui-admin-vben](https://gitee.com/yudaocode/yudao-ui-admin-vben) | [](https://gitee.com/yudaocode/yudao-ui-admin-vben) [](https://github.com/yudaocode/yudao-ui-admin-vben) | 基于 Vue3 + vben(ant-design-vue) 实现的管理后台 |
|
|
||||||
| [yudao-mall-uniapp](https://gitee.com/yudaocode/yudao-mall-uniapp) | [](https://gitee.com/yudaocode/yudao-mall-uniapp) [](https://github.com/yudaocode/yudao-mall-uniapp) | 基于 uni-app 实现的商城小程序 |
|
|
||||||
| [yudao-ui-admin-vue2](https://gitee.com/yudaocode/yudao-ui-admin-vue2) | [](https://gitee.com/yudaocode/yudao-ui-admin-vue2) [](https://github.com/yudaocode/yudao-ui-admin-vue2) | 基于 Vue2 + element-ui 实现的管理后台 |
|
|
||||||
| [yudao-ui-admin-uniapp](https://gitee.com/yudaocode/yudao-ui-admin-uniapp) | [](https://gitee.com/yudaocode/yudao-ui-admin-uniapp) [](https://github.com/yudaocode/yudao-ui-admin-uniapp) | 基于 Vue2 + element-ui 实现的管理后台 |
|
|
||||||
| [yudao-ui-go-view](https://gitee.com/yudaocode/yudao-ui-go-view) | [](https://gitee.com/yudaocode/yudao-ui-go-view) [](https://github.com/yudaocode/yudao-ui-go-view) | 基于 Vue3 + naive-ui 实现的大屏报表 |
|
|
||||||
|
|
||||||
## 😎 开源协议
|
## 😎 开源协议
|
||||||
|
|
||||||
**为什么推荐使用本项目?**
|
**为什么推荐使用本项目?**
|
||||||
@@ -96,30 +42,6 @@
|
|||||||
|
|
||||||
③ 代码整洁、架构整洁,遵循《阿里巴巴 Java 开发手册》规范,代码注释详细,113770 行 Java 代码,42462 行代码注释。
|
③ 代码整洁、架构整洁,遵循《阿里巴巴 Java 开发手册》规范,代码注释详细,113770 行 Java 代码,42462 行代码注释。
|
||||||
|
|
||||||
## 🤝 项目外包
|
|
||||||
|
|
||||||
我们也是接外包滴,如果你有项目想要外包,可以微信联系【**Aix9975**】。
|
|
||||||
|
|
||||||
团队包含专业的项目经理、架构师、前端工程师、后端工程师、测试工程师、运维工程师,可以提供全流程的外包服务。
|
|
||||||
|
|
||||||
项目可以是商城、SCRM 系统、OA 系统、物流系统、ERP 系统、CMS 系统、HIS 系统、支付系统、IM 聊天、微信公众号、微信小程序等等。
|
|
||||||
|
|
||||||
## 🐼 内置功能
|
|
||||||
|
|
||||||
系统内置多种多种业务功能,可以用于快速你的业务系统:
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
* 通用模块(必选):系统功能、基础设施
|
|
||||||
* 通用模块(可选):工作流程、支付系统、数据报表、会员中心
|
|
||||||
* 业务系统(按需):ERP 系统、CRM 系统、商城系统、微信公众号、AI 大模型
|
|
||||||
|
|
||||||
> 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。
|
|
||||||
>
|
|
||||||
> * 额外新增的功能,我们使用 🚀 标记。
|
|
||||||
> * 重新实现的功能,我们使用 ⭐️ 标记。
|
|
||||||
|
|
||||||
🙂 所有功能,都通过 **单元测试** 保证高质量。
|
|
||||||
|
|
||||||
### 系统功能
|
### 系统功能
|
||||||
|
|
||||||
@@ -245,10 +167,6 @@
|
|||||||
| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 |
|
| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 |
|
||||||
| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 |
|
| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 |
|
||||||
|
|
||||||
### 商城系统
|
|
||||||
|
|
||||||
演示地址:<https://doc.iocoder.cn/mall-preview/>
|
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||

|

|
||||||
@@ -263,25 +181,6 @@
|
|||||||
| 🚀 | 会员分组 | 对会员进行分组,用于用户画像、内容推送等运营手段 |
|
| 🚀 | 会员分组 | 对会员进行分组,用于用户画像、内容推送等运营手段 |
|
||||||
| 🚀 | 积分签到 | 回馈给签到、消费等行为的积分,会员可订单抵现、积分兑换等途径消耗 |
|
| 🚀 | 积分签到 | 回馈给签到、消费等行为的积分,会员可订单抵现、积分兑换等途径消耗 |
|
||||||
|
|
||||||
### ERP 系统
|
|
||||||
|
|
||||||
演示地址:<https://doc.iocoder.cn/erp-preview/>
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### CRM 系统
|
|
||||||
|
|
||||||
演示地址:<https://doc.iocoder.cn/crm-preview/>
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
### AI 大模型
|
|
||||||
|
|
||||||
演示地址:<https://doc.iocoder.cn/ai-preview/>
|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
## 🐨 技术栈
|
## 🐨 技术栈
|
||||||
|
|
||||||
|
@@ -7,6 +7,13 @@ public interface GameErrorCodeConstants {
|
|||||||
|
|
||||||
ErrorCode GAME_USER_NOT_EXISTS = new ErrorCode(2_001_110_002, "养蜂游戏用户不存在");
|
ErrorCode GAME_USER_NOT_EXISTS = new ErrorCode(2_001_110_002, "养蜂游戏用户不存在");
|
||||||
ErrorCode INSUFFICIENT_NECTAR = new ErrorCode(2_001_110_102, "花蜜不足");
|
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, "养蜂游戏丰收攻略不存在");
|
ErrorCode GAME_STRATEGY_NOT_EXISTS = new ErrorCode(2_001_110_003, "养蜂游戏丰收攻略不存在");
|
||||||
|
|
||||||
|
@@ -2,7 +2,6 @@ package cn.iocoder.yudao.bee.front.controller.admin.game.gameuserbeehive.vo;
|
|||||||
|
|
||||||
import io.swagger.v3.oas.annotations.media.Schema;
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
|
||||||
import com.alibaba.excel.annotation.*;
|
import com.alibaba.excel.annotation.*;
|
||||||
|
|
||||||
@Schema(description = "管理后台 - 养蜂游戏用户蜂箱中间 Response VO")
|
@Schema(description = "管理后台 - 养蜂游戏用户蜂箱中间 Response VO")
|
||||||
@@ -26,8 +25,8 @@ public class GameUserBeehiveRespVO {
|
|||||||
@ExcelProperty("进度")
|
@ExcelProperty("进度")
|
||||||
private Integer progress;
|
private Integer progress;
|
||||||
|
|
||||||
@Schema(description = "阶段")
|
@Schema(description = "等级")
|
||||||
@ExcelProperty("阶段")
|
@ExcelProperty("等级")
|
||||||
private Integer process;
|
private Integer level;
|
||||||
|
|
||||||
}
|
}
|
@@ -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.gameactivity.vo.GameActivityRespVO;
|
||||||
import cn.iocoder.yudao.bee.front.controller.admin.game.gameannouncement.vo.GameAnnouncementRespVO;
|
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.gameexchangerecords.vo.GameExchangeRecordsRespVO;
|
||||||
import cn.iocoder.yudao.bee.front.controller.admin.game.gameharvest.vo.GameHarvestRespVO;
|
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.gamestrategy.vo.GameStrategyRespVO;
|
||||||
import cn.iocoder.yudao.bee.front.controller.admin.game.gametask.vo.GameTaskRespVO;
|
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.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.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.beeuser.BeeUserService;
|
||||||
import cn.iocoder.yudao.bee.front.service.game.*;
|
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.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
@@ -19,6 +23,7 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.annotation.security.PermitAll;
|
import javax.annotation.security.PermitAll;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
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));
|
return success(BeanUtils.toBean(gameAnnouncementService.getGameAnnouncement(id),GameAnnouncementRespVO.class));
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/get/my/beehive")
|
@GetMapping("/get/userList")
|
||||||
|
@Operation(summary = "获取其他用户列表")
|
||||||
|
@PermitAll
|
||||||
|
public CommonResult<List<GameUserRespDTO>> getUserList() {
|
||||||
|
return success(gameUserService.getUserList());
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/visit/user")
|
||||||
|
@Operation(summary = "访问其他用户")
|
||||||
|
@PermitAll
|
||||||
|
public CommonResult<GameUserRespInfo> getUserList(@RequestParam("userId") Integer userId) {
|
||||||
|
return success(gameUserService.getGameUserRespInfo(userId));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get/beehive")
|
||||||
@Operation(summary = "获取蜂箱列表")
|
@Operation(summary = "获取蜂箱列表")
|
||||||
@PermitAll
|
@PermitAll
|
||||||
|
public CommonResult<List<GameBeehiveRespVO>> getBeehiveList() {
|
||||||
|
return success(BeanUtils.toBean(gameBeehiveService.getBeehiveList(),GameBeehiveRespVO.class));
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get/my/beehive")
|
||||||
|
@Operation(summary = "获取我的蜂箱列表")
|
||||||
|
@PermitAll
|
||||||
public CommonResult<List<GameBeehiveInfoDTO>> getMyBeehive() {
|
public CommonResult<List<GameBeehiveInfoDTO>> getMyBeehive() {
|
||||||
return success(gameBeehiveService.getGameAnnouncementList());
|
return success(gameBeehiveService.getGameAnnouncementList());
|
||||||
}
|
}
|
||||||
@@ -102,8 +128,34 @@ public class AppGameIndexController {
|
|||||||
@Operation(summary = "领取蜜蜂")
|
@Operation(summary = "领取蜜蜂")
|
||||||
@Parameter(name = "id", description = "蜂箱编号", required = true, example = "1024")
|
@Parameter(name = "id", description = "蜂箱编号", required = true, example = "1024")
|
||||||
@PermitAll
|
@PermitAll
|
||||||
public CommonResult<Boolean> receiveBee(@RequestParam("id")Integer id){
|
public CommonResult<Boolean> receiveBee(HttpServletRequest request, @RequestParam("id")Integer id){
|
||||||
gameBeehiveService.receiveBee(id);
|
gameBeehiveService.receiveBee(request,id);
|
||||||
|
return success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@GetMapping("/get/escalationConditions")
|
||||||
|
@Operation(summary = "查看升级条件")
|
||||||
|
@Parameter(name = "id", description = "蜂箱编号", required = true, example = "1024")
|
||||||
|
@PermitAll
|
||||||
|
public CommonResult<LevelNeedDTO> 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<Boolean> 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<Boolean> harvestBeehive(@RequestParam("id")Integer id){
|
||||||
|
gameBeehiveService.HarvestBeehive(id);
|
||||||
return success(true);
|
return success(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
}
|
@@ -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;
|
||||||
|
|
||||||
|
}
|
@@ -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;
|
||||||
|
}
|
@@ -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.bee.front.service.index.WeiXinMiniService;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
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.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import javax.annotation.security.PermitAll;
|
import javax.annotation.security.PermitAll;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@@ -55,7 +58,7 @@ public class WeiXinMiniController {
|
|||||||
@GetMapping("/get/MyBeehiveInfo")
|
@GetMapping("/get/MyBeehiveInfo")
|
||||||
@Operation(summary = "获取首页我的蜂箱列表")
|
@Operation(summary = "获取首页我的蜂箱列表")
|
||||||
@PermitAll
|
@PermitAll
|
||||||
public CommonResult<List<AppBeehiveAdoptRespVO>> getMyBeehiveInfo() {
|
public CommonResult<List<AppBeehiveAdoptRespVO>> getMyBeehiveInfo(@RequestParam("id") Integer id) {
|
||||||
return CommonResult.success(weiXinMiniService.getMyBeehiveAdoptList());
|
return CommonResult.success(weiXinMiniService.getMyBeehiveAdoptList(id));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,6 @@
|
|||||||
package cn.iocoder.yudao.bee.front.dal.dataobject.game;
|
package cn.iocoder.yudao.bee.front.dal.dataobject.game;
|
||||||
|
|
||||||
import lombok.*;
|
import lombok.*;
|
||||||
import java.util.*;
|
|
||||||
import com.baomidou.mybatisplus.annotation.*;
|
import com.baomidou.mybatisplus.annotation.*;
|
||||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||||
|
|
||||||
@@ -40,6 +39,6 @@ public class GameUserBeehiveDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 阶段
|
* 阶段
|
||||||
*/
|
*/
|
||||||
private Integer process;
|
private Integer level;
|
||||||
|
|
||||||
}
|
}
|
@@ -20,7 +20,7 @@ public interface GameUserBeehiveMapper extends BaseMapperX<GameUserBeehiveDO> {
|
|||||||
.eqIfPresent(GameUserBeehiveDO::getBeehiveId, reqVO.getBeehiveId())
|
.eqIfPresent(GameUserBeehiveDO::getBeehiveId, reqVO.getBeehiveId())
|
||||||
.eqIfPresent(GameUserBeehiveDO::getUserId, reqVO.getUserId())
|
.eqIfPresent(GameUserBeehiveDO::getUserId, reqVO.getUserId())
|
||||||
.eqIfPresent(GameUserBeehiveDO::getProgress, reqVO.getProgress())
|
.eqIfPresent(GameUserBeehiveDO::getProgress, reqVO.getProgress())
|
||||||
.eqIfPresent(GameUserBeehiveDO::getProcess, reqVO.getProcess())
|
.eqIfPresent(GameUserBeehiveDO::getLevel, reqVO.getProcess())
|
||||||
.orderByDesc(GameUserBeehiveDO::getId));
|
.orderByDesc(GameUserBeehiveDO::getId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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.GameAnnouncementPageReqVO;
|
||||||
import cn.iocoder.yudao.bee.front.controller.admin.game.gameannouncement.vo.GameAnnouncementSaveReqVO;
|
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.bee.front.dal.dataobject.game.GameAnnouncementDO;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||||
@@ -56,4 +57,5 @@ public interface GameAnnouncementService {
|
|||||||
PageResult<GameAnnouncementDO> getGameAnnouncementPage(GameAnnouncementPageReqVO pageReqVO);
|
PageResult<GameAnnouncementDO> getGameAnnouncementPage(GameAnnouncementPageReqVO pageReqVO);
|
||||||
|
|
||||||
List<GameAnnouncementDO> getGameAnnouncementList();
|
List<GameAnnouncementDO> getGameAnnouncementList();
|
||||||
|
|
||||||
}
|
}
|
@@ -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.admin.game.gamebeehive.vo.GameBeehiveSaveReqVO;
|
||||||
import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameBeehiveInfoDTO;
|
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.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.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -58,7 +60,17 @@ public interface GameBeehiveService {
|
|||||||
|
|
||||||
List<GameBeehiveInfoDTO> getGameAnnouncementList();
|
List<GameBeehiveInfoDTO> getGameAnnouncementList();
|
||||||
|
|
||||||
void receiveBee(Integer id);
|
void receiveBee(HttpServletRequest request, Integer id);
|
||||||
|
|
||||||
void fedBee(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<GameBeehiveDO> getBeehiveList();
|
||||||
}
|
}
|
@@ -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.GameBeehivePageReqVO;
|
||||||
import cn.iocoder.yudao.bee.front.controller.admin.game.gamebeehive.vo.GameBeehiveSaveReqVO;
|
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.gameuser.vo.GameUserSaveReqVO;
|
||||||
import cn.iocoder.yudao.bee.front.controller.admin.game.gameuserbeehive.vo.GameUserBeehiveSaveReqVO;
|
import cn.iocoder.yudao.bee.front.controller.admin.game.gameuserbeehive.vo.GameUserBeehiveSaveReqVO;
|
||||||
import cn.iocoder.yudao.bee.front.controller.app.game.dto.GameBeehiveInfoDTO;
|
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.GameUserBeehiveDO;
|
||||||
import cn.iocoder.yudao.bee.front.dal.dataobject.game.GameUserDO;
|
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.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.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.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 com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
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 cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import static cn.iocoder.yudao.bee.front.enums.GameErrorCodeConstants.*;
|
import static cn.iocoder.yudao.bee.front.enums.GameErrorCodeConstants.*;
|
||||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
@@ -51,6 +60,14 @@ public class GameBeehiveServiceImpl implements GameBeehiveService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private GameUserBeehiveService gameUserBeehiveService;
|
private GameUserBeehiveService gameUserBeehiveService;
|
||||||
|
@Autowired
|
||||||
|
private OAuth2TokenService oAuth2TokenService;
|
||||||
|
@Autowired
|
||||||
|
private GameHarvestService gameHarvestService;
|
||||||
|
@Autowired
|
||||||
|
private DictDataApi dictDataApi;
|
||||||
|
@Autowired
|
||||||
|
private PayWalletService payWalletService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer createGameBeehive(GameBeehiveSaveReqVO createReqVO) {
|
public Integer createGameBeehive(GameBeehiveSaveReqVO createReqVO) {
|
||||||
@@ -98,12 +115,9 @@ public class GameBeehiveServiceImpl implements GameBeehiveService {
|
|||||||
@Override
|
@Override
|
||||||
public List<GameBeehiveInfoDTO> getGameAnnouncementList() {
|
public List<GameBeehiveInfoDTO> getGameAnnouncementList() {
|
||||||
// 获取当前用户
|
// 获取当前用户
|
||||||
BeeUserDO userInfo = beeUserService.getLoginUserInfo();
|
BeeUserDO userInfo = beeUserService.getLoginUserInfoException();
|
||||||
// 获取游戏用户信息,无则创建
|
// 获取游戏用户信息,无则创建
|
||||||
GameUserDO gameUser = gameUserService.getGameUserByUserId(userInfo.getId());
|
GameUserDO gameUser = gameUserService.getGameUserByUserId(userInfo.getId());
|
||||||
if (gameUser == null) {
|
|
||||||
return Collections.emptyList();
|
|
||||||
}
|
|
||||||
|
|
||||||
// 获取用户蜂箱列表
|
// 获取用户蜂箱列表
|
||||||
List<GameUserBeehiveDO> userBeehiveList = gameUserBeehiveService.getGameUserBeehiveList(gameUser.getId());
|
List<GameUserBeehiveDO> userBeehiveList = gameUserBeehiveService.getGameUserBeehiveList(gameUser.getId());
|
||||||
@@ -138,7 +152,7 @@ public class GameBeehiveServiceImpl implements GameBeehiveService {
|
|||||||
for (GameUserBeehiveDO userBeehive : userBeehiveList) {
|
for (GameUserBeehiveDO userBeehive : userBeehiveList) {
|
||||||
GameBeehiveInfoDTO dto = beehiveMap.get(userBeehive.getBeehiveId());
|
GameBeehiveInfoDTO dto = beehiveMap.get(userBeehive.getBeehiveId());
|
||||||
if (dto != null) {
|
if (dto != null) {
|
||||||
dto.setProcess(userBeehive.getProcess());
|
dto.setProcess(userBeehive.getLevel());
|
||||||
dto.setProgress(userBeehive.getProgress());
|
dto.setProgress(userBeehive.getProgress());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,10 +161,12 @@ public class GameBeehiveServiceImpl implements GameBeehiveService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void receiveBee(Integer id) {
|
public void receiveBee(HttpServletRequest request, Integer id) {
|
||||||
Integer userId = beeUserService.getUserIdException();
|
Integer userId = beeUserService.getUserIdException();
|
||||||
GameUserDO gameUserDO = gameUserService.getGameUserByUserId(userId);
|
GameUserDO gameUserDO = gameUserService.getGameUserByUserId(userId);
|
||||||
GameUserBeehiveSaveReqVO gameUserBeehiveDO = new GameUserBeehiveSaveReqVO();
|
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);
|
gameUserBeehiveDO.setBeehiveId(id).setUserId(gameUserDO.getId()).setProcess(0).setProgress(0);
|
||||||
gameUserBeehiveService.createGameUserBeehive(gameUserBeehiveDO);
|
gameUserBeehiveService.createGameUserBeehive(gameUserBeehiveDO);
|
||||||
}
|
}
|
||||||
@@ -168,11 +184,113 @@ public class GameBeehiveServiceImpl implements GameBeehiveService {
|
|||||||
else {
|
else {
|
||||||
nectarNumber -= 500;
|
nectarNumber -= 500;
|
||||||
gameUserService.updateGameUser(new GameUserSaveReqVO().setId(gameUser.getId()).setNectarNumber(nectarNumber));
|
gameUserService.updateGameUser(new GameUserSaveReqVO().setId(gameUser.getId()).setNectarNumber(nectarNumber));
|
||||||
gameUserBeehiveDO.setProgress(gameUserBeehiveDO.getProgress() + 1);
|
Integer level = gameUserBeehiveDO.getLevel();
|
||||||
if (gameUserBeehiveDO.getProgress() == 10) {
|
String levelUpCount = getDictValue("level_up_count", level);
|
||||||
gameUserBeehiveDO.setProcess(gameUserBeehiveDO.getProcess() + 1);
|
|
||||||
}
|
if (gameUserBeehiveDO.getProgress() == Integer.parseInt(levelUpCount)) throw exception(STAGE_CAP);
|
||||||
|
else gameUserBeehiveDO.setProgress(gameUserBeehiveDO.getProgress() + 1);
|
||||||
|
|
||||||
gameUserBeehiveService.updateGameUserBeehive(BeanUtils.toBean(gameUserBeehiveDO, GameUserBeehiveSaveReqVO.class));
|
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<GameBeehiveDO> getBeehiveList() {
|
||||||
|
return gameBeehiveMapper.selectList(null);
|
||||||
|
}
|
||||||
}
|
}
|
@@ -59,4 +59,5 @@ public interface GameHarvestService {
|
|||||||
|
|
||||||
void redeemCoin(Integer id);
|
void redeemCoin(Integer id);
|
||||||
|
|
||||||
|
Long getGameHarvestCount(Integer id);
|
||||||
}
|
}
|
@@ -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.bee.front.service.beeuser.BeeUserService;
|
||||||
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
|
import cn.iocoder.yudao.module.pay.dal.dataobject.wallet.PayWalletDO;
|
||||||
import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService;
|
import cn.iocoder.yudao.module.pay.service.wallet.PayWalletService;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
@@ -18,7 +17,6 @@ import org.springframework.transaction.annotation.Transactional;
|
|||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
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 cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
|
|
||||||
|
|
||||||
@@ -94,9 +92,18 @@ public class GameHarvestServiceImpl implements GameHarvestService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<GameHarvestDO> getGameHarvestList() {
|
public List<GameHarvestDO> getGameHarvestList() {
|
||||||
Integer userIdException = beeUserService.getUserIdException();
|
Integer loginUser = beeUserService.getUserIdException();
|
||||||
GameUserDO gameUserDO = gameUserService.getGameUserByUserId(userIdException);
|
GameUserDO gameUserDO = gameUserService.getGameUserByUserId(loginUser);
|
||||||
return gameHarvestMapper.selectList(GameHarvestDO::getUserId, gameUserDO.getId());
|
if (gameUserDO == null) return Collections.emptyList();
|
||||||
|
List<GameHarvestDO> 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)
|
@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 == 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);
|
if (!gameHarvest.getStatus().equals(GameHarvestStatusEnum.REDEEMABLE.getStatus()))throw exception(GAME_HARVEST_NOT_REDEEM);
|
||||||
wallet.setCoin(wallet.getCoin()+gameHarvest.getPrice());
|
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());
|
gameHarvest.setStatus(GameHarvestStatusEnum.REDEEMED.getStatus());
|
||||||
gameHarvestMapper.updateById(gameHarvest);
|
gameHarvestMapper.updateById(gameHarvest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Long getGameHarvestCount(Integer id) {
|
||||||
|
Long count = gameHarvestMapper.selectCount(GameHarvestDO::getUserId, id);
|
||||||
|
return count == null ? 0 : count;
|
||||||
|
}
|
||||||
}
|
}
|
@@ -94,7 +94,7 @@ public class GameTaskServiceImpl implements GameTaskService {
|
|||||||
Integer userId = beeUserService.getUserIdException();
|
Integer userId = beeUserService.getUserIdException();
|
||||||
List<GameTaskDO> gameTaskDOS = taskMapper.selectList(null);
|
List<GameTaskDO> gameTaskDOS = taskMapper.selectList(null);
|
||||||
GameUserDO gameUser = gameUserService.getGameUserByUserId(userId);
|
GameUserDO gameUser = gameUserService.getGameUserByUserId(userId);
|
||||||
|
if (gameUser == null) return Collections.emptyList();
|
||||||
//获取今日任务记录
|
//获取今日任务记录
|
||||||
List<GameTaskRecordsDO> gameTaskRecordsDOS = gameTaskRecordsMapper
|
List<GameTaskRecordsDO> gameTaskRecordsDOS = gameTaskRecordsMapper
|
||||||
.selectList(GameTaskRecordsDO::getGameUserId, gameUser.getId(), GameTaskRecordsDO::getCreateTime, LocalDate.now());
|
.selectList(GameTaskRecordsDO::getGameUserId, gameUser.getId(), GameTaskRecordsDO::getCreateTime, LocalDate.now());
|
||||||
|
@@ -57,4 +57,6 @@ public interface GameUserBeehiveService {
|
|||||||
List<GameUserBeehiveDO> getGameUserBeehiveList(Integer id);
|
List<GameUserBeehiveDO> getGameUserBeehiveList(Integer id);
|
||||||
|
|
||||||
GameUserBeehiveDO getGameUserBeehiveByBeehiveId(Integer beehiveId, Integer userId);
|
GameUserBeehiveDO getGameUserBeehiveByBeehiveId(Integer beehiveId, Integer userId);
|
||||||
|
|
||||||
|
GameUserBeehiveDO getGameUserBeehiveByUserId(Integer userId);
|
||||||
}
|
}
|
@@ -83,4 +83,9 @@ public class GameUserBeehiveServiceImpl implements GameUserBeehiveService {
|
|||||||
public GameUserBeehiveDO getGameUserBeehiveByBeehiveId(Integer beehiveId, Integer userId) {
|
public GameUserBeehiveDO getGameUserBeehiveByBeehiveId(Integer beehiveId, Integer userId) {
|
||||||
return gameUserBeehiveMapper.selectOne(GameUserBeehiveDO::getBeehiveId,beehiveId,GameUserBeehiveDO::getUserId,userId);
|
return gameUserBeehiveMapper.selectOne(GameUserBeehiveDO::getBeehiveId,beehiveId,GameUserBeehiveDO::getUserId,userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public GameUserBeehiveDO getGameUserBeehiveByUserId(Integer userId) {
|
||||||
|
return gameUserBeehiveMapper.selectOne(GameUserBeehiveDO::getUserId,userId);
|
||||||
|
}
|
||||||
}
|
}
|
@@ -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.GameUserPageReqVO;
|
||||||
import cn.iocoder.yudao.bee.front.controller.admin.game.gameuser.vo.GameUserSaveReqVO;
|
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.beeuser.BeeUserDO;
|
||||||
import cn.iocoder.yudao.bee.front.dal.dataobject.game.GameUserDO;
|
import cn.iocoder.yudao.bee.front.dal.dataobject.game.GameUserDO;
|
||||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
import javax.validation.Valid;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 养蜂游戏用户 Service 接口
|
* 养蜂游戏用户 Service 接口
|
||||||
@@ -57,4 +60,7 @@ public interface GameUserService {
|
|||||||
|
|
||||||
GameUserDO getOrCreateGameUserByUserId(BeeUserDO userDO);
|
GameUserDO getOrCreateGameUserByUserId(BeeUserDO userDO);
|
||||||
|
|
||||||
|
List<GameUserRespDTO> getUserList();
|
||||||
|
|
||||||
|
GameUserRespInfo getGameUserRespInfo(Integer userId);
|
||||||
}
|
}
|
@@ -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.GameUserPageReqVO;
|
||||||
import cn.iocoder.yudao.bee.front.controller.admin.game.gameuser.vo.GameUserSaveReqVO;
|
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.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.dataobject.game.GameUserDO;
|
||||||
import cn.iocoder.yudao.bee.front.dal.mysql.game.GameUserMapper;
|
import cn.iocoder.yudao.bee.front.dal.mysql.game.GameUserMapper;
|
||||||
import cn.iocoder.yudao.bee.front.service.beeuser.BeeUserService;
|
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 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.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;
|
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -30,6 +38,12 @@ public class GameUserServiceImpl implements GameUserService {
|
|||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private GameUserMapper gameUserMapper;
|
private GameUserMapper gameUserMapper;
|
||||||
|
@Autowired
|
||||||
|
private BeeUserService beeUserService;
|
||||||
|
@Autowired
|
||||||
|
private GameHarvestService gameHarvestService;
|
||||||
|
@Autowired
|
||||||
|
private GameUserBeehiveService gameUserBeehiveService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Integer createGameUser(GameUserSaveReqVO createReqVO) {
|
public Integer createGameUser(GameUserSaveReqVO createReqVO) {
|
||||||
@@ -92,4 +106,48 @@ public class GameUserServiceImpl implements GameUserService {
|
|||||||
public GameUserDO getGameUserByUserId(Integer userId) {
|
public GameUserDO getGameUserByUserId(Integer userId) {
|
||||||
return gameUserMapper.selectOne(GameUserDO::getBeeUserId, userId);
|
return gameUserMapper.selectOne(GameUserDO::getBeeUserId, userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<GameUserRespDTO> getUserList() {
|
||||||
|
// 获取当前用户信息
|
||||||
|
Integer userId = beeUserService.getUserIdException();
|
||||||
|
GameUserDO currentUser = getGameUserByUserId(userId);
|
||||||
|
|
||||||
|
// 构建当前用户响应对象
|
||||||
|
GameUserRespDTO currentUserResp = getGameUserRespDTO(currentUser);
|
||||||
|
|
||||||
|
// 获取所有用户
|
||||||
|
List<GameUserDO> allUsers = gameUserMapper.selectList(null);
|
||||||
|
|
||||||
|
// 移除当前用户(避免重复)
|
||||||
|
allUsers.removeIf(user -> user.getId().equals(userId));
|
||||||
|
|
||||||
|
// 随机选择4个用户
|
||||||
|
List<GameUserDO> randomUsers = getRandomElementsOptimized(allUsers, 4);
|
||||||
|
|
||||||
|
// 构建随机用户响应列表
|
||||||
|
List<GameUserRespDTO> 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;
|
||||||
|
}
|
||||||
}
|
}
|
@@ -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.beehiveadopt.BeehiveAdoptDO;
|
||||||
import cn.iocoder.yudao.bee.front.dal.dataobject.honeyproduct.HoneyProductDO;
|
import cn.iocoder.yudao.bee.front.dal.dataobject.honeyproduct.HoneyProductDO;
|
||||||
import cn.iocoder.yudao.bee.front.dal.dataobject.product.ProductDO;
|
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;
|
import java.util.List;
|
||||||
|
|
||||||
public interface WeiXinMiniService {
|
public interface WeiXinMiniService {
|
||||||
@@ -38,5 +40,5 @@ public interface WeiXinMiniService {
|
|||||||
*/
|
*/
|
||||||
List<ProductDO> getProductList();
|
List<ProductDO> getProductList();
|
||||||
|
|
||||||
List<AppBeehiveAdoptRespVO> getMyBeehiveAdoptList();
|
List<AppBeehiveAdoptRespVO> getMyBeehiveAdoptList(Integer userId);
|
||||||
}
|
}
|
||||||
|
@@ -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.bee.front.util.AssertUtils;
|
||||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||||
import cn.iocoder.yudao.module.pay.enums.order.PayOrderStatusEnum;
|
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.stereotype.Service;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
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 {
|
public class WeiXinMiniServiceImpl implements WeiXinMiniService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
BeeFarmService beeFarmService;
|
private BeeFarmService beeFarmService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
BeeUserService beeUserService;
|
private BeeUserService beeUserService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
BeehiveService beehiveService;
|
private BeehiveService beehiveService;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private ProductService productService;
|
private ProductService productService;
|
||||||
@@ -50,6 +54,9 @@ public class WeiXinMiniServiceImpl implements WeiXinMiniService {
|
|||||||
@Resource
|
@Resource
|
||||||
HoneyProductService honeyProductService;
|
HoneyProductService honeyProductService;
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private OAuth2TokenService oAuth2TokenService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BeeFarmTotalRespVO getInfo() {
|
public BeeFarmTotalRespVO getInfo() {
|
||||||
BeeFarmTotalRespVO result = new BeeFarmTotalRespVO();
|
BeeFarmTotalRespVO result = new BeeFarmTotalRespVO();
|
||||||
@@ -94,8 +101,7 @@ public class WeiXinMiniServiceImpl implements WeiXinMiniService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<AppBeehiveAdoptRespVO> getMyBeehiveAdoptList() {
|
public List<AppBeehiveAdoptRespVO> getMyBeehiveAdoptList(Integer userId) {
|
||||||
Integer userId = beeUserService.getUserId();
|
|
||||||
if (userId == null) return Collections.emptyList();
|
if (userId == null) return Collections.emptyList();
|
||||||
//获取用户蜂箱认养单信息
|
//获取用户蜂箱认养单信息
|
||||||
List<BeehiveAdoptDO> adoptDOS = beehiveAdoptService.getBeehiveAdoptListByUserId(userId);
|
List<BeehiveAdoptDO> adoptDOS = beehiveAdoptService.getBeehiveAdoptListByUserId(userId);
|
||||||
|
@@ -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 <T> List<T> getRandomElementsOptimized(List<T> 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<T> result = new ArrayList<>(count);
|
||||||
|
Random random = new Random();
|
||||||
|
List<Integer> 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;
|
||||||
|
}
|
||||||
|
}
|
@@ -99,5 +99,5 @@ public interface PayWalletService {
|
|||||||
|
|
||||||
PayWalletDO getWalletByUserId(Integer userId);
|
PayWalletDO getWalletByUserId(Integer userId);
|
||||||
|
|
||||||
void addCoins(PayWalletDO wallet);
|
void updateCoins(PayWalletDO wallet);
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,7 @@
|
|||||||
package cn.iocoder.yudao.module.pay.service.wallet;
|
package cn.iocoder.yudao.module.pay.service.wallet;
|
||||||
|
|
||||||
import cn.hutool.core.lang.Assert;
|
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.pojo.PageResult;
|
||||||
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
import cn.iocoder.yudao.framework.common.util.date.DateUtils;
|
||||||
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO;
|
import cn.iocoder.yudao.module.pay.controller.admin.wallet.vo.wallet.PayWalletPageReqVO;
|
||||||
@@ -228,7 +229,7 @@ public class PayWalletServiceImpl implements PayWalletService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public PayWalletDO getWalletByUserId(Integer userId) {
|
public PayWalletDO getWalletByUserId(Integer userId) {
|
||||||
return walletMapper.selectOne(PayWalletDO::getUserId, userId);
|
return getOrCreateWallet(userId.longValue(), UserTypeEnum.MEMBER.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -240,7 +241,7 @@ public class PayWalletServiceImpl implements PayWalletService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addCoins(PayWalletDO wallet) {
|
public void updateCoins(PayWalletDO wallet) {
|
||||||
walletMapper.updateById(wallet);
|
walletMapper.updateById(wallet);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -33,10 +33,12 @@ public interface OAuth2AccessTokenMapper extends BaseMapperX<OAuth2AccessTokenDO
|
|||||||
}
|
}
|
||||||
|
|
||||||
default OAuth2AccessTokenDO selectByRefreshToken(String refreshToken){
|
default OAuth2AccessTokenDO selectByRefreshToken(String refreshToken){
|
||||||
return selectList(new LambdaQueryWrapperX<OAuth2AccessTokenDO>()
|
List<OAuth2AccessTokenDO> oAuth2AccessTokenDOS = selectList(new LambdaQueryWrapperX<OAuth2AccessTokenDO>()
|
||||||
.eq(OAuth2AccessTokenDO::getRefreshToken,refreshToken)
|
.eq(OAuth2AccessTokenDO::getRefreshToken, refreshToken)
|
||||||
.orderByDesc(OAuth2AccessTokenDO::getExpiresTime)
|
.orderByDesc(OAuth2AccessTokenDO::getExpiresTime)
|
||||||
.last("limit 1"))
|
.last("limit 1"));
|
||||||
.get(0);
|
if (oAuth2AccessTokenDOS != null && !oAuth2AccessTokenDOS.isEmpty()){
|
||||||
};
|
return oAuth2AccessTokenDOS.get(0);
|
||||||
|
}else return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -78,4 +78,5 @@ public interface OAuth2TokenService {
|
|||||||
*/
|
*/
|
||||||
PageResult<OAuth2AccessTokenDO> getAccessTokenPage(OAuth2AccessTokenPageReqVO reqVO);
|
PageResult<OAuth2AccessTokenDO> getAccessTokenPage(OAuth2AccessTokenPageReqVO reqVO);
|
||||||
|
|
||||||
|
Integer getUserIdByAccessToken(String token);
|
||||||
}
|
}
|
||||||
|
@@ -163,6 +163,16 @@ public class OAuth2TokenServiceImpl implements OAuth2TokenService {
|
|||||||
return oauth2AccessTokenMapper.selectPage(reqVO);
|
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) {
|
private OAuth2AccessTokenDO createOAuth2AccessToken(OAuth2RefreshTokenDO refreshTokenDO, OAuth2ClientDO clientDO) {
|
||||||
OAuth2AccessTokenDO accessTokenDO = new OAuth2AccessTokenDO().setAccessToken(generateAccessToken())
|
OAuth2AccessTokenDO accessTokenDO = new OAuth2AccessTokenDO().setAccessToken(generateAccessToken())
|
||||||
.setUserId(refreshTokenDO.getUserId()).setUserType(refreshTokenDO.getUserType())
|
.setUserId(refreshTokenDO.getUserId()).setUserType(refreshTokenDO.getUserType())
|
||||||
|
@@ -124,10 +124,10 @@ rocketmq:
|
|||||||
spring:
|
spring:
|
||||||
# RabbitMQ 配置项,对应 RabbitProperties 配置类
|
# RabbitMQ 配置项,对应 RabbitProperties 配置类
|
||||||
rabbitmq:
|
rabbitmq:
|
||||||
host: 124.220.236.38 # RabbitMQ 服务的地址
|
host: 8.153.204.174 # RabbitMQ 服务的地址
|
||||||
port: 5672 # RabbitMQ 服务的端口
|
port: 5672 # RabbitMQ 服务的端口
|
||||||
username: admin # RabbitMQ 服务的账号
|
username: rabbitmq # RabbitMQ 服务的账号
|
||||||
password: Cd5XhnCt # RabbitMQ 服务的密码
|
password: rabbitmq # RabbitMQ 服务的密码
|
||||||
# Kafka 配置项,对应 KafkaProperties 配置类
|
# Kafka 配置项,对应 KafkaProperties 配置类
|
||||||
kafka:
|
kafka:
|
||||||
bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
|
bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔
|
||||||
|
@@ -48,7 +48,7 @@ springdoc:
|
|||||||
default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档
|
default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档
|
||||||
|
|
||||||
knife4j:
|
knife4j:
|
||||||
enable: false # TODO 芋艿:需要关闭增强,具体原因见:https://github.com/xiaoymin/knife4j/issues/874
|
enable: false # TODO 需要关闭增强,具体原因见:https://github.com/xiaoymin/knife4j/issues/874
|
||||||
setting:
|
setting:
|
||||||
language: zh_cn
|
language: zh_cn
|
||||||
|
|
||||||
@@ -361,7 +361,7 @@ yudao:
|
|||||||
kd100:
|
kd100:
|
||||||
key: pLXUGAwK5305
|
key: pLXUGAwK5305
|
||||||
customer: E77DF18BE109F454A5CD319E44BF5177
|
customer: E77DF18BE109F454A5CD319E44BF5177
|
||||||
pay: #微信支付配置 todo 请自行配置
|
pay: #微信支付配置 TODO 请自行配置
|
||||||
wechat:
|
wechat:
|
||||||
app-id: wxed3e5106f6adce94
|
app-id: wxed3e5106f6adce94
|
||||||
mch-id: 1312305301
|
mch-id: 1312305301
|
||||||
@@ -370,7 +370,7 @@ yudao:
|
|||||||
notify-url: https://www.weixin.qq.com/wxpay/pay.php
|
notify-url: https://www.weixin.qq.com/wxpay/pay.php
|
||||||
|
|
||||||
debug: false
|
debug: false
|
||||||
# 插件配置 TODO 芋艿:【IOT】需要处理下
|
# 插件配置 TODO 【IOT】需要处理下
|
||||||
pf4j:
|
pf4j:
|
||||||
pluginsDir: /Users/anhaohao/code/gitee/ruoyi-vue-pro/plugins # 插件目录
|
pluginsDir: /Users/anhaohao/code/gitee/ruoyi-vue-pro/plugins # 插件目录
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user