diff --git a/README.md b/README.md index f88c7d87d..06c07f4fd 100644 --- a/README.md +++ b/README.md @@ -1,376 +1,26 @@ -

- Coverage Status - Downloads - Downloads - Downloads -

-**严肃声明:现在、未来都不会有商业版本,所有代码全部开源!!** - -**「我喜欢写代码,乐此不疲」** -**「我喜欢做开源,以此为乐」** - -我 🐶 在上海艰苦奋斗,早中晚在 top3 大厂认真搬砖,夜里为开源做贡献。 - -如果这个项目让你有所收获,记得 Star 关注哦,这对我是非常不错的鼓励与支持。 - -可参考 [《迁移文档》](https://cloud.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】 - -## 🐶 新手必读 - -* 演示地址【Vue3 + element-plus】: -* 演示地址【Vue3 + vben(ant-design-vue)】: -* 演示地址【Vue2 + element-ui】: -* 启动文档: -* 视频教程: - -## 🐰 版本说明 - -| 版本 | JDK 8 + Spring Boot 2.7 | JDK 17/21 + Spring Boot 3.2 | -|-----------------------------------------------------------------------|--------------------------------------------------------------------------|--------------------------------------------------------------------------------------| -| 【完整版】[yudao-cloud](https://gitee.com/zhijiantianya/yudao-cloud) | [`master`](https://gitee.com/zhijiantianya/yudao-cloud/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/zhijiantianya/yudao-cloud/tree/master-jdk17/) 分支 | -| 【精简版】[yudao-cloud-mini](https://gitee.com/yudaocode/yudao-cloud-mini) | [`master`](https://gitee.com/yudaocode/yudao-cloud-mini/tree/master/) 分支 | [`master-jdk17`](https://gitee.com/yudaocode/yudao-cloud-mini/tree/master-jdk17/) 分支 | - -* 【完整版】:包括系统功能、基础设施、会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP 等功能 -* 【精简版】:只包括系统功能、基础设施功能,不包括会员中心、数据报表、工作流程、商城系统、微信公众号、CRM、ERP 等功能 - -可参考 [《迁移文档》](https://cloud.iocoder.cn/migrate-module/) ,只需要 5-10 分钟,即可将【完整版】按需迁移到【精简版】 - -## 🐯 平台简介 - -**芋道**,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。 - -> 有任何问题,或者想要的功能,可以在 _Issues_ 中提给艿艿。 -> -> 😜 给项目点点 Star 吧,这对我们真的很重要! - -![架构图](/.image/common/yudao-cloud-architecture.png) - -* Java 后端:`master` 分支为 JDK 8 + Spring Boot 2.7,`master-jdk17` 分支为 JDK 17/21 + Spring Boot 3.2 -* 管理后台的电脑端:Vue3 提供 [element-plus](https://gitee.com/yudaocode/yudao-ui-admin-vue3)、[vben(ant-design-vue)](https://gitee.com/yudaocode/yudao-ui-admin-vben) 两个版本,Vue2 提供 [element-ui](https://gitee.com/zhijiantianya/ruoyi-vue-pro/tree/master/yudao-ui-admin) 版本 -* 管理后台的移动端:采用 [uni-app](https://github.com/dcloudio/uni-app) 方案,一份代码多终端适配,同时支持 APP、小程序、H5! -* 后端采用 Spring Cloud Alibaba 微服务架构,注册中心 + 配置中心 Nacos,定时任务 XXL-Job,服务保障 Sentinel,服务网关 Gateway,分布式事务 Seata -* 数据库可使用 MySQL、Oracle、PostgreSQL、SQL Server、MariaDB、国产达梦 DM、TiDB 等,基于 MyBatis Plus、Redis + Redisson 操作 -* 消息队列可使用 Event、Redis、RabbitMQ、Kafka、RocketMQ 等 -* 权限认证使用 Spring Security & Token & Redis,支持多终端、多种用户的认证系统,支持 SSO 单点登录 -* 支持加载动态权限菜单,按钮级别权限控制,Redis 缓存提升性能 -* 支持 SaaS 多租户,可自定义每个租户的权限,提供透明化的多租户底层封装 -* 工作流使用 Flowable,支持动态表单、在线设计流程、会签 / 或签、多种任务分配方式 -* 高效率开发,使用代码生成器可以一键生成 Java、Vue 前后端代码、SQL 脚本、接口文档,支持单表、树表、主子表 -* 实时通信,采用 Spring WebSocket 实现,内置 Token 身份校验,支持 WebSocket 集群 -* 集成微信小程序、微信公众号、企业微信、钉钉等三方登陆,集成支付宝、微信等支付与退款 -* 集成阿里云、腾讯云等短信渠道,集成 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 实现的大屏报表 | - -## 😎 开源协议 - -**为什么推荐使用本项目?** - -① 本项目采用比 Apache 2.0 更宽松的 [MIT License](https://gitee.com/zhijiantianya/ruoyi-vue-pro/blob/master/LICENSE) 开源协议,个人与企业可 100% 免费使用,不用保留类作者、Copyright 信息。 - -② 代码全部开源,不会像其他项目一样,只开源部分代码,让你无法了解整个项目的架构设计。[国产开源项目对比](https://www.yuque.com/xiatian-bsgny/lm0ec1/wqf8mn) - -![开源项目对比](/.image/common/project-vs.png) - -③ 代码整洁、架构整洁,遵循《阿里巴巴 Java 开发手册》规范,代码注释详细,113770 行 Java 代码,42462 行代码注释。 - -## 🤝 项目外包 - -我们也是接外包滴,如果你有项目想要外包,可以微信联系【**Aix9975**】。 - -团队包含专业的项目经理、架构师、前端工程师、后端工程师、测试工程师、运维工程师,可以提供全流程的外包服务。 - -项目可以是商城、SCRM 系统、OA 系统、物流系统、ERP 系统、CMS 系统、HIS 系统、支付系统、IM 聊天、微信公众号、微信小程序等等。 - -## 🐼 内置功能 - -系统内置多种多种业务功能,可以用于快速你的业务系统: - -![功能分层](/.image/common/ruoyi-vue-pro-biz.png) - -* 通用模块(必选):系统功能、基础设施 -* 通用模块(可选):工作流程、支付系统、数据报表、会员中心 -* 业务系统(按需):ERP 系统、CRM 系统、商城系统、微信公众号、AI 大模型 - -> 友情提示:本项目基于 RuoYi-Vue 修改,**重构优化**后端的代码,**美化**前端的界面。 -> -> * 额外新增的功能,我们使用 🚀 标记。 -> * 重新实现的功能,我们使用 ⭐️ 标记。 - -🙂 所有功能,都通过 **单元测试** 保证高质量。 - -### 系统功能 - -| | 功能 | 描述 | -|-----|-------|---------------------------------| -| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 | -| ⭐️ | 在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 | -| | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 | -| | 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能 | -| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 | -| | 岗位管理 | 配置系统用户所属担任职务 | -| 🚀 | 租户管理 | 配置系统租户,支持 SaaS 场景下的多租户功能 | -| 🚀 | 租户套餐 | 配置租户套餐,自定每个租户的菜单、操作、按钮的权限 | -| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | -| 🚀 | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、腾讯云等主流短信平台 | -| 🚀 | 邮件管理 | 邮箱账号、邮件模版、邮件发送日志,支持所有邮件平台 | -| 🚀 | 站内信 | 系统内的消息通知,提供站内信模版、站内信消息 | -| 🚀 | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 | -| ⭐️ | 登录日志 | 系统登录日志记录查询,包含登录异常 | -| 🚀 | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 | -| | 通知公告 | 系统通知公告信息发布维护 | -| 🚀 | 敏感词 | 配置系统敏感词,支持标签分组 | -| 🚀 | 应用管理 | 管理 SSO 单点登录的应用,支持多种 OAuth2 授权方式 | -| 🚀 | 地区管理 | 展示省份、城市、区镇等城市信息,支持 IP 对应城市 | - -![功能图](/.image/common/system-feature.png) - -### 工作流程 - -| | 功能 | 描述 | -|----|-------|-----------------------------------------| -| 🚀 | 流程模型 | 配置工作流的流程模型,支持 BPMN 和仿钉钉/飞书设计器 | -| 🚀 | 流程表单 | 拖动表单元素生成相应的工作流表单,覆盖 Element UI 所有的表单组件 | -| 🚀 | 用户分组 | 自定义用户分组,可用于工作流的审批分组 | -| 🚀 | 我的流程 | 查看我发起的工作流程,支持新建、取消流程等操作,高亮流程图、审批时间线 | -| 🚀 | 待办任务 | 查看自己【未】审批的工作任务,支持通过、不通过、转派、委派、退回、加减签等操作 | -| 🚀 | 已办任务 | 查看自己【已】审批的工作任务,支持流程预测,展示未来审批人信息 | -| 🚀 | OA 请假 | 作为业务自定义接入工作流的使用示例,只需创建请求对应的工作流程,即可进行审批 | - -![功能图](/.image/common/bpm-feature.png) - -| BPMN 设计器 | 钉钉/飞书设计器 | -|------------------------------|--------------------------------| -| ![](/.image/工作流设计器-bpmn.jpg) | ![](/.image/工作流设计器-simple.jpg) | - -### 支付系统 - -| | 功能 | 描述 | -|-----|------|---------------------------| -| 🚀 | 应用信息 | 配置商户的应用信息,对接支付宝、微信等多个支付渠道 | -| 🚀 | 支付订单 | 查看用户发起的支付宝、微信等的【支付】订单 | -| 🚀 | 退款订单 | 查看用户发起的支付宝、微信等的【退款】订单 | -| 🚀 | 回调通知 | 查看支付回调业务的【支付】【退款】的通知结果 | -| 🚀 | 接入示例 | 提供接入支付系统的【支付】【退款】的功能实战 | - -### 基础设施 - -| | 功能 | 描述 | -|-----|-----------|----------------------------------------------| -| 🚀 | 代码生成 | 前后端代码的生成(Java、Vue、SQL、单元测试),支持 CRUD 下载 | -| 🚀 | 系统接口 | 基于 Swagger 自动生成相关的 RESTful API 接口文档 | -| 🚀 | 数据库文档 | 基于 Screw 自动生成数据库文档,支持导出 Word、HTML、MD 格式 | -| | 表单构建 | 拖动表单元素生成相应的 HTML 代码,支持导出 JSON、Vue 文件 | -| 🚀 | 配置管理 | 对系统动态配置常用参数,支持 SpringBoot 加载 | -| ⭐️ | 定时任务 | 在线(添加、修改、删除)任务调度包含执行结果日志 | -| 🚀 | 文件服务 | 支持将文件存储到 S3(MinIO、阿里云、腾讯云、七牛云)、本地、FTP、数据库等 | -| 🚀 | WebSocket | 提供 WebSocket 接入示例,支持一对一、一对多发送方式 | -| 🚀 | API 日志 | 包括 RESTful API 访问日志、异常日志两部分,方便排查 API 相关的问题 | -| | MySQL 监控 | 监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈 | -| | Redis 监控 | 监控 Redis 数据库的使用情况,使用的 Redis Key 管理 | -| 🚀 | 消息队列 | 基于 Redis 实现消息队列,Stream 提供集群消费,Pub/Sub 提供广播消费 | -| 🚀 | Java 监控 | 基于 Spring Boot Admin 实现 Java 应用的监控 | -| 🚀 | 链路追踪 | 接入 SkyWalking 组件,实现链路追踪 | -| 🚀 | 日志中心 | 接入 SkyWalking 组件,实现日志中心 | -| 🚀 | 服务保障 | 基于 Redis 实现分布式锁、幂等、限流功能,满足高并发场景 | -| 🚀 | 日志服务 | 轻量级日志中心,查看远程服务器的日志 | -| 🚀 | 单元测试 | 基于 JUnit + Mockito 实现单元测试,保证功能的正确性、代码的质量等 | - -![功能图](/.image/common/infra-feature.png) - -### 数据报表 - -| | 功能 | 描述 | -|-----|-------|--------------------| -| 🚀 | 报表设计器 | 支持数据报表、图形报表、打印设计等 | -| 🚀 | 大屏设计器 | 拖拽生成数据大屏,内置几十种图表组件 | - -### 微信公众号 - -| | 功能 | 描述 | -|-----|--------|-------------------------------| -| 🚀 | 账号管理 | 配置接入的微信公众号,可支持多个公众号 | -| 🚀 | 数据统计 | 统计公众号的用户增减、累计用户、消息概况、接口分析等数据 | -| 🚀 | 粉丝管理 | 查看已关注、取关的粉丝列表,可对粉丝进行同步、打标签等操作 | -| 🚀 | 消息管理 | 查看粉丝发送的消息列表,可主动回复粉丝消息 | -| 🚀 | 自动回复 | 自动回复粉丝发送的消息,支持关注回复、消息回复、关键字回复 | -| 🚀 | 标签管理 | 对公众号的标签进行创建、查询、修改、删除等操作 | -| 🚀 | 菜单管理 | 自定义公众号的菜单,也可以从公众号同步菜单 | -| 🚀 | 素材管理 | 管理公众号的图片、语音、视频等素材,支持在线播放语音、视频 | -| 🚀 | 图文草稿箱 | 新增常用的图文素材到草稿箱,可发布到公众号 | -| 🚀 | 图文发表记录 | 查看已发布成功的图文素材,支持删除操作 | - -### 商城系统 - -演示地址: - -![功能图](/.image/common/mall-feature.png) - -![功能图](/.image/common/mall-preview.png) - -### 会员中心 - -| | 功能 | 描述 | -|-----|------|----------------------------------| -| 🚀 | 会员管理 | 会员是 C 端的消费者,该功能用于会员的搜索与管理 | -| 🚀 | 会员标签 | 对会员的标签进行创建、查询、修改、删除等操作 | -| 🚀 | 会员等级 | 对会员的等级、成长值进行管理,可用于订单折扣等会员权益 | -| 🚀 | 会员分组 | 对会员进行分组,用于用户画像、内容推送等运营手段 | -| 🚀 | 积分签到 | 回馈给签到、消费等行为的积分,会员可订单抵现、积分兑换等途径消耗 | - -### ERP 系统 - -演示地址: - -![功能图](/.image/common/erp-feature.png) - -### CRM 系统 - -演示地址: - -![功能图](/.image/common/crm-feature.png) - -### AI 大模型 - -演示地址: - -![功能图](/.image/common/ai-feature.png) - -![功能图](/.image/common/ai-preview.gif) - -## 🐨 技术栈 - -### 微服务 - -| 项目 | 说明 | -|-----------------------|--------------------| -| `yudao-dependencies` | Maven 依赖版本管理 | -| `yudao-framework` | Java 框架拓展 | -| `yudao-server` | 管理后台 + 用户 APP 的服务端 | -| `yudao-module-system` | 系统功能的 Module 模块 | -| `yudao-module-member` | 会员中心的 Module 模块 | -| `yudao-module-infra` | 基础设施的 Module 模块 | -| `yudao-module-bpm` | 工作流程的 Module 模块 | -| `yudao-module-pay` | 支付系统的 Module 模块 | -| `yudao-module-mall` | 商城系统的 Module 模块 | -| `yudao-module-erp` | ERP 系统的 Module 模块 | -| `yudao-module-crm` | CRM 系统的 Module 模块 | -| `yudao-module-ai` | AI 大模型的 Module 模块 | -| `yudao-module-mp` | 微信公众号的 Module 模块 | -| `yudao-module-report` | 大屏报表 Module 模块 | - -### 框架 - -| 框架 | 说明 | 版本 | 学习指南 | -|---------------------------------------------------------------------------------------------|------------------|------------|---------------------------------------------------------------------| -| [Spring Cloud Alibaba](https://github.com/alibaba/spring-cloud-alibaba) | 微服务框架 | 2023.0.1 | [文档](https://github.com/YunaiV/SpringBoot-Labs) | -| [Nacos](https://github.com/alibaba/nacos) | 配置中心 & 注册中心 | 2.3.2 | [文档](https://www.iocoder.cn/categories/Nacos/?yudao) | -| [RocketMQ](https://github.com/apache/rocketmq) | 消息队列 | 5.2.0 | [文档](https://www.iocoder.cn/categories/RocketMQ/?yudao) | -| [Sentinel](https://github.com/alibaba/sentinel) | 服务保障 | 1.8.6 | [文档](https://www.iocoder.cn/categories/Sentinel/?yudao) | -| [XXL Job](https://github.com/xuxueli/xxl-job) | 定时任务 | 2.4.0 | [文档](https://www.iocoder.cn/XXL-JOB/good-collection/?yudao) | -| [Spring Cloud Gateway](https://github.com/spring-cloud/spring-cloud-gateway) | 服务网关 | 4.1.0 | [文档](https://www.iocoder.cn/categories/Spring-Cloud-Gateway/?yudao) | -| [Seata](https://github.com/seata/seata) | 分布式事务 | 1.6.1 | [文档](https://www.iocoder.cn/categories/Seata/?yudao) | -| [MySQL](https://www.mysql.com/cn/) | 数据库服务器 | 5.7 / 8.0+ | | -| [Druid](https://github.com/alibaba/druid) | JDBC 连接池、监控组件 | 1.2.23 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | -| [MyBatis Plus](https://mp.baomidou.com/) | MyBatis 增强工具包 | 3.5.7 | [文档](http://www.iocoder.cn/Spring-Boot/MyBatis/?yudao) | -| [Dynamic Datasource](https://dynamic-datasource.com/) | 动态数据源 | 4.3.1 | [文档](http://www.iocoder.cn/Spring-Boot/datasource-pool/?yudao) | -| [Redis](https://redis.io/) | key-value 数据库 | 5.0 / 6.0 | | -| [Redisson](https://github.com/redisson/redisson) | Redis 客户端 | 3.32.0 | [文档](http://www.iocoder.cn/Spring-Boot/Redis/?yudao) | -| [Spring MVC](https://github.com/spring-projects/spring-framework/tree/master/spring-webmvc) | MVC 框架 | 6.1.10 | [文档](http://www.iocoder.cn/SpringMVC/MVC/?yudao) | -| [Spring Security](https://github.com/spring-projects/spring-security) | Spring 安全框架 | 6.3.1 | [文档](http://www.iocoder.cn/Spring-Boot/Spring-Security/?yudao) | -| [Hibernate Validator](https://github.com/hibernate/hibernate-validator) | 参数校验组件 | 8.0.1 | [文档](http://www.iocoder.cn/Spring-Boot/Validation/?yudao) | -| [Flowable](https://github.com/flowable/flowable-engine) | 工作流引擎 | 7.0.0 | [文档](https://doc.iocoder.cn/bpm/) | -| [Knife4j](https://gitee.com/xiaoym/knife4j) | Swagger 增强 UI 实现 | 4.5.0 | [文档](http://www.iocoder.cn/Spring-Boot/Swagger/?yudao) | -| [SkyWalking](https://skywalking.apache.org/) | 分布式应用追踪系统 | 9.0.0 | [文档](http://www.iocoder.cn/Spring-Boot/SkyWalking/?yudao) | -| [Spring Boot Admin](https://github.com/codecentric/spring-boot-admin) | Spring Boot 监控平台 | 3.6.1 | [文档](http://www.iocoder.cn/Spring-Boot/Admin/?yudao) | -| [Jackson](https://github.com/FasterXML/jackson) | JSON 工具库 | 2.17.1 | | -| [MapStruct](https://mapstruct.org/) | Java Bean 转换 | 1.6.3 | [文档](http://www.iocoder.cn/Spring-Boot/MapStruct/?yudao) | -| [Lombok](https://projectlombok.org/) | 消除冗长的 Java 代码 | 1.18.34 | [文档](http://www.iocoder.cn/Spring-Boot/Lombok/?yudao) | -| [JUnit](https://junit.org/junit5/) | Java 单元测试框架 | 5.10.1 | - | -| [Mockito](https://github.com/mockito/mockito) | Java Mock 框架 | 5.7.0 | - | - -## 🐷 演示图 - -### 系统功能 - -| 模块 | biu | biu | biu | -|----------|-----------------------------|---------------------------|--------------------------| -| 登录 & 首页 | ![登录](/.image/登录.jpg) | ![首页](/.image/首页.jpg) | ![个人中心](/.image/个人中心.jpg) | -| 用户 & 应用 | ![用户管理](/.image/用户管理.jpg) | ![令牌管理](/.image/令牌管理.jpg) | ![应用管理](/.image/应用管理.jpg) | -| 租户 & 套餐 | ![租户管理](/.image/租户管理.jpg) | ![租户套餐](/.image/租户套餐.png) | - | -| 部门 & 岗位 | ![部门管理](/.image/部门管理.jpg) | ![岗位管理](/.image/岗位管理.jpg) | - | -| 菜单 & 角色 | ![菜单管理](/.image/菜单管理.jpg) | ![角色管理](/.image/角色管理.jpg) | - | -| 审计日志 | ![操作日志](/.image/操作日志.jpg) | ![登录日志](/.image/登录日志.jpg) | - | -| 短信 | ![短信渠道](/.image/短信渠道.jpg) | ![短信模板](/.image/短信模板.jpg) | ![短信日志](/.image/短信日志.jpg) | -| 字典 & 敏感词 | ![字典类型](/.image/字典类型.jpg) | ![字典数据](/.image/字典数据.jpg) | ![敏感词](/.image/敏感词.jpg) | -| 错误码 & 通知 | ![错误码管理](/.image/错误码管理.jpg) | ![通知公告](/.image/通知公告.jpg) | - | - -### 工作流程 - -| 模块 | biu | biu | biu | -|---------|---------------------------------|---------------------------------|---------------------------------| -| 流程模型 | ![流程模型-列表](/.image/流程模型-列表.jpg) | ![流程模型-设计](/.image/流程模型-设计.jpg) | ![流程模型-定义](/.image/流程模型-定义.jpg) | -| 表单 & 分组 | ![流程表单](/.image/流程表单.jpg) | ![用户分组](/.image/用户分组.jpg) | - | -| 我的流程 | ![我的流程-列表](/.image/我的流程-列表.jpg) | ![我的流程-发起](/.image/我的流程-发起.jpg) | ![我的流程-详情](/.image/我的流程-详情.jpg) | -| 待办 & 已办 | ![任务列表-审批](/.image/任务列表-审批.jpg) | ![任务列表-待办](/.image/任务列表-待办.jpg) | ![任务列表-已办](/.image/任务列表-已办.jpg) | -| OA 请假 | ![OA请假-列表](/.image/OA请假-列表.jpg) | ![OA请假-发起](/.image/OA请假-发起.jpg) | ![OA请假-详情](/.image/OA请假-详情.jpg) | - -### 基础设施 - -| 模块 | biu | biu | biu | -|---------------|-------------------------------|-----------------------------|---------------------------| -| 代码生成 | ![代码生成](/.image/代码生成.jpg) | ![生成效果](/.image/生成效果.jpg) | - | -| 文档 | ![系统接口](/.image/系统接口.jpg) | ![数据库文档](/.image/数据库文档.jpg) | - | -| 文件 & 配置 | ![文件配置](/.image/文件配置.jpg) | ![文件管理](/.image/文件管理2.jpg) | ![配置管理](/.image/配置管理.jpg) | -| 定时任务 | ![定时任务](/.image/定时任务.jpg) | ![任务日志](/.image/任务日志.jpg) | - | -| API 日志 | ![访问日志](/.image/访问日志.jpg) | ![错误日志](/.image/错误日志.jpg) | - | -| MySQL & Redis | ![MySQL](/.image/MySQL.jpg) | ![Redis](/.image/Redis.jpg) | - | -| 监控平台 | ![Java监控](/.image/Java监控.jpg) | ![链路追踪](/.image/链路追踪.jpg) | ![日志中心](/.image/日志中心.jpg) | - -### 支付系统 - -| 模块 | biu | biu | biu | -|---------|---------------------------|---------------------------------|---------------------------------| -| 商家 & 应用 | ![商户信息](/.image/商户信息.jpg) | ![应用信息-列表](/.image/应用信息-列表.jpg) | ![应用信息-编辑](/.image/应用信息-编辑.jpg) | -| 支付 & 退款 | ![支付订单](/.image/支付订单.jpg) | ![退款订单](/.image/退款订单.jpg) | --- | -### 数据报表 - -| 模块 | biu | biu | biu | -|-------|---------------------------------|---------------------------------|---------------------------------------| -| 报表设计器 | ![数据报表](/.image/报表设计器-数据报表.jpg) | ![图形报表](/.image/报表设计器-图形报表.jpg) | ![报表设计器-打印设计](/.image/报表设计器-打印设计.jpg) | -| 大屏设计器 | ![大屏列表](/.image/大屏设计器-列表.jpg) | ![大屏预览](/.image/大屏设计器-预览.jpg) | ![大屏编辑](/.image/大屏设计器-编辑.jpg) | - -### 移动端(管理后台) - -| biu | biu | biu | -|----------------------------------|----------------------------------|----------------------------------| -| ![](/.image/admin-uniapp/01.png) | ![](/.image/admin-uniapp/02.png) | ![](/.image/admin-uniapp/03.png) | -| ![](/.image/admin-uniapp/04.png) | ![](/.image/admin-uniapp/05.png) | ![](/.image/admin-uniapp/06.png) | -| ![](/.image/admin-uniapp/07.png) | ![](/.image/admin-uniapp/08.png) | ![](/.image/admin-uniapp/09.png) | - -目前已经实现登录、我的、工作台、编辑资料、头像修改、密码修改、常见问题、关于我们等基础功能。 +### 系统功能代码结构 + +```lua + +| | 功能 | 描述 | +|-|----------------------------------------| +| | 用户管理 | 用户是系统操作者,该功能主要完成系统用户配置 | +| | 在线用户 | 当前系统中活跃用户状态监控,支持手动踢下线 | +| | 角色管理 | 角色菜单权限分配、设置角色按机构进行数据范围权限划分 | +| | 菜单管理 | 配置系统菜单、操作权限、按钮权限标识等,本地缓存提供性能 | +| | 部门管理 | 配置系统组织机构(公司、部门、小组),树结构展现支持数据权限 | +| | 岗位管理 | 配置系统用户所属担任职务 | +| | 租户管理 | 配置系统租户,支持 SaaS 场景下的多租户功能 | +| | 租户套餐 | 配置租户套餐,自定每个租户的菜单、操作、按钮的权限 | +| | 字典管理 | 对系统中经常使用的一些较为固定的数据进行维护 | +| | 短信管理 | 短信渠道、短息模板、短信日志,对接阿里云、腾讯云等主流短信平台 | +| | 邮件管理 | 邮箱账号、邮件模版、邮件发送日志,支持所有邮件平台 | +| | 站内信 | 系统内的消息通知,提供站内信模版、站内信消息 | +| | 操作日志 | 系统正常操作日志记录和查询,集成 Swagger 生成日志内容 | +| | 登录日志 | 系统登录日志记录查询,包含登录异常 | +| | 错误码管理 | 系统所有错误码的管理,可在线修改错误提示,无需重启服务 | +| | 通知公告 | 系统通知公告信息发布维护 | +| | 敏感词 | 配置系统敏感词,支持标签分组 | +| | 应用管理 | 管理 SSO 单点登录的应用,支持多种 OAuth2 授权方式 | +| | 地区管理 | 展示省份、城市、区镇等城市信息,支持 IP 对应城市 | diff --git a/pom.xml b/pom.xml index 990cdb148..cf88f9ca3 100644 --- a/pom.xml +++ b/pom.xml @@ -23,6 +23,7 @@ yudao-module-crm yudao-module-erp yudao-module-ai + yudao-module-hrmrg ${project.artifactId} diff --git a/yudao-framework/yudao-common/《芋道 Spring Boot 参数校验 Validation 入门》.md b/yudao-framework/yudao-common/《芋道 Spring Boot 参数校验 Validation 入门》.md deleted file mode 100644 index b2c2cf8f5..000000000 --- a/yudao-framework/yudao-common/《芋道 Spring Boot 参数校验 Validation 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-job/《芋道 Spring Boot 定时任务入门》.md b/yudao-framework/yudao-spring-boot-starter-job/《芋道 Spring Boot 定时任务入门》.md deleted file mode 100644 index 65647011c..000000000 --- a/yudao-framework/yudao-spring-boot-starter-job/《芋道 Spring Boot 定时任务入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-job/《芋道 Spring Boot 异步任务入门》.md b/yudao-framework/yudao-spring-boot-starter-job/《芋道 Spring Boot 异步任务入门》.md deleted file mode 100644 index 5822b838c..000000000 --- a/yudao-framework/yudao-spring-boot-starter-job/《芋道 Spring Boot 异步任务入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md b/yudao-framework/yudao-spring-boot-starter-monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md deleted file mode 100644 index 7f898b9ce..000000000 --- a/yudao-framework/yudao-spring-boot-starter-monitor/《芋道 Spring Boot 监控工具 Admin 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-monitor/《芋道 Spring Boot 监控端点 Actuator 入门》.md b/yudao-framework/yudao-spring-boot-starter-monitor/《芋道 Spring Boot 监控端点 Actuator 入门》.md deleted file mode 100644 index b73a460c1..000000000 --- a/yudao-framework/yudao-spring-boot-starter-monitor/《芋道 Spring Boot 监控端点 Actuator 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-monitor/《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md b/yudao-framework/yudao-spring-boot-starter-monitor/《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md deleted file mode 100644 index ed9d4fe47..000000000 --- a/yudao-framework/yudao-spring-boot-starter-monitor/《芋道 Spring Boot 链路追踪 SkyWalking 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 事件机制 Event 入门》.md b/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 事件机制 Event 入门》.md deleted file mode 100644 index 08586b379..000000000 --- a/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 事件机制 Event 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 Kafka 入门》.md b/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 Kafka 入门》.md deleted file mode 100644 index b66d6334c..000000000 --- a/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 Kafka 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RabbitMQ 入门》.md b/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RabbitMQ 入门》.md deleted file mode 100644 index eff46e2f7..000000000 --- a/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RabbitMQ 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RocketMQ 入门》.md b/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RocketMQ 入门》.md deleted file mode 100644 index 08586b379..000000000 --- a/yudao-framework/yudao-spring-boot-starter-mq/《芋道 Spring Boot 消息队列 RocketMQ 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md b/yudao-framework/yudao-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md deleted file mode 100644 index d684e1dd6..000000000 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/《芋道 Spring Boot MyBatis 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/《芋道 Spring Boot 多数据源(读写分离)入门》.md b/yudao-framework/yudao-spring-boot-starter-mybatis/《芋道 Spring Boot 多数据源(读写分离)入门》.md deleted file mode 100644 index 21133741e..000000000 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/《芋道 Spring Boot 多数据源(读写分离)入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-mybatis/《芋道 Spring Boot 数据库连接池入门》.md b/yudao-framework/yudao-spring-boot-starter-mybatis/《芋道 Spring Boot 数据库连接池入门》.md deleted file mode 100644 index 21b5075d5..000000000 --- a/yudao-framework/yudao-spring-boot-starter-mybatis/《芋道 Spring Boot 数据库连接池入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-redis/《芋道 Spring Boot Cache 入门》.md b/yudao-framework/yudao-spring-boot-starter-redis/《芋道 Spring Boot Cache 入门》.md deleted file mode 100644 index 5c2708316..000000000 --- a/yudao-framework/yudao-spring-boot-starter-redis/《芋道 Spring Boot Cache 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-redis/《芋道 Spring Boot Redis 入门》.md b/yudao-framework/yudao-spring-boot-starter-redis/《芋道 Spring Boot Redis 入门》.md deleted file mode 100644 index 80c544590..000000000 --- a/yudao-framework/yudao-spring-boot-starter-redis/《芋道 Spring Boot Redis 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-rpc/《芋道 Spring Boot 声明式调用 Feign 入门》.md b/yudao-framework/yudao-spring-boot-starter-rpc/《芋道 Spring Boot 声明式调用 Feign 入门》.md deleted file mode 100644 index 6df6a3801..000000000 --- a/yudao-framework/yudao-spring-boot-starter-rpc/《芋道 Spring Boot 声明式调用 Feign 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-rpc/《芋道 Spring Cloud 声明式调用 Feign 入门》.md b/yudao-framework/yudao-spring-boot-starter-rpc/《芋道 Spring Cloud 声明式调用 Feign 入门》.md deleted file mode 100644 index b419fd006..000000000 --- a/yudao-framework/yudao-spring-boot-starter-rpc/《芋道 Spring Cloud 声明式调用 Feign 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-security/《芋道 Spring Boot 安全框架 Spring Security 入门》.md b/yudao-framework/yudao-spring-boot-starter-security/《芋道 Spring Boot 安全框架 Spring Security 入门》.md deleted file mode 100644 index b8a89316f..000000000 --- a/yudao-framework/yudao-spring-boot-starter-security/《芋道 Spring Boot 安全框架 Spring Security 入门》.md +++ /dev/null @@ -1,2 +0,0 @@ -* 芋道 Spring Security 入门: -* Spring Security 基本概念: diff --git a/yudao-framework/yudao-spring-boot-starter-test/《芋道 Spring Boot 单元测试 Test 入门》.md b/yudao-framework/yudao-spring-boot-starter-test/《芋道 Spring Boot 单元测试 Test 入门》.md deleted file mode 100644 index c6d0e9a90..000000000 --- a/yudao-framework/yudao-spring-boot-starter-test/《芋道 Spring Boot 单元测试 Test 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-web/《芋道 Spring Boot API 接口文档 Swagger 入门》.md b/yudao-framework/yudao-spring-boot-starter-web/《芋道 Spring Boot API 接口文档 Swagger 入门》.md deleted file mode 100644 index 7ed5ebd1b..000000000 --- a/yudao-framework/yudao-spring-boot-starter-web/《芋道 Spring Boot API 接口文档 Swagger 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-web/《芋道 Spring Boot SpringMVC 入门》.md b/yudao-framework/yudao-spring-boot-starter-web/《芋道 Spring Boot SpringMVC 入门》.md deleted file mode 100644 index 7c36a1591..000000000 --- a/yudao-framework/yudao-spring-boot-starter-web/《芋道 Spring Boot SpringMVC 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-framework/yudao-spring-boot-starter-websocket/《芋道 Spring Boot WebSocket 入门》.md b/yudao-framework/yudao-spring-boot-starter-websocket/《芋道 Spring Boot WebSocket 入门》.md deleted file mode 100644 index 8df5a7758..000000000 --- a/yudao-framework/yudao-spring-boot-starter-websocket/《芋道 Spring Boot WebSocket 入门》.md +++ /dev/null @@ -1 +0,0 @@ - diff --git a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/BannerApplicationRunner.java b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/BannerApplicationRunner.java index a3d5ccdaa..34dd9d67b 100644 --- a/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/BannerApplicationRunner.java +++ b/yudao-gateway/src/main/java/cn/iocoder/yudao/gateway/util/BannerApplicationRunner.java @@ -20,35 +20,8 @@ public class BannerApplicationRunner implements ApplicationRunner { @Override public void run(ApplicationArguments args) { ThreadUtil.execute(() -> { - ThreadUtil.sleep(1, TimeUnit.SECONDS); // 延迟 1 秒,保证输出到结尾 - log.info("\n----------------------------------------------------------\n\t" + - "项目启动成功!\n\t" + - "接口文档: \t{} \n\t" + - "开发文档: \t{} \n\t" + - "视频教程: \t{} \n" + - "----------------------------------------------------------", - "https://cloud.iocoder.cn/api-doc/", - "https://cloud.iocoder.cn", - "https://t.zsxq.com/02Yf6M7Qn"); - - // 数据报表 - System.out.println("[报表模块 yudao-module-report 教程][参考 https://cloud.iocoder.cn/report/ 开启]"); - // 工作流 - System.out.println("[工作流模块 yudao-module-bpm 教程][参考 https://cloud.iocoder.cn/bpm/ 开启]"); - // 商城系统 - System.out.println("[商城系统 yudao-module-mall 教程][参考 https://cloud.iocoder.cn/mall/build/ 开启]"); - // ERP 系统 - System.out.println("[ERP 系统 yudao-module-erp - 教程][参考 https://cloud.iocoder.cn/erp/build/ 开启]"); - // CRM 系统 - System.out.println("[CRM 系统 yudao-module-crm - 教程][参考 https://cloud.iocoder.cn/crm/build/ 开启]"); - // 微信公众号 - System.out.println("[微信公众号 yudao-module-mp 教程][参考 https://cloud.iocoder.cn/mp/build/ 开启]"); - // 支付平台 - System.out.println("[支付系统 yudao-module-pay - 教程][参考 https://doc.iocoder.cn/pay/build/ 开启]"); - // AI 大模型 - System.out.println("[AI 大模型 yudao-module-ai - 教程][参考 https://cloud.iocoder.cn/ai/build/ 开启]"); - // IOT 物联网 - System.out.println("[IOT 物联网 yudao-module-iot - 教程][参考 https://doc.iocoder.cn/iot/build/ 开启]"); + //ThreadUtil.sleep(1, TimeUnit.SECONDS); // 延迟 1 秒,保证输出到结尾 + log.info("Yudao-Gateway 启动成功"); }); } diff --git a/yudao-gateway/src/main/resources/application-dev.yaml b/yudao-gateway/src/main/resources/application-dev.yaml index 570439c11..1e8cfa328 100644 --- a/yudao-gateway/src/main/resources/application-dev.yaml +++ b/yudao-gateway/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP diff --git a/yudao-gateway/src/main/resources/application-local.yaml b/yudao-gateway/src/main/resources/application-local.yaml index a7132bd6f..87ee37421 100644 --- a/yudao-gateway/src/main/resources/application-local.yaml +++ b/yudao-gateway/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP diff --git a/yudao-gateway/src/main/resources/application-prod.yaml b/yudao-gateway/src/main/resources/application-prod.yaml new file mode 100644 index 000000000..1e8cfa328 --- /dev/null +++ b/yudao-gateway/src/main/resources/application-prod.yaml @@ -0,0 +1,14 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP \ No newline at end of file diff --git a/yudao-gateway/src/main/resources/application.yaml b/yudao-gateway/src/main/resources/application.yaml index f59435246..402e5389b 100644 --- a/yudao-gateway/src/main/resources/application.yaml +++ b/yudao-gateway/src/main/resources/application.yaml @@ -18,6 +18,45 @@ spring: gateway: # 路由配置项,对应 RouteDefinition 数组 routes: + ## hsfx-server 服务 + - id: hsfx-admin-api # 路由的编号 + uri: grayLb://hsfx-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/hsfx/** + filters: + - RewritePath=/admin-api/hsfx/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v2/api-docs + - id: hsfx-app-api # 路由的编号 + uri: grayLb://hsfx-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/hsfx/** + filters: + - RewritePath=/app-api/hsfx/v3/api-docs, /v3/api-docs + ## hshy-server 服务 + - id: hshy-admin-api # 路由的编号 + uri: grayLb://hshy-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/hshy/** + filters: + - RewritePath=/admin-api/hshy/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v2/api-docs + - id: hshy-app-api # 路由的编号 + uri: grayLb://hshy-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/hshy/** + filters: + - RewritePath=/app-api/hshy/v3/api-docs, /v3/api-docs + ## hrmrg-server 服务 + - id: hrmrg-admin-api # 路由的编号 + uri: grayLb://hrmrg-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/admin-api/hrmrg/** + filters: + - RewritePath=/admin-api/hrmrg/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v2/api-docs + - id: hrmrg-app-api # 路由的编号 + uri: grayLb://hrmrg-server + predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组 + - Path=/app-api/hrmrg/** + filters: + - RewritePath=/app-api/hrmrg/v3/api-docs, /v3/api-docs ## system-server 服务 - id: system-admin-api # 路由的编号 uri: grayLb://system-server @@ -185,6 +224,15 @@ knife4j: gateway: enabled: true routes: + - name: hsfx-server + service-name: hsfx-server + url: /admin-api/hsfx/v3/api-docs + - name: hshy-server + service-name: hshy-server + url: /admin-api/hshy/v3/api-docs + - name: hrmrg-server + service-name: hrmrg-server + url: /admin-api/hrmrg/v3/api-docs - name: system-server service-name: system-server url: /admin-api/system/v3/api-docs @@ -224,7 +272,6 @@ knife4j: - name: ai-server service-name: ai-server url: /admin-api/ai/v3/api-docs - --- #################### 芋道相关配置 #################### yudao: diff --git a/yudao-module-ai/yudao-module-ai-biz/src/main/resources/application-dev.yaml b/yudao-module-ai/yudao-module-ai-biz/src/main/resources/application-dev.yaml index 80dc8f7bf..fded6f330 100644 --- a/yudao-module-ai/yudao-module-ai-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-ai/yudao-module-ai-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -67,7 +67,7 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -76,15 +76,15 @@ spring: # rocketmq 配置项,对应 RocketMQProperties 配置类 rocketmq: - name-server: 127.0.0.1:9876 # RocketMQ Namesrv + name-server: 192.168.1.128:9876 # RocketMQ Namesrv spring: # RabbitMQ 配置项,对应 RabbitProperties 配置类 rabbitmq: - host: 127.0.0.1 # RabbitMQ 服务的地址 + host: 192.168.1.128 # RabbitMQ 服务的地址 port: 5672 # RabbitMQ 服务的端口 - username: guest # RabbitMQ 服务的账号 - password: guest # RabbitMQ 服务的密码 + username: admin # RabbitMQ + password: hsrabbitmq # 服务的密码 # Kafka 配置项,对应 KafkaProperties 配置类 kafka: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 @@ -93,7 +93,7 @@ spring: xxl: job: admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-ai/yudao-module-ai-biz/src/main/resources/application-local.yaml b/yudao-module-ai/yudao-module-ai-biz/src/main/resources/application-local.yaml index f02342638..a919c4316 100644 --- a/yudao-module-ai/yudao-module-ai-biz/src/main/resources/application-local.yaml +++ b/yudao-module-ai/yudao-module-ai-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -89,7 +89,7 @@ spring: xxl: job: admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml index 5d1d6deae..03fdca430 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -55,19 +55,19 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/hs-bpm-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 + password: hs-rootadmin slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/hs-bpm-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 + password: hs-rootadmin # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -78,7 +78,7 @@ spring: xxl: job: admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-local.yaml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-local.yaml index 8e9cbfcf7..cb5a5945e 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-local.yaml +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -56,28 +56,19 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 - # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 - # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 - # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 - # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 - # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/hs-bpm-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 - # username: sa # SQL Server 连接的示例 - # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 - # username: SYSDBA # DM 连接的示例 - # password: SYSDBA # DM 连接的示例 - slave: # 模拟从库,可根据自己需要修改 + password: hs-rootadmin + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + url: jdbc:mysql://192.168.1.128:3306/hs-bpm-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 + password: hs-rootadmin # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 127.0.0.1 # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 0 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -90,7 +81,7 @@ xxl: job: enabled: false # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-prod.yaml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-prod.yaml new file mode 100644 index 000000000..cb5a5945e --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/application-prod.yaml @@ -0,0 +1,128 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://192.168.1.128:3306/hs-bpm-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: hs-rootadmin + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://192.168.1.128:3306/hs-bpm-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: hs-rootadmin + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: 192.168.1.128 # 地址 + port: 6379 # 端口 + database: 0 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + enabled: false # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + cn.iocoder.yudao.module.bpm.dal.mysql: debug + org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + env: # 多环境的配置项 + tag: ${HOSTNAME} + security: + mock-enable: true + access-log: # 访问日志的配置项 + enable: false \ No newline at end of file diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/resources/application-dev.yaml b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/application-dev.yaml index 1a92f8374..6bdbd157a 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -55,19 +55,19 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/hs-crm-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 + password: hs-rootadmin slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 + password: hs-rootadmin # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/resources/application-local.yaml b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/application-local.yaml index f6372f5ab..12e1707fc 100644 --- a/yudao-module-crm/yudao-module-crm-biz/src/main/resources/application-local.yaml +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -56,23 +56,14 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 - # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 - # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 - # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 - # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 - # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/hs-crm-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 - # username: sa # SQL Server 连接的示例 - # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 - # username: SYSDBA # DM 连接的示例 - # password: SYSDBA # DM 连接的示例 - slave: # 模拟从库,可根据自己需要修改 + password: hs-rootadmin + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + url: jdbc:mysql://192.168.1.128:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 + password: hs-rootadmin # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: @@ -89,7 +80,7 @@ xxl: job: enabled: false # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-crm/yudao-module-crm-biz/src/main/resources/application-prod.yaml b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/application-prod.yaml new file mode 100644 index 000000000..b681b7d84 --- /dev/null +++ b/yudao-module-crm/yudao-module-crm-biz/src/main/resources/application-prod.yaml @@ -0,0 +1,128 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://192.168.1.128:3306/hs-crm-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: hs-rootadmin + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://192.168.1.128:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: hs-rootadmin + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: 192.168.1.128 # 地址 + port: 6379 # 端口 + database: 0 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### +xxl: + job: + enabled: false # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + cn.iocoder.yudao.module.crm.dal.mysql: debug + org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + env: # 多环境的配置项 + tag: ${HOSTNAME} + security: + mock-enable: true + access-log: # 访问日志的配置项 + enable: false + demo: false # 关闭演示模式 diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/resources/application-dev.yaml b/yudao-module-erp/yudao-module-erp-biz/src/main/resources/application-dev.yaml index 1a92f8374..7c02c1787 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -67,7 +67,7 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 diff --git a/yudao-module-erp/yudao-module-erp-biz/src/main/resources/application-local.yaml b/yudao-module-erp/yudao-module-erp-biz/src/main/resources/application-local.yaml index 124bafbc6..26c3291fb 100644 --- a/yudao-module-erp/yudao-module-erp-biz/src/main/resources/application-local.yaml +++ b/yudao-module-erp/yudao-module-erp-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -89,7 +89,7 @@ xxl: job: enabled: false # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-hrmrg/pom.xml b/yudao-module-hrmrg/pom.xml new file mode 100644 index 000000000..cb39887b1 --- /dev/null +++ b/yudao-module-hrmrg/pom.xml @@ -0,0 +1,23 @@ + + + + cn.iocoder.cloud + yudao + ${revision} + + + yudao-module-hrmrg-api + yudao-module-hrmrg-biz + + 4.0.0 + yudao-module-hrmrg + pom + + ${project.artifactId} + + hr 包下,人力资源管理(Human Resource Management)。 + + + \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-api/pom.xml b/yudao-module-hrmrg/yudao-module-hrmrg-api/pom.xml new file mode 100644 index 000000000..d8e776b96 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-api/pom.xml @@ -0,0 +1,33 @@ + + + + cn.iocoder.cloud + yudao-module-hrmrg + ${revision} + + 4.0.0 + yudao-module-hrmrg-api + jar + + ${project.artifactId} + + erp 模块 API,暴露给其它模块调用 + + + + + cn.iocoder.cloud + yudao-common + + + + + org.springframework.boot + spring-boot-starter-validation + true + + + + \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-api/src/main/java/cn/iocoder/yudao/module/hrmrg/enums/ErrorCodeConstants.java b/yudao-module-hrmrg/yudao-module-hrmrg-api/src/main/java/cn/iocoder/yudao/module/hrmrg/enums/ErrorCodeConstants.java new file mode 100644 index 000000000..95a033ef5 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-api/src/main/java/cn/iocoder/yudao/module/hrmrg/enums/ErrorCodeConstants.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.hrmrg.enums; +import cn.iocoder.yudao.framework.common.exception.ErrorCode; +/** + * HR 错误码枚举类 + * + * HR 系统,使用 1-100-000-000 段 + */ +public interface ErrorCodeConstants { + // ========== 考勤打卡 TODO 补充编号 ========== + ErrorCode ADMIN_ATMK_NOT_EXISTS = new ErrorCode(1-100-000-000, "考勤打卡不存在"); + + ErrorCode ADMIN_ATMK_FACE_NOT_EXISTS = new ErrorCode(1-200-000-000, "人脸识别库不存在"); + + // ========== 绩效考核配置 TODO 补充编号 ========== + ErrorCode ADMIN_PERF_CFG_NOT_EXISTS = new ErrorCode(1-300-000-000, "绩效考核配置不存在"); + + // ========== 考勤组设置 TODO 补充编号 ========== + ErrorCode ADMIN_ATMK_GROUT_CFG_NOT_EXISTS = new ErrorCode(1-400-000-000, "考勤组设置不存在"); + + // ========== 岗位人员薪资计算配置 TODO 补充编号 ========== + ErrorCode ADMIN_POST_CFG_NOT_EXISTS = new ErrorCode(1-500-000-000, "岗位人员薪资计算配置不存在"); + +} + diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/pom.xml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/pom.xml new file mode 100644 index 000000000..9a171b0a4 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/pom.xml @@ -0,0 +1,169 @@ + + + + cn.iocoder.cloud + yudao-module-hrmrg + ${revision} + + 4.0.0 + yudao-module-hrmrg-biz + jar + + ${project.artifactId} + + HR 模块 BIZ,主要提供 HR 相关的业务功能。 + + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-env + + + + + cn.iocoder.cloud + yudao-module-system-api + ${revision} + + + cn.iocoder.cloud + yudao-module-hrmrg-api + ${revision} + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-biz-tenant + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-security + + + + cn.iocoder.cloud + yudao-spring-boot-starter-websocket + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-mybatis + + + com.baomidou + mybatis-plus-generator + + + + cn.iocoder.cloud + yudao-spring-boot-starter-redis + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-rpc + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-job + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-mq + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-test + test + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-excel + + + + org.apache.velocity + velocity-engine-core + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-monitor + + + + de.codecentric + spring-boot-admin-starter-server + + + + + commons-net + commons-net + + + com.jcraft + jsch + + + com.amazonaws + aws-java-sdk-s3 + + + + org.apache.tika + tika-core + + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + + + repackage + + + + + + + + diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/HrmrgServerApplication.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/HrmrgServerApplication.java new file mode 100644 index 000000000..76e8e351c --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/HrmrgServerApplication.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.hrmrg; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 项目的启动类 + * + * @author 唐盘江 + */ +@SpringBootApplication +public class HrmrgServerApplication { + public static void main(String[] args) { + SpringApplication.run(HrmrgServerApplication.class, args); + System.out.println("HrmrgServerApplication 启动成功"); + } + +} diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/AdminAtmkController.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/AdminAtmkController.java new file mode 100644 index 000000000..2e5881c7d --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/AdminAtmkController.java @@ -0,0 +1,97 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmk; + +import org.springframework.web.bind.annotation.*; + +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + + +import java.io.IOException; +import java.util.List; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmk.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmk.AdminAtmkDO; +import cn.iocoder.yudao.module.hrmrg.service.adminatmk.AdminAtmkService; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; + +@Tag(name = "管理后台 - 考勤打卡") +@RestController +@RequestMapping("/hrmrg/admin-atmk") +@Validated +public class AdminAtmkController { + + @Resource + private AdminAtmkService adminAtmkService; + + @PostMapping("/create") + @Operation(summary = "创建考勤打卡") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk:create')") + public CommonResult createAdminAtmk(@Valid @RequestBody AdminAtmkSaveReqVO createReqVO) { + return success(adminAtmkService.createAdminAtmk(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新考勤打卡") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk:update')") + public CommonResult updateAdminAtmk(@Valid @RequestBody AdminAtmkSaveReqVO updateReqVO) { + adminAtmkService.updateAdminAtmk(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除考勤打卡") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk:delete')") + public CommonResult deleteAdminAtmk(@RequestParam("id") Integer id) { + adminAtmkService.deleteAdminAtmk(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得考勤打卡") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk:query')") + public CommonResult getAdminAtmk(@RequestParam("id") Integer id) { + AdminAtmkDO adminAtmk = adminAtmkService.getAdminAtmk(id); + return success(BeanUtils.toBean(adminAtmk, AdminAtmkRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得考勤打卡分页") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk:query')") + public CommonResult> getAdminAtmkPage(@Valid AdminAtmkPageReqVO pageReqVO) { + PageResult pageResult = adminAtmkService.getAdminAtmkPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, AdminAtmkRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出考勤打卡 Excel") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportAdminAtmkExcel(@Valid AdminAtmkPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = adminAtmkService.getAdminAtmkPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "考勤打卡.xls", "数据", AdminAtmkRespVO.class, + BeanUtils.toBean(list, AdminAtmkRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/vo/AdminAtmkPageReqVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/vo/AdminAtmkPageReqVO.java new file mode 100644 index 000000000..da7d0766b --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/vo/AdminAtmkPageReqVO.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmk.vo; + +import lombok.*; + +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 考勤打卡分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AdminAtmkPageReqVO extends PageParam { + + @Schema(description = "类型1用户2会员3其他") + private String typeBiz; + + @Schema(description = "岗位或人员ID", example = "5147") + private Long userId; + + @Schema(description = "上班时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] startTime; + + @Schema(description = "下班时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] endTime; + + @Schema(description = "迟到时间") + private Integer lateTimeLimit; + + @Schema(description = "早退时间") + private Integer earlyLeavingTimeLimit; + + @Schema(description = "定位打卡范围的名称", example = "张三") + private String areaName; + + @Schema(description = "经度") + private String latitude; + + @Schema(description = "维度") + private String longitude; + + @Schema(description = "打卡位置经度") + private String checkInLocation; + + @Schema(description = "离岗位置维度") + private String checkOutLocation; + + @Schema(description = "人脸识别结果") + private String faceRecognitionResult; + + @Schema(description = "打卡人脸照") + private byte[] checkInPhoto; + + @Schema(description = "离岗人脸照") + private byte[] checkOutPhoto; + + @Schema(description = "人脸识别库") + private byte[] faceData; + + @Schema(description = "状态(0正常 1停用)", example = "1") + private Integer status; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/vo/AdminAtmkRespVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/vo/AdminAtmkRespVO.java new file mode 100644 index 000000000..986604666 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/vo/AdminAtmkRespVO.java @@ -0,0 +1,94 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmk.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 考勤打卡 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AdminAtmkRespVO { + + @Schema(description = "岗位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23083") + @ExcelProperty("岗位ID") + private Integer id; + + @Schema(description = "类型1用户2会员3其他") + @ExcelProperty(value = "类型1用户2会员3其他", converter = DictConvert.class) + @DictFormat("hr_att_punch_biz_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String typeBiz; + + @Schema(description = "岗位或人员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5147") + @ExcelProperty("岗位或人员ID") + private Long userId; + + @Schema(description = "上班时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("上班时间") + private LocalDateTime startTime; + + @Schema(description = "下班时间") + @ExcelProperty("下班时间") + private LocalDateTime endTime; + + @Schema(description = "迟到时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("迟到时间") + private Integer lateTimeLimit; + + @Schema(description = "早退时间") + @ExcelProperty("早退时间") + private Integer earlyLeavingTimeLimit; + + @Schema(description = "定位打卡范围的名称", example = "张三") + @ExcelProperty("定位打卡范围的名称") + private String areaName; + + @Schema(description = "经度") + @ExcelProperty("经度") + private String latitude; + + @Schema(description = "维度") + @ExcelProperty("维度") + private String longitude; + + @Schema(description = "打卡位置经度") + @ExcelProperty("打卡位置经度") + private String checkInLocation; + + @Schema(description = "离岗位置维度") + @ExcelProperty("离岗位置维度") + private String checkOutLocation; + + @Schema(description = "人脸识别结果") + @ExcelProperty("人脸识别结果") + private String faceRecognitionResult; + + @Schema(description = "打卡人脸照") + @ExcelProperty("打卡人脸照") + private byte[] checkInPhoto; + + @Schema(description = "离岗人脸照") + @ExcelProperty("离岗人脸照") + private byte[] checkOutPhoto; + + @Schema(description = "人脸识别库") + @ExcelProperty("人脸识别库") + private byte[] faceData; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("状态(0正常 1停用)") + private Integer status; + + @Schema(description = "备注", example = "随便") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/vo/AdminAtmkSaveReqVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/vo/AdminAtmkSaveReqVO.java new file mode 100644 index 000000000..21fd9ce22 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmk/vo/AdminAtmkSaveReqVO.java @@ -0,0 +1,73 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmk.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import org.springframework.format.annotation.DateTimeFormat; + +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 考勤打卡新增/修改 Request VO") +@Data +public class AdminAtmkSaveReqVO { + + @Schema(description = "岗位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23083") + private Integer id; + + @Schema(description = "类型1用户2会员3其他") + private String typeBiz; + + @Schema(description = "岗位或人员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "5147") + @NotNull(message = "岗位或人员ID不能为空") + private Long userId; + + @Schema(description = "上班时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "上班时间不能为空") + private LocalDateTime startTime; + + @Schema(description = "下班时间") + private LocalDateTime endTime; + + @Schema(description = "迟到时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "迟到时间不能为空") + private Integer lateTimeLimit; + + @Schema(description = "早退时间") + private Integer earlyLeavingTimeLimit; + + @Schema(description = "定位打卡范围的名称", example = "张三") + private String areaName; + + @Schema(description = "经度") + private String latitude; + + @Schema(description = "维度") + private String longitude; + + @Schema(description = "打卡位置经度") + private String checkInLocation; + + @Schema(description = "离岗位置维度") + private String checkOutLocation; + + @Schema(description = "人脸识别结果") + private String faceRecognitionResult; + + @Schema(description = "打卡人脸照") + private byte[] checkInPhoto; + + @Schema(description = "离岗人脸照") + private byte[] checkOutPhoto; + + @Schema(description = "人脸识别库") + private byte[] faceData; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态(0正常 1停用)不能为空") + private Integer status; + + @Schema(description = "备注", example = "随便") + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/AdminAtmkFaceController.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/AdminAtmkFaceController.java new file mode 100644 index 000000000..2ed7aa2c4 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/AdminAtmkFaceController.java @@ -0,0 +1,99 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkface; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.*; + +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + + + +import java.io.IOException; +import java.util.List; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkface.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmkface.AdminAtmkFaceDO; +import cn.iocoder.yudao.module.hrmrg.service.adminatmkface.AdminAtmkFaceService; + + + +@Tag(name = "管理后台 - 人脸识别库") +@RestController +@RequestMapping("/hrmrg/admin-atmk-face") +@Validated +public class AdminAtmkFaceController { + + @Resource + private AdminAtmkFaceService adminAtmkFaceService; + + @PostMapping("/create") + @Operation(summary = "创建人脸识别库") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-face:create')") + public CommonResult createAdminAtmkFace(@Valid @RequestBody AdminAtmkFaceSaveReqVO createReqVO) { + return success(adminAtmkFaceService.createAdminAtmkFace(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新人脸识别库") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-face:update')") + public CommonResult updateAdminAtmkFace(@Valid @RequestBody AdminAtmkFaceSaveReqVO updateReqVO) { + adminAtmkFaceService.updateAdminAtmkFace(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除人脸识别库") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-face:delete')") + public CommonResult deleteAdminAtmkFace(@RequestParam("id") Integer id) { + adminAtmkFaceService.deleteAdminAtmkFace(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得人脸识别库") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-face:query')") + public CommonResult getAdminAtmkFace(@RequestParam("id") Integer id) { + AdminAtmkFaceDO adminAtmkFace = adminAtmkFaceService.getAdminAtmkFace(id); + return success(BeanUtils.toBean(adminAtmkFace, AdminAtmkFaceRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得人脸识别库分页") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-face:query')") + public CommonResult> getAdminAtmkFacePage(@Valid AdminAtmkFacePageReqVO pageReqVO) { + PageResult pageResult = adminAtmkFaceService.getAdminAtmkFacePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, AdminAtmkFaceRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出人脸识别库 Excel") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-face:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportAdminAtmkFaceExcel(@Valid AdminAtmkFacePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = adminAtmkFaceService.getAdminAtmkFacePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "人脸识别库.xls", "数据", AdminAtmkFaceRespVO.class, + BeanUtils.toBean(list, AdminAtmkFaceRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/vo/AdminAtmkFacePageReqVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/vo/AdminAtmkFacePageReqVO.java new file mode 100644 index 000000000..13bfba3cc --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/vo/AdminAtmkFacePageReqVO.java @@ -0,0 +1,49 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkface.vo; + +import lombok.*; + +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 人脸识别库分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AdminAtmkFacePageReqVO extends PageParam { + + @Schema(description = "类型1员工2会员4其他") + private String typeBiz; + + @Schema(description = "部门id", example = "17318") + private Long deptId; + + @Schema(description = "岗位或人员ID", example = "1025") + private Long userId; + + @Schema(description = "身份证号") + private String userNo; + + @Schema(description = "名字", example = "赵六") + private String userName; + + @Schema(description = "人脸数据") + private byte[] faceData; + + @Schema(description = "显示顺序") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", example = "2") + private Integer status; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/vo/AdminAtmkFaceRespVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/vo/AdminAtmkFaceRespVO.java new file mode 100644 index 000000000..a53c775db --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/vo/AdminAtmkFaceRespVO.java @@ -0,0 +1,62 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkface.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 人脸识别库 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AdminAtmkFaceRespVO { + + @Schema(description = "岗位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15439") + @ExcelProperty("岗位ID") + private Integer id; + + @Schema(description = "类型1员工2会员4其他") + @ExcelProperty(value = "类型1员工2会员4其他", converter = DictConvert.class) + @DictFormat("hr_att_punch_biz_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String typeBiz; + + @Schema(description = "部门id", example = "17318") + @ExcelProperty("部门id") + private Long deptId; + + @Schema(description = "岗位或人员ID", example = "1025") + @ExcelProperty("岗位或人员ID") + private Long userId; + + @Schema(description = "身份证号") + @ExcelProperty("身份证号") + private String userNo; + + @Schema(description = "名字", example = "赵六") + @ExcelProperty("名字") + private String userName; + + @Schema(description = "人脸数据", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("人脸数据") + private byte[] faceData; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("显示顺序") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("状态(0正常 1停用)") + private Integer status; + + @Schema(description = "备注", example = "你猜") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/vo/AdminAtmkFaceSaveReqVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/vo/AdminAtmkFaceSaveReqVO.java new file mode 100644 index 000000000..6ba39e0c8 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkface/vo/AdminAtmkFaceSaveReqVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkface.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; +import lombok.*; + + + + +@Schema(description = "管理后台 - 人脸识别库新增/修改 Request VO") +@Data +public class AdminAtmkFaceSaveReqVO { + + @Schema(description = "岗位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "15439") + private Integer id; + + @Schema(description = "类型1员工2会员4其他") + private String typeBiz; + + @Schema(description = "部门id", example = "17318") + private Long deptId; + + @Schema(description = "岗位或人员ID", example = "1025") + private Long userId; + + @Schema(description = "身份证号") + private String userNo; + + @Schema(description = "名字", example = "赵六") + private String userName; + + @Schema(description = "人脸数据", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "人脸数据不能为空") + private byte[] faceData; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "状态(0正常 1停用)不能为空") + private Integer status; + + @Schema(description = "备注", example = "你猜") + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/AdminAtmkGroutCfgController.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/AdminAtmkGroutCfgController.java new file mode 100644 index 000000000..8a99bcb3f --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/AdminAtmkGroutCfgController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkgroutcfg; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import java.io.IOException; +import java.util.List; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkgroutcfg.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmkgroutcfg.AdminAtmkGroutCfgDO; +import cn.iocoder.yudao.module.hrmrg.service.adminatmkgroutcfg.AdminAtmkGroutCfgService; + + +@Tag(name = "管理后台 - 考勤组设置") +@RestController +@RequestMapping("/hrmrg/admin-atmk-grout-cfg") +@Validated +public class AdminAtmkGroutCfgController { + + @Resource + private AdminAtmkGroutCfgService adminAtmkGroutCfgService; + + @PostMapping("/create") + @Operation(summary = "创建考勤组设置") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-grout-cfg:create')") + public CommonResult createAdminAtmkGroutCfg(@Valid @RequestBody AdminAtmkGroutCfgSaveReqVO createReqVO) { + return success(adminAtmkGroutCfgService.createAdminAtmkGroutCfg(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新考勤组设置") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-grout-cfg:update')") + public CommonResult updateAdminAtmkGroutCfg(@Valid @RequestBody AdminAtmkGroutCfgSaveReqVO updateReqVO) { + adminAtmkGroutCfgService.updateAdminAtmkGroutCfg(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除考勤组设置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-grout-cfg:delete')") + public CommonResult deleteAdminAtmkGroutCfg(@RequestParam("id") Integer id) { + adminAtmkGroutCfgService.deleteAdminAtmkGroutCfg(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得考勤组设置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-grout-cfg:query')") + public CommonResult getAdminAtmkGroutCfg(@RequestParam("id") Integer id) { + AdminAtmkGroutCfgDO adminAtmkGroutCfg = adminAtmkGroutCfgService.getAdminAtmkGroutCfg(id); + return success(BeanUtils.toBean(adminAtmkGroutCfg, AdminAtmkGroutCfgRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得考勤组设置分页") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-grout-cfg:query')") + public CommonResult> getAdminAtmkGroutCfgPage(@Valid AdminAtmkGroutCfgPageReqVO pageReqVO) { + PageResult pageResult = adminAtmkGroutCfgService.getAdminAtmkGroutCfgPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, AdminAtmkGroutCfgRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出考勤组设置 Excel") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-atmk-grout-cfg:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportAdminAtmkGroutCfgExcel(@Valid AdminAtmkGroutCfgPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = adminAtmkGroutCfgService.getAdminAtmkGroutCfgPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "考勤组设置.xls", "数据", AdminAtmkGroutCfgRespVO.class, + BeanUtils.toBean(list, AdminAtmkGroutCfgRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/vo/AdminAtmkGroutCfgPageReqVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/vo/AdminAtmkGroutCfgPageReqVO.java new file mode 100644 index 000000000..90485383a --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/vo/AdminAtmkGroutCfgPageReqVO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkgroutcfg.vo; + +import lombok.*; + +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 考勤组设置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AdminAtmkGroutCfgPageReqVO extends PageParam { + + @Schema(description = "类型1员工2其他") + private Long typeBiz; + + @Schema(description = "部门id", example = "3928") + private Long deptId; + + @Schema(description = "考勤组编码") + private String groupCode; + + @Schema(description = "考勤组名称", example = "芋艿") + private String groupName; + + @Schema(description = "上班时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] startTime; + + @Schema(description = "下班时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] endTime; + + @Schema(description = "定位打卡范围的名称", example = "李四") + private String areaName; + + @Schema(description = "经度") + private String latitude; + + @Schema(description = "维度") + private String longitude; + + @Schema(description = "状态(0正常 1停用)", example = "2") + private Integer status; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/vo/AdminAtmkGroutCfgRespVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/vo/AdminAtmkGroutCfgRespVO.java new file mode 100644 index 000000000..c847db373 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/vo/AdminAtmkGroutCfgRespVO.java @@ -0,0 +1,70 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkgroutcfg.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 考勤组设置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AdminAtmkGroutCfgRespVO { + + @Schema(description = "考勤组id", requiredMode = Schema.RequiredMode.REQUIRED, example = "9027") + @ExcelProperty("考勤组id") + private Integer id; + + @Schema(description = "类型1员工2其他") + @ExcelProperty("类型1员工2其他") + private Long typeBiz; + + @Schema(description = "部门id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3928") + @ExcelProperty("部门id") + private Long deptId; + + @Schema(description = "考勤组编码", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty(value = "考勤组编码", converter = DictConvert.class) + @DictFormat("hr_att_punch_group") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String groupCode; + + @Schema(description = "考勤组名称", example = "芋艿") + @ExcelProperty("考勤组名称") + private String groupName; + + @Schema(description = "上班时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("上班时间") + private LocalDateTime startTime; + + @Schema(description = "下班时间") + @ExcelProperty("下班时间") + private LocalDateTime endTime; + + @Schema(description = "定位打卡范围的名称", example = "李四") + @ExcelProperty("定位打卡范围的名称") + private String areaName; + + @Schema(description = "经度") + @ExcelProperty("经度") + private String latitude; + + @Schema(description = "维度") + @ExcelProperty("维度") + private String longitude; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("状态(0正常 1停用)") + private Integer status; + + @Schema(description = "备注", example = "你猜") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/vo/AdminAtmkGroutCfgSaveReqVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/vo/AdminAtmkGroutCfgSaveReqVO.java new file mode 100644 index 000000000..84fbb363c --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminatmkgroutcfg/vo/AdminAtmkGroutCfgSaveReqVO.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkgroutcfg.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import org.springframework.format.annotation.DateTimeFormat; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 考勤组设置新增/修改 Request VO") +@Data +public class AdminAtmkGroutCfgSaveReqVO { + + @Schema(description = "考勤组id", requiredMode = Schema.RequiredMode.REQUIRED, example = "9027") + private Integer id; + + @Schema(description = "类型1员工2其他") + private Long typeBiz; + + @Schema(description = "部门id", requiredMode = Schema.RequiredMode.REQUIRED, example = "3928") + @NotNull(message = "部门id不能为空") + private Long deptId; + + @Schema(description = "考勤组编码", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "考勤组编码不能为空") + private String groupCode; + + @Schema(description = "考勤组名称", example = "芋艿") + private String groupName; + + @Schema(description = "上班时间", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "上班时间不能为空") + private LocalDateTime startTime; + + @Schema(description = "下班时间") + private LocalDateTime endTime; + + @Schema(description = "定位打卡范围的名称", example = "李四") + private String areaName; + + @Schema(description = "经度") + private String latitude; + + @Schema(description = "维度") + private String longitude; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "状态(0正常 1停用)不能为空") + private Integer status; + + @Schema(description = "备注", example = "你猜") + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/AdminPerfCfgController.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/AdminPerfCfgController.java new file mode 100644 index 000000000..3323025ca --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/AdminPerfCfgController.java @@ -0,0 +1,97 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminperfcfg; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + + +import java.io.IOException; +import java.util.List; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminperfcfg.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminperfcfg.AdminPerfCfgDO; +import cn.iocoder.yudao.module.hrmrg.service.adminperfcfg.AdminPerfCfgService; + + + +@Tag(name = "管理后台 - 绩效考核配置") +@RestController +@RequestMapping("/hrmrg/admin-perf-cfg") +@Validated +public class AdminPerfCfgController { + + @Resource + private AdminPerfCfgService adminPerfCfgService; + + @PostMapping("/create") + @Operation(summary = "创建绩效考核配置") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-perf-cfg:create')") + public CommonResult createAdminPerfCfg(@Valid @RequestBody AdminPerfCfgSaveReqVO createReqVO) { + return success(adminPerfCfgService.createAdminPerfCfg(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新绩效考核配置") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-perf-cfg:update')") + public CommonResult updateAdminPerfCfg(@Valid @RequestBody AdminPerfCfgSaveReqVO updateReqVO) { + adminPerfCfgService.updateAdminPerfCfg(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除绩效考核配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hrmrg:admin-perf-cfg:delete')") + public CommonResult deleteAdminPerfCfg(@RequestParam("id") Integer id) { + adminPerfCfgService.deleteAdminPerfCfg(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得绩效考核配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-perf-cfg:query')") + public CommonResult getAdminPerfCfg(@RequestParam("id") Integer id) { + AdminPerfCfgDO adminPerfCfg = adminPerfCfgService.getAdminPerfCfg(id); + return success(BeanUtils.toBean(adminPerfCfg, AdminPerfCfgRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得绩效考核配置分页") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-perf-cfg:query')") + public CommonResult> getAdminPerfCfgPage(@Valid AdminPerfCfgPageReqVO pageReqVO) { + PageResult pageResult = adminPerfCfgService.getAdminPerfCfgPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, AdminPerfCfgRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出绩效考核配置 Excel") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-perf-cfg:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportAdminPerfCfgExcel(@Valid AdminPerfCfgPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = adminPerfCfgService.getAdminPerfCfgPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "绩效考核配置.xls", "数据", AdminPerfCfgRespVO.class, + BeanUtils.toBean(list, AdminPerfCfgRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/vo/AdminPerfCfgPageReqVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/vo/AdminPerfCfgPageReqVO.java new file mode 100644 index 000000000..aa2475bc5 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/vo/AdminPerfCfgPageReqVO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminperfcfg.vo; + +import lombok.*; + +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 绩效考核配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AdminPerfCfgPageReqVO extends PageParam { + + @Schema(description = "类型1部门2会员3其他") + private String typeBiz; + + @Schema(description = "部门ID或员工id", example = "10265") + private Long deptOrUserId; + + @Schema(description = "标题") + private String title; + + @Schema(description = "开始时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] starTime; + + @Schema(description = "结束时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] endTime; + + @Schema(description = "分数") + private Integer sorce; + + @Schema(description = "考核说明") + private String evg; + + @Schema(description = "考核项目") + private String evgItem; + + @Schema(description = "显示顺序") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", example = "1") + private Integer status; + + @Schema(description = "备注", example = "随便") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/vo/AdminPerfCfgRespVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/vo/AdminPerfCfgRespVO.java new file mode 100644 index 000000000..d6d5613ab --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/vo/AdminPerfCfgRespVO.java @@ -0,0 +1,70 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminperfcfg.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 绩效考核配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AdminPerfCfgRespVO { + + @Schema(description = "岗位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23965") + @ExcelProperty("岗位ID") + private Integer id; + + @Schema(description = "类型1部门2会员3其他") + @ExcelProperty(value = "类型1部门2会员3其他", converter = DictConvert.class) + @DictFormat("hr_att_punch_biz_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String typeBiz; + + @Schema(description = "部门ID或员工id", example = "10265") + @ExcelProperty("部门ID或员工id") + private Long deptOrUserId; + + @Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("标题") + private String title; + + @Schema(description = "开始时间") + @ExcelProperty("开始时间") + private LocalDateTime starTime; + + @Schema(description = "结束时间") + @ExcelProperty("结束时间") + private LocalDateTime endTime; + + @Schema(description = "分数") + @ExcelProperty("分数") + private Integer sorce; + + @Schema(description = "考核说明") + @ExcelProperty("考核说明") + private String evg; + + @Schema(description = "考核项目", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("考核项目") + private String evgItem; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("显示顺序") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("状态(0正常 1停用)") + private Integer status; + + @Schema(description = "备注", example = "随便") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/vo/AdminPerfCfgSaveReqVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/vo/AdminPerfCfgSaveReqVO.java new file mode 100644 index 000000000..729aa41a2 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminperfcfg/vo/AdminPerfCfgSaveReqVO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminperfcfg.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.*; + +import org.springframework.format.annotation.DateTimeFormat; + + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 绩效考核配置新增/修改 Request VO") +@Data +public class AdminPerfCfgSaveReqVO { + + @Schema(description = "岗位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "23965") + private Integer id; + + @Schema(description = "类型1部门2会员3其他") + private String typeBiz; + + @Schema(description = "部门ID或员工id", example = "10265") + private Long deptOrUserId; + + @Schema(description = "标题", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "标题不能为空") + private String title; + + @Schema(description = "开始时间") + private LocalDateTime starTime; + + @Schema(description = "结束时间") + private LocalDateTime endTime; + + @Schema(description = "分数") + private Integer sorce; + + @Schema(description = "考核说明") + private String evg; + + @Schema(description = "考核项目", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "考核项目不能为空") + private String evgItem; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态(0正常 1停用)不能为空") + private Integer status; + + @Schema(description = "备注", example = "随便") + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/AdminPostCfgController.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/AdminPostCfgController.java new file mode 100644 index 000000000..dab609723 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/AdminPostCfgController.java @@ -0,0 +1,97 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminpostcfg; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + + +import java.io.IOException; +import java.util.List; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminpostcfg.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminpostcfg.AdminPostCfgDO; +import cn.iocoder.yudao.module.hrmrg.service.adminpostcfg.AdminPostCfgService; + + + +@Tag(name = "管理后台 - 岗位人员薪资计算配置") +@RestController +@RequestMapping("/hrmrg/admin-post-cfg") +@Validated +public class AdminPostCfgController { + + @Resource + private AdminPostCfgService adminPostCfgService; + + @PostMapping("/create") + @Operation(summary = "创建岗位人员薪资计算配置") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-post-cfg:create')") + public CommonResult createAdminPostCfg(@Valid @RequestBody AdminPostCfgSaveReqVO createReqVO) { + return success(adminPostCfgService.createAdminPostCfg(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新岗位人员薪资计算配置") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-post-cfg:update')") + public CommonResult updateAdminPostCfg(@Valid @RequestBody AdminPostCfgSaveReqVO updateReqVO) { + adminPostCfgService.updateAdminPostCfg(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除岗位人员薪资计算配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hrmrg:admin-post-cfg:delete')") + public CommonResult deleteAdminPostCfg(@RequestParam("id") Integer id) { + adminPostCfgService.deleteAdminPostCfg(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得岗位人员薪资计算配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-post-cfg:query')") + public CommonResult getAdminPostCfg(@RequestParam("id") Integer id) { + AdminPostCfgDO adminPostCfg = adminPostCfgService.getAdminPostCfg(id); + return success(BeanUtils.toBean(adminPostCfg, AdminPostCfgRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得岗位人员薪资计算配置分页") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-post-cfg:query')") + public CommonResult> getAdminPostCfgPage(@Valid AdminPostCfgPageReqVO pageReqVO) { + PageResult pageResult = adminPostCfgService.getAdminPostCfgPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, AdminPostCfgRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出岗位人员薪资计算配置 Excel") + @PreAuthorize("@ss.hasPermission('hrmrg:admin-post-cfg:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportAdminPostCfgExcel(@Valid AdminPostCfgPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = adminPostCfgService.getAdminPostCfgPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "岗位人员薪资计算配置.xls", "数据", AdminPostCfgRespVO.class, + BeanUtils.toBean(list, AdminPostCfgRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/vo/AdminPostCfgPageReqVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/vo/AdminPostCfgPageReqVO.java new file mode 100644 index 000000000..b1206e02d --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/vo/AdminPostCfgPageReqVO.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminpostcfg.vo; + +import lombok.*; + +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 岗位人员薪资计算配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AdminPostCfgPageReqVO extends PageParam { + + @Schema(description = "类型1岗位2用户3迟到4早退5旷工6加班7基本工资") + private String typeBiz; + + @Schema(description = "项目1增减2扣减3不变", example = "1") + private String itemType; + + @Schema(description = "岗位或人员ID", example = "25542") + private Long postOrUserId; + + @Schema(description = "上下班时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] checkInOutTime; + + @Schema(description = "薪资") + private Integer salary; + + @Schema(description = "系数") + private BigDecimal coef; + + @Schema(description = "显示顺序") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", example = "1") + private Integer status; + + @Schema(description = "备注", example = "你猜") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/vo/AdminPostCfgRespVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/vo/AdminPostCfgRespVO.java new file mode 100644 index 000000000..b1c379319 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/vo/AdminPostCfgRespVO.java @@ -0,0 +1,64 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminpostcfg.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 岗位人员薪资计算配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AdminPostCfgRespVO { + + @Schema(description = "岗位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "30426") + @ExcelProperty("岗位ID") + private Integer id; + + @Schema(description = "类型1岗位2用户3迟到4早退5旷工6加班7基本工资") + @ExcelProperty(value = "类型1岗位2用户3迟到4早退5旷工6加班7基本工资", converter = DictConvert.class) + @DictFormat("hr_admin_post_cfg_biz_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String typeBiz; + + @Schema(description = "项目1增减2扣减3不变", example = "1") + @ExcelProperty(value = "项目1增减2扣减3不变", converter = DictConvert.class) + @DictFormat("hr_admin_post_cfg_biz_item") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String itemType; + + @Schema(description = "岗位或人员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25542") + @ExcelProperty("岗位或人员ID") + private Long postOrUserId; + + @Schema(description = "上下班时间") + @ExcelProperty("上下班时间") + private LocalDateTime checkInOutTime; + + @Schema(description = "薪资", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("薪资") + private Integer salary; + + @Schema(description = "系数") + @ExcelProperty("系数") + private BigDecimal coef; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("显示顺序") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("状态(0正常 1停用)") + private Integer status; + + @Schema(description = "备注", example = "你猜") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/vo/AdminPostCfgSaveReqVO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/vo/AdminPostCfgSaveReqVO.java new file mode 100644 index 000000000..7dc47e060 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/controller/admin/adminpostcfg/vo/AdminPostCfgSaveReqVO.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.hrmrg.controller.admin.adminpostcfg.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; + +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 岗位人员薪资计算配置新增/修改 Request VO") +@Data +public class AdminPostCfgSaveReqVO { + + @Schema(description = "岗位ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "30426") + private Integer id; + + @Schema(description = "类型1岗位2用户3迟到4早退5旷工6加班7基本工资") + private String typeBiz; + + @Schema(description = "项目1增减2扣减3不变", example = "1") + private String itemType; + + @Schema(description = "岗位或人员ID", requiredMode = Schema.RequiredMode.REQUIRED, example = "25542") + @NotNull(message = "岗位或人员ID不能为空") + private Long postOrUserId; + + @Schema(description = "上下班时间") + private LocalDateTime checkInOutTime; + + @Schema(description = "薪资", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "薪资不能为空") + private Integer salary; + + @Schema(description = "系数") + private BigDecimal coef; + + @Schema(description = "显示顺序", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态(0正常 1停用)不能为空") + private Integer status; + + @Schema(description = "备注", example = "你猜") + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminatmk/AdminAtmkDO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminatmk/AdminAtmkDO.java new file mode 100644 index 000000000..3704442d7 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminatmk/AdminAtmkDO.java @@ -0,0 +1,103 @@ +package cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmk; + +import lombok.*; + +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 考勤打卡 DO + * + * @author 超级管理员 + */ +@TableName("hr_admin_atmk") +@KeySequence("hr_admin_atmk_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AdminAtmkDO extends BaseDO { + + /** + * 岗位ID + */ + @TableId + private Integer id; + /** + * 类型1用户2会员3其他 + * + * 枚举 {@link TODO hr_att_punch_biz_type 对应的类} + */ + private String typeBiz; + /** + * 岗位或人员ID + */ + private Long userId; + /** + * 上班时间 + */ + private LocalDateTime startTime; + /** + * 下班时间 + */ + private LocalDateTime endTime; + /** + * 迟到时间 + */ + private Integer lateTimeLimit; + /** + * 早退时间 + */ + private Integer earlyLeavingTimeLimit; + /** + * 定位打卡范围的名称 + */ + private String areaName; + /** + * 经度 + */ + private String latitude; + /** + * 维度 + */ + private String longitude; + /** + * 打卡位置经度 + */ + private String checkInLocation; + /** + * 离岗位置维度 + */ + private String checkOutLocation; + /** + * 人脸识别结果 + */ + private String faceRecognitionResult; + /** + * 打卡人脸照 + */ + private byte[] checkInPhoto; + /** + * 离岗人脸照 + */ + private byte[] checkOutPhoto; + /** + * 人脸识别库 + */ + private byte[] faceData; + /** + * 状态(0正常 1停用) + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminatmkface/AdminAtmkFaceDO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminatmkface/AdminAtmkFaceDO.java new file mode 100644 index 000000000..38bece9ee --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminatmkface/AdminAtmkFaceDO.java @@ -0,0 +1,69 @@ +package cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmkface; + +import lombok.*; + +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 人脸识别库 DO + * + * @author 超级管理员 + */ +@TableName("hr_admin_atmk_face") +@KeySequence("hr_admin_atmk_face_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AdminAtmkFaceDO extends BaseDO { + + /** + * 岗位ID + */ + @TableId + private Integer id; + /** + * 类型1员工2会员4其他 + * + * 枚举 {@link TODO hr_att_punch_biz_type 对应的类} + */ + private String typeBiz; + /** + * 部门id + */ + private Long deptId; + /** + * 岗位或人员ID + */ + private Long userId; + /** + * 身份证号 + */ + private String userNo; + /** + * 名字 + */ + private String userName; + /** + * 人脸数据 + */ + private byte[] faceData; + /** + * 显示顺序 + */ + private Integer sort; + /** + * 状态(0正常 1停用) + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminatmkgroutcfg/AdminAtmkGroutCfgDO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminatmkgroutcfg/AdminAtmkGroutCfgDO.java new file mode 100644 index 000000000..591d61f4b --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminatmkgroutcfg/AdminAtmkGroutCfgDO.java @@ -0,0 +1,79 @@ +package cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmkgroutcfg; + +import lombok.*; + +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 考勤组设置 DO + * + * @author 超级管理员 + */ +@TableName("hr_admin_atmk_grout_cfg") +@KeySequence("hr_admin_atmk_grout_cfg_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AdminAtmkGroutCfgDO extends BaseDO { + + /** + * 考勤组id + */ + @TableId + private Integer id; + /** + * 类型1员工2其他 + */ + private Long typeBiz; + /** + * 部门id + */ + private Long deptId; + /** + * 考勤组编码 + * + * 枚举 {@link TODO hr_att_punch_group 对应的类} + */ + private String groupCode; + /** + * 考勤组名称 + */ + private String groupName; + /** + * 上班时间 + */ + private LocalDateTime startTime; + /** + * 下班时间 + */ + private LocalDateTime endTime; + /** + * 定位打卡范围的名称 + */ + private String areaName; + /** + * 经度 + */ + private String latitude; + /** + * 维度 + */ + private String longitude; + /** + * 状态(0正常 1停用) + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminperfcfg/AdminPerfCfgDO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminperfcfg/AdminPerfCfgDO.java new file mode 100644 index 000000000..daaf74b97 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminperfcfg/AdminPerfCfgDO.java @@ -0,0 +1,79 @@ +package cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminperfcfg; + +import lombok.*; + +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 绩效考核配置 DO + * + * @author 超级管理员 + */ +@TableName("hr_admin_perf_cfg") +@KeySequence("hr_admin_perf_cfg_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AdminPerfCfgDO extends BaseDO { + + /** + * 岗位ID + */ + @TableId + private Integer id; + /** + * 类型1部门2会员3其他 + * + * 枚举 {@link TODO hr_att_punch_biz_type 对应的类} + */ + private String typeBiz; + /** + * 部门ID或员工id + */ + private Long deptOrUserId; + /** + * 标题 + */ + private String title; + /** + * 开始时间 + */ + private LocalDateTime starTime; + /** + * 结束时间 + */ + private LocalDateTime endTime; + /** + * 分数 + */ + private Integer sorce; + /** + * 考核说明 + */ + private String evg; + /** + * 考核项目 + */ + private String evgItem; + /** + * 显示顺序 + */ + private Integer sort; + /** + * 状态(0正常 1停用) + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminpostcfg/AdminPostCfgDO.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminpostcfg/AdminPostCfgDO.java new file mode 100644 index 000000000..9d28f6456 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/dataobject/adminpostcfg/AdminPostCfgDO.java @@ -0,0 +1,73 @@ +package cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminpostcfg; + +import lombok.*; + +import java.time.LocalDateTime; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 岗位人员薪资计算配置 DO + * + * @author 超级管理员 + */ +@TableName("hr_admin_post_cfg") +@KeySequence("hr_admin_post_cfg_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class AdminPostCfgDO extends BaseDO { + + /** + * 岗位ID + */ + @TableId + private Integer id; + /** + * 类型1岗位2用户3迟到4早退5旷工6加班7基本工资 + * + * 枚举 {@link TODO hr_admin_post_cfg_biz_type 对应的类} + */ + private String typeBiz; + /** + * 项目1增减2扣减3不变 + * + * 枚举 {@link TODO hr_admin_post_cfg_biz_item 对应的类} + */ + private String itemType; + /** + * 岗位或人员ID + */ + private Long postOrUserId; + /** + * 上下班时间 + */ + private LocalDateTime checkInOutTime; + /** + * 薪资 + */ + private Integer salary; + /** + * 系数 + */ + private BigDecimal coef; + /** + * 显示顺序 + */ + private Integer sort; + /** + * 状态(0正常 1停用) + */ + private Integer status; + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminatmk/AdminAtmkMapper.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminatmk/AdminAtmkMapper.java new file mode 100644 index 000000000..7fccfc54b --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminatmk/AdminAtmkMapper.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.hrmrg.dal.mysql.adminatmk; + + + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmk.AdminAtmkDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmk.vo.*; + +/** + * 考勤打卡 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface AdminAtmkMapper extends BaseMapperX { + + default PageResult selectPage(AdminAtmkPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(AdminAtmkDO::getTypeBiz, reqVO.getTypeBiz()) + .eqIfPresent(AdminAtmkDO::getUserId, reqVO.getUserId()) + .betweenIfPresent(AdminAtmkDO::getStartTime, reqVO.getStartTime()) + .betweenIfPresent(AdminAtmkDO::getEndTime, reqVO.getEndTime()) + .eqIfPresent(AdminAtmkDO::getLateTimeLimit, reqVO.getLateTimeLimit()) + .eqIfPresent(AdminAtmkDO::getEarlyLeavingTimeLimit, reqVO.getEarlyLeavingTimeLimit()) + .likeIfPresent(AdminAtmkDO::getAreaName, reqVO.getAreaName()) + .eqIfPresent(AdminAtmkDO::getLatitude, reqVO.getLatitude()) + .eqIfPresent(AdminAtmkDO::getLongitude, reqVO.getLongitude()) + .eqIfPresent(AdminAtmkDO::getCheckInLocation, reqVO.getCheckInLocation()) + .eqIfPresent(AdminAtmkDO::getCheckOutLocation, reqVO.getCheckOutLocation()) + .eqIfPresent(AdminAtmkDO::getFaceRecognitionResult, reqVO.getFaceRecognitionResult()) + .eqIfPresent(AdminAtmkDO::getCheckInPhoto, reqVO.getCheckInPhoto()) + .eqIfPresent(AdminAtmkDO::getCheckOutPhoto, reqVO.getCheckOutPhoto()) + .eqIfPresent(AdminAtmkDO::getFaceData, reqVO.getFaceData()) + .eqIfPresent(AdminAtmkDO::getStatus, reqVO.getStatus()) + .eqIfPresent(AdminAtmkDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(AdminAtmkDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(AdminAtmkDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminatmkface/AdminAtmkFaceMapper.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminatmkface/AdminAtmkFaceMapper.java new file mode 100644 index 000000000..59a88a314 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminatmkface/AdminAtmkFaceMapper.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.hrmrg.dal.mysql.adminatmkface; + + + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmkface.AdminAtmkFaceDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkface.vo.*; + +/** + * 人脸识别库 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface AdminAtmkFaceMapper extends BaseMapperX { + + default PageResult selectPage(AdminAtmkFacePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(AdminAtmkFaceDO::getTypeBiz, reqVO.getTypeBiz()) + .eqIfPresent(AdminAtmkFaceDO::getDeptId, reqVO.getDeptId()) + .eqIfPresent(AdminAtmkFaceDO::getUserId, reqVO.getUserId()) + .eqIfPresent(AdminAtmkFaceDO::getUserNo, reqVO.getUserNo()) + .likeIfPresent(AdminAtmkFaceDO::getUserName, reqVO.getUserName()) + .eqIfPresent(AdminAtmkFaceDO::getFaceData, reqVO.getFaceData()) + .eqIfPresent(AdminAtmkFaceDO::getSort, reqVO.getSort()) + .eqIfPresent(AdminAtmkFaceDO::getStatus, reqVO.getStatus()) + .eqIfPresent(AdminAtmkFaceDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(AdminAtmkFaceDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(AdminAtmkFaceDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminatmkgroutcfg/AdminAtmkGroutCfgMapper.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminatmkgroutcfg/AdminAtmkGroutCfgMapper.java new file mode 100644 index 000000000..01138fb18 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminatmkgroutcfg/AdminAtmkGroutCfgMapper.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.hrmrg.dal.mysql.adminatmkgroutcfg; + + + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmkgroutcfg.AdminAtmkGroutCfgDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkgroutcfg.vo.*; + +/** + * 考勤组设置 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface AdminAtmkGroutCfgMapper extends BaseMapperX { + + default PageResult selectPage(AdminAtmkGroutCfgPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(AdminAtmkGroutCfgDO::getTypeBiz, reqVO.getTypeBiz()) + .eqIfPresent(AdminAtmkGroutCfgDO::getDeptId, reqVO.getDeptId()) + .eqIfPresent(AdminAtmkGroutCfgDO::getGroupCode, reqVO.getGroupCode()) + .likeIfPresent(AdminAtmkGroutCfgDO::getGroupName, reqVO.getGroupName()) + .betweenIfPresent(AdminAtmkGroutCfgDO::getStartTime, reqVO.getStartTime()) + .betweenIfPresent(AdminAtmkGroutCfgDO::getEndTime, reqVO.getEndTime()) + .likeIfPresent(AdminAtmkGroutCfgDO::getAreaName, reqVO.getAreaName()) + .eqIfPresent(AdminAtmkGroutCfgDO::getLatitude, reqVO.getLatitude()) + .eqIfPresent(AdminAtmkGroutCfgDO::getLongitude, reqVO.getLongitude()) + .eqIfPresent(AdminAtmkGroutCfgDO::getStatus, reqVO.getStatus()) + .eqIfPresent(AdminAtmkGroutCfgDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(AdminAtmkGroutCfgDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(AdminAtmkGroutCfgDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminperfcfg/AdminPerfCfgMapper.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminperfcfg/AdminPerfCfgMapper.java new file mode 100644 index 000000000..48dd6874d --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminperfcfg/AdminPerfCfgMapper.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.hrmrg.dal.mysql.adminperfcfg; + + + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminperfcfg.AdminPerfCfgDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminperfcfg.vo.*; + +/** + * 绩效考核配置 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface AdminPerfCfgMapper extends BaseMapperX { + + default PageResult selectPage(AdminPerfCfgPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(AdminPerfCfgDO::getTypeBiz, reqVO.getTypeBiz()) + .eqIfPresent(AdminPerfCfgDO::getDeptOrUserId, reqVO.getDeptOrUserId()) + .eqIfPresent(AdminPerfCfgDO::getTitle, reqVO.getTitle()) + .betweenIfPresent(AdminPerfCfgDO::getStarTime, reqVO.getStarTime()) + .betweenIfPresent(AdminPerfCfgDO::getEndTime, reqVO.getEndTime()) + .eqIfPresent(AdminPerfCfgDO::getSorce, reqVO.getSorce()) + .eqIfPresent(AdminPerfCfgDO::getEvg, reqVO.getEvg()) + .eqIfPresent(AdminPerfCfgDO::getEvgItem, reqVO.getEvgItem()) + .eqIfPresent(AdminPerfCfgDO::getSort, reqVO.getSort()) + .eqIfPresent(AdminPerfCfgDO::getStatus, reqVO.getStatus()) + .eqIfPresent(AdminPerfCfgDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(AdminPerfCfgDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(AdminPerfCfgDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminpostcfg/AdminPostCfgMapper.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminpostcfg/AdminPostCfgMapper.java new file mode 100644 index 000000000..f811d9b4e --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/dal/mysql/adminpostcfg/AdminPostCfgMapper.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.hrmrg.dal.mysql.adminpostcfg; + + + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminpostcfg.AdminPostCfgDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminpostcfg.vo.*; + +/** + * 岗位人员薪资计算配置 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface AdminPostCfgMapper extends BaseMapperX { + + default PageResult selectPage(AdminPostCfgPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(AdminPostCfgDO::getTypeBiz, reqVO.getTypeBiz()) + .eqIfPresent(AdminPostCfgDO::getItemType, reqVO.getItemType()) + .eqIfPresent(AdminPostCfgDO::getPostOrUserId, reqVO.getPostOrUserId()) + .betweenIfPresent(AdminPostCfgDO::getCheckInOutTime, reqVO.getCheckInOutTime()) + .eqIfPresent(AdminPostCfgDO::getSalary, reqVO.getSalary()) + .eqIfPresent(AdminPostCfgDO::getCoef, reqVO.getCoef()) + .eqIfPresent(AdminPostCfgDO::getSort, reqVO.getSort()) + .eqIfPresent(AdminPostCfgDO::getStatus, reqVO.getStatus()) + .eqIfPresent(AdminPostCfgDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(AdminPostCfgDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(AdminPostCfgDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmk/AdminAtmkService.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmk/AdminAtmkService.java new file mode 100644 index 000000000..7625ff782 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmk/AdminAtmkService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.hrmrg.service.adminatmk; + + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmk.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmk.AdminAtmkDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import jakarta.validation.Valid; + +/** + * 考勤打卡 Service 接口 + * + * @author 超级管理员 + */ +public interface AdminAtmkService { + + /** + * 创建考勤打卡 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createAdminAtmk(@Valid AdminAtmkSaveReqVO createReqVO); + + /** + * 更新考勤打卡 + * + * @param updateReqVO 更新信息 + */ + void updateAdminAtmk(@Valid AdminAtmkSaveReqVO updateReqVO); + + /** + * 删除考勤打卡 + * + * @param id 编号 + */ + void deleteAdminAtmk(Integer id); + + /** + * 获得考勤打卡 + * + * @param id 编号 + * @return 考勤打卡 + */ + AdminAtmkDO getAdminAtmk(Integer id); + + /** + * 获得考勤打卡分页 + * + * @param pageReqVO 分页查询 + * @return 考勤打卡分页 + */ + PageResult getAdminAtmkPage(AdminAtmkPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmk/AdminAtmkServiceImpl.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmk/AdminAtmkServiceImpl.java new file mode 100644 index 000000000..dddaa0ee6 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmk/AdminAtmkServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.hrmrg.service.adminatmk; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmk.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmk.AdminAtmkDO; +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.module.hrmrg.dal.mysql.adminatmk.AdminAtmkMapper; + +import jakarta.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hrmrg.enums.ErrorCodeConstants.*; + +/** + * 考勤打卡 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class AdminAtmkServiceImpl implements AdminAtmkService { + + @Resource + private AdminAtmkMapper adminAtmkMapper; + + @Override + public Integer createAdminAtmk(AdminAtmkSaveReqVO createReqVO) { + // 插入 + AdminAtmkDO adminAtmk = BeanUtils.toBean(createReqVO, AdminAtmkDO.class); + adminAtmkMapper.insert(adminAtmk); + // 返回 + return adminAtmk.getId(); + } + + @Override + public void updateAdminAtmk(AdminAtmkSaveReqVO updateReqVO) { + // 校验存在 + validateAdminAtmkExists(updateReqVO.getId()); + // 更新 + AdminAtmkDO updateObj = BeanUtils.toBean(updateReqVO, AdminAtmkDO.class); + adminAtmkMapper.updateById(updateObj); + } + + @Override + public void deleteAdminAtmk(Integer id) { + // 校验存在 + validateAdminAtmkExists(id); + // 删除 + adminAtmkMapper.deleteById(id); + } + + private void validateAdminAtmkExists(Integer id) { + if (adminAtmkMapper.selectById(id) == null) { + throw exception(ADMIN_ATMK_NOT_EXISTS); + } + } + + @Override + public AdminAtmkDO getAdminAtmk(Integer id) { + return adminAtmkMapper.selectById(id); + } + + @Override + public PageResult getAdminAtmkPage(AdminAtmkPageReqVO pageReqVO) { + return adminAtmkMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkface/AdminAtmkFaceService.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkface/AdminAtmkFaceService.java new file mode 100644 index 000000000..41f7f7c5c --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkface/AdminAtmkFaceService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.hrmrg.service.adminatmkface; + + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkface.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmkface.AdminAtmkFaceDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import jakarta.validation.Valid; + +/** + * 人脸识别库 Service 接口 + * + * @author 超级管理员 + */ +public interface AdminAtmkFaceService { + + /** + * 创建人脸识别库 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createAdminAtmkFace(@Valid AdminAtmkFaceSaveReqVO createReqVO); + + /** + * 更新人脸识别库 + * + * @param updateReqVO 更新信息 + */ + void updateAdminAtmkFace(@Valid AdminAtmkFaceSaveReqVO updateReqVO); + + /** + * 删除人脸识别库 + * + * @param id 编号 + */ + void deleteAdminAtmkFace(Integer id); + + /** + * 获得人脸识别库 + * + * @param id 编号 + * @return 人脸识别库 + */ + AdminAtmkFaceDO getAdminAtmkFace(Integer id); + + /** + * 获得人脸识别库分页 + * + * @param pageReqVO 分页查询 + * @return 人脸识别库分页 + */ + PageResult getAdminAtmkFacePage(AdminAtmkFacePageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkface/AdminAtmkFaceServiceImpl.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkface/AdminAtmkFaceServiceImpl.java new file mode 100644 index 000000000..167e2e8cb --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkface/AdminAtmkFaceServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.hrmrg.service.adminatmkface; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkface.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmkface.AdminAtmkFaceDO; +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.module.hrmrg.dal.mysql.adminatmkface.AdminAtmkFaceMapper; + +import jakarta.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hrmrg.enums.ErrorCodeConstants.*; + +/** + * 人脸识别库 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class AdminAtmkFaceServiceImpl implements AdminAtmkFaceService { + + @Resource + private AdminAtmkFaceMapper adminAtmkFaceMapper; + + @Override + public Integer createAdminAtmkFace(AdminAtmkFaceSaveReqVO createReqVO) { + // 插入 + AdminAtmkFaceDO adminAtmkFace = BeanUtils.toBean(createReqVO, AdminAtmkFaceDO.class); + adminAtmkFaceMapper.insert(adminAtmkFace); + // 返回 + return adminAtmkFace.getId(); + } + + @Override + public void updateAdminAtmkFace(AdminAtmkFaceSaveReqVO updateReqVO) { + // 校验存在 + validateAdminAtmkFaceExists(updateReqVO.getId()); + // 更新 + AdminAtmkFaceDO updateObj = BeanUtils.toBean(updateReqVO, AdminAtmkFaceDO.class); + adminAtmkFaceMapper.updateById(updateObj); + } + + @Override + public void deleteAdminAtmkFace(Integer id) { + // 校验存在 + validateAdminAtmkFaceExists(id); + // 删除 + adminAtmkFaceMapper.deleteById(id); + } + + private void validateAdminAtmkFaceExists(Integer id) { + if (adminAtmkFaceMapper.selectById(id) == null) { + throw exception(ADMIN_ATMK_FACE_NOT_EXISTS); + } + } + + @Override + public AdminAtmkFaceDO getAdminAtmkFace(Integer id) { + return adminAtmkFaceMapper.selectById(id); + } + + @Override + public PageResult getAdminAtmkFacePage(AdminAtmkFacePageReqVO pageReqVO) { + return adminAtmkFaceMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkgroutcfg/AdminAtmkGroutCfgService.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkgroutcfg/AdminAtmkGroutCfgService.java new file mode 100644 index 000000000..bfde4493e --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkgroutcfg/AdminAtmkGroutCfgService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.hrmrg.service.adminatmkgroutcfg; + + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkgroutcfg.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmkgroutcfg.AdminAtmkGroutCfgDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import jakarta.validation.Valid; + +/** + * 考勤组设置 Service 接口 + * + * @author 超级管理员 + */ +public interface AdminAtmkGroutCfgService { + + /** + * 创建考勤组设置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createAdminAtmkGroutCfg(@Valid AdminAtmkGroutCfgSaveReqVO createReqVO); + + /** + * 更新考勤组设置 + * + * @param updateReqVO 更新信息 + */ + void updateAdminAtmkGroutCfg(@Valid AdminAtmkGroutCfgSaveReqVO updateReqVO); + + /** + * 删除考勤组设置 + * + * @param id 编号 + */ + void deleteAdminAtmkGroutCfg(Integer id); + + /** + * 获得考勤组设置 + * + * @param id 编号 + * @return 考勤组设置 + */ + AdminAtmkGroutCfgDO getAdminAtmkGroutCfg(Integer id); + + /** + * 获得考勤组设置分页 + * + * @param pageReqVO 分页查询 + * @return 考勤组设置分页 + */ + PageResult getAdminAtmkGroutCfgPage(AdminAtmkGroutCfgPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkgroutcfg/AdminAtmkGroutCfgServiceImpl.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkgroutcfg/AdminAtmkGroutCfgServiceImpl.java new file mode 100644 index 000000000..4432b8336 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminatmkgroutcfg/AdminAtmkGroutCfgServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.hrmrg.service.adminatmkgroutcfg; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminatmkgroutcfg.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminatmkgroutcfg.AdminAtmkGroutCfgDO; +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.module.hrmrg.dal.mysql.adminatmkgroutcfg.AdminAtmkGroutCfgMapper; + +import jakarta.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hrmrg.enums.ErrorCodeConstants.*; + +/** + * 考勤组设置 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class AdminAtmkGroutCfgServiceImpl implements AdminAtmkGroutCfgService { + + @Resource + private AdminAtmkGroutCfgMapper adminAtmkGroutCfgMapper; + + @Override + public Integer createAdminAtmkGroutCfg(AdminAtmkGroutCfgSaveReqVO createReqVO) { + // 插入 + AdminAtmkGroutCfgDO adminAtmkGroutCfg = BeanUtils.toBean(createReqVO, AdminAtmkGroutCfgDO.class); + adminAtmkGroutCfgMapper.insert(adminAtmkGroutCfg); + // 返回 + return adminAtmkGroutCfg.getId(); + } + + @Override + public void updateAdminAtmkGroutCfg(AdminAtmkGroutCfgSaveReqVO updateReqVO) { + // 校验存在 + validateAdminAtmkGroutCfgExists(updateReqVO.getId()); + // 更新 + AdminAtmkGroutCfgDO updateObj = BeanUtils.toBean(updateReqVO, AdminAtmkGroutCfgDO.class); + adminAtmkGroutCfgMapper.updateById(updateObj); + } + + @Override + public void deleteAdminAtmkGroutCfg(Integer id) { + // 校验存在 + validateAdminAtmkGroutCfgExists(id); + // 删除 + adminAtmkGroutCfgMapper.deleteById(id); + } + + private void validateAdminAtmkGroutCfgExists(Integer id) { + if (adminAtmkGroutCfgMapper.selectById(id) == null) { + throw exception(ADMIN_ATMK_GROUT_CFG_NOT_EXISTS); + } + } + + @Override + public AdminAtmkGroutCfgDO getAdminAtmkGroutCfg(Integer id) { + return adminAtmkGroutCfgMapper.selectById(id); + } + + @Override + public PageResult getAdminAtmkGroutCfgPage(AdminAtmkGroutCfgPageReqVO pageReqVO) { + return adminAtmkGroutCfgMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminperfcfg/AdminPerfCfgService.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminperfcfg/AdminPerfCfgService.java new file mode 100644 index 000000000..73c00fc55 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminperfcfg/AdminPerfCfgService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.hrmrg.service.adminperfcfg; + + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminperfcfg.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminperfcfg.AdminPerfCfgDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import jakarta.validation.Valid; + +/** + * 绩效考核配置 Service 接口 + * + * @author 超级管理员 + */ +public interface AdminPerfCfgService { + + /** + * 创建绩效考核配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createAdminPerfCfg(@Valid AdminPerfCfgSaveReqVO createReqVO); + + /** + * 更新绩效考核配置 + * + * @param updateReqVO 更新信息 + */ + void updateAdminPerfCfg(@Valid AdminPerfCfgSaveReqVO updateReqVO); + + /** + * 删除绩效考核配置 + * + * @param id 编号 + */ + void deleteAdminPerfCfg(Integer id); + + /** + * 获得绩效考核配置 + * + * @param id 编号 + * @return 绩效考核配置 + */ + AdminPerfCfgDO getAdminPerfCfg(Integer id); + + /** + * 获得绩效考核配置分页 + * + * @param pageReqVO 分页查询 + * @return 绩效考核配置分页 + */ + PageResult getAdminPerfCfgPage(AdminPerfCfgPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminperfcfg/AdminPerfCfgServiceImpl.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminperfcfg/AdminPerfCfgServiceImpl.java new file mode 100644 index 000000000..a07c65090 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminperfcfg/AdminPerfCfgServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.hrmrg.service.adminperfcfg; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminperfcfg.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminperfcfg.AdminPerfCfgDO; +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.module.hrmrg.dal.mysql.adminperfcfg.AdminPerfCfgMapper; + +import jakarta.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hrmrg.enums.ErrorCodeConstants.*; + +/** + * 绩效考核配置 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class AdminPerfCfgServiceImpl implements AdminPerfCfgService { + + @Resource + private AdminPerfCfgMapper adminPerfCfgMapper; + + @Override + public Integer createAdminPerfCfg(AdminPerfCfgSaveReqVO createReqVO) { + // 插入 + AdminPerfCfgDO adminPerfCfg = BeanUtils.toBean(createReqVO, AdminPerfCfgDO.class); + adminPerfCfgMapper.insert(adminPerfCfg); + // 返回 + return adminPerfCfg.getId(); + } + + @Override + public void updateAdminPerfCfg(AdminPerfCfgSaveReqVO updateReqVO) { + // 校验存在 + validateAdminPerfCfgExists(updateReqVO.getId()); + // 更新 + AdminPerfCfgDO updateObj = BeanUtils.toBean(updateReqVO, AdminPerfCfgDO.class); + adminPerfCfgMapper.updateById(updateObj); + } + + @Override + public void deleteAdminPerfCfg(Integer id) { + // 校验存在 + validateAdminPerfCfgExists(id); + // 删除 + adminPerfCfgMapper.deleteById(id); + } + + private void validateAdminPerfCfgExists(Integer id) { + if (adminPerfCfgMapper.selectById(id) == null) { + throw exception(ADMIN_PERF_CFG_NOT_EXISTS); + } + } + + @Override + public AdminPerfCfgDO getAdminPerfCfg(Integer id) { + return adminPerfCfgMapper.selectById(id); + } + + @Override + public PageResult getAdminPerfCfgPage(AdminPerfCfgPageReqVO pageReqVO) { + return adminPerfCfgMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminpostcfg/AdminPostCfgService.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminpostcfg/AdminPostCfgService.java new file mode 100644 index 000000000..887578c65 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminpostcfg/AdminPostCfgService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.hrmrg.service.adminpostcfg; + + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminpostcfg.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminpostcfg.AdminPostCfgDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import jakarta.validation.Valid; + +/** + * 岗位人员薪资计算配置 Service 接口 + * + * @author 超级管理员 + */ +public interface AdminPostCfgService { + + /** + * 创建岗位人员薪资计算配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createAdminPostCfg(@Valid AdminPostCfgSaveReqVO createReqVO); + + /** + * 更新岗位人员薪资计算配置 + * + * @param updateReqVO 更新信息 + */ + void updateAdminPostCfg(@Valid AdminPostCfgSaveReqVO updateReqVO); + + /** + * 删除岗位人员薪资计算配置 + * + * @param id 编号 + */ + void deleteAdminPostCfg(Integer id); + + /** + * 获得岗位人员薪资计算配置 + * + * @param id 编号 + * @return 岗位人员薪资计算配置 + */ + AdminPostCfgDO getAdminPostCfg(Integer id); + + /** + * 获得岗位人员薪资计算配置分页 + * + * @param pageReqVO 分页查询 + * @return 岗位人员薪资计算配置分页 + */ + PageResult getAdminPostCfgPage(AdminPostCfgPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminpostcfg/AdminPostCfgServiceImpl.java b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminpostcfg/AdminPostCfgServiceImpl.java new file mode 100644 index 000000000..452d74e35 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/java/cn/iocoder/yudao/module/hrmrg/service/adminpostcfg/AdminPostCfgServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.hrmrg.service.adminpostcfg; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + + +import cn.iocoder.yudao.module.hrmrg.controller.admin.adminpostcfg.vo.*; +import cn.iocoder.yudao.module.hrmrg.dal.dataobject.adminpostcfg.AdminPostCfgDO; +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.module.hrmrg.dal.mysql.adminpostcfg.AdminPostCfgMapper; + +import jakarta.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hrmrg.enums.ErrorCodeConstants.*; + +/** + * 岗位人员薪资计算配置 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class AdminPostCfgServiceImpl implements AdminPostCfgService { + + @Resource + private AdminPostCfgMapper adminPostCfgMapper; + + @Override + public Integer createAdminPostCfg(AdminPostCfgSaveReqVO createReqVO) { + // 插入 + AdminPostCfgDO adminPostCfg = BeanUtils.toBean(createReqVO, AdminPostCfgDO.class); + adminPostCfgMapper.insert(adminPostCfg); + // 返回 + return adminPostCfg.getId(); + } + + @Override + public void updateAdminPostCfg(AdminPostCfgSaveReqVO updateReqVO) { + // 校验存在 + validateAdminPostCfgExists(updateReqVO.getId()); + // 更新 + AdminPostCfgDO updateObj = BeanUtils.toBean(updateReqVO, AdminPostCfgDO.class); + adminPostCfgMapper.updateById(updateObj); + } + + @Override + public void deleteAdminPostCfg(Integer id) { + // 校验存在 + validateAdminPostCfgExists(id); + // 删除 + adminPostCfgMapper.deleteById(id); + } + + private void validateAdminPostCfgExists(Integer id) { + if (adminPostCfgMapper.selectById(id) == null) { + throw exception(ADMIN_POST_CFG_NOT_EXISTS); + } + } + + @Override + public AdminPostCfgDO getAdminPostCfg(Integer id) { + return adminPostCfgMapper.selectById(id); + } + + @Override + public PageResult getAdminPostCfgPage(AdminPostCfgPageReqVO pageReqVO) { + return adminPostCfgMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/application-dev.yaml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/application-dev.yaml new file mode 100644 index 000000000..b63fe3a07 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/application-dev.yaml @@ -0,0 +1,138 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + #- com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://192.168.1.128/hs-hr-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://192.168.1.128/hs-mall-cloud?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: root + password: hs-rootadmin + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://192.168.1.128/hs-hr-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + username: root + password: hs-rootadmin + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: 192.168.1.128 # 地址 + port: 6379 # 端口 + database: 0 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + enabled: true # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + cn.iocoder.yudao.module.hrmrg.dal.mysql: debug + org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + env: # 多环境的配置项 + tag: ${HOSTNAME} + security: + mock-enable: true + access-log: # 访问日志的配置项 + enable: false \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/application-local.yaml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/application-local.yaml new file mode 100644 index 000000000..f4f51c7b0 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/application-local.yaml @@ -0,0 +1,159 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + + # 数据源配置项 + autoconfigure: + exclude: + #- de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置 + #- de.codecentric.boot.admin.server.cloud.config.AdminServerDiscoveryAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置 + # - de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置 + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://192.168.1.128:3306/hs-hr-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: root + password: hs-rootadmin + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://192.168.1.128:3306/hs-hr-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + username: root + password: hs-rootadmin + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: 192.168.1.128 # 地址 + port: 6379 # 端口 + database: 0 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 192.168.1.128:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 192.168.1.128 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: admin # RabbitMQ + password: hsrabbitmq # 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### +xxl: + job: + enabled: false # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + # Spring Boot Admin Server 服务端的相关配置 + context-path: /admin # 配置 Spring + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + cn.iocoder.yudao.module.hrmrg.dal.mysql: debug + cn.iocoder.yudao.module.hrmrg.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印 + cn.iocoder.yudao.module.hrmrg.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info + org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + env: # 多环境的配置项 + tag: ${HOSTNAME} + security: + mock-enable: true + access-log: # 访问日志的配置项 + enable: false \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/application.yaml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/application.yaml new file mode 100644 index 000000000..3857843aa --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/application.yaml @@ -0,0 +1,127 @@ +spring: + application: + name: hrmrg-server + + profiles: + active: local + + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + allow-bean-definition-overriding: true # 允许 Bean 覆盖,例如说 Feign 等会存在重复定义的服务 + + config: + import: + - optional:classpath:application-${spring.profiles.active}.yaml # 加载【本地】配置 + - optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml # 加载【Nacos】的配置 + + # Servlet 配置 + servlet: + # 文件上传相关配置项 + multipart: + max-file-size: 16MB # 单个文件大小 + max-request-size: 32MB # 设置总上传的文件大小 + + # Jackson 配置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 LocalDateTime 的格式,使用时间戳 + write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳 + fail-on-empty-beans: false # 允许序列化无属性的 Bean + + # Cache 配置项 + cache: + type: REDIS + redis: + time-to-live: 1h # 设置过期时间为 1 小时 + +server: + port: 48200 + +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 + +--- #################### 接口文档配置 #################### + +springdoc: + api-docs: + enabled: true # 1. 是否开启 Swagger 接文档的元数据 + path: /v3/api-docs + swagger-ui: + enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面 + path: /swagger-ui + default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档 + +knife4j: + enable: true # 2.2 是否开启 Swagger 文档的 Knife4j UI 界面 + setting: + language: zh_cn + +# MyBatis Plus 的配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 + # id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库 + # id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 + # id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + banner: false # 关闭控制台的 Banner 打印 + type-aliases-package: ${yudao.info.base-package}.dal.dataobject + encryptor: + password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成 + +mybatis-plus-join: + banner: false # 关闭控制台的 Banner 打印 + +# Spring Data Redis 配置 +spring: + data: + redis: + repositories: + enabled: false # 项目未使用到 Spring Data Redis 的 Repository,所以直接禁用,保证启动速度 + +# VO 转换(数据翻译)相关 +easy-trans: + is-enable-global: true # 启用全局翻译(拦截所有 SpringMVC ResponseBody 进行自动翻译 )。如果对于性能要求很高可关闭此配置,或通过 @IgnoreTrans 忽略某个接口 + +--- #################### RPC 远程调用相关配置 #################### + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + executor: + appname: ${spring.application.name} # 执行器 AppName + logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 + accessToken: default_token # 执行器通讯TOKEN + +--- #################### 芋道相关配置 #################### + +yudao: + info: + version: 1.0.0 + base-package: cn.iocoder.yudao.module.hrmrg + web: + admin-ui: + url: http://dashboard.yudao.iocoder.cn # Admin 管理后台 UI 的地址 + xss: + enable: false + exclude-urls: # 如下 url,仅仅是为了演示,去掉配置也没关系 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + swagger: + title: 管理后台 + description: 提供管理员管理的所有功能 + version: ${yudao.info.version} + tenant: # 多租户相关配置项 + enable: true + ignore-urls: + ignore-tables: + +debug: false diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/logback-spring.xml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/logback-spring.xml new file mode 100644 index 000000000..b1b9f3faf --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/logback-spring.xml @@ -0,0 +1,76 @@ + + + + + + + + + +       + + + ${PATTERN_DEFAULT} + + + + + + + + + + ${PATTERN_DEFAULT} + + + + ${LOG_FILE} + + + ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} + + ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} + + ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + + ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} + + ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + + + + 0 + + 256 + + + + + + + + ${PATTERN_DEFAULT} + + + + + + + + + + + + + + + + + + + + + + diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminatmk/AdminAtmkMapper.xml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminatmk/AdminAtmkMapper.xml new file mode 100644 index 000000000..df16dbae1 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminatmk/AdminAtmkMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminatmkface/AdminAtmkFaceMapper.xml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminatmkface/AdminAtmkFaceMapper.xml new file mode 100644 index 000000000..f3554af7f --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminatmkface/AdminAtmkFaceMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminatmkgroutcfg/AdminAtmkGroutCfgMapper.xml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminatmkgroutcfg/AdminAtmkGroutCfgMapper.xml new file mode 100644 index 000000000..3423539b7 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminatmkgroutcfg/AdminAtmkGroutCfgMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminperfcfg/AdminPerfCfgMapper.xml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminperfcfg/AdminPerfCfgMapper.xml new file mode 100644 index 000000000..eda558dd8 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminperfcfg/AdminPerfCfgMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminpostcfg/AdminPostCfgMapper.xml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminpostcfg/AdminPostCfgMapper.xml new file mode 100644 index 000000000..241d1f487 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/main/resources/mapper/adminpostcfg/AdminPostCfgMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/test/resources/application-unit-test.yaml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/test/resources/application-unit-test.yaml new file mode 100644 index 000000000..b337d1ece --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/test/resources/application-unit-test.yaml @@ -0,0 +1,48 @@ +spring: + main: + lazy-initialization: true # 开启懒加载,加快速度 + banner-mode: off # 单元测试,禁用 Banner + +--- #################### 数据库相关配置 #################### + +spring: + # 数据源配置项 + datasource: + name: ruoyi-vue-pro + url: jdbc:h2:mem:testdb;MODE=MYSQL;DATABASE_TO_UPPER=false;NON_KEYWORDS=value; # MODE 使用 MySQL 模式;DATABASE_TO_UPPER 配置表和字段使用小写 + driver-class-name: org.h2.Driver + username: sa + password: + druid: + async-init: true # 单元测试,异步初始化 Druid 连接池,提升启动速度 + initial-size: 1 # 单元测试,配置为 1,提升启动速度 + sql: + init: + schema-locations: classpath:/sql/create_tables.sql + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + redis: + host: 127.0.0.1 # 地址 + port: 16379 # 端口(单元测试,使用 16379 端口) + database: 0 # 数据库索引 + +mybatis-plus: + lazy-initialization: true # 单元测试,设置 MyBatis Mapper 延迟加载,加速每个单元测试 + type-aliases-package: ${yudao.info.base-package}.dal.dataobject + +--- #################### 定时任务相关配置 #################### + +--- #################### 配置中心相关配置 #################### + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项(单元测试,禁用 Lock4j) + +--- #################### 监控相关配置 #################### + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + info: + base-package: cn.iocoder.yudao.module.product diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/test/resources/logback.xml b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/test/resources/logback.xml new file mode 100644 index 000000000..daf756bff --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/test/resources/logback.xml @@ -0,0 +1,4 @@ + + + + diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/test/resources/sql/clean.sql b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/test/resources/sql/clean.sql new file mode 100644 index 000000000..e00e95b77 --- /dev/null +++ b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/test/resources/sql/clean.sql @@ -0,0 +1 @@ +delete from hr_admin_atmk \ No newline at end of file diff --git a/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/test/resources/sql/create_tables.sql b/yudao-module-hrmrg/yudao-module-hrmrg-biz/src/test/resources/sql/create_tables.sql new file mode 100644 index 000000000..e69de29bb diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml index 80dc8f7bf..1a19d0f18 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -55,19 +55,19 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 + password: hs-rootadmin slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 + password: hs-rootadmin # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -76,15 +76,15 @@ spring: # rocketmq 配置项,对应 RocketMQProperties 配置类 rocketmq: - name-server: 127.0.0.1:9876 # RocketMQ Namesrv + name-server: 192.168.1.128:9876 # RocketMQ Namesrv spring: # RabbitMQ 配置项,对应 RabbitProperties 配置类 rabbitmq: - host: 127.0.0.1 # RabbitMQ 服务的地址 + host: 192.168.1.128 # RabbitMQ 服务的地址 port: 5672 # RabbitMQ 服务的端口 - username: guest # RabbitMQ 服务的账号 - password: guest # RabbitMQ 服务的密码 + username: admin # RabbitMQ + password: hsrabbitmq # 服务的密码 # Kafka 配置项,对应 KafkaProperties 配置类 kafka: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 @@ -93,7 +93,7 @@ spring: xxl: job: admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml index aaa8ccef7..e04749baa 100644 --- a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -60,28 +60,28 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 username: root - password: 123456 + password: hs-rootadmin # username: sa # SQL Server 连接的示例 # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 # username: SYSDBA # DM 连接的示例 # password: SYSDBA # DM 连接的示例 slave: # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true username: root - password: 123456 + password: hs-rootadmin # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 127.0.0.1 # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 0 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -90,15 +90,15 @@ spring: # rocketmq 配置项,对应 RocketMQProperties 配置类 rocketmq: - name-server: 127.0.0.1:9876 # RocketMQ Namesrv + name-server: 192.168.1.128:9876 # RocketMQ Namesrv spring: # RabbitMQ 配置项,对应 RabbitProperties 配置类 rabbitmq: - host: 127.0.0.1 # RabbitMQ 服务的地址 + host: 192.168.1.128 # RabbitMQ 服务的地址 port: 5672 # RabbitMQ 服务的端口 - username: guest # RabbitMQ 服务的账号 - password: guest # RabbitMQ 服务的密码 + username: admin # RabbitMQ + password: hsrabbitmq # 服务的密码 # Kafka 配置项,对应 KafkaProperties 配置类 kafka: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 @@ -108,7 +108,7 @@ xxl: job: enabled: false # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-prod.yaml b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-prod.yaml new file mode 100644 index 000000000..e04749baa --- /dev/null +++ b/yudao-module-infra/yudao-module-infra-biz/src/main/resources/application-prod.yaml @@ -0,0 +1,159 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + + # 数据源配置项 + autoconfigure: + exclude: + - de.codecentric.boot.admin.server.config.AdminServerAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置 + - de.codecentric.boot.admin.server.cloud.config.AdminServerDiscoveryAutoConfiguration # 禁用 Spring Boot Admin 的 Server 的自动配置 + - de.codecentric.boot.admin.server.ui.config.AdminServerUiAutoConfiguration # 禁用 Spring Boot Admin 的 Server UI 的自动配置 + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: root + password: hs-rootadmin + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + username: root + password: hs-rootadmin + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: 192.168.1.128 # 地址 + port: 6379 # 端口 + database: 0 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 192.168.1.128:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 192.168.1.128 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: admin # RabbitMQ + password: hsrabbitmq # 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### +xxl: + job: + enabled: false # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + # Spring Boot Admin Server 服务端的相关配置 + context-path: /admin # 配置 Spring + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + cn.iocoder.yudao.module.infra.dal.mysql: debug + cn.iocoder.yudao.module.infra.dal.mysql.logger.ApiErrorLogMapper: INFO # 配置 ApiErrorLogMapper 的日志级别为 info,避免和 GlobalExceptionHandler 重复打印 + cn.iocoder.yudao.module.infra.dal.mysql.file.FileConfigMapper: INFO # 配置 FileConfigMapper 的日志级别为 info + org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + env: # 多环境的配置项 + tag: ${HOSTNAME} + security: + mock-enable: true + access-log: # 访问日志的配置项 + enable: false \ No newline at end of file diff --git a/yudao-module-mall/pom.xml b/yudao-module-mall/pom.xml index 8cb649739..a9eef3c39 100644 --- a/yudao-module-mall/pom.xml +++ b/yudao-module-mall/pom.xml @@ -26,6 +26,10 @@ yudao-module-trade-biz yudao-module-statistics-api yudao-module-statistics-biz + yudao-module-hshy-api + yudao-module-hshy-biz + yudao-module-hsfx-api + yudao-module-hsfx-biz diff --git a/yudao-module-mall/yudao-module-hsfx-api/pom.xml b/yudao-module-mall/yudao-module-hsfx-api/pom.xml new file mode 100644 index 000000000..d3652d3d2 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-api/pom.xml @@ -0,0 +1,47 @@ + + + + cn.iocoder.cloud + yudao-module-mall + ${revision} + + 4.0.0 + yudao-module-hsfx-api + jar + + ${project.artifactId} + + infra 模块 API,暴露给其它模块调用 + + + + + cn.iocoder.cloud + yudao-common + + + + + org.springdoc + springdoc-openapi-starter-webmvc-api + provided + + + + + org.springframework.boot + spring-boot-starter-validation + true + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + true + + + + diff --git a/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragebaseconfig/BrokerageBaseConfigApi.java b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragebaseconfig/BrokerageBaseConfigApi.java new file mode 100644 index 000000000..cc49a416f --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragebaseconfig/BrokerageBaseConfigApi.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.hsfx.api.brokeragebaseconfig; + +import cn.iocoder.yudao.module.hsfx.api.brokeragebaseconfig.dto.RpcBrokerageBaseConfigDto; +import cn.iocoder.yudao.module.hsfx.api.brokeragelevelhistory.dto.RpcBroLevelHisRespDto; +import cn.iocoder.yudao.module.hsfx.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +/** + * @author izao + * @Description 分销基础配置远程调用接口 + * @date 2024/12/26 10:57 + */ +@FeignClient(name = ApiConstants.NAME) +@Tag(name = "RPC服务-分销基础配置远程调用接口") +public interface BrokerageBaseConfigApi { + String PREFIX = ApiConstants.PREFIX + "/brokerage-baseconfig";//controller层访问前缀 + + /** + * @Description 根据id获取分销基础配置详情 + * @author izao + * @date 2024/12/26 11:58 + * @param id + * @return RpcBroLevelHisRespDto + */ + @GetMapping(PREFIX + "/get") + @Operation(summary = "根据id获取分销基础配置详情") + @Parameter(name = "id", description = "分销基础配置id", example = "1", required = true) + RpcBrokerageBaseConfigDto getBroBaseConfigById(Long id); +} diff --git a/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragebaseconfig/dto/RpcBrokerageBaseConfigDto.java b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragebaseconfig/dto/RpcBrokerageBaseConfigDto.java new file mode 100644 index 000000000..a0f9af850 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragebaseconfig/dto/RpcBrokerageBaseConfigDto.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.hsfx.api.brokeragebaseconfig.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "RPC服务 - 分销基础配置 返回DTO") +@Data +public class RpcBrokerageBaseConfigDto { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1354") + private Long id; + + @Schema(description = "基础配置json") + private String baseConfigJson; + + @Schema(description = "结算设置配置json") + private String settleConfigJson; + + @Schema(description = "文字设置配置json") + private String textConfigJson; + + @Schema(description = "业绩中心配置json") + private String perforConfigJson; + + @Schema(description = "创建时间") + private LocalDateTime createTime; + +} diff --git a/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevel/BrokerageLevelApi.java b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevel/BrokerageLevelApi.java new file mode 100644 index 000000000..e99636a12 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevel/BrokerageLevelApi.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.hsfx.api.brokeragelevel; + +import cn.iocoder.yudao.module.hsfx.api.brokeragelevel.dto.RpcBrokerageLevelDto; +import cn.iocoder.yudao.module.hsfx.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +/** + * @author izao + * @Description 分销商等级远程调用接口 + * @date 2024/12/26 11:05 + */ +@FeignClient(name = ApiConstants.NAME) +@Tag(name = "RPC服务-分销商等级") +public interface BrokerageLevelApi { + String PREFIX = ApiConstants.PREFIX + "/brokerage-level";//controller层访问前缀 + + /** + * @param id + * @return RpcBrokerageLevelDto + * @Description 获取分销商等级详情 + * @author izao + * @date 2024/12/26 11:44 + */ + @GetMapping(PREFIX + "/get") + @Operation(summary = "获取分销用户详情") + @Parameter(name = "id", description = "分销用户id", example = "1", required = true) + RpcBrokerageLevelDto getBroLevelHisById(Long id); +} diff --git a/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevel/dto/RpcBrokerageLevelDto.java b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevel/dto/RpcBrokerageLevelDto.java new file mode 100644 index 000000000..7e0ea9320 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevel/dto/RpcBrokerageLevelDto.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.hsfx.api.brokeragelevel.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "RPC服务 - 分销商等级返回DTO") +@Data +public class RpcBrokerageLevelDto { + + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23559") + private Long id; + + @Schema(description = "等级 默认等级、一级、二级、三级等") + private String level; + + @Schema(description = "等级名称") + private String levelName; + + @Schema(description = "基础配置json;一级、二级、三级佣金比例、培育奖等") + private String baseConfig; + + @Schema(description = "升级策略配置json 升级到此等级需要的条件") + private String upgradeConfig; + + @Schema(description = "降级策略配置json 不满足此条件则降级") + private String downgradeConfig; + + @Schema(description = "创建时间") + private LocalDateTime createTime; +} diff --git a/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevelhistory/BroLevelHisApi.java b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevelhistory/BroLevelHisApi.java new file mode 100644 index 000000000..09df8ab8f --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevelhistory/BroLevelHisApi.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.hsfx.api.brokeragelevelhistory; + +import cn.iocoder.yudao.module.hsfx.api.brokeragelevelhistory.dto.RpcBroLevelHisRespDto; +import cn.iocoder.yudao.module.hsfx.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; + +/** + * @Description 分销等级变更历史记录远程调用接口 + * @author izao + * @date 2024/12/26 10:57 + */ +@FeignClient(name = ApiConstants.NAME) +@Tag(name = "RPC服务-分销等级变更历史记录") +public interface BroLevelHisApi { + + String PREFIX = ApiConstants.PREFIX + "/brokerage-levelhistory";//controller层访问前缀 + + /** + * @Description 获取等级变更历史记录详情 + * @author izao + * @date 2024/12/26 11:52 + * @param id + * @return RpcBroLevelHisRespDto + */ + @GetMapping(PREFIX + "/get") + @Operation(summary = "获取等级变更历史记录详情") + @Parameter(name = "id", description = "等级变更历史记录id", example = "1", required = true) + RpcBroLevelHisRespDto getBroLevelHisById(Long id); +} diff --git a/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevelhistory/dto/RpcBroLevelHisRespDto.java b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevelhistory/dto/RpcBroLevelHisRespDto.java new file mode 100644 index 000000000..10cca636b --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevelhistory/dto/RpcBroLevelHisRespDto.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.hsfx.api.brokeragelevelhistory.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "RPC服务 - 分销商等级变更历史记录返回DTO") +@Data +public class RpcBroLevelHisRespDto { + + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20579") + private Long id; + + @Schema(description = "分销用户id", example = "29277") + private Long brokerageUserId; + + @Schema(description = "初始等级id", example = "28982") + private Long initLevelId; + + @Schema(description = "目标(现在)等级id", example = "5160") + private Long toLevelId; + + @Schema(description = "变动原因", example = "不满足条件自动降级") + private String changeReason; + + @Schema(description = "创建时间") + private LocalDateTime createTime; + + private String brokerageMemberNickName;//分销用户会员昵称 + + private String initLevelName;//初始等级名称 + + private String toLevelName;//变动目标等级 + +} diff --git a/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokerageuser/BrokerageUserApi.java b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokerageuser/BrokerageUserApi.java new file mode 100644 index 000000000..73cb9b593 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokerageuser/BrokerageUserApi.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.hsfx.api.brokerageuser; + +import cn.iocoder.yudao.module.hsfx.api.brokerageuser.dto.RpcBrokerageUserRespDto; +import cn.iocoder.yudao.module.hsfx.enums.ApiConstants; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +/** + * @Description 分销用户远程调用接口 + * @Author izao + * @Date 2024/12/26 10:31 + */ +@FeignClient(name = ApiConstants.NAME) +@Tag(name = "RPC服务-分销用户") +public interface BrokerageUserApi { + String PREFIX = ApiConstants.PREFIX + "/brokerage-user";//controller层访问前缀 + + + /** + * @Description 远程调用 获取分销用户详情 + * @author izao + * @date 2024/12/26 10:51 + * @param id + * @return BrokerageUserRespDto + */ + @GetMapping(PREFIX + "/get") + @Operation(summary = "获取分销用户详情") + @Parameter(name = "id", description = "分销用户id", example = "1", required = true) + RpcBrokerageUserRespDto getBrokerageUserById(@RequestParam("id") Long id); +} diff --git a/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokerageuser/dto/RpcBrokerageUserRespDto.java b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokerageuser/dto/RpcBrokerageUserRespDto.java new file mode 100644 index 000000000..2cb4080cf --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokerageuser/dto/RpcBrokerageUserRespDto.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.hsfx.api.brokerageuser.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "RPC服务 - 分销用户返回DTO") +@Data +public class RpcBrokerageUserRespDto { + @Schema(description = "分销商id", example = "8493") + private Long id;//分销商id + + @Schema(description = "会员id", example = "2354") + private Long memberUserId;//会员id + + @Schema(description = "会员昵称", example = "芊芊") + private String nickName;//会员昵称 + + @Schema(description = "会员名称", example = "李四") + private String name;//会员名称 + + @Schema(description = "会员手机号", example = "15801123344") + private String phone;//会员手机号 + + @Schema(description = "分销商等级id", example = "2") + private Long levelId;//分销商等级id + + @Schema(description = "等级名称", example = "测试等级") + private String levelName;//等级名称 + + @Schema(description = "上级分销商id", example = "123") + private Long parentId; + + @Schema(description = "上级会员id", example = "123") + private Long parentMemberUserId; + + @Schema(description = "上级分销商昵称", example = "张三") + private String parentMemberNickName; +} diff --git a/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/enums/ApiConstants.java b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/enums/ApiConstants.java new file mode 100644 index 000000000..887ee5fd4 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/enums/ApiConstants.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.hsfx.enums; + +import cn.iocoder.yudao.framework.common.enums.RpcConstants; + +public class ApiConstants { + // hsfx-server/hsfx/xxx + /** + * 服务名 + * + * 注意,需要保证和 spring.application.name 保持一致 + */ + public static final String NAME = "hsfx-server"; + + /** + * controller访问前缀 + */ + public static final String PREFIX = RpcConstants.RPC_API_PREFIX + "/hsfx"; + + public static final String VERSION = "1.0.0"; +} diff --git a/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/enums/ErrorCodeConstants.java b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/enums/ErrorCodeConstants.java new file mode 100644 index 000000000..0eb719777 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-api/src/main/java/cn/iocoder/yudao/module/hsfx/enums/ErrorCodeConstants.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.hsfx.enums; + +import cn.iocoder.yudao.framework.common.exception.ErrorCode; + + +/** + * 海上分销 错误码枚举类 + *

+ * 海上分销 系统,使用 1-100-000-000 段 + */ +public interface ErrorCodeConstants { + // ========== 分销用户不存在 TODO 补充编号 ========== + + //分销商 1-100-001-xxx + //分销等级 1-100-002-xxx + //分销基础配置 1-100-003-xxx + //等级变更历史 1-100-004-xxx + + ErrorCode MEMBER_USER_NOT_EXISTS = new ErrorCode(1 - 100 - 001 - 001, "分销会员信息不存在!"); + ErrorCode PARENT_BROKERAGE_USER_NOT_EXISTS = new ErrorCode(1 - 001 - 100 - 002, "上级分销用户不存在!"); + ErrorCode BROKERAGE_USER_NOT_EXISTS = new ErrorCode(1 - 100 - 001 - 003, "分销用户不存在!"); + ErrorCode BROKERAGE_USER_ALREADY_EXISTS = new ErrorCode(1 - 100 - 001 - 004, "分销用户已存在!"); + ErrorCode BROKERAGE_USER_MEMBER_MISMATCH = new ErrorCode(1 - 100 - 001 - 005, "分销用户与会员不对应!"); + + ErrorCode BROKERAGE_LEVEL_NOT_EXISTS = new ErrorCode(1 - 100 - 002 - 001, "分销等级不存在!"); + ErrorCode BROKERAGE_LEVEL_ALREADY_EXISTS = new ErrorCode(1 - 100 - 002 - 002, "分销等级名称已经存在!"); + ErrorCode BROKERAGE_LEVEL_LEVELNAME_NOTEXISTS = new ErrorCode(1 - 100 - 002 - 003, "分销等级基础信息配置不能为空!"); + ErrorCode BROKERAGE_LEVEL_BASECONFIG_NOTEXISTS = new ErrorCode(1 - 100 - 002 - 004, "分销等级基础信息配置不能为空!"); + ErrorCode BROKERAGE_LEVEL_UPGRADECONFIG_NOTEXISTS = new ErrorCode(1 - 100 - 002 - 005, "分销等级升级配置不能为空!"); + ErrorCode BROKERAGE_LEVEL_DOWNGRADECONFIG_NOTEXISTS = new ErrorCode(1 - 100 - 002 - 006, "分销等级基础信息配置不能为空!"); + + + ErrorCode BROKERAGE_BASECONFIG_NOT_EXISTS = new ErrorCode(1 - 100 - 003 - 001, "分销基础配置不存在!"); + ErrorCode BROKERAGE_BASECONFIG_SINGLE_PROPERTY = new ErrorCode(1 - 100 - 003 - 002, "分销基础配置只能同时更新一个!"); + ErrorCode BROKERAGE_BASECONFIG_BASECONFIGJSON_NOTEXISTS = new ErrorCode(1 - 100 - 003 - 003, "分销基础配置字段不能为空!"); + ErrorCode BROKERAGE_BASECONFIG_SETTLECONFIGJSON_NOTEXISTS = new ErrorCode(1 - 100 - 003 - 004, "分销结算设置配置字段不能为空!"); + ErrorCode BROKERAGE_BASECONFIG_TEXTCONFIGJSON_NOTEXISTS = new ErrorCode(1 - 100 - 003 - 005, "分销文字设置配置字段不能为空!"); + ErrorCode BROKERAGE_BASECONFIG_PREFORCONFIGJSON_NOTEXISTS = new ErrorCode(1 - 100 - 003 - 006, "分销业绩中心设置配置字段不能为空!"); + + + ErrorCode BROKERAGE_LEVELHISTORY_NOT_EXISTS = new ErrorCode(1 - 100 - 004 - 001, "分销等级变更历史信息不存在!"); + + ErrorCode JSON_FORMATCHECK_FAIL=new ErrorCode(1-100-005-001,"JSON类型属性格式校验异常"); + + +} diff --git a/yudao-module-mall/yudao-module-hsfx-biz/pom.xml b/yudao-module-mall/yudao-module-hsfx-biz/pom.xml new file mode 100644 index 000000000..3166b0e78 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/pom.xml @@ -0,0 +1,123 @@ + + + + cn.iocoder.cloud + yudao-module-mall + ${revision} + + 4.0.0 + yudao-module-hsfx-biz + jar + + ${project.artifactId} + + product 模块,主要实现商品相关功能 + 例如:品牌、商品分类、spu、sku等功能。 + + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-env + + + + + cn.iocoder.cloud + yudao-module-hsfx-api + ${revision} + + + cn.iocoder.cloud + yudao-module-product-api + ${revision} + + + cn.iocoder.cloud + yudao-module-member-api + ${revision} + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-biz-tenant + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-web + + + cn.iocoder.cloud + yudao-spring-boot-starter-security + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-mybatis + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-rpc + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-test + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-excel + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-monitor + + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + + + repackage + + + + + + + + diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/HsfxServerApplication.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/HsfxServerApplication.java new file mode 100644 index 000000000..8506a0e10 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/HsfxServerApplication.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.hsfx; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 项目的启动类 + * + * @author tpj + */ +@SpringBootApplication +public class HsfxServerApplication { + public static void main(String[] args) { + SpringApplication.run(HsfxServerApplication.class, args); + + } +} diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragebaseconfig/BrokerageBaseConfigImpl.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragebaseconfig/BrokerageBaseConfigImpl.java new file mode 100644 index 000000000..d9c33ee50 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragebaseconfig/BrokerageBaseConfigImpl.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.hsfx.api.brokeragebaseconfig; + +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hsfx.api.brokeragebaseconfig.dto.RpcBrokerageBaseConfigDto; +import cn.iocoder.yudao.module.hsfx.api.brokeragelevelhistory.dto.RpcBroLevelHisRespDto; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragebaseconfig.BrokerageBaseconfigDO; +import cn.iocoder.yudao.module.hsfx.service.brokeragebaseconfig.BrokerageBaseconfigService; +import org.checkerframework.checker.units.qual.A; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class BrokerageBaseConfigImpl implements BrokerageBaseConfigApi { + + @Autowired + private BrokerageBaseconfigService brokerageBaseconfigService; + + @Override + public RpcBrokerageBaseConfigDto getBroBaseConfigById(Long id) { + BrokerageBaseconfigDO brokerageBaseconfig = brokerageBaseconfigService.getBrokerageBaseconfig(id); + RpcBrokerageBaseConfigDto rpcBrokerageBaseConfigDto = new RpcBrokerageBaseConfigDto(); + BeanUtils.copyProperties(brokerageBaseconfig, rpcBrokerageBaseConfigDto); + return rpcBrokerageBaseConfigDto; + } +} diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevel/BrokerageLevelImpl.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevel/BrokerageLevelImpl.java new file mode 100644 index 000000000..6c4815494 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevel/BrokerageLevelImpl.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.hsfx.api.brokeragelevel; + +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hsfx.api.brokeragelevel.dto.RpcBrokerageLevelDto; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevel.BrokerageLevelDO; +import cn.iocoder.yudao.module.hsfx.service.brokeragelevel.BrokerageLevelService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class BrokerageLevelImpl implements BrokerageLevelApi { + + + @Autowired + private BrokerageLevelService brokerageLevelService; + + @Override + public RpcBrokerageLevelDto getBroLevelHisById(Long id) { + BrokerageLevelDO brokerageLevel = brokerageLevelService.getBrokerageLevel(id); + RpcBrokerageLevelDto rpcBrokerageLevelDto = new RpcBrokerageLevelDto(); + BeanUtils.copyProperties(brokerageLevel, rpcBrokerageLevelDto); + return rpcBrokerageLevelDto; + } +} diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevelhistory/BrokerageLevelHisImpl.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevelhistory/BrokerageLevelHisImpl.java new file mode 100644 index 000000000..a28e3db75 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokeragelevelhistory/BrokerageLevelHisImpl.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.hsfx.api.brokeragelevelhistory; + +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hsfx.api.brokeragelevelhistory.dto.RpcBroLevelHisRespDto; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory.vo.BrokerageLevelhistoryRespVO; +import cn.iocoder.yudao.module.hsfx.service.brokeragelevelhistory.BrokerageLevelhistoryService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +/** + * @author izao + * @Description 用户等级变更历史记录远程调用接口实现类 + * @date 2024/12/26 11:21 + */ + +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class BrokerageLevelHisImpl implements BroLevelHisApi { + + @Autowired + private BrokerageLevelhistoryService levelhistoryService; + + @Override + public RpcBroLevelHisRespDto getBroLevelHisById(Long id) { + BrokerageLevelhistoryRespVO levelhistoryRespVO = levelhistoryService.getBrokerageLevelhistory(id); + RpcBroLevelHisRespDto rpcBroLevelHisRespDto = new RpcBroLevelHisRespDto(); + BeanUtils.copyProperties(levelhistoryRespVO, rpcBroLevelHisRespDto); + return rpcBroLevelHisRespDto; + } +} diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokerageuser/BrokerageUserImpl.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokerageuser/BrokerageUserImpl.java new file mode 100644 index 000000000..518d010e3 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/api/brokerageuser/BrokerageUserImpl.java @@ -0,0 +1,32 @@ +package cn.iocoder.yudao.module.hsfx.api.brokerageuser; + +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hsfx.api.brokerageuser.dto.RpcBrokerageUserRespDto; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo.BrokerageUserPageResVO; +import cn.iocoder.yudao.module.hsfx.service.brokerageuser.BrokerageUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + + + +/** + * @Description 分销用户远程调用接口实现类 + * @author izao + * @date 2024/12/26 10:54 + */ +@RestController // 提供 RESTful API 接口,给 Feign 调用 +@Validated +public class BrokerageUserImpl implements BrokerageUserApi{ + + @Autowired + private BrokerageUserService brokerageUserService; + + @Override + public RpcBrokerageUserRespDto getBrokerageUserById(Long id) { + RpcBrokerageUserRespDto rpcBrokerageUserRespDto = new RpcBrokerageUserRespDto(); + BrokerageUserPageResVO brokerageUser = brokerageUserService.getBrokerageUser(id); + BeanUtils.copyProperties(brokerageUser, rpcBrokerageUserRespDto); + return rpcBrokerageUserRespDto; + } +} diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/DemoTestController.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/DemoTestController.java new file mode 100644 index 000000000..d4faf22df --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/DemoTestController.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - hsfx") +@RestController +@RequestMapping("/hsfx/test") +@Validated +public class DemoTestController { + + @GetMapping("/get") + @Operation(summary = "获取 海上会员分销信息 信息") + public CommonResult get() { + return success("true"); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/BrokerageBaseconfigController.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/BrokerageBaseconfigController.java new file mode 100644 index 000000000..409282686 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/BrokerageBaseconfigController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragebaseconfig; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragebaseconfig.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragebaseconfig.BrokerageBaseconfigDO; +import cn.iocoder.yudao.module.hsfx.service.brokeragebaseconfig.BrokerageBaseconfigService; + + +@Tag(name = "管理后台 - 分销配置") +@RestController +@RequestMapping("/hsfx/brokerage-baseconfig") +@Validated +public class BrokerageBaseconfigController { + + @Resource + private BrokerageBaseconfigService brokerageBaseconfigService; + + @PostMapping("/create") + @Operation(summary = "创建分销配置") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:create')") + public CommonResult createBrokerageBaseconfig(@Valid @RequestBody BrokerageBaseconfigSaveReqVO createReqVO) { + return success(brokerageBaseconfigService.createBrokerageBaseconfig(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新分销配置") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:update')") + public CommonResult updateBrokerageBaseconfig(@Valid @RequestBody BrokerageBaseconfigSaveReqVO updateReqVO) { + brokerageBaseconfigService.updateBrokerageBaseconfig(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除分销配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:delete')") + public CommonResult deleteBrokerageBaseconfig(@RequestParam("id") Long id) { + brokerageBaseconfigService.deleteBrokerageBaseconfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得分销配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:query')") + public CommonResult getBrokerageBaseconfig(@RequestParam("id") Long id) { + BrokerageBaseconfigDO brokerageBaseconfig = brokerageBaseconfigService.getBrokerageBaseconfig(id); + return success(BeanUtils.toBean(brokerageBaseconfig, BrokerageBaseconfigRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得分销配置分页") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:query')") + public CommonResult> getBrokerageBaseconfigPage(@Valid BrokerageBaseconfigPageReqVO pageReqVO) { + PageResult pageResult = brokerageBaseconfigService.getBrokerageBaseconfigPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, BrokerageBaseconfigRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出分销配置 Excel") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportBrokerageBaseconfigExcel(@Valid BrokerageBaseconfigPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = brokerageBaseconfigService.getBrokerageBaseconfigPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "分销配置.xls", "数据", BrokerageBaseconfigRespVO.class, + BeanUtils.toBean(list, BrokerageBaseconfigRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/vo/BrokerageBaseconfigPageReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/vo/BrokerageBaseconfigPageReqVO.java new file mode 100644 index 000000000..a095bf9a7 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/vo/BrokerageBaseconfigPageReqVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragebaseconfig.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 分销配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BrokerageBaseconfigPageReqVO extends PageParam { + + @Schema(description = "基础配置json") + private String baseConfigJson; + + @Schema(description = "结算设置配置json") + private String settleConfigJson; + + @Schema(description = "文字设置配置json") + private String textConfigJson; + + @Schema(description = "业绩中心配置json") + private String perforConfigJson; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/vo/BrokerageBaseconfigRespVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/vo/BrokerageBaseconfigRespVO.java new file mode 100644 index 000000000..acd4aa8a7 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/vo/BrokerageBaseconfigRespVO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragebaseconfig.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 分销配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class BrokerageBaseconfigRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1354") + @ExcelProperty("id") + private Long id; + + @Schema(description = "基础配置json") + @ExcelProperty("基础配置json") + private String baseConfigJson; + + @Schema(description = "结算设置配置json") + @ExcelProperty("结算设置配置json") + private String settleConfigJson; + + @Schema(description = "文字设置配置json") + @ExcelProperty("文字设置配置json") + private String textConfigJson; + + @Schema(description = "业绩中心配置json") + @ExcelProperty("业绩中心配置json") + private String perforConfigJson; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/vo/BrokerageBaseconfigSaveReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/vo/BrokerageBaseconfigSaveReqVO.java new file mode 100644 index 000000000..9ef176052 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragebaseconfig/vo/BrokerageBaseconfigSaveReqVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragebaseconfig.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; + +@Schema(description = "管理后台 - 分销配置新增/修改 Request VO") +@Data +public class BrokerageBaseconfigSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1354") + private Long id; + + @Schema(description = "基础配置json") + private String baseConfigJson; + + @Schema(description = "结算设置配置json") + private String settleConfigJson; + + @Schema(description = "文字设置配置json") + private String textConfigJson; + + @Schema(description = "业绩中心配置json") + private String perforConfigJson; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/BrokerageLevelController.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/BrokerageLevelController.java new file mode 100644 index 000000000..710e1d87c --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/BrokerageLevelController.java @@ -0,0 +1,94 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevel; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevel.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevel.BrokerageLevelDO; +import cn.iocoder.yudao.module.hsfx.service.brokeragelevel.BrokerageLevelService; + + +@Tag(name = "管理后台 - 分销商等级") +@RestController +@RequestMapping("/hsfx/brokerage-level") +@Validated +public class BrokerageLevelController { + + @Resource + private BrokerageLevelService brokerageLevelService; + + @PostMapping("/create") + @Operation(summary = "创建分销商等级") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:create')") + public CommonResult createBrokerageLevel(@Valid @RequestBody BrokerageLevelSaveReqVO createReqVO) { + return success(brokerageLevelService.createBrokerageLevel(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新分销商等级") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:update')") + public CommonResult updateBrokerageLevel(@Valid @RequestBody BrokerageLevelSaveReqVO updateReqVO) { + brokerageLevelService.updateBrokerageLevel(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除分销商等级") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:delete')") + public CommonResult deleteBrokerageLevel(@RequestParam("id") Long id) { + brokerageLevelService.deleteBrokerageLevel(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得分销商等级") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:query')") + public CommonResult getBrokerageLevel(@RequestParam("id") Long id) { + BrokerageLevelDO brokerageLevel = brokerageLevelService.getBrokerageLevel(id); + return success(BeanUtils.toBean(brokerageLevel, BrokerageLevelRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得分销商等级分页") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:query')") + public CommonResult> getBrokerageLevelPage(@Valid BrokerageLevelPageReqVO pageReqVO) { + PageResult pageResult = brokerageLevelService.getBrokerageLevelPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, BrokerageLevelRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出分销商等级 Excel") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportBrokerageLevelExcel(@Valid BrokerageLevelPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = brokerageLevelService.getBrokerageLevelPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "分销商等级.xls", "数据", BrokerageLevelRespVO.class, + BeanUtils.toBean(list, BrokerageLevelRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/vo/BrokerageLevelPageReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/vo/BrokerageLevelPageReqVO.java new file mode 100644 index 000000000..a19a3568b --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/vo/BrokerageLevelPageReqVO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevel.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 分销商等级分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BrokerageLevelPageReqVO extends PageParam { + + @Schema(description = "等级 默认等级、一级、二级、三级等") + private String level; + + @Schema(description = "等级名称") + private String levelName; + + @Schema(description = "基础配置json;一级、二级、三级佣金比例、培育奖等") + private String baseConfig; + + @Schema(description = "升级策略配置json 升级到此等级需要的条件") + private String upgradeConfig; + + @Schema(description = "降级策略配置json 不满足此条件则降级") + private String downgradeConfig; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/vo/BrokerageLevelRespVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/vo/BrokerageLevelRespVO.java new file mode 100644 index 000000000..02988b66a --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/vo/BrokerageLevelRespVO.java @@ -0,0 +1,46 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevel.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 分销商等级 Response VO") +@Data +@ExcelIgnoreUnannotated +public class BrokerageLevelRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23559") + @ExcelProperty("id") + private Long id; + + @Schema(description = "等级 默认等级、一级、二级、三级等") + @ExcelProperty("等级 默认等级、一级、二级、三级等") + private String level; + + @Schema(description = "等级名称") + @ExcelProperty("等级名称") + private String levelName; + + @Schema(description = "基础配置json;一级、二级、三级佣金比例、培育奖等") + @ExcelProperty("基础配置json;一级、二级、三级佣金比例、培育奖等") + private String baseConfig; + + @Schema(description = "升级策略配置json 升级到此等级需要的条件") + @ExcelProperty("升级策略配置json 升级到此等级需要的条件") + private String upgradeConfig; + + @Schema(description = "降级策略配置json 不满足此条件则降级") + @ExcelProperty("降级策略配置json 不满足此条件则降级") + private String downgradeConfig; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/vo/BrokerageLevelSaveReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/vo/BrokerageLevelSaveReqVO.java new file mode 100644 index 000000000..029a89827 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevel/vo/BrokerageLevelSaveReqVO.java @@ -0,0 +1,29 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevel.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; + +@Schema(description = "管理后台 - 分销商等级新增/修改 Request VO") +@Data +public class BrokerageLevelSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23559") + private Long id; + + @Schema(description = "等级 默认等级、一级、二级、三级等") + private String level; + + @Schema(description = "等级名称") + private String levelName; + + @Schema(description = "基础配置json;一级、二级、三级佣金比例、培育奖等") + private String baseConfig; + + @Schema(description = "升级策略配置json 升级到此等级需要的条件") + private String upgradeConfig; + + @Schema(description = "降级策略配置json 不满足此条件则降级") + private String downgradeConfig; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/BrokerageLevelhistoryController.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/BrokerageLevelhistoryController.java new file mode 100644 index 000000000..d2366e38b --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/BrokerageLevelhistoryController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevelhistory.BrokerageLevelhistoryDO; +import cn.iocoder.yudao.module.hsfx.service.brokeragelevelhistory.BrokerageLevelhistoryService; + + +@Tag(name = "管理后台 - 等级变更历史记录") +@RestController +@RequestMapping("/hsfx/brokerage-levelhistory") +@Validated +public class BrokerageLevelhistoryController { + + @Resource + private BrokerageLevelhistoryService brokerageLevelhistoryService; + + @PostMapping("/create") + @Operation(summary = "创建等级变更历史记录") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:create')") + public CommonResult createBrokerageLevelhistory(@Valid @RequestBody BrokerageLevelhistorySaveReqVO createReqVO) { + return success(brokerageLevelhistoryService.createBrokerageLevelhistory(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新等级变更历史记录") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:update')") + public CommonResult updateBrokerageLevelhistory(@Valid @RequestBody BrokerageLevelhistorySaveReqVO updateReqVO) { + brokerageLevelhistoryService.updateBrokerageLevelhistory(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除等级变更历史记录") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:delete')") + public CommonResult deleteBrokerageLevelhistory(@RequestParam("id") Long id) { + brokerageLevelhistoryService.deleteBrokerageLevelhistory(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得等级变更历史记录") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:query')") + public CommonResult getBrokerageLevelhistory(@RequestParam("id") Long id) { + return success(brokerageLevelhistoryService.getBrokerageLevelhistory(id)); + } + + @GetMapping("/page") + @Operation(summary = "获得等级变更历史记录分页") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:query')") + public CommonResult> getBrokerageLevelhistoryPage(@Valid BrokerageLevelhistoryPageReqVO pageReqVO) { + PageResult pageResult = brokerageLevelhistoryService.getBrokerageLevelhistoryPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, BrokerageLevelhistoryRespVO.class)); + } + +// @GetMapping("/export-excel") +// @Operation(summary = "导出等级变更历史记录 Excel") +// @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:export')") +// @ApiAccessLog(operateType = EXPORT) +// public void exportBrokerageLevelhistoryExcel(@Valid BrokerageLevelhistoryPageReqVO pageReqVO, +// HttpServletResponse response) throws IOException { +// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); +// List list = brokerageLevelhistoryService.getBrokerageLevelhistoryPage(pageReqVO).getList(); +// // 导出 Excel +// ExcelUtils.write(response, "等级变更历史记录.xls", "数据", BrokerageLevelhistoryRespVO.class, +// BeanUtils.toBean(list, BrokerageLevelhistoryRespVO.class)); +// } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/vo/BrokerageLevelhistoryPageReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/vo/BrokerageLevelhistoryPageReqVO.java new file mode 100644 index 000000000..ffe1c4bbb --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/vo/BrokerageLevelhistoryPageReqVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 等级变更历史记录分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BrokerageLevelhistoryPageReqVO extends PageParam { + + @Schema(description = "分销用户id", example = "29277") + private Long brokerageUserId; + + @Schema(description = "初始等级id", example = "28982") + private Long initLevelId; + + @Schema(description = "目标(现在)等级id", example = "5160") + private Long toLevelId; + + @Schema(description = "变动原因", example = "不满足条件自动降级") + private String changeReason; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/vo/BrokerageLevelhistoryRespVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/vo/BrokerageLevelhistoryRespVO.java new file mode 100644 index 000000000..831a60342 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/vo/BrokerageLevelhistoryRespVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 等级变更历史记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class BrokerageLevelhistoryRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20579") + @ExcelProperty("id") + private Long id; + + @Schema(description = "分销用户id", example = "29277") + @ExcelProperty("分销用户id") + private Long brokerageUserId; + + @Schema(description = "初始等级id", example = "28982") + @ExcelProperty("初始等级id") + private Long initLevelId; + + @Schema(description = "目标(现在)等级id", example = "5160") + @ExcelProperty("目标(现在)等级id") + private Long toLevelId; + + @Schema(description = "变动原因", example = "不满足条件自动降级") + @ExcelProperty("变动原因") + private String changeReason; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + private String brokerageMemberNickName;//分销用户会员昵称 + + private String initLevelName;//初始等级名称 + + private String toLevelName;//变动目标等级 + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/vo/BrokerageLevelhistorySaveReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/vo/BrokerageLevelhistorySaveReqVO.java new file mode 100644 index 000000000..2c07c40ff --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokeragelevelhistory/vo/BrokerageLevelhistorySaveReqVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +@Schema(description = "管理后台 - 等级变更历史记录新增/修改 Request VO") +@Data +public class BrokerageLevelhistorySaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20579") + private Long id; + + @Schema(description = "分销用户id", example = "29277") + private Long brokerageUserId; + + @Schema(description = "初始等级id", example = "28982") + private Long initLevelId; + + @Schema(description = "目标(现在)等级id", example = "5160") + private Long toLevelId; + + @Schema(description = "变动原因", example = "不满足条件自动降级") + private String changeReason; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/BrokerageUserController.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/BrokerageUserController.java new file mode 100644 index 000000000..aff98f182 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/BrokerageUserController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokerageuser.BrokerageUserDO; +import cn.iocoder.yudao.module.hsfx.service.brokerageuser.BrokerageUserService; + +@Tag(name = "管理后台 - 分销用户") +@RestController +@RequestMapping("/hsfx/brokerage-user") +@Validated +public class BrokerageUserController { + + @Resource + private BrokerageUserService brokerageUserService; + + @PostMapping("/create") + @Operation(summary = "创建分销用户") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:create')") + public CommonResult createBrokerageUser(@Valid @RequestBody BrokerageUserSaveReqVO createReqVO) { + return success(brokerageUserService.createBrokerageUser(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新分销用户") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:update')") + public CommonResult updateBrokerageUser(@Valid @RequestBody BrokerageUserSaveReqVO updateReqVO) { + brokerageUserService.updateBrokerageUser(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除分销用户") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:delete')") + public CommonResult deleteBrokerageUser(@RequestParam("id") Long id) { + brokerageUserService.deleteBrokerageUser(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得分销用户") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:query')") + public CommonResult getBrokerageUser(@RequestParam("id") Long id) { + BrokerageUserPageResVO brokerageUser = brokerageUserService.getBrokerageUser(id); + return CommonResult.success(brokerageUser); + } + + @GetMapping("/page") + @Operation(summary = "获得分销用户分页") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:query')") + public CommonResult> getBrokerageUserPage(@Valid BrokerageUserPageReqVO pageReqVO) { + PageResult pageResult = brokerageUserService.getBrokerageUserPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, BrokerageUserPageResVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出分销用户 Excel") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportBrokerageUserExcel(@Valid BrokerageUserPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = brokerageUserService.getBrokerageUserPage(pageReqVO).getList(); + + // 导出 Excel + ExcelUtils.write(response, "分销用户.xls", "数据", BrokerageUserRespVO.class, + BeanUtils.toBean(list, BrokerageUserRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserPageReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserPageReqVO.java new file mode 100644 index 000000000..fc6ef804d --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserPageReqVO.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 分销用户分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class BrokerageUserPageReqVO extends PageParam { + + @Schema(description = "用户id", example = "8493") + private Long memberUserId; + + @Schema(description = "分销商等级id", example = "24915") + private Long levelId; + + @Schema(description = "上级用户id", example = "9225") + private Long parentId; + + @Schema(description = "数据字典 是否启用") + private Integer isEnable; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserPageResVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserPageResVO.java new file mode 100644 index 000000000..71ee202b3 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserPageResVO.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo; + +import lombok.Data; + +@Data +public class BrokerageUserPageResVO { + + private Long id;//分销商id + private Long memberUserId;//会员id + private String nickName;//会员昵称 + private String name;//会员名称 + private String phone;//会员手机号 + private Long levelId;//分销商等级id + private String levelName;//等级名称 + private Long parentId; + private Long parentMemberUserId; + private String parentMemberNickName; +} diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserRespVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserRespVO.java new file mode 100644 index 000000000..ea5726fce --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserRespVO.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 分销用户 Response VO") +@Data +@ExcelIgnoreUnannotated +public class BrokerageUserRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32060") + @ExcelProperty("id") + private Long id; + + @Schema(description = "用户id", example = "8493") + @ExcelProperty("用户id") + private Long memberUserId; + + @Schema(description = "分销商等级id", example = "24915") + @ExcelProperty("分销商等级id") + private Long levelId; + + @Schema(description = "上级用户id", example = "9225") + @ExcelProperty("上级用户id") + private Long parentId; + + @Schema(description = "数据字典 是否启用") + @ExcelProperty(value = "数据字典 是否启用", converter = DictConvert.class) + @DictFormat("infra_boolean_string") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer isEnable; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserSaveReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserSaveReqVO.java new file mode 100644 index 000000000..09fda59fa --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/BrokerageUserSaveReqVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +@Schema(description = "管理后台 - 分销用户新增/修改 Request VO") +@Data +public class BrokerageUserSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32060") + private Long id; + + @Schema(description = "用户id", example = "8493") + private Long memberUserId; + + @Schema(description = "分销商等级id", example = "24915") + private Long levelId; + + @Schema(description = "上级用户id", example = "9225") + private Long parentId; + + @Schema(description = "数据字典 是否启用") + private Integer isEnable; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/MemberResDo.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/MemberResDo.java new file mode 100644 index 000000000..b1dc4e563 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/admin/brokerageuser/vo/MemberResDo.java @@ -0,0 +1,9 @@ +package cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo; + +import lombok.Data; + +@Data +public class MemberResDo { + private Long memberId; + private String memberName; +} diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/AppDemoTestController.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/AppDemoTestController.java new file mode 100644 index 000000000..3d0bbdcc2 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/AppDemoTestController.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.hsfx.controller.app; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "APP - 管理后台 - hsfx") +@RestController +@RequestMapping("/hsfx/test") +@Validated +public class AppDemoTestController { + + @GetMapping("/get") + @Operation(summary = "获取 分销app 信息") + public CommonResult get() { + return success("true"); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/AppBroBaseconfigController.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/AppBroBaseconfigController.java new file mode 100644 index 000000000..9e2458139 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/AppBroBaseconfigController.java @@ -0,0 +1,118 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragebaseconfig; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragebaseconfig.vo.BrokerageBaseconfigPageReqVO; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragebaseconfig.vo.BrokerageBaseconfigRespVO; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragebaseconfig.vo.BrokerageBaseconfigSaveReqVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokeragebaseconfig.vo.AppBroBaseconfigPageReqVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokeragebaseconfig.vo.AppBroBaseconfigRespVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokeragebaseconfig.vo.AppBroBaseconfigSaveReqVO; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragebaseconfig.BrokerageBaseconfigDO; +import cn.iocoder.yudao.module.hsfx.service.brokeragebaseconfig.BrokerageBaseconfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "APP后台 - 分销配置") +@RestController +@RequestMapping("/hsfx/brokerage-baseconfig") +@Validated +public class AppBroBaseconfigController { + + @Resource + private BrokerageBaseconfigService brokerageBaseconfigService; + + @PostMapping("/create") + @Operation(summary = "创建分销配置") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:create')") + public CommonResult createBrokerageBaseconfig(@Valid @RequestBody AppBroBaseconfigSaveReqVO createReqVO) { + BrokerageBaseconfigSaveReqVO adminBrokerageBaseconfigSaveReqVO = new BrokerageBaseconfigSaveReqVO(); + BeanUtils.copyProperties(createReqVO, adminBrokerageBaseconfigSaveReqVO); + return success(brokerageBaseconfigService.createBrokerageBaseconfig(adminBrokerageBaseconfigSaveReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新分销配置") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:update')") + public CommonResult updateBrokerageBaseconfig(@Valid @RequestBody AppBroBaseconfigSaveReqVO updateReqVO) { + BrokerageBaseconfigSaveReqVO brokerageBaseconfigSaveReqVO = new BrokerageBaseconfigSaveReqVO(); + BeanUtils.copyProperties(updateReqVO, brokerageBaseconfigSaveReqVO); + brokerageBaseconfigService.updateBrokerageBaseconfig(brokerageBaseconfigSaveReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除分销配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:delete')") + public CommonResult deleteBrokerageBaseconfig(@RequestParam("id") Long id) { + brokerageBaseconfigService.deleteBrokerageBaseconfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得分销配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:query')") + public CommonResult getBrokerageBaseconfig(@RequestParam("id") Long id) { + BrokerageBaseconfigDO adminBrokerageBaseconfig = brokerageBaseconfigService.getBrokerageBaseconfig(id); + if (adminBrokerageBaseconfig == null) { + return success(null); + } + return success(BeanUtils.toBean(adminBrokerageBaseconfig, AppBroBaseconfigRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得分销配置分页") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:query')") + public CommonResult> getBrokerageBaseconfigPage(@Valid AppBroBaseconfigPageReqVO pageReqVO) { + BrokerageBaseconfigPageReqVO adminBrokerageBaseconfigPageReqVO = new BrokerageBaseconfigPageReqVO(); + BeanUtils.copyProperties(pageReqVO, adminBrokerageBaseconfigPageReqVO); + PageResult pageResult = brokerageBaseconfigService.getBrokerageBaseconfigPage(adminBrokerageBaseconfigPageReqVO); + List appBroBaseconfigRespVOList = new ArrayList<>(); + PageResult appPageResult = new PageResult<>(); + appPageResult.setTotal(pageResult.getTotal()); + pageResult.getList().forEach(adminBaseConfigDo -> { + AppBroBaseconfigRespVO appBroBaseconfigRespVO = new AppBroBaseconfigRespVO(); + BeanUtils.copyProperties(adminBaseConfigDo, appBroBaseconfigRespVO); + appBroBaseconfigRespVOList.add(appBroBaseconfigRespVO); + }); + appPageResult.setList(appBroBaseconfigRespVOList); + return success(appPageResult); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出分销配置 Excel") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-baseconfig:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportBrokerageBaseconfigExcel(@Valid AppBroBaseconfigPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + BrokerageBaseconfigPageReqVO adminBaseconfigPageReqVO = new BrokerageBaseconfigPageReqVO(); + BeanUtils.copyProperties(pageReqVO, adminBaseconfigPageReqVO); + List list = brokerageBaseconfigService.getBrokerageBaseconfigPage(adminBaseconfigPageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "分销配置.xls", "数据", AppBroBaseconfigRespVO.class, + BeanUtils.toBean(list, AppBroBaseconfigRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/vo/AppBroBaseconfigPageReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/vo/AppBroBaseconfigPageReqVO.java new file mode 100644 index 000000000..a9b428e3e --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/vo/AppBroBaseconfigPageReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragebaseconfig.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 分销配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AppBroBaseconfigPageReqVO extends PageParam { + + @Schema(description = "基础配置json") + private String baseConfigJson; + + @Schema(description = "结算设置配置json") + private String settleConfigJson; + + @Schema(description = "文字设置配置json") + private String textConfigJson; + + @Schema(description = "业绩中心配置json") + private String perforConfigJson; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/vo/AppBroBaseconfigRespVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/vo/AppBroBaseconfigRespVO.java new file mode 100644 index 000000000..7eb3586c6 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/vo/AppBroBaseconfigRespVO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragebaseconfig.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 分销配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AppBroBaseconfigRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1354") + @ExcelProperty("id") + private Long id; + + @Schema(description = "基础配置json") + @ExcelProperty("基础配置json") + private String baseConfigJson; + + @Schema(description = "结算设置配置json") + @ExcelProperty("结算设置配置json") + private String settleConfigJson; + + @Schema(description = "文字设置配置json") + @ExcelProperty("文字设置配置json") + private String textConfigJson; + + @Schema(description = "业绩中心配置json") + @ExcelProperty("业绩中心配置json") + private String perforConfigJson; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/vo/AppBroBaseconfigSaveReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/vo/AppBroBaseconfigSaveReqVO.java new file mode 100644 index 000000000..f557de972 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragebaseconfig/vo/AppBroBaseconfigSaveReqVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragebaseconfig.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 分销配置新增/修改 Request VO") +@Data +public class AppBroBaseconfigSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1354") + private Long id; + + @Schema(description = "基础配置json") + private String baseConfigJson; + + @Schema(description = "结算设置配置json") + private String settleConfigJson; + + @Schema(description = "文字设置配置json") + private String textConfigJson; + + @Schema(description = "业绩中心配置json") + private String perforConfigJson; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/AppBroLevelController.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/AppBroLevelController.java new file mode 100644 index 000000000..43f8415e3 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/AppBroLevelController.java @@ -0,0 +1,123 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevel; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevel.vo.BrokerageLevelPageReqVO; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevel.vo.BrokerageLevelRespVO; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevel.vo.BrokerageLevelSaveReqVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevel.vo.AppBroLevelPageReqVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevel.vo.AppBroLevelRespVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevel.vo.AppBroLevelSaveReqVO; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevel.BrokerageLevelDO; +import cn.iocoder.yudao.module.hsfx.service.brokeragelevel.BrokerageLevelService; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.context.annotation.Bean; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + + +@Tag(name = "APP后台 - 分销商等级") +@RestController +@RequestMapping("/hsfx/brokerage-level") +@Validated +public class AppBroLevelController { + + @Resource + private BrokerageLevelService brokerageLevelService; + + @PostMapping("/create") + @Operation(summary = "创建分销商等级") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:create')") + public CommonResult createBrokerageLevel(@Valid @RequestBody AppBroLevelSaveReqVO createReqVO) { + BrokerageLevelSaveReqVO brokerageLevelSaveReqVO = new BrokerageLevelSaveReqVO(); + BeanUtils.copyProperties(createReqVO, brokerageLevelSaveReqVO); + return success(brokerageLevelService.createBrokerageLevel(brokerageLevelSaveReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新分销商等级") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:update')") + public CommonResult updateBrokerageLevel(@Valid @RequestBody AppBroLevelSaveReqVO updateReqVO) { + BrokerageLevelSaveReqVO brokerageLevelUpdateReqVO = new BrokerageLevelSaveReqVO(); + BeanUtils.copyProperties(updateReqVO, brokerageLevelUpdateReqVO); + brokerageLevelService.updateBrokerageLevel(brokerageLevelUpdateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除分销商等级") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:delete')") + public CommonResult deleteBrokerageLevel(@RequestParam("id") Long id) { + brokerageLevelService.deleteBrokerageLevel(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得分销商等级") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:query')") + public CommonResult getBrokerageLevel(@RequestParam("id") Long id) { + BrokerageLevelDO brokerageLevel = brokerageLevelService.getBrokerageLevel(id); + if(brokerageLevel==null){ + return success(null); + } + return success(BeanUtils.toBean(brokerageLevel, AppBroLevelRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得分销商等级分页") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:query')") + public CommonResult> getBrokerageLevelPage(@Valid AppBroLevelPageReqVO pageReqVO) { + BrokerageLevelPageReqVO levelPageReqVO = new BrokerageLevelPageReqVO(); + BeanUtils.copyProperties(pageReqVO, levelPageReqVO); + PageResult adminPageResult = brokerageLevelService.getBrokerageLevelPage(levelPageReqVO); + PageResult respVOPageResult = new PageResult<>(); + respVOPageResult.setTotal(adminPageResult.getTotal()); + List appBroLevelRespVOS = new ArrayList<>(); + adminPageResult.getList().forEach(brokerageLevelDO -> { + AppBroLevelRespVO appBroLevelRespVO = new AppBroLevelRespVO(); + BeanUtils.copyProperties(brokerageLevelDO, appBroLevelRespVO); + appBroLevelRespVOS.add(appBroLevelRespVO); + }); + respVOPageResult.setList(appBroLevelRespVOS); + return success(respVOPageResult); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出分销商等级 Excel") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-level:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportBrokerageLevelExcel(@Valid AppBroLevelPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + BrokerageLevelPageReqVO adminLevelPageReqVO = new BrokerageLevelPageReqVO(); + List list = brokerageLevelService.getBrokerageLevelPage(adminLevelPageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "分销商等级.xls", "数据", AppBroLevelRespVO.class, + BeanUtils.toBean(list, AppBroLevelRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/vo/AppBroLevelPageReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/vo/AppBroLevelPageReqVO.java new file mode 100644 index 000000000..fafbc78a2 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/vo/AppBroLevelPageReqVO.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevel.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 分销商等级分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AppBroLevelPageReqVO extends PageParam { + + @Schema(description = "等级 默认等级、一级、二级、三级等") + private String level; + + @Schema(description = "等级名称") + private String levelName; + + @Schema(description = "基础配置json;一级、二级、三级佣金比例、培育奖等") + private String baseConfig; + + @Schema(description = "升级策略配置json 升级到此等级需要的条件") + private String upgradeConfig; + + @Schema(description = "降级策略配置json 不满足此条件则降级") + private String downgradeConfig; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/vo/AppBroLevelRespVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/vo/AppBroLevelRespVO.java new file mode 100644 index 000000000..59a9e1681 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/vo/AppBroLevelRespVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevel.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 分销商等级 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AppBroLevelRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23559") + @ExcelProperty("id") + private Long id; + + @Schema(description = "等级 默认等级、一级、二级、三级等") + @ExcelProperty("等级 默认等级、一级、二级、三级等") + private String level; + + @Schema(description = "等级名称") + @ExcelProperty("等级名称") + private String levelName; + + @Schema(description = "基础配置json;一级、二级、三级佣金比例、培育奖等") + @ExcelProperty("基础配置json;一级、二级、三级佣金比例、培育奖等") + private String baseConfig; + + @Schema(description = "升级策略配置json 升级到此等级需要的条件") + @ExcelProperty("升级策略配置json 升级到此等级需要的条件") + private String upgradeConfig; + + @Schema(description = "降级策略配置json 不满足此条件则降级") + @ExcelProperty("降级策略配置json 不满足此条件则降级") + private String downgradeConfig; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/vo/AppBroLevelSaveReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/vo/AppBroLevelSaveReqVO.java new file mode 100644 index 000000000..2dc3aa11a --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevel/vo/AppBroLevelSaveReqVO.java @@ -0,0 +1,28 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevel.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 分销商等级新增/修改 Request VO") +@Data +public class AppBroLevelSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "23559") + private Long id; + + @Schema(description = "等级 默认等级、一级、二级、三级等") + private String level; + + @Schema(description = "等级名称") + private String levelName; + + @Schema(description = "基础配置json;一级、二级、三级佣金比例、培育奖等") + private String baseConfig; + + @Schema(description = "升级策略配置json 升级到此等级需要的条件") + private String upgradeConfig; + + @Schema(description = "降级策略配置json 不满足此条件则降级") + private String downgradeConfig; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/AppBroLevelhisController.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/AppBroLevelhisController.java new file mode 100644 index 000000000..3be54e45d --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/AppBroLevelhisController.java @@ -0,0 +1,129 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevelhistory; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory.vo.BrokerageLevelhistoryPageReqVO; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory.vo.BrokerageLevelhistoryRespVO; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory.vo.BrokerageLevelhistorySaveReqVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevelhistory.vo.AppBroLevelhisPageReqVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevelhistory.vo.AppBroLevelhisRespVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevelhistory.vo.AppBroLevelhisSaveReqVO; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevelhistory.BrokerageLevelhistoryDO; +import cn.iocoder.yudao.module.hsfx.service.brokeragelevelhistory.BrokerageLevelhistoryService; + + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.context.annotation.Bean; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + + +@Tag(name = "APP后台 - 等级变更历史记录") +@RestController +@RequestMapping("/hsfx/brokerage-levelhistory") +@Validated +public class AppBroLevelhisController { + + @Resource + private BrokerageLevelhistoryService brokerageLevelhistoryService; + + @PostMapping("/create") + @Operation(summary = "创建等级变更历史记录") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:create')") + public CommonResult createBrokerageLevelhistory(@Valid @RequestBody AppBroLevelhisSaveReqVO createReqVO) { + BrokerageLevelhistorySaveReqVO adminReqVO = new BrokerageLevelhistorySaveReqVO(); + BeanUtils.copyProperties(createReqVO, adminReqVO); + return success(brokerageLevelhistoryService.createBrokerageLevelhistory(adminReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新等级变更历史记录") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:update')") + public CommonResult updateBrokerageLevelhistory(@Valid @RequestBody AppBroLevelhisSaveReqVO updateReqVO) { + BrokerageLevelhistorySaveReqVO adminSaveVo = new BrokerageLevelhistorySaveReqVO(); + BeanUtils.copyProperties(updateReqVO, adminSaveVo); + brokerageLevelhistoryService.updateBrokerageLevelhistory(adminSaveVo); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除等级变更历史记录") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:delete')") + public CommonResult deleteBrokerageLevelhistory(@RequestParam("id") Long id) { + brokerageLevelhistoryService.deleteBrokerageLevelhistory(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得等级变更历史记录") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:query')") + public CommonResult getBrokerageLevelhistory(@RequestParam("id") Long id) { + BrokerageLevelhistoryRespVO adminLevelRespVo = brokerageLevelhistoryService.getBrokerageLevelhistory(id); + if (adminLevelRespVo == null) { + return success(null); + } + AppBroLevelhisRespVO appBroLevelhisRespVO = new AppBroLevelhisRespVO(); + BeanUtils.copyProperties(adminLevelRespVo, appBroLevelhisRespVO); + return success(appBroLevelhisRespVO); + } + + @GetMapping("/page") + @Operation(summary = "获得等级变更历史记录分页") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:query')") + public CommonResult> getBrokerageLevelhistoryPage(@Valid AppBroLevelhisPageReqVO pageReqVO) { + BrokerageLevelhistoryPageReqVO adminHisPageReqVo = new BrokerageLevelhistoryPageReqVO(); + BeanUtils.copyProperties(pageReqVO, adminHisPageReqVo); + PageResult adminBroLevelhisPage = brokerageLevelhistoryService.getBrokerageLevelhistoryPage(adminHisPageReqVo); + PageResult appBroLevelhisRespVOPageResult = new PageResult<>(); + appBroLevelhisRespVOPageResult.setTotal(adminBroLevelhisPage.getTotal()); + List adminBroLevelhisPageList = adminBroLevelhisPage.getList(); + ArrayList appBroLevelhisRespVOS = new ArrayList<>(); + adminBroLevelhisPageList.forEach(brokerageLevelhistoryRespVO -> { + AppBroLevelhisRespVO appBroLevelhisRespVO = new AppBroLevelhisRespVO(); + BeanUtils.copyProperties(brokerageLevelhistoryRespVO, appBroLevelhisRespVO); + appBroLevelhisRespVOS.add(appBroLevelhisRespVO); + }); + appBroLevelhisRespVOPageResult.setList(appBroLevelhisRespVOS); + return success(appBroLevelhisRespVOPageResult); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出等级变更历史记录 Excel") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-levelhistory:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportBrokerageLevelhistoryExcel(@Valid AppBroLevelhisPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + BrokerageLevelhistoryPageReqVO adminRespVO = new BrokerageLevelhistoryPageReqVO(); + PageResult adminLevelHisRespVoPage = brokerageLevelhistoryService.getBrokerageLevelhistoryPage(adminRespVO); + List list = new ArrayList<>(); + adminLevelHisRespVoPage.getList().forEach(BrokerageLevelhistoryRespVO -> { + AppBroLevelhisRespVO appBroLevelhisRespVO = new AppBroLevelhisRespVO(); + BeanUtils.copyProperties(BrokerageLevelhistoryRespVO, appBroLevelhisRespVO); + list.add(appBroLevelhisRespVO); + }); + // 导出 Excel + ExcelUtils.write(response, "等级变更历史记录.xls", "数据", AppBroLevelhisRespVO.class, + BeanUtils.toBean(list, AppBroLevelhisRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/vo/AppBroLevelhisPageReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/vo/AppBroLevelhisPageReqVO.java new file mode 100644 index 000000000..d9175b9e1 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/vo/AppBroLevelhisPageReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevelhistory.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 等级变更历史记录分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AppBroLevelhisPageReqVO extends PageParam { + + @Schema(description = "分销用户id", example = "29277") + private Long brokerageUserId; + + @Schema(description = "初始等级id", example = "28982") + private Long initLevelId; + + @Schema(description = "目标(现在)等级id", example = "5160") + private Long toLevelId; + + @Schema(description = "变动原因", example = "不满足条件自动降级") + private String changeReason; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/vo/AppBroLevelhisRespVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/vo/AppBroLevelhisRespVO.java new file mode 100644 index 000000000..723f0d71d --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/vo/AppBroLevelhisRespVO.java @@ -0,0 +1,45 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevelhistory.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 等级变更历史记录 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AppBroLevelhisRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20579") + @ExcelProperty("id") + private Long id; + + @Schema(description = "分销用户id", example = "29277") + @ExcelProperty("分销用户id") + private Long brokerageUserId; + + @Schema(description = "初始等级id", example = "28982") + @ExcelProperty("初始等级id") + private Long initLevelId; + + @Schema(description = "目标(现在)等级id", example = "5160") + @ExcelProperty("目标(现在)等级id") + private Long toLevelId; + + @Schema(description = "变动原因", example = "不满足条件自动降级") + @ExcelProperty("变动原因") + private String changeReason; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + private String brokerageMemberNickName;//分销用户会员昵称 + + private String initLevelName;//初始等级名称 + + private String toLevelName;//变动目标等级 + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/vo/AppBroLevelhisSaveReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/vo/AppBroLevelhisSaveReqVO.java new file mode 100644 index 000000000..0db36a751 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokeragelevelhistory/vo/AppBroLevelhisSaveReqVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokeragelevelhistory.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 等级变更历史记录新增/修改 Request VO") +@Data +public class AppBroLevelhisSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "20579") + private Long id; + + @Schema(description = "分销用户id", example = "29277") + private Long brokerageUserId; + + @Schema(description = "初始等级id", example = "28982") + private Long initLevelId; + + @Schema(description = "目标(现在)等级id", example = "5160") + private Long toLevelId; + + @Schema(description = "变动原因", example = "不满足条件自动降级") + private String changeReason; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/AppBroUserController.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/AppBroUserController.java new file mode 100644 index 000000000..0064b2694 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/AppBroUserController.java @@ -0,0 +1,129 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokerageuser; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo.BrokerageUserPageReqVO; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo.BrokerageUserPageResVO; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo.BrokerageUserSaveReqVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokerageuser.vo.AppBroUserPageReqVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokerageuser.vo.AppBroUserPageResVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokerageuser.vo.AppBroUserRespVO; +import cn.iocoder.yudao.module.hsfx.controller.app.brokerageuser.vo.AppBroUserSaveReqVO; +import cn.iocoder.yudao.module.hsfx.service.brokerageuser.BrokerageUserService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.context.annotation.Bean; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "APP后台 - 分销用户") +@RestController +@RequestMapping("/hsfx/brokerage-user") +@Validated +public class AppBroUserController { + + @Resource + private BrokerageUserService brokerageUserService; + + @PostMapping("/create") + @Operation(summary = "创建分销用户") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:create')") + public CommonResult createBrokerageUser(@Valid @RequestBody AppBroUserSaveReqVO createReqVO) { + BrokerageUserSaveReqVO broUserSaveReqVO = new BrokerageUserSaveReqVO(); + BeanUtils.copyProperties(createReqVO, broUserSaveReqVO); + return success(brokerageUserService.createBrokerageUser(broUserSaveReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新分销用户") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:update')") + public CommonResult updateBrokerageUser(@Valid @RequestBody AppBroUserSaveReqVO updateReqVO) { + BrokerageUserSaveReqVO broUserSaveReqVO = new BrokerageUserSaveReqVO(); + BeanUtils.copyProperties(updateReqVO, broUserSaveReqVO); + brokerageUserService.updateBrokerageUser(broUserSaveReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除分销用户") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:delete')") + public CommonResult deleteBrokerageUser(@RequestParam("id") Long id) { + brokerageUserService.deleteBrokerageUser(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得分销用户") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:query')") + public CommonResult getBrokerageUser(@RequestParam("id") Long id) { + BrokerageUserPageResVO brokerageUser = brokerageUserService.getBrokerageUser(id); + if(brokerageUser==null){ + return CommonResult.success(null); + } + AppBroUserPageResVO appBroUser = new AppBroUserPageResVO(); + BeanUtils.copyProperties(brokerageUser, appBroUser); + return CommonResult.success(appBroUser); + } + + @GetMapping("/page") + @Operation(summary = "获得分销用户分页") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:query')") + public CommonResult> getBrokerageUserPage(@Valid AppBroUserPageReqVO pageReqVO) { + BrokerageUserPageReqVO broUserPageReqVO = new BrokerageUserPageReqVO(); + BeanUtils.copyProperties(pageReqVO, broUserPageReqVO); + PageResult brokerageUserPage = brokerageUserService.getBrokerageUserPage(broUserPageReqVO); + PageResult appPageResult = new PageResult<>(); + appPageResult.setTotal(brokerageUserPage.getTotal()); + List brokerageUserPageList = brokerageUserPage.getList(); + ArrayList appBroUserPageResVOList = new ArrayList<>(); + for (int i = 0; i < brokerageUserPageList.size(); i++) { + AppBroUserPageResVO appPageResVO = new AppBroUserPageResVO(); + BeanUtils.copyProperties(brokerageUserPageList.get(i), appPageResVO); + appBroUserPageResVOList.add(appPageResVO); + } + appPageResult.setList(appBroUserPageResVOList); + return success(appPageResult); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出分销用户 Excel") + @PreAuthorize("@ss.hasPermission('hsfx:brokerage-user:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportBrokerageUserExcel(@Valid AppBroUserPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + BrokerageUserPageReqVO broUserPageReqVO = new BrokerageUserPageReqVO(); + BeanUtils.copyProperties(pageReqVO, broUserPageReqVO); + List pageResVOList = brokerageUserService.getBrokerageUserPage(broUserPageReqVO).getList(); + + List appPageResVOList = new ArrayList<>(); + for (int i = 0; i < pageResVOList.size(); i++) { + AppBroUserPageResVO pageResVO = new AppBroUserPageResVO(); + BeanUtils.copyProperties(pageResVOList.get(i), pageResVO); + appPageResVOList.add(pageResVO); + } + + // 导出 Excel + ExcelUtils.write(response, "分销用户.xls", "数据", AppBroUserRespVO.class, + BeanUtils.toBean(appPageResVOList, AppBroUserRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserPageReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserPageReqVO.java new file mode 100644 index 000000000..c03c3f0b4 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserPageReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokerageuser.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 分销用户分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class AppBroUserPageReqVO extends PageParam { + + @Schema(description = "用户id", example = "8493") + private Long memberUserId; + + @Schema(description = "分销商等级id", example = "24915") + private Long levelId; + + @Schema(description = "上级用户id", example = "9225") + private Long parentId; + + @Schema(description = "数据字典 是否启用") + private Integer isEnable; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserPageResVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserPageResVO.java new file mode 100644 index 000000000..0cc90155a --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserPageResVO.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokerageuser.vo; + +import lombok.Data; + +@Data +public class AppBroUserPageResVO { + + private Long id;//分销商id + private Long memberUserId;//会员id + private String nickName;//会员昵称 + private String name;//会员名称 + private String phone;//会员手机号 + private Long levelId;//分销商等级id + private String levelName;//等级名称 + private Long parentId; + private Long parentMemberUserId; + private String parentMemberNickName; +} diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserRespVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserRespVO.java new file mode 100644 index 000000000..7cd6afcf6 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserRespVO.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokerageuser.vo; + +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 分销用户 Response VO") +@Data +@ExcelIgnoreUnannotated +public class AppBroUserRespVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32060") + @ExcelProperty("id") + private Long id; + + @Schema(description = "用户id", example = "8493") + @ExcelProperty("用户id") + private Long memberUserId; + + @Schema(description = "分销商等级id", example = "24915") + @ExcelProperty("分销商等级id") + private Long levelId; + + @Schema(description = "上级用户id", example = "9225") + @ExcelProperty("上级用户id") + private Long parentId; + + @Schema(description = "数据字典 是否启用") + @ExcelProperty(value = "数据字典 是否启用", converter = DictConvert.class) + @DictFormat("infra_boolean_string") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private Integer isEnable; + + @Schema(description = "创建时间") + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserSaveReqVO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserSaveReqVO.java new file mode 100644 index 000000000..b21ea73c5 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/controller/app/brokerageuser/vo/AppBroUserSaveReqVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.hsfx.controller.app.brokerageuser.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 分销用户新增/修改 Request VO") +@Data +public class AppBroUserSaveReqVO { + + @Schema(description = "id", requiredMode = Schema.RequiredMode.REQUIRED, example = "32060") + private Long id; + + @Schema(description = "用户id", example = "8493") + private Long memberUserId; + + @Schema(description = "分销商等级id", example = "24915") + private Long levelId; + + @Schema(description = "上级用户id", example = "9225") + private Long parentId; + + @Schema(description = "数据字典 是否启用") + private Integer isEnable; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokeragebaseconfig/BrokerageBaseconfigDO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokeragebaseconfig/BrokerageBaseconfigDO.java new file mode 100644 index 000000000..2ed1e2f26 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokeragebaseconfig/BrokerageBaseconfigDO.java @@ -0,0 +1,48 @@ +package cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragebaseconfig; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + + +/** + * 分销配置 DO + * + * @author admin + */ +@TableName("trade_brokerage_baseconfig") +@KeySequence("trade_brokerage_baseconfig_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BrokerageBaseconfigDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 基础配置json + */ + private String baseConfigJson; + /** + * 结算设置配置json + */ + private String settleConfigJson; + /** + * 文字设置配置json + */ + private String textConfigJson; + /** + * 业绩中心配置json + */ + private String perforConfigJson; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokeragelevel/BrokerageLevelDO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokeragelevel/BrokerageLevelDO.java new file mode 100644 index 000000000..2558766d5 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokeragelevel/BrokerageLevelDO.java @@ -0,0 +1,53 @@ +package cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevel; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 分销商等级 DO + * + * @author admin + */ +@TableName("trade_brokerage_level") +@KeySequence("trade_brokerage_level_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BrokerageLevelDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 等级 默认等级、一级、二级、三级等 + */ + private String level; + /** + * 等级名称 + */ + private String levelName; + /** + * 基础配置json;一级、二级、三级佣金比例、培育奖等 + */ + private String baseConfig; + /** + * 升级策略配置json 升级到此等级需要的条件 + */ + private String upgradeConfig; + /** + * 降级策略配置json 不满足此条件则降级 + */ + private String downgradeConfig; + + + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokeragelevelhistory/BrokerageLevelhistoryDO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokeragelevelhistory/BrokerageLevelhistoryDO.java new file mode 100644 index 000000000..ab7b39c87 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokeragelevelhistory/BrokerageLevelhistoryDO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevelhistory; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 等级变更历史记录 DO + * + * @author admin + */ +@TableName("trade_brokerage_levelhistory") +@KeySequence("trade_brokerage_levelhistory_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BrokerageLevelhistoryDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 分销用户id + */ + private Long brokerageUserId; + /** + * 初始等级id + */ + private Long initLevelId; + /** + * 目标(现在)等级id + */ + private Long toLevelId; + /** + * 变动原因 + */ + private String changeReason; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokerageuser/BrokerageUserDO.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokerageuser/BrokerageUserDO.java new file mode 100644 index 000000000..4e7624460 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/dataobject/brokerageuser/BrokerageUserDO.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.hsfx.dal.dataobject.brokerageuser; + +import lombok.*; + +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; + +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 分销用户 DO + * + * @author admin + */ +@TableName("trade_brokerage_user") +@KeySequence("trade_brokerage_user_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class BrokerageUserDO extends BaseDO { + + /** + * id + */ + @TableId + private Long id; + /** + * 用户id + */ + private Long memberUserId; + /** + * 分销商等级id + */ + private Long levelId; + /** + * 上级用户id + */ + private Long parentId; + /** + * 数据字典 是否启用 + *

+ * 枚举 {@link TODO infra_boolean_string 对应的类} + */ + private Integer isEnable; + + @TableField(exist = false) + private String levelName; + + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokeragebaseconfig/BrokerageBaseconfigMapper.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokeragebaseconfig/BrokerageBaseconfigMapper.java new file mode 100644 index 000000000..726bb283c --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokeragebaseconfig/BrokerageBaseconfigMapper.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.hsfx.dal.mysql.brokeragebaseconfig; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragebaseconfig.BrokerageBaseconfigDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragebaseconfig.vo.*; + +/** + * 分销配置 Mapper + * + * @author admin + */ +@Mapper +public interface BrokerageBaseconfigMapper extends BaseMapperX { + + default PageResult selectPage(BrokerageBaseconfigPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(BrokerageBaseconfigDO::getBaseConfigJson, reqVO.getBaseConfigJson()) + .eqIfPresent(BrokerageBaseconfigDO::getSettleConfigJson, reqVO.getSettleConfigJson()) + .eqIfPresent(BrokerageBaseconfigDO::getTextConfigJson, reqVO.getTextConfigJson()) + .eqIfPresent(BrokerageBaseconfigDO::getPerforConfigJson, reqVO.getPerforConfigJson()) + .betweenIfPresent(BrokerageBaseconfigDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(BrokerageBaseconfigDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokeragelevel/BrokerageLevelMapper.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokeragelevel/BrokerageLevelMapper.java new file mode 100644 index 000000000..2d44bfbde --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokeragelevel/BrokerageLevelMapper.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.hsfx.dal.mysql.brokeragelevel; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevel.BrokerageLevelDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevel.vo.*; + +/** + * 分销商等级 Mapper + * + * @author admin + */ +@Mapper +public interface BrokerageLevelMapper extends BaseMapperX { + + default PageResult selectPage(BrokerageLevelPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(BrokerageLevelDO::getLevel, reqVO.getLevel()) + .likeIfPresent(BrokerageLevelDO::getLevelName, reqVO.getLevelName()) + .eqIfPresent(BrokerageLevelDO::getBaseConfig, reqVO.getBaseConfig()) + .eqIfPresent(BrokerageLevelDO::getUpgradeConfig, reqVO.getUpgradeConfig()) + .eqIfPresent(BrokerageLevelDO::getDowngradeConfig, reqVO.getDowngradeConfig()) + .betweenIfPresent(BrokerageLevelDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(BrokerageLevelDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokeragelevelhistory/BrokerageLevelhistoryMapper.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokeragelevelhistory/BrokerageLevelhistoryMapper.java new file mode 100644 index 000000000..033ab17cc --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokeragelevelhistory/BrokerageLevelhistoryMapper.java @@ -0,0 +1,30 @@ +package cn.iocoder.yudao.module.hsfx.dal.mysql.brokeragelevelhistory; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevelhistory.BrokerageLevelhistoryDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory.vo.*; + +/** + * 等级变更历史记录 Mapper + * + * @author admin + */ +@Mapper +public interface BrokerageLevelhistoryMapper extends BaseMapperX { + + default PageResult selectPage(BrokerageLevelhistoryPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(BrokerageLevelhistoryDO::getBrokerageUserId, reqVO.getBrokerageUserId()) + .eqIfPresent(BrokerageLevelhistoryDO::getInitLevelId, reqVO.getInitLevelId()) + .eqIfPresent(BrokerageLevelhistoryDO::getToLevelId, reqVO.getToLevelId()) + .likeIfPresent(BrokerageLevelhistoryDO::getChangeReason, reqVO.getChangeReason()) + .betweenIfPresent(BrokerageLevelhistoryDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(BrokerageLevelhistoryDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokerageuser/BrokerageUserMapper.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokerageuser/BrokerageUserMapper.java new file mode 100644 index 000000000..d996e64f8 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/dal/mysql/brokerageuser/BrokerageUserMapper.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.hsfx.dal.mysql.brokerageuser; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokerageuser.BrokerageUserDO; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.query.MPJQueryWrapper; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo.*; + +/** + * 分销用户 Mapper + * + * @author admin + */ +@Mapper +public interface BrokerageUserMapper extends BaseMapperX { + + default PageResult selectPage(BrokerageUserPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(BrokerageUserDO::getMemberUserId, reqVO.getMemberUserId()) + .eqIfPresent(BrokerageUserDO::getLevelId, reqVO.getLevelId()) + .eqIfPresent(BrokerageUserDO::getParentId, reqVO.getParentId()) + .eqIfPresent(BrokerageUserDO::getIsEnable, reqVO.getIsEnable()) + .betweenIfPresent(BrokerageUserDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(BrokerageUserDO::getId)); + } + + + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/framework/rpc/config/RpcConfiguration.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/framework/rpc/config/RpcConfiguration.java new file mode 100644 index 000000000..4b132d59e --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/framework/rpc/config/RpcConfiguration.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.hsfx.framework.rpc.config; + +import cn.iocoder.yudao.module.member.api.address.MemberAddressApi; +import cn.iocoder.yudao.module.member.api.config.MemberConfigApi; +import cn.iocoder.yudao.module.member.api.level.MemberLevelApi; +import cn.iocoder.yudao.module.member.api.point.MemberPointApi; +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; +import cn.iocoder.yudao.module.product.api.category.ProductCategoryApi; +import cn.iocoder.yudao.module.product.api.comment.ProductCommentApi; +import cn.iocoder.yudao.module.product.api.sku.ProductSkuApi; +import cn.iocoder.yudao.module.product.api.spu.ProductSpuApi; +import cn.iocoder.yudao.module.system.api.notify.NotifyMessageSendApi; +import cn.iocoder.yudao.module.system.api.social.SocialClientApi; +import cn.iocoder.yudao.module.system.api.social.SocialUserApi; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import org.springframework.cloud.openfeign.EnableFeignClients; +import org.springframework.context.annotation.Configuration; + +@Configuration(proxyBeanMethods = false) +@EnableFeignClients(clients = { + AdminUserApi.class,MemberUserApi.class +}) +public class RpcConfiguration { +} diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/framework/security/config/SecurityConfiguration.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/framework/security/config/SecurityConfiguration.java new file mode 100644 index 000000000..edbe0ce23 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/framework/security/config/SecurityConfiguration.java @@ -0,0 +1,39 @@ +package cn.iocoder.yudao.module.hsfx.framework.security.config; + +import cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer; +import cn.iocoder.yudao.module.product.enums.ApiConstants; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer; + +/** + * Product 模块的 Security 配置 + */ +@Configuration("productSecurityConfiguration") +public class SecurityConfiguration { + + @Bean("productAuthorizeRequestsCustomizer") + public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { + return new AuthorizeRequestsCustomizer() { + + @Override + public void customize(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry registry) { + // Swagger 接口文档 + registry.requestMatchers("/v3/api-docs/**").permitAll() + .requestMatchers("/webjars/**").permitAll() + .requestMatchers("/swagger-ui").permitAll() + .requestMatchers("/swagger-ui/**").permitAll(); + // Spring Boot Actuator 的安全配置 + registry.requestMatchers("/actuator").permitAll() + .requestMatchers("/actuator/**").permitAll(); + // Druid 监控 + registry.requestMatchers("/druid/**").permitAll(); + // RPC 服务的安全配置 + registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll(); + } + + }; + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragebaseconfig/BrokerageBaseconfigService.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragebaseconfig/BrokerageBaseconfigService.java new file mode 100644 index 000000000..34c5e0621 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragebaseconfig/BrokerageBaseconfigService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.hsfx.service.brokeragebaseconfig; + +import java.util.*; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragebaseconfig.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragebaseconfig.BrokerageBaseconfigDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import jakarta.validation.Valid; + + +/** + * 分销配置 Service 接口 + * + * @author admin + */ +public interface BrokerageBaseconfigService { + + /** + * 创建分销配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createBrokerageBaseconfig(@Valid BrokerageBaseconfigSaveReqVO createReqVO); + + /** + * 更新分销配置 + * + * @param updateReqVO 更新信息 + */ + void updateBrokerageBaseconfig(@Valid BrokerageBaseconfigSaveReqVO updateReqVO); + + /** + * 删除分销配置 + * + * @param id 编号 + */ + void deleteBrokerageBaseconfig(Long id); + + /** + * 获得分销配置 + * + * @param id 编号 + * @return 分销配置 + */ + BrokerageBaseconfigDO getBrokerageBaseconfig(Long id); + + /** + * 获得分销配置分页 + * + * @param pageReqVO 分页查询 + * @return 分销配置分页 + */ + PageResult getBrokerageBaseconfigPage(BrokerageBaseconfigPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragebaseconfig/BrokerageBaseconfigServiceImpl.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragebaseconfig/BrokerageBaseconfigServiceImpl.java new file mode 100644 index 000000000..56936f915 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragebaseconfig/BrokerageBaseconfigServiceImpl.java @@ -0,0 +1,171 @@ +package cn.iocoder.yudao.module.hsfx.service.brokeragebaseconfig; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragebaseconfig.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragebaseconfig.BrokerageBaseconfigDO; +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.module.hsfx.dal.mysql.brokeragebaseconfig.BrokerageBaseconfigMapper; + + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hsfx.enums.ErrorCodeConstants.*; + +/** + * 分销配置 Service 实现类 + * + * @author admin + */ +@Service +@Validated +public class BrokerageBaseconfigServiceImpl implements BrokerageBaseconfigService { + + @Resource + private BrokerageBaseconfigMapper brokerageBaseconfigMapper; + + @Override + @Transactional + public Long createBrokerageBaseconfig(BrokerageBaseconfigSaveReqVO createReqVO) { + //校验格式是否正常 + validateJson(createReqVO); + // 插入 + BrokerageBaseconfigDO brokerageBaseconfig = BeanUtils.toBean(createReqVO, BrokerageBaseconfigDO.class); + brokerageBaseconfig.setDeleted(false); + brokerageBaseconfigMapper.insert(brokerageBaseconfig); + // 返回 + return brokerageBaseconfig.getId(); + } + + @Override + @Transactional + public void updateBrokerageBaseconfig(BrokerageBaseconfigSaveReqVO updateReqVO) { + // 校验存在 + validateBrokerageBaseconfigExists(updateReqVO.getId()); + //设置每次只能更新一个字段的值 + //校验其中基础设置、结算设置、文字设置、业绩中心设置每次只能更新一个字段值 + // 更新 +// validateBaseconfigPropertyOne(updateReqVO); + +// BrokerageBaseconfigDO updateObj = BeanUtils.toBean(updateReqVO, BrokerageBaseconfigDO.class); +// LambdaUpdateWrapper lambdaUpdateWrapper = new LambdaUpdateWrapper<>(); +// if (updateReqVO.getBaseConfigJson() != null && updateReqVO.getBaseConfigJson() != "") { +// lambdaUpdateWrapper.set(BrokerageBaseconfigDO::getBaseConfigJson, updateReqVO.getBaseConfigJson()); +// } +// if (updateReqVO.getPerforConfigJson() != null && updateReqVO.getPerforConfigJson() != "") { +// lambdaUpdateWrapper.set(BrokerageBaseconfigDO::getPerforConfigJson, updateReqVO.getPerforConfigJson()); +// } +// if (updateReqVO.getTextConfigJson() != null && updateReqVO.getTextConfigJson() != "") { +// lambdaUpdateWrapper.set(BrokerageBaseconfigDO::getTextConfigJson, updateReqVO.getTextConfigJson()); +// } +// if (updateReqVO.getSettleConfigJson() != null && updateReqVO.getSettleConfigJson() != "") { +// lambdaUpdateWrapper.set(BrokerageBaseconfigDO::getSettleConfigJson, updateReqVO.getSettleConfigJson()); +// } +// lambdaUpdateWrapper.eq(BrokerageBaseconfigDO::getId, updateReqVO.getId()); +// brokerageBaseconfigMapper.update(updateObj, lambdaUpdateWrapper); + + //校验格式是否正常 + validateJson(updateReqVO); + //校验属性是否为空 + validateBrokerageBaseconfigProperties(updateReqVO); + BrokerageBaseconfigDO brokerageBaseconfigDO = new BrokerageBaseconfigDO(); + BeanUtils.copyProperties(updateReqVO, brokerageBaseconfigDO); + brokerageBaseconfigMapper.updateById(brokerageBaseconfigDO); + } + + @Override + @Transactional + public void deleteBrokerageBaseconfig(Long id) { + // 校验存在 + validateBrokerageBaseconfigExists(id); + // 删除 + brokerageBaseconfigMapper.deleteById(id); + } + + @Override + public BrokerageBaseconfigDO getBrokerageBaseconfig(Long id) { + return brokerageBaseconfigMapper.selectById(id); + } + + @Override + public PageResult getBrokerageBaseconfigPage(BrokerageBaseconfigPageReqVO pageReqVO) { + return brokerageBaseconfigMapper.selectPage(pageReqVO); + } + + + private void validateBrokerageBaseconfigExists(Long id) { + if (brokerageBaseconfigMapper.selectById(id) == null) { + throw exception(BROKERAGE_BASECONFIG_NOT_EXISTS); + } + } + + //校验属性是是否存在 JSON格式的属性值,有一个为null都无法存入 + private void validateBrokerageBaseconfigProperties(BrokerageBaseconfigSaveReqVO baseconfigSaveReqVO) { + if (StringUtils.isEmpty(baseconfigSaveReqVO.getBaseConfigJson())) { + throw exception(BROKERAGE_BASECONFIG_BASECONFIGJSON_NOTEXISTS); + } + if (StringUtils.isEmpty(baseconfigSaveReqVO.getSettleConfigJson())) { + throw exception(BROKERAGE_BASECONFIG_SETTLECONFIGJSON_NOTEXISTS); + } + if (StringUtils.isEmpty(baseconfigSaveReqVO.getTextConfigJson())) { + throw exception(BROKERAGE_BASECONFIG_TEXTCONFIGJSON_NOTEXISTS); + } + if (StringUtils.isEmpty(baseconfigSaveReqVO.getPerforConfigJson())) { + throw exception(BROKERAGE_BASECONFIG_PREFORCONFIGJSON_NOTEXISTS); + } + } + + //验证单属性更新 后续看是否需要 + private void validateBaseconfigPropertyOne(BrokerageBaseconfigSaveReqVO baseconfigSaveReqVO) { + int flag = 0; + if (baseconfigSaveReqVO.getBaseConfigJson() != null && baseconfigSaveReqVO.getBaseConfigJson() != "") { + flag++; + } + if (baseconfigSaveReqVO.getPerforConfigJson() != null && baseconfigSaveReqVO.getPerforConfigJson() != "") { + flag++; + } + if (baseconfigSaveReqVO.getTextConfigJson() != null && baseconfigSaveReqVO.getTextConfigJson() != "") { + flag++; + } + if (baseconfigSaveReqVO.getSettleConfigJson() != null && baseconfigSaveReqVO.getSettleConfigJson() != "") { + flag++; + } + if (flag > 1) { + throw exception(BROKERAGE_BASECONFIG_SINGLE_PROPERTY); + } + } + + + private void validateJson(BrokerageBaseconfigSaveReqVO baseconfigSaveReqVO) { + ObjectMapper objectMapper = new ObjectMapper(); + try { + if (baseconfigSaveReqVO.getBaseConfigJson() != null) { + objectMapper.readValue(baseconfigSaveReqVO.getBaseConfigJson(), Object.class); + } + if (baseconfigSaveReqVO.getTextConfigJson() != null) { + objectMapper.readValue(baseconfigSaveReqVO.getTextConfigJson(), Object.class); + } + if (baseconfigSaveReqVO.getSettleConfigJson() != null) { + objectMapper.readValue(baseconfigSaveReqVO.getSettleConfigJson(), Object.class); + } + if (baseconfigSaveReqVO.getPerforConfigJson() != null) { + objectMapper.readValue(baseconfigSaveReqVO.getPerforConfigJson(), Object.class); + } + } catch (JsonProcessingException e) { + throw exception(JSON_FORMATCHECK_FAIL); + } + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevel/BrokerageLevelService.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevel/BrokerageLevelService.java new file mode 100644 index 000000000..2cf5b2934 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevel/BrokerageLevelService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.hsfx.service.brokeragelevel; + +import java.util.*; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevel.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevel.BrokerageLevelDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import jakarta.validation.Valid; + + +/** + * 分销商等级 Service 接口 + * + * @author admin + */ +public interface BrokerageLevelService { + + /** + * 创建分销商等级 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createBrokerageLevel(@Valid BrokerageLevelSaveReqVO createReqVO); + + /** + * 更新分销商等级 + * + * @param updateReqVO 更新信息 + */ + void updateBrokerageLevel(@Valid BrokerageLevelSaveReqVO updateReqVO); + + /** + * 删除分销商等级 + * + * @param id 编号 + */ + void deleteBrokerageLevel(Long id); + + /** + * 获得分销商等级 + * + * @param id 编号 + * @return 分销商等级 + */ + BrokerageLevelDO getBrokerageLevel(Long id); + + /** + * 获得分销商等级分页 + * + * @param pageReqVO 分页查询 + * @return 分销商等级分页 + */ + PageResult getBrokerageLevelPage(BrokerageLevelPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevel/BrokerageLevelServiceImpl.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevel/BrokerageLevelServiceImpl.java new file mode 100644 index 000000000..a6be5e259 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevel/BrokerageLevelServiceImpl.java @@ -0,0 +1,171 @@ +package cn.iocoder.yudao.module.hsfx.service.brokeragelevel; + +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevelhistory.BrokerageLevelhistoryDO; +import cn.iocoder.yudao.module.hsfx.dal.mysql.brokeragelevelhistory.BrokerageLevelhistoryMapper; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.annotation.Resource; +import org.apache.commons.lang3.ObjectUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevel.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevel.BrokerageLevelDO; +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.module.hsfx.dal.mysql.brokeragelevel.BrokerageLevelMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hsfx.enums.ErrorCodeConstants.*; + +/** + * 分销商等级 Service 实现类 + * + * @author admin + */ +@Service +@Validated +public class BrokerageLevelServiceImpl implements BrokerageLevelService { + + @Resource + private BrokerageLevelMapper brokerageLevelMapper; + + + @Override + @Transactional + public Long createBrokerageLevel(BrokerageLevelSaveReqVO createReqVO) { + //校验必须属性是否为空或空字符串 +// validateBrokerageLevelNullProperties(createReqVO); + //校验分销等级是否存在 + validateBrokerageLevelExistsByName(createReqVO.getLevelName()); + + //校验对应的json属性是否完整 + validateJson(createReqVO); + // 插入 + BrokerageLevelDO brokerageLevel = BeanUtils.toBean(createReqVO, BrokerageLevelDO.class); + brokerageLevel.setDeleted(false); + brokerageLevelMapper.insert(brokerageLevel); + // 返回 + return brokerageLevel.getId(); + } + + @Override + @Transactional + public void updateBrokerageLevel(BrokerageLevelSaveReqVO updateReqVO) { + //校验必须属性是否为空或空字符串 +// validateBrokerageLevelNullProperties(updateReqVO); + // 校验更新数据是否存在 + validateBrokerageLevelExistsById(updateReqVO.getId()); + validateJson(updateReqVO); + //校验分销等级是否存在 +// validateBrokerageLevelExistsByName(updateReqVO.getLevelName()); + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(BrokerageLevelDO::getLevelName, updateReqVO.getLevelName()); + lambdaQueryWrapper.eq(BrokerageLevelDO::getDeleted, 0); + BrokerageLevelDO levelDOOne = brokerageLevelMapper.selectOne(lambdaQueryWrapper); + if (levelDOOne != null && (levelDOOne.getId() != updateReqVO.getId())) {//名称相同但是id不同 + throw exception(BROKERAGE_LEVEL_ALREADY_EXISTS); + } + + // 更新 + BrokerageLevelDO updateObj = BeanUtils.toBean(updateReqVO, BrokerageLevelDO.class); + brokerageLevelMapper.updateById(updateObj); + } + + @Override + @Transactional + public void deleteBrokerageLevel(Long id) { + // 校验存在 + validateBrokerageLevelExistsById(id); + // 删除 + brokerageLevelMapper.deleteById(id); + } + + + @Override + public BrokerageLevelDO getBrokerageLevel(Long id) { + + BrokerageLevelDO levelDO = brokerageLevelMapper.selectById(id); + //json解析获取值 +// String baseConfig = levelDO.getBaseConfig(); +// JSONObject baseConfigJson = (JSONObject) JSON.parse(baseConfig); +// String module = (String) baseConfigJson.get("module"); +// System.out.println(module); +// System.out.println(baseConfigJson); + return levelDO; + } + + @Override + public PageResult getBrokerageLevelPage(BrokerageLevelPageReqVO pageReqVO) { + return brokerageLevelMapper.selectPage(pageReqVO); + } + + private void validateBrokerageLevelExistsById(Long id) { + if (brokerageLevelMapper.selectById(id) == null) { + throw exception(BROKERAGE_LEVEL_NOT_EXISTS); + } + } + + + private void validateBrokerageLevelExistsByName(String levelName) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(BrokerageLevelDO::getLevelName, levelName); + lambdaQueryWrapper.eq(BrokerageLevelDO::getDeleted, 0); + if (brokerageLevelMapper.selectOne(lambdaQueryWrapper) != null) { + throw exception(BROKERAGE_LEVEL_ALREADY_EXISTS); + } + + } + + //校验属性字段为空 + private void validateBrokerageLevelNullProperties(BrokerageLevelSaveReqVO levelSaveReqVO) { + if (levelSaveReqVO.getLevel() == null) { + throw exception(BROKERAGE_LEVEL_NOT_EXISTS); + } + if (levelSaveReqVO.getLevelName() == null) { + throw exception(BROKERAGE_LEVEL_LEVELNAME_NOTEXISTS); + } + + if (levelSaveReqVO.getBaseConfig() == null) { + throw exception(BROKERAGE_LEVEL_BASECONFIG_NOTEXISTS); + } + + if (levelSaveReqVO.getUpgradeConfig() == null) { + throw exception(BROKERAGE_LEVEL_UPGRADECONFIG_NOTEXISTS); + } + + if (levelSaveReqVO.getDowngradeConfig() == null) { + throw exception(BROKERAGE_LEVEL_DOWNGRADECONFIG_NOTEXISTS); + } + + + } + + private void validateJson(BrokerageLevelSaveReqVO levelSaveReqVO) { + ObjectMapper objectMapper = new ObjectMapper(); + try { + if (levelSaveReqVO.getBaseConfig() != null) { + objectMapper.readValue(levelSaveReqVO.getBaseConfig(), Object.class); + } + if (levelSaveReqVO.getUpgradeConfig() != null) { + objectMapper.readValue(levelSaveReqVO.getUpgradeConfig(), Object.class); + } + if (levelSaveReqVO.getDowngradeConfig() != null) { + objectMapper.readValue(levelSaveReqVO.getDowngradeConfig(), Object.class); + } + } catch (JsonProcessingException e) { + throw exception(JSON_FORMATCHECK_FAIL); + } + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevelhistory/BrokerageLevelhistoryService.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevelhistory/BrokerageLevelhistoryService.java new file mode 100644 index 000000000..f1be32f3f --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevelhistory/BrokerageLevelhistoryService.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.hsfx.service.brokeragelevelhistory; + +import java.util.*; + +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevelhistory.BrokerageLevelhistoryDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import jakarta.validation.Valid; + + +/** + * 等级变更历史记录 Service 接口 + * + * @author admin + */ +public interface BrokerageLevelhistoryService { + + /** + * 创建等级变更历史记录 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createBrokerageLevelhistory(@Valid BrokerageLevelhistorySaveReqVO createReqVO); + + /** + * 更新等级变更历史记录 + * + * @param updateReqVO 更新信息 + */ + void updateBrokerageLevelhistory(@Valid BrokerageLevelhistorySaveReqVO updateReqVO); + + /** + * 删除等级变更历史记录 + * + * @param id 编号 + */ + void deleteBrokerageLevelhistory(Long id); + + /** + * 获得等级变更历史记录 + * + * @param id 编号 + * @return 等级变更历史记录 + */ + BrokerageLevelhistoryRespVO getBrokerageLevelhistory(Long id); + + /** + * 获得等级变更历史记录分页 + * + * @param pageReqVO 分页查询 + * @return 等级变更历史记录分页 + */ + PageResult getBrokerageLevelhistoryPage(BrokerageLevelhistoryPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevelhistory/BrokerageLevelhistoryServiceImpl.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevelhistory/BrokerageLevelhistoryServiceImpl.java new file mode 100644 index 000000000..67f82f6af --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokeragelevelhistory/BrokerageLevelhistoryServiceImpl.java @@ -0,0 +1,167 @@ +package cn.iocoder.yudao.module.hsfx.service.brokeragelevelhistory; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevel.BrokerageLevelDO; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokerageuser.BrokerageUserDO; +import cn.iocoder.yudao.module.hsfx.dal.mysql.brokeragelevel.BrokerageLevelMapper; +import cn.iocoder.yudao.module.hsfx.dal.mysql.brokerageuser.BrokerageUserMapper; +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; +import jakarta.annotation.Resource; +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.util.*; + +import cn.iocoder.yudao.module.hsfx.controller.admin.brokeragelevelhistory.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevelhistory.BrokerageLevelhistoryDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; + +import cn.iocoder.yudao.module.hsfx.dal.mysql.brokeragelevelhistory.BrokerageLevelhistoryMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hsfx.enums.ErrorCodeConstants.BROKERAGE_LEVELHISTORY_NOT_EXISTS; + +/** + * 等级变更历史记录 Service 实现类 + * + * @author admin + */ +@Service +@Validated +public class BrokerageLevelhistoryServiceImpl implements BrokerageLevelhistoryService { + + @Resource + private BrokerageLevelhistoryMapper brokerageLevelhistoryMapper; + + @Resource + private BrokerageUserMapper brokerageUserMapper; + + @Autowired + private MemberUserApi memberUserApi; + + @Autowired + private BrokerageLevelMapper levelMapper; + + @Override + @Transactional + public Long createBrokerageLevelhistory(BrokerageLevelhistorySaveReqVO createReqVO) { + // 插入 + BrokerageLevelhistoryDO brokerageLevelhistory = BeanUtils.toBean(createReqVO, BrokerageLevelhistoryDO.class); + brokerageLevelhistoryMapper.insert(brokerageLevelhistory); + // 返回 + return brokerageLevelhistory.getId(); + } + + @Override + @Transactional + public void updateBrokerageLevelhistory(BrokerageLevelhistorySaveReqVO updateReqVO) { + // 校验存在 + validateBrokerageLevelhistoryExists(updateReqVO.getId()); + // 更新 + BrokerageLevelhistoryDO updateObj = BeanUtils.toBean(updateReqVO, BrokerageLevelhistoryDO.class); + brokerageLevelhistoryMapper.updateById(updateObj); + } + + @Override + @Transactional + public void deleteBrokerageLevelhistory(Long id) { + // 校验存在 + validateBrokerageLevelhistoryExists(id); + // 删除 + brokerageLevelhistoryMapper.deleteById(id); + } + + private void validateBrokerageLevelhistoryExists(Long id) { + if (brokerageLevelhistoryMapper.selectById(id) == null) { + throw exception(BROKERAGE_LEVELHISTORY_NOT_EXISTS); + } + } + + @Override + public BrokerageLevelhistoryRespVO getBrokerageLevelhistory(Long id) { + if (brokerageLevelhistoryMapper.selectById(id) == null) { + return null; + } + BrokerageLevelhistoryDO levelhistoryDO = brokerageLevelhistoryMapper.selectById(id); + Long brokerageUserId = levelhistoryDO.getBrokerageUserId(); + BrokerageUserDO brokerageUserDO = brokerageUserMapper.selectById(brokerageUserId); + CommonResult memberUserResult = memberUserApi.getUser(brokerageUserDO.getMemberUserId()); + BrokerageLevelhistoryRespVO respVO = new BrokerageLevelhistoryRespVO(); + BeanUtils.copyProperties(levelhistoryDO, respVO); + if (memberUserResult.getData() != null) { + respVO.setBrokerageMemberNickName(memberUserResult.getData().getNickname()); + } + respVO.setBrokerageUserId(brokerageUserId); + + //获取初始等级信息 + Long initLevelId = levelhistoryDO.getInitLevelId(); + BrokerageLevelDO initLevelVo = levelMapper.selectById(initLevelId); + respVO.setInitLevelId(initLevelId); + if (initLevelVo != null) { + respVO.setInitLevelName(initLevelVo.getLevelName()); + } + + //获取目标等级信息 + Long toLevelId = levelhistoryDO.getToLevelId(); + BrokerageLevelDO toLevelDO = levelMapper.selectById(toLevelId); + respVO.setToLevelId(toLevelId); + if (toLevelDO != null) { + respVO.setToLevelName(toLevelDO.getLevelName()); + } + + return respVO; + } + + @Override + public PageResult getBrokerageLevelhistoryPage(BrokerageLevelhistoryPageReqVO pageReqVO) { + PageResult result = new PageResult<>(); + PageResult historyDOPageResult = brokerageLevelhistoryMapper.selectPage(pageReqVO); + result.setTotal(historyDOPageResult.getTotal());//总量 + //遍历获取其他信息 + List levelhistoryDOList = historyDOPageResult.getList(); + List respVOList = new ArrayList(); + for (int i = 0; i < levelhistoryDOList.size(); i++) { + //获取会员信息 + //先获取分销商id 再去查询会员id + BrokerageLevelhistoryDO brokerageLevelhistoryDO = levelhistoryDOList.get(i); + Long brokerageUserId = brokerageLevelhistoryDO.getBrokerageUserId(); + BrokerageUserDO brokerageUserDO = brokerageUserMapper.selectById(brokerageUserId); + if (brokerageUserDO == null) { + continue; + } + CommonResult memberUserResult = memberUserApi.getUser(brokerageUserDO.getMemberUserId()); + BrokerageLevelhistoryRespVO respVO = new BrokerageLevelhistoryRespVO(); + BeanUtils.copyProperties(brokerageLevelhistoryDO, respVO); + if (memberUserResult.getData() != null) { + respVO.setBrokerageMemberNickName(memberUserResult.getData().getNickname()); + } + respVO.setBrokerageUserId(brokerageUserId); + + //获取初始等级信息 + Long initLevelId = brokerageLevelhistoryDO.getInitLevelId(); + BrokerageLevelDO initLevelVo = levelMapper.selectById(initLevelId); + respVO.setInitLevelId(initLevelId); + if (initLevelVo != null) { + respVO.setInitLevelName(initLevelVo.getLevelName()); + } + + //获取目标等级信息 + Long toLevelId = brokerageLevelhistoryDO.getToLevelId(); + BrokerageLevelDO toLevelDO = levelMapper.selectById(toLevelId); + respVO.setToLevelId(toLevelId); + if (toLevelDO != null) { + respVO.setToLevelName(toLevelDO.getLevelName()); + } + respVOList.add(respVO); + } + +// return historyDOPageResult; + result.setList(respVOList); + return result; + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokerageuser/BrokerageUserService.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokerageuser/BrokerageUserService.java new file mode 100644 index 000000000..cf2d20292 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokerageuser/BrokerageUserService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.hsfx.service.brokerageuser; + +import java.util.*; +import cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokerageuser.BrokerageUserDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import jakarta.validation.Valid; + +/** + * 分销用户 Service 接口 + * + * @author admin + */ +public interface BrokerageUserService { + + /** + * 创建分销用户 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Long createBrokerageUser(@Valid BrokerageUserSaveReqVO createReqVO); + + /** + * 更新分销用户 + * + * @param updateReqVO 更新信息 + */ + void updateBrokerageUser(@Valid BrokerageUserSaveReqVO updateReqVO); + + /** + * 删除分销用户 + * + * @param id 编号 + */ + void deleteBrokerageUser(Long id); + + /** + * 获得分销用户 + * + * @param id 编号 + * @return 分销用户 + */ + BrokerageUserPageResVO getBrokerageUser(Long id); + + /** + * 获得分销用户分页 + * + * @param pageReqVO 分页查询 + * @return 分销用户分页 + */ + PageResult getBrokerageUserPage(BrokerageUserPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokerageuser/BrokerageUserServiceImpl.java b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokerageuser/BrokerageUserServiceImpl.java new file mode 100644 index 000000000..dd670b813 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/java/cn/iocoder/yudao/module/hsfx/service/brokerageuser/BrokerageUserServiceImpl.java @@ -0,0 +1,235 @@ +package cn.iocoder.yudao.module.hsfx.service.brokerageuser; + +import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevel.BrokerageLevelDO; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokeragelevelhistory.BrokerageLevelhistoryDO; +import cn.iocoder.yudao.module.hsfx.dal.mysql.brokeragelevel.BrokerageLevelMapper; +import cn.iocoder.yudao.module.hsfx.dal.mysql.brokeragelevelhistory.BrokerageLevelhistoryMapper; +import cn.iocoder.yudao.module.member.api.user.MemberUserApi; +import cn.iocoder.yudao.module.member.api.user.dto.MemberUserRespDTO; +import cn.iocoder.yudao.module.system.api.user.AdminUserApi; +import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import jakarta.annotation.Resource; +import lombok.val; +import org.apache.commons.lang3.ObjectUtils; +import org.checkerframework.checker.units.qual.C; +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.util.*; + +import cn.iocoder.yudao.module.hsfx.controller.admin.brokerageuser.vo.*; +import cn.iocoder.yudao.module.hsfx.dal.dataobject.brokerageuser.BrokerageUserDO; +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.module.hsfx.dal.mysql.brokerageuser.BrokerageUserMapper; + + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hsfx.enums.ErrorCodeConstants.*; + +/** + * 分销用户 Service 实现类 + * + * @author admin + */ +@Service +@Validated +public class BrokerageUserServiceImpl implements BrokerageUserService { + + @Resource + private BrokerageUserMapper brokerageUserMapper; + + @Autowired + private BrokerageLevelMapper levelMapper; + + @Autowired + private MemberUserApi memberUserApi; + + @Resource + private BrokerageLevelhistoryMapper historyMapper; + + @Override + @Transactional + public Long createBrokerageUser(BrokerageUserSaveReqVO createReqVO) { + //校验会员是否存在 + validateMemberUserExists(createReqVO.getMemberUserId()); + //校验分销等级是否存在 + validateLevelExists(createReqVO.getLevelId()); + //校验上级分销商是否存在 +// BrokerageUserDO parentBrokerageUser = getBrokerageUser(createReqVO.getParentId()); + BrokerageUserDO parentBrokerageUser = brokerageUserMapper.selectById(createReqVO.getParentId()); + if (parentBrokerageUser == null) { + throw exception(PARENT_BROKERAGE_USER_NOT_EXISTS); + } + //校验是否已经存在 + validateBrokerUserExists(createReqVO.getMemberUserId()); + // 插入 + BrokerageUserDO brokerageUser = BeanUtils.toBean(createReqVO, BrokerageUserDO.class); + brokerageUser.setIsEnable(0); + brokerageUser.setDeleted(false); + brokerageUserMapper.insert(brokerageUser); + // 返回 + return brokerageUser.getId(); + } + + @Override + @Transactional + public void updateBrokerageUser(BrokerageUserSaveReqVO updateReqVO) { + // 校验存在 +// validateBrokerageUserExists(updateReqVO.getId()); + BrokerageUserDO oriUser = brokerageUserMapper.selectById(updateReqVO.getId()); + if (oriUser == null) { + throw exception(BROKERAGE_USER_NOT_EXISTS); + } + //校验数据库会员id与输入会员id是否一致 + if (!oriUser.getMemberUserId().equals(updateReqVO.getMemberUserId())) { + throw exception(BROKERAGE_USER_MEMBER_MISMATCH); + } + //校验会员是否存在 + validateMemberUserExists(updateReqVO.getMemberUserId()); + //校验等级是否存在 + validateLevelExists(updateReqVO.getLevelId()); + //校验上级会员是否存在 + validateBrokerageUserExists(updateReqVO.getId()); + + + //等级变更记录保存 当两个等级值不一致的时候执行 + if (oriUser.getLevelId() != updateReqVO.getLevelId()) { + BrokerageLevelhistoryDO brokerageLevelhistoryDO = new BrokerageLevelhistoryDO(); + brokerageLevelhistoryDO.setBrokerageUserId(updateReqVO.getId());//分销商id + brokerageLevelhistoryDO.setInitLevelId(oriUser.getLevelId());//初始等级 + brokerageLevelhistoryDO.setToLevelId(updateReqVO.getLevelId());//目标等级id + brokerageLevelhistoryDO.setDeleted(false); + historyMapper.insert(brokerageLevelhistoryDO); + } + // 更新 + BrokerageUserDO updateObj = BeanUtils.toBean(updateReqVO, BrokerageUserDO.class); + brokerageUserMapper.updateById(updateObj); + } + + @Override + @Transactional + public void deleteBrokerageUser(Long id) { + // 校验存在 + validateBrokerageUserExists(id); + // 删除 + brokerageUserMapper.deleteById(id); + } + + + @Override + public BrokerageUserPageResVO getBrokerageUser(Long id) { + BrokerageUserDO brokerageUserDO = brokerageUserMapper.selectById(id); + //校验存在 + if (brokerageUserDO == null) { + return null; + } + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.selectAll(BrokerageUserDO.class) + .leftJoin(BrokerageLevelDO.class, BrokerageLevelDO::getId, BrokerageUserDO::getLevelId) + .select(BrokerageLevelDO::getLevelName) + .select(BrokerageLevelDO::getId) + .eq(BrokerageUserDO::getId, id); + BrokerageUserPageResVO brokerageUserPageResVO = brokerageUserMapper.selectJoinOne(BrokerageUserPageResVO.class, wrapper); + BrokerageUserDO parentUserDo = brokerageUserMapper.selectById(brokerageUserPageResVO.getParentId());//上级分销商信息 + brokerageUserPageResVO.setParentId(parentUserDo.getId()); + CommonResult parentMemberUserResult = memberUserApi.getUser(parentUserDo.getMemberUserId()); + if (parentMemberUserResult.getData() != null) { + brokerageUserPageResVO.setParentMemberNickName(parentMemberUserResult.getData().getNickname()); + brokerageUserPageResVO.setParentMemberUserId(parentMemberUserResult.getData().getId()); + } + CommonResult memberUserResult = memberUserApi.getUser(brokerageUserPageResVO.getMemberUserId()); + if (memberUserResult.getData() != null) { + brokerageUserPageResVO.setNickName(memberUserResult.getData().getNickname()); + brokerageUserPageResVO.setPhone(memberUserResult.getData().getMobile()); + } + return brokerageUserPageResVO; + } + + @Override + public PageResult getBrokerageUserPage(BrokerageUserPageReqVO pageReqVO) { + + Page page = new Page(1, 10); + MPJLambdaWrapper wrapper = new MPJLambdaWrapper<>(); + wrapper.selectAll(BrokerageUserDO.class) +// .select(BrokerageLevelDO::getLevelName) +// .select(BrokerageLevelDO::getId) + .select(BrokerageLevelDO::getLevelName) + .select(BrokerageLevelDO::getId) + .leftJoin(BrokerageLevelDO.class, BrokerageLevelDO::getId, BrokerageUserDO::getLevelId); + PageResult brokerageLevelDOPageResult = brokerageUserMapper.selectJoinPage(new PageParam(), BrokerageUserPageResVO.class, wrapper); + List list = brokerageLevelDOPageResult.getList(); + + for (int i = 0; i < list.size(); i++) { + BrokerageUserPageResVO brokerageUserPageResVO = list.get(i); + Long parentId = brokerageUserPageResVO.getParentId(); + BrokerageUserDO brokerageUserDO = brokerageUserMapper.selectById(parentId); + brokerageUserPageResVO.setParentMemberUserId(brokerageUserDO.getMemberUserId()); + list.set(i, brokerageUserPageResVO); + } + for (int i = 0; i < list.size(); i++) { + BrokerageUserPageResVO brokerageUserPageResVO = list.get(i); + CommonResult memberUserResult = memberUserApi.getUser(brokerageUserPageResVO.getMemberUserId()); + if (memberUserResult.getData() != null) { + brokerageUserPageResVO.setNickName(memberUserResult.getData().getNickname()); + brokerageUserPageResVO.setPhone(memberUserResult.getData().getMobile()); + } + CommonResult memberParentUserResult = memberUserApi.getUser(brokerageUserPageResVO.getParentMemberUserId()); + if (memberParentUserResult.getData() != null) { + brokerageUserPageResVO.setParentMemberNickName(memberParentUserResult.getData().getNickname()); + } + list.set(i, brokerageUserPageResVO); + } + brokerageLevelDOPageResult.setList(list); + return brokerageLevelDOPageResult; + } + + + //校验分销用户是否存在 + private void validateBrokerageUserExists(Long id) { + if (brokerageUserMapper.selectById(id) == null) { + throw exception(BROKERAGE_USER_NOT_EXISTS); + } + } + + //校验会员是否存在 + private void validateMemberUserExists(Long memberUserId) { + CommonResult userResult = memberUserApi.getUser(memberUserId); + System.out.println(userResult); + if (userResult.getData() == null) { + throw exception(MEMBER_USER_NOT_EXISTS); + } + } + + //校验分销等级是否存在 + private void validateLevelExists(Long levelId) { + BrokerageLevelDO levelDO = levelMapper.selectById(levelId); + if (levelDO == null) { + throw exception(BROKERAGE_LEVEL_NOT_EXISTS); + } + } + + private void validateBrokerUserExists(Long memberUserId) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper<>(); + lambdaQueryWrapper.eq(BrokerageUserDO::getMemberUserId, memberUserId); + BrokerageUserDO brokerageUserDO = brokerageUserMapper.selectOne(lambdaQueryWrapper); + if (brokerageUserDO != null) { + throw exception(BROKERAGE_USER_ALREADY_EXISTS); + } + } + + private void validateBrokerageUserUnique() { + + } + + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/application-dev.yaml b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/application-dev.yaml new file mode 100644 index 000000000..a38cd37be --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/application-dev.yaml @@ -0,0 +1,115 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号8 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 5 # 初始连接数 + min-idle: 10 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://192.168.1.128/hs-mall-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: hs-rootadmin + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://192.168.1.128/hs-mall-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: hs-rootadmin + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + redis: + host: 192.168.1.128 # 地址 + port: 6379 # 端口 + database: 1 # 数据库索引 +# password: hs-rootadmin # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### +xxl: + job: + admin: + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + # Spring Boot Admin Server 服务端的相关配置 + context-path: /admin # 配置 Spring + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + demo: true # 开启演示模式 diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/application-local.yaml b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/application-local.yaml new file mode 100644 index 000000000..749669dbb --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/application-local.yaml @@ -0,0 +1,137 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号8 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://192.168.1.128/hs-mall-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://192.168.1.128/hs-mall-cloud?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: root + password: hs-rootadmin + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://192.168.1.128/hs-mall-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + username: root + password: hs-rootadmin + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + redis: + host: 192.168.1.128 # 地址 + port: 6379 # 端口 + database: 0 # 数据库索引 +# password: hs-rootadmin # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + enabled: true # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + cn.iocoder.yudao.module.hsfx.dal.mysql: debug + org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + env: # 多环境的配置项 + tag: ${HOSTNAME} + security: + mock-enable: true + access-log: # 访问日志的配置项 + enable: false \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/application.yaml b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/application.yaml new file mode 100644 index 000000000..3db0c1e78 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/application.yaml @@ -0,0 +1,127 @@ +spring: + application: + name: hsfx-server + + profiles: + active: local + + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + allow-bean-definition-overriding: true # 允许 Bean 覆盖,例如说 Feign 等会存在重复定义的服务 + + config: + import: + - optional:classpath:application-${spring.profiles.active}.yaml # 加载【本地】配置 + - optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml # 加载【Nacos】的配置 + + # Servlet 配置 + servlet: + # 文件上传相关配置项 + multipart: + max-file-size: 16MB # 单个文件大小 + max-request-size: 32MB # 设置总上传的文件大小 + + # Jackson 配置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 LocalDateTime 的格式,使用时间戳 + write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳 + fail-on-empty-beans: false # 允许序列化无属性的 Bean + + # Cache 配置项 + cache: + type: REDIS + redis: + time-to-live: 1h # 设置过期时间为 1 小时 + +server: + port: 48100 + +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 + +--- #################### 接口文档配置 #################### + +springdoc: + api-docs: + enabled: true # 1. 是否开启 Swagger 接文档的元数据 + path: /v3/api-docs + swagger-ui: + enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面 + path: /swagger-ui + default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档 + +knife4j: + enable: true # 2.2 是否开启 Swagger 文档的 Knife4j UI 界面 + setting: + language: zh_cn + +# MyBatis Plus 的配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 + # id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库 + # id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 + # id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + banner: false # 关闭控制台的 Banner 打印 + type-aliases-package: ${yudao.info.base-package}.dal.dataobject + encryptor: + password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成 + +mybatis-plus-join: + banner: false # 关闭控制台的 Banner 打印 + +# Spring Data Redis 配置 +spring: + data: + redis: + repositories: + enabled: false # 项目未使用到 Spring Data Redis 的 Repository,所以直接禁用,保证启动速度 + +# VO 转换(数据翻译)相关 +easy-trans: + is-enable-global: true # 启用全局翻译(拦截所有 SpringMVC ResponseBody 进行自动翻译 )。如果对于性能要求很高可关闭此配置,或通过 @IgnoreTrans 忽略某个接口 + +--- #################### RPC 远程调用相关配置 #################### + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + executor: + appname: ${spring.application.name} # 执行器 AppName + logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 + accessToken: default_token # 执行器通讯TOKEN + +--- #################### 芋道相关配置 #################### + +yudao: + info: + version: 1.0.0 + base-package: cn.iocoder.yudao.module.hsfx + web: + admin-ui: + url: http://dashboard.yudao.iocoder.cn # Admin 管理后台 UI 的地址 + xss: + enable: false + exclude-urls: # 如下 url,仅仅是为了演示,去掉配置也没关系 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + swagger: + title: 管理后台 + description: 提供管理员管理的所有功能 + version: ${yudao.info.version} + tenant: # 多租户相关配置项 + enable: true + ignore-urls: + ignore-tables: + +debug: false diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/logback-spring.xml b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/logback-spring.xml new file mode 100644 index 000000000..b1b9f3faf --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/logback-spring.xml @@ -0,0 +1,76 @@ + + + + + + + + + +       + + + ${PATTERN_DEFAULT} + + + + + + + + + + ${PATTERN_DEFAULT} + + + + ${LOG_FILE} + + + ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} + + ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} + + ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + + ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} + + ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + + + + 0 + + 256 + + + + + + + + ${PATTERN_DEFAULT} + + + + + + + + + + + + + + + + + + + + + + diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokeragebaseconfig/BrokerageBaseconfigMapper.xml b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokeragebaseconfig/BrokerageBaseconfigMapper.xml new file mode 100644 index 000000000..4bcb3bc78 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokeragebaseconfig/BrokerageBaseconfigMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokeragelevel/BrokerageLevelMapper.xml b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokeragelevel/BrokerageLevelMapper.xml new file mode 100644 index 000000000..c7deda8bd --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokeragelevel/BrokerageLevelMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokeragelevelhistory/BrokerageLevelhistoryMapper.xml b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokeragelevelhistory/BrokerageLevelhistoryMapper.xml new file mode 100644 index 000000000..f2db9b2db --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokeragelevelhistory/BrokerageLevelhistoryMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokerageuser/BrokerageUserMapper.xml b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokerageuser/BrokerageUserMapper.xml new file mode 100644 index 000000000..8898b3051 --- /dev/null +++ b/yudao-module-mall/yudao-module-hsfx-biz/src/main/resources/mapper/brokerageuser/BrokerageUserMapper.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-api/pom.xml b/yudao-module-mall/yudao-module-hshy-api/pom.xml new file mode 100644 index 000000000..4650b337d --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-api/pom.xml @@ -0,0 +1,48 @@ + + + 4.0.0 + + cn.iocoder.cloud + yudao-module-mall + ${revision} + + + yudao-module-hshy-api + jar + + ${project.artifactId} + + 海上会员 模块 API,暴露给其它模块调用 + + + + + cn.iocoder.cloud + yudao-common + + + + + org.springdoc + springdoc-openapi-starter-webmvc-api + provided + + + + + org.springframework.boot + spring-boot-starter-validation + true + + + + + org.springframework.cloud + spring-cloud-starter-openfeign + true + + + + diff --git a/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/pointruleitem/PointRuleItemApi.java b/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/pointruleitem/PointRuleItemApi.java new file mode 100644 index 000000000..b888e9bcd --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/pointruleitem/PointRuleItemApi.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.hshy.api.pointruleitem; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.hshy.api.pointruleitem.dto.PointRuleItemReqDTO; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import java.util.List; + +public interface PointRuleItemApi { + + @Operation(summary = "根据类型获取规则明细") + @Parameter(name = "type", description = "类型", required = true, example = "code") + CommonResult> getPointRuleItemList(@RequestParam("type") String type); + +} diff --git a/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/pointruleitem/dto/PointRuleItemReqDTO.java b/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/pointruleitem/dto/PointRuleItemReqDTO.java new file mode 100644 index 000000000..8af6cb236 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/pointruleitem/dto/PointRuleItemReqDTO.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.hshy.api.pointruleitem.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + + + +@Schema(description = "管理后台 - 规则明细 Response TDO") +@Data +public class PointRuleItemReqDTO { + @Schema(description = "编码") + private Integer id; + + @Schema(description = "规则类型") + private String type; + + @Schema(description = "标签") + private String label; + + @Schema(description = "开始键值") + private String starValue; + + @Schema(description = "结束键值") + private String endValue; + + @Schema(description = "排序") + + private Integer sort; + + @Schema(description = "状态(0正常 1停用)") + private Integer status; + + @Schema(description = "颜色类型", example = "2") + private String colorType; + + @Schema(description = "css 样式") + private String cssClass; + + @Schema(description = "备注", example = "你说的对") + private String remark; + +} diff --git a/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/userblack/UserBlackApi.java b/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/userblack/UserBlackApi.java new file mode 100644 index 000000000..f3a267372 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/userblack/UserBlackApi.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.hshy.api.userblack; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.module.hshy.api.userblack.dto.UserBlackReqDTO; + +import java.util.List; + +public interface UserBlackApi { + /** + * 获得所有会员黑名单 + * + */ + CommonResult> listUserBlack(); + +} diff --git a/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/userblack/dto/UserBlackReqDTO.java b/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/userblack/dto/UserBlackReqDTO.java new file mode 100644 index 000000000..07ee6fe72 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/api/userblack/dto/UserBlackReqDTO.java @@ -0,0 +1,11 @@ +package cn.iocoder.yudao.module.hshy.api.userblack.dto; + +import io.swagger.v3.oas.annotations.media.Schema; +import jakarta.validation.constraints.NotNull; + + +public class UserBlackReqDTO { + @Schema(description = "会员编号", example = "1034") + @NotNull(message = "会员编号") + private Long memberUserId; +} diff --git a/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/enums/ErrorCodeConstants.java b/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/enums/ErrorCodeConstants.java new file mode 100644 index 000000000..1e6ff750b --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-api/src/main/java/cn/iocoder/yudao/module/hshy/enums/ErrorCodeConstants.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.hshy.enums; +import cn.iocoder.yudao.framework.common.exception.ErrorCode; + + +/** + * 海上会员 错误码枚举类 + * + * 海上会员 系统,使用 1-100-000-000 段 + */ +public interface ErrorCodeConstants { + // ========== 会员黑名单 TODO 补充编号 ========== + ErrorCode USER_BLACK_NOT_EXISTS = new ErrorCode(1-100-001-000, "登录异常,请联系管理员!"); + + // ========== 规则 TODO 补充编号 ========== + ErrorCode POINT_RULE_NOT_EXISTS = new ErrorCode(1-101-001-000, "规则不存在"); + + // ========== 规则明细 TODO 补充编号 ========== + ErrorCode POINT_RULE_ITEM_NOT_EXISTS = new ErrorCode(1-102-001-000, "规则明细不存在"); + + // ========== 用户积分金额冻结 TODO 补充编号 ========== + ErrorCode POINT_CONGEAL_NOT_EXISTS = new ErrorCode(1-103-001-000, "用户积分金额冻结不存在"); + + // ========== 商品扩展 TODO 补充编号 ========== + ErrorCode EXTEND_NOT_EXISTS = new ErrorCode(1-104-001-000, "商品扩展不存在"); + + // ========== 会员条件配置 TODO 补充编号 ========== + ErrorCode USER_CONFIG_NOT_EXISTS = new ErrorCode(1-105-001-000, "会员条件配置不存在"); + + // ========== 会员积分兑换 TODO 补充编号 ========== + ErrorCode POINT_EXCHANGE_NOT_EXISTS = new ErrorCode(1-106-001-000, "会员积分兑换不存在"); + + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/pom.xml b/yudao-module-mall/yudao-module-hshy-biz/pom.xml new file mode 100644 index 000000000..be17f2065 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/pom.xml @@ -0,0 +1,123 @@ + + + + cn.iocoder.cloud + yudao-module-mall + ${revision} + + 4.0.0 + yudao-module-hshy-biz + jar + + ${project.artifactId} + + product 模块,主要实现商品相关功能 + 例如:品牌、商品分类、spu、sku等功能。 + + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-env + + + + + cn.iocoder.cloud + yudao-module-hshy-api + ${revision} + + + cn.iocoder.cloud + yudao-module-product-api + ${revision} + + + cn.iocoder.cloud + yudao-module-member-api + ${revision} + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-biz-tenant + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-web + + + cn.iocoder.cloud + yudao-spring-boot-starter-security + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-mybatis + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-rpc + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-test + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-excel + + + + + cn.iocoder.cloud + yudao-spring-boot-starter-monitor + + + + + + ${project.artifactId} + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring.boot.version} + + + + repackage + + + + + + + + diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/HshyServerApplication.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/HshyServerApplication.java new file mode 100644 index 000000000..ba5f4ac29 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/HshyServerApplication.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.hshy; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 项目的启动类 + * + * @author tpj + */ +@SpringBootApplication +public class HshyServerApplication { + public static void main(String[] args) { + SpringApplication.run(HshyServerApplication.class, args); + System.out.println("HsfxServerApplication 启动成功"); + } +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/api/pointruleitem/PointRuleItemImpl.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/api/pointruleitem/PointRuleItemImpl.java new file mode 100644 index 000000000..b94b53fb7 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/api/pointruleitem/PointRuleItemImpl.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.hshy.api.pointruleitem; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.api.pointruleitem.dto.PointRuleItemReqDTO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointruleitem.PointRuleItemDO; +import cn.iocoder.yudao.module.hshy.service.pointruleitem.PointRuleItemService; +import cn.iocoder.yudao.module.product.api.sku.dto.ProductSkuRespDTO; +import jakarta.annotation.Resource; + + +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +public class PointRuleItemImpl implements PointRuleItemApi { + + @Resource + private PointRuleItemService pointRuleItemService; + @Override + public CommonResult> getPointRuleItemList(String type) { + List list =pointRuleItemService.getPointRuleItemList(type); + return success(BeanUtils.toBean(list, PointRuleItemReqDTO.class)); + } + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/api/userblack/UserBlackApiImpl.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/api/userblack/UserBlackApiImpl.java new file mode 100644 index 000000000..c1e929483 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/api/userblack/UserBlackApiImpl.java @@ -0,0 +1,24 @@ +package cn.iocoder.yudao.module.hshy.api.userblack; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.api.userblack.dto.UserBlackReqDTO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userblack.UserBlackDO; +import cn.iocoder.yudao.module.hshy.service.userblack.UserBlackService; + +import jakarta.annotation.Resource; +import java.util.List; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +public class UserBlackApiImpl implements UserBlackApi { + + @Resource + private UserBlackService userBlackService; + @Override + public CommonResult> listUserBlack() { + List list= userBlackService.listUserBlack(); + return success(BeanUtils.toBean(list, UserBlackReqDTO.class)); + } + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/ExtendController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/ExtendController.java new file mode 100644 index 000000000..55df8afed --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/ExtendController.java @@ -0,0 +1,96 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.extend; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hshy.controller.admin.extend.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.extend.ExtendDO; +import cn.iocoder.yudao.module.hshy.service.extend.ExtendService; + + + +@Tag(name = "管理后台 - 商品扩展") +@RestController +@RequestMapping("/hshy/extend") +@Validated +public class ExtendController { + + @Resource + private ExtendService extendService; + + @PostMapping("/create") + @Operation(summary = "创建商品扩展") + @PreAuthorize("@ss.hasPermission('hshy:extend:create')") + public CommonResult createExtend(@Valid @RequestBody ExtendSaveReqVO createReqVO) { + return success(extendService.createExtend(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新商品扩展") + @PreAuthorize("@ss.hasPermission('hshy:extend:update')") + public CommonResult updateExtend(@Valid @RequestBody ExtendSaveReqVO updateReqVO) { + extendService.updateExtend(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除商品扩展") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:extend:delete')") + public CommonResult deleteExtend(@RequestParam("id") Integer id) { + extendService.deleteExtend(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "根据spuId获取扩展信息") + @Parameter(name = "spuId", description = "商品 SPU 编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:extend:query')") + public CommonResult getExtend(@RequestParam("spuId") Integer spuId) { + ExtendDO extend = extendService.getExtend(spuId); + return success(BeanUtils.toBean(extend, ExtendRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得商品扩展分页") + @PreAuthorize("@ss.hasPermission('hshy:extend:query')") + public CommonResult> getExtendPage(@Valid ExtendPageReqVO pageReqVO) { + PageResult pageResult = extendService.getExtendPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, ExtendRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出商品扩展 Excel") + @PreAuthorize("@ss.hasPermission('hshy:extend:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportExtendExcel(@Valid ExtendPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = extendService.getExtendPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "商品扩展.xls", "数据", ExtendRespVO.class, + BeanUtils.toBean(list, ExtendRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendPageReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendPageReqVO.java new file mode 100644 index 000000000..5184bdbf3 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendPageReqVO.java @@ -0,0 +1,47 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.extend.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 商品扩展分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class ExtendPageReqVO extends PageParam { + + @Schema(description = "是否是推广商品(0否 1是)") + private Integer isPromotion; + + @Schema(description = "是否是指定商品(0否 1是)") + private Integer isAppoint; + + @Schema(description = "是否是特殊商品(0否 1是)") + private Integer isSpecial; + + @Schema(description = "状态(0正常 1停用)", example = "2") + private Integer status; + + @Schema(description = "说明", example = "随便") + private String remark; + + @Schema(description = "商品 SPU 编号", example = "26933") + private Long spuId; + + @Schema(description = "商品 SKU 编号", example = "3820") + private Long skuId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "删除时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendReqVO.java new file mode 100644 index 000000000..2f1eaf3ad --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendReqVO.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.extend.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.ToString; + +@Schema(description = "管理后台 - 商品扩展分页 Request VO") +@Data +@ToString(callSuper = true) +public class ExtendReqVO { + @Schema(description = "商品 SPU 编号", example = "26933") + private Long spuId; + + @Schema(description = "商品 SKU 编号", example = "3820") + private Long skuId; +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendRespVO.java new file mode 100644 index 000000000..719bc87d3 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendRespVO.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.extend.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 商品扩展 Response VO") +@Data +@ExcelIgnoreUnannotated +public class ExtendRespVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "25961") + @ExcelProperty("主键") + private Integer id; + + @Schema(description = "是否是推广商品(0否 1是)") + @ExcelProperty("是否是推广商品(0否 1是)") + private Integer isPromotion; + + @Schema(description = "是否是指定商品(0否 1是)") + @ExcelProperty("是否是指定商品(0否 1是)") + private Integer isAppoint; + + @Schema(description = "是否是特殊商品(0否 1是)") + @ExcelProperty("是否是特殊商品(0否 1是)") + private Integer isSpecial; + + @Schema(description = "状态(0正常 1停用)", example = "2") + @ExcelProperty("状态(0正常 1停用)") + private Integer status; + + @Schema(description = "说明", example = "随便") + @ExcelProperty("说明") + private String remark; + + @Schema(description = "商品 SPU 编号", example = "26933") + @ExcelProperty("商品 SPU 编号") + private Long spuId; + + @Schema(description = "商品 SKU 编号", example = "3820") + @ExcelProperty("商品 SKU 编号") + private Long skuId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "删除时间") + @ExcelProperty("删除时间") + private LocalDateTime deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendSaveReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendSaveReqVO.java new file mode 100644 index 000000000..e23bedbb2 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/extend/vo/ExtendSaveReqVO.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.extend.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 商品扩展新增/修改 Request VO") +@Data +public class ExtendSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "25961") + private Integer id; + + @Schema(description = "是否是推广商品(0否 1是)") + private Integer isPromotion; + + @Schema(description = "是否是指定商品(0否 1是)") + private Integer isAppoint; + + @Schema(description = "是否是特殊商品(0否 1是)") + private Integer isSpecial; + + @Schema(description = "状态(0正常 1停用)", example = "2") + private Integer status; + + @Schema(description = "说明", example = "随便") + private String remark; + + @Schema(description = "商品 SPU 编号", example = "26933") + private Long spuId; + + @Schema(description = "商品 SKU 编号", example = "3820") + private Long skuId; + + @Schema(description = "删除时间") + private LocalDateTime deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/PointCongealController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/PointCongealController.java new file mode 100644 index 000000000..286a8a81b --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/PointCongealController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointcongeal; + +import org.springframework.web.bind.annotation.*; + +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hshy.controller.admin.pointcongeal.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointcongeal.PointCongealDO; +import cn.iocoder.yudao.module.hshy.service.pointcongeal.PointCongealService; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; + +@Tag(name = "管理后台 - 用户积分金额冻结") +@RestController +@RequestMapping("/hshy/point-congeal") +@Validated +public class PointCongealController { + + @Resource + private PointCongealService pointCongealService; + + @PostMapping("/create") + @Operation(summary = "创建用户积分金额冻结") + @PreAuthorize("@ss.hasPermission('hshy:point-congeal:create')") + public CommonResult createPointCongeal(@Valid @RequestBody PointCongealSaveReqVO createReqVO) { + return success(pointCongealService.createPointCongeal(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新用户积分金额冻结") + @PreAuthorize("@ss.hasPermission('hshy:point-congeal:update')") + public CommonResult updatePointCongeal(@Valid @RequestBody PointCongealSaveReqVO updateReqVO) { + pointCongealService.updatePointCongeal(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除用户积分金额冻结") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:point-congeal:delete')") + public CommonResult deletePointCongeal(@RequestParam("id") Integer id) { + pointCongealService.deletePointCongeal(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得用户积分金额冻结") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:point-congeal:query')") + public CommonResult getPointCongeal(@RequestParam("id") Integer id) { + PointCongealDO pointCongeal = pointCongealService.getPointCongeal(id); + return success(BeanUtils.toBean(pointCongeal, PointCongealRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得用户积分金额冻结分页") + @PreAuthorize("@ss.hasPermission('hshy:point-congeal:query')") + public CommonResult> getPointCongealPage(@Valid PointCongealPageReqVO pageReqVO) { + PageResult pageResult = pointCongealService.getPointCongealPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PointCongealRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出用户积分金额冻结 Excel") + @PreAuthorize("@ss.hasPermission('hshy:point-congeal:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPointCongealExcel(@Valid PointCongealPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = pointCongealService.getPointCongealPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "用户积分金额冻结.xls", "数据", PointCongealRespVO.class, + BeanUtils.toBean(list, PointCongealRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/vo/PointCongealPageReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/vo/PointCongealPageReqVO.java new file mode 100644 index 000000000..902bb027e --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/vo/PointCongealPageReqVO.java @@ -0,0 +1,37 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointcongeal.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 用户积分金额冻结分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PointCongealPageReqVO extends PageParam { + + @Schema(description = "会员编码", example = "26604") + private Long memberUserId; + + @Schema(description = "用户积分主键", example = "8748") + private Long pointCongealId; + + @Schema(description = "冻结金额") + private Integer amount; + + @Schema(description = "冻结积分") + private Integer point; + + @Schema(description = "描述", example = "你说的对") + private String description; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/vo/PointCongealRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/vo/PointCongealRespVO.java new file mode 100644 index 000000000..6397a7304 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/vo/PointCongealRespVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointcongeal.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 用户积分金额冻结 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PointCongealRespVO { + + @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "10758") + @ExcelProperty("自增主键") + private Integer id; + + @Schema(description = "会员编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "26604") + @ExcelProperty("会员编码") + private Long memberUserId; + + @Schema(description = "用户积分主键", example = "8748") + @ExcelProperty("用户积分主键") + private Long pointCongealId; + + @Schema(description = "冻结金额") + @ExcelProperty("冻结金额") + private Integer amount; + + @Schema(description = "冻结积分", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("冻结积分") + private Integer point; + + @Schema(description = "描述", example = "你说的对") + @ExcelProperty("描述") + private String description; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/vo/PointCongealSaveReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/vo/PointCongealSaveReqVO.java new file mode 100644 index 000000000..a90b30d99 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointcongeal/vo/PointCongealSaveReqVO.java @@ -0,0 +1,33 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointcongeal.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import jakarta.validation.constraints.NotNull; +import java.util.*; + + +@Schema(description = "管理后台 - 用户积分金额冻结新增/修改 Request VO") +@Data +public class PointCongealSaveReqVO { + + @Schema(description = "自增主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "10758") + private Integer id; + + @Schema(description = "会员编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "26604") + @NotNull(message = "会员编码不能为空") + private Long memberUserId; + + @Schema(description = "用户积分主键", example = "8748") + private Long pointCongealId; + + @Schema(description = "冻结金额") + private Integer amount; + + @Schema(description = "冻结积分") + private Integer point; + + @Schema(description = "描述", example = "你说的对") + private String description; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/PointExchangeController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/PointExchangeController.java new file mode 100644 index 000000000..f3df617d7 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/PointExchangeController.java @@ -0,0 +1,104 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointexchange; + +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hshy.controller.admin.pointexchange.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointexchange.PointExchangeDO; +import cn.iocoder.yudao.module.hshy.service.pointexchange.PointExchangeService; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; + +@Tag(name = "管理后台 - 会员积分兑换") +@RestController +@RequestMapping("/hshy/point-exchange") +@Validated +public class PointExchangeController { + + @Resource + private PointExchangeService pointExchangeService; + + @PostMapping("/create") + @Operation(summary = "创建会员积分兑换") + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:create')") + public CommonResult createPointExchange(@Valid @RequestBody PointExchangeSaveReqVO createReqVO) { + return success(pointExchangeService.createPointExchange(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员积分兑换") + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:update')") + public CommonResult updatePointExchange(@Valid @RequestBody PointExchangeSaveReqVO updateReqVO) { + pointExchangeService.updatePointExchange(updateReqVO); + return success(true); + } + + @PutMapping("/audit") + @Operation(summary = "会员积分兑换审核") + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:update')") + public CommonResult auditPointExchange(@Valid @RequestBody PointExchangeAuditReqVO auditReqVO) { + pointExchangeService.auditPointExchange(auditReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员积分兑换") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:delete')") + public CommonResult deletePointExchange(@RequestParam("id") Integer id) { + pointExchangeService.deletePointExchange(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员积分兑换") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:query')") + public CommonResult getPointExchange(@RequestParam("id") Integer id) { + PointExchangeDO pointExchange = pointExchangeService.getPointExchange(id); + return success(BeanUtils.toBean(pointExchange, PointExchangeRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得会员积分兑换分页") + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:query')") + public CommonResult> getPointExchangePage(@Valid PointExchangePageReqVO pageReqVO) { + PageResult pageResult = pointExchangeService.getPointExchangePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PointExchangeRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出会员积分兑换 Excel") + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPointExchangeExcel(@Valid PointExchangePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = pointExchangeService.getPointExchangePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "会员积分兑换.xls", "数据", PointExchangeRespVO.class, + BeanUtils.toBean(list, PointExchangeRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangeAuditReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangeAuditReqVO.java new file mode 100644 index 000000000..6cde93454 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangeAuditReqVO.java @@ -0,0 +1,23 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointexchange.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 会员积分兑换审核 Request VO") +@Data +public class PointExchangeAuditReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "22548") + private Integer id; + + @Schema(description = "审核状态", example = "2") + private String auditStatus; + + @Schema(description = "审核备注") + private String auditNotes; + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangePageReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangePageReqVO.java new file mode 100644 index 000000000..cddbd133e --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangePageReqVO.java @@ -0,0 +1,72 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointexchange.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 会员积分兑换分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PointExchangePageReqVO extends PageParam { + + @Schema(description = "会员Id", example = "14170") + private Long memberUserId; + + @Schema(description = "会员类型", example = "1") + private String userType; + + @Schema(description = "业务类型(余额,商品,其他)", example = "1") + private String bizType; + + @Schema(description = "规则明细") + private String jsonRule; + + @Schema(description = "余额.积分") + private Integer balance; + + @Schema(description = "累积支出") + private Integer totalExpense; + + @Schema(description = "累积充值") + private Integer totalRecharge; + + @Schema(description = "状态(0正常 1停用)", example = "2") + private Integer status; + + @Schema(description = "说明", example = "随便") + private String remark; + + @Schema(description = "审核状态", example = "2") + private String auditStatus; + + @Schema(description = "审核人") + private String audit; + + @Schema(description = "审核时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] auditTime; + + @Schema(description = "审核备注") + private String auditNotes; + + @Schema(description = "商品 SPU 编号", example = "852") + private Long spuId; + + @Schema(description = "商品 SKU 编号", example = "28024") + private Long skuId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "删除时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangeRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangeRespVO.java new file mode 100644 index 000000000..171faec06 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangeRespVO.java @@ -0,0 +1,91 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointexchange.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; +import cn.iocoder.yudao.framework.excel.core.annotations.DictFormat; +import cn.iocoder.yudao.framework.excel.core.convert.DictConvert; + +@Schema(description = "管理后台 - 会员积分兑换 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PointExchangeRespVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "22548") + @ExcelProperty("主键") + private Integer id; + + @Schema(description = "会员Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14170") + @ExcelProperty("会员Id") + private Long memberUserId; + + @Schema(description = "会员类型", example = "1") + @ExcelProperty("会员类型") + private String userType; + + @Schema(description = "业务类型(余额,商品,其他)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty(value = "业务类型(余额,商品,其他)", converter = DictConvert.class) + @DictFormat("member_point_exchange_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String bizType; + + @Schema(description = "规则明细", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("规则明细") + private String jsonRule; + + @Schema(description = "余额.积分") + @ExcelProperty("余额.积分") + private Integer balance; + + @Schema(description = "累积支出") + @ExcelProperty("累积支出") + private Integer totalExpense; + + @Schema(description = "累积充值") + @ExcelProperty("累积充值") + private Integer totalRecharge; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("状态(0正常 1停用)") + private Integer status; + + @Schema(description = "说明", example = "随便") + @ExcelProperty("说明") + private String remark; + + @Schema(description = "审核状态", example = "2") + @ExcelProperty(value = "审核状态", converter = DictConvert.class) + @DictFormat("member_point_exchange_audit_type") // TODO 代码优化:建议设置到对应的 DictTypeConstants 枚举类中 + private String auditStatus; + + @Schema(description = "审核人") + @ExcelProperty("审核人") + private String audit; + + @Schema(description = "审核时间") + @ExcelProperty("审核时间") + private LocalDateTime auditTime; + + @Schema(description = "审核备注") + @ExcelProperty("审核备注") + private String auditNotes; + + @Schema(description = "商品 SPU 编号", example = "852") + @ExcelProperty("商品 SPU 编号") + private Long spuId; + + @Schema(description = "商品 SKU 编号", example = "28024") + @ExcelProperty("商品 SKU 编号") + private Long skuId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "删除时间") + @ExcelProperty("删除时间") + private LocalDateTime deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangeSaveReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangeSaveReqVO.java new file mode 100644 index 000000000..cce4a9941 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointexchange/vo/PointExchangeSaveReqVO.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointexchange.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 会员积分兑换新增/修改 Request VO") +@Data +public class PointExchangeSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "22548") + private Integer id; + + @Schema(description = "会员Id", requiredMode = Schema.RequiredMode.REQUIRED, example = "14170") + @NotNull(message = "会员Id不能为空") + private Long memberUserId; + + @Schema(description = "会员类型", example = "1") + private String userType; + + @Schema(description = "业务类型(余额,商品,其他)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "业务类型(余额,商品,其他)不能为空") + private String bizType; + + @Schema(description = "规则明细", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "规则明细不能为空") + private String jsonRule; + + @Schema(description = "余额.积分") + private Integer balance; + + @Schema(description = "累积支出") + private Integer totalExpense; + + @Schema(description = "累积充值") + private Integer totalRecharge; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "状态(0正常 1停用)不能为空") + private Integer status; + + @Schema(description = "说明", example = "随便") + private String remark; + + @Schema(description = "审核状态", example = "2") + private String auditStatus; + + @Schema(description = "审核人") + private String audit; + + @Schema(description = "审核时间") + private LocalDateTime auditTime; + + @Schema(description = "审核备注") + private String auditNotes; + + @Schema(description = "商品 SPU 编号", example = "852") + private Long spuId; + + @Schema(description = "商品 SKU 编号", example = "28024") + private Long skuId; + + @Schema(description = "删除时间") + private LocalDateTime deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/PointRuleController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/PointRuleController.java new file mode 100644 index 000000000..7a2cfa724 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/PointRuleController.java @@ -0,0 +1,94 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointrule; + +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hshy.controller.admin.pointrule.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointrule.PointRuleDO; +import cn.iocoder.yudao.module.hshy.service.pointrule.PointRuleService; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; + +@Tag(name = "管理后台 - 规则") +@RestController +@RequestMapping("/hshy/point-rule") +@Validated +public class PointRuleController { + + @Resource + private PointRuleService pointRuleService; + + @PostMapping("/create") + @Operation(summary = "创建规则") + @PreAuthorize("@ss.hasPermission('hshy:point-rule:create')") + public CommonResult createPointRule(@Valid @RequestBody PointRuleSaveReqVO createReqVO) { + return success(pointRuleService.createPointRule(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新规则") + @PreAuthorize("@ss.hasPermission('hshy:point-rule:update')") + public CommonResult updatePointRule(@Valid @RequestBody PointRuleSaveReqVO updateReqVO) { + pointRuleService.updatePointRule(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除规则") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:point-rule:delete')") + public CommonResult deletePointRule(@RequestParam("id") Integer id) { + pointRuleService.deletePointRule(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得规则") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:point-rule:query')") + public CommonResult getPointRule(@RequestParam("id") Integer id) { + PointRuleDO pointRule = pointRuleService.getPointRule(id); + return success(BeanUtils.toBean(pointRule, PointRuleRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得规则分页") + @PreAuthorize("@ss.hasPermission('hshy:point-rule:query')") + public CommonResult> getPointRulePage(@Valid PointRulePageReqVO pageReqVO) { + PageResult pageResult = pointRuleService.getPointRulePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PointRuleRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出规则 Excel") + @PreAuthorize("@ss.hasPermission('hshy:point-rule:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPointRuleExcel(@Valid PointRulePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = pointRuleService.getPointRulePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "规则.xls", "数据", PointRuleRespVO.class, + BeanUtils.toBean(list, PointRuleRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/vo/PointRulePageReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/vo/PointRulePageReqVO.java new file mode 100644 index 000000000..6c845f8f4 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/vo/PointRulePageReqVO.java @@ -0,0 +1,38 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointrule.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 规则分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PointRulePageReqVO extends PageParam { + + @Schema(description = "类型(天数,时间,条款,区间,升级,降级)", example = "1") + private String type; + + @Schema(description = "名称", example = "赵六") + private String name; + + @Schema(description = "状态(0正常 1停用)", example = "2") + private Integer status; + + @Schema(description = "说明", example = "你猜") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + + @Schema(description = "删除时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/vo/PointRuleRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/vo/PointRuleRespVO.java new file mode 100644 index 000000000..3143dd60e --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/vo/PointRuleRespVO.java @@ -0,0 +1,43 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointrule.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 规则 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PointRuleRespVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15498") + @ExcelProperty("主键") + private Integer id; + + @Schema(description = "类型(天数,时间,条款,区间,升级,降级)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("类型(天数,时间,条款,区间,升级,降级)") + private String type; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @ExcelProperty("名称") + private String name; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("状态(0正常 1停用)") + private Integer status; + + @Schema(description = "说明", example = "你猜") + @ExcelProperty("说明") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + + @Schema(description = "删除时间") + @ExcelProperty("删除时间") + private LocalDateTime deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/vo/PointRuleSaveReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/vo/PointRuleSaveReqVO.java new file mode 100644 index 000000000..290df5a83 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointrule/vo/PointRuleSaveReqVO.java @@ -0,0 +1,36 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointrule.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.util.*; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 规则新增/修改 Request VO") +@Data +public class PointRuleSaveReqVO { + + @Schema(description = "主键", requiredMode = Schema.RequiredMode.REQUIRED, example = "15498") + private Integer id; + + @Schema(description = "类型(天数,时间,条款,区间,升级,降级)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotEmpty(message = "类型(天数,时间,条款,区间,升级,降级)不能为空") + private String type; + + @Schema(description = "名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "赵六") + @NotEmpty(message = "名称不能为空") + private String name; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotNull(message = "状态(0正常 1停用)不能为空") + private Integer status; + + @Schema(description = "说明", example = "你猜") + private String remark; + + @Schema(description = "删除时间") + private LocalDateTime deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/PointRuleItemController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/PointRuleItemController.java new file mode 100644 index 000000000..8c250f135 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/PointRuleItemController.java @@ -0,0 +1,105 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointruleitem; + +import org.springframework.web.bind.annotation.*; + +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hshy.controller.admin.pointruleitem.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointruleitem.PointRuleItemDO; +import cn.iocoder.yudao.module.hshy.service.pointruleitem.PointRuleItemService; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; + +@Tag(name = "管理后台 - 规则明细") +@RestController +@RequestMapping("/hshy/point-rule-item") +@Validated +public class PointRuleItemController { + + @Resource + private PointRuleItemService pointRuleItemService; + + @PostMapping("/create") + @Operation(summary = "创建规则明细") + @PreAuthorize("@ss.hasPermission('hshy:point-rule-item:create')") + public CommonResult createPointRuleItem(@Valid @RequestBody PointRuleItemSaveReqVO createReqVO) { + return success(pointRuleItemService.createPointRuleItem(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新规则明细") + @PreAuthorize("@ss.hasPermission('hshy:point-rule-item:update')") + public CommonResult updatePointRuleItem(@Valid @RequestBody PointRuleItemSaveReqVO updateReqVO) { + pointRuleItemService.updatePointRuleItem(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除规则明细") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:point-rule-item:delete')") + public CommonResult deletePointRuleItem(@RequestParam("id") Integer id) { + pointRuleItemService.deletePointRuleItem(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得规则明细") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:point-rule-item:query')") + public CommonResult getPointRuleItem(@RequestParam("id") Integer id) { + PointRuleItemDO pointRuleItem = pointRuleItemService.getPointRuleItem(id); + return success(BeanUtils.toBean(pointRuleItem, PointRuleItemRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得规则明细分页") + @PreAuthorize("@ss.hasPermission('hshy:point-rule-item:query')") + public CommonResult> getPointRuleItemPage(@Valid PointRuleItemPageReqVO pageReqVO) { + PageResult pageResult = pointRuleItemService.getPointRuleItemPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PointRuleItemRespVO.class)); + } + + @GetMapping("/detail") + @Operation(summary = "根据type获取规则明细") + @Parameter(name = "type", description = "类型", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:point-rule-item:query')") + public CommonResult> detail(@Valid String type) { + List pageResult = pointRuleItemService.getPointRuleItemList(type); + return success(BeanUtils.toBean(pageResult, PointRuleItemRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出规则明细 Excel") + @PreAuthorize("@ss.hasPermission('hshy:point-rule-item:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPointRuleItemExcel(@Valid PointRuleItemPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = pointRuleItemService.getPointRuleItemPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "规则明细.xls", "数据", PointRuleItemRespVO.class, + BeanUtils.toBean(list, PointRuleItemRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/vo/PointRuleItemPageReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/vo/PointRuleItemPageReqVO.java new file mode 100644 index 000000000..b42ba9d93 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/vo/PointRuleItemPageReqVO.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointruleitem.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 规则明细分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class PointRuleItemPageReqVO extends PageParam { + + @Schema(description = "编码") + private Long code; + + @Schema(description = "规则类型", example = "2") + private String type; + + @Schema(description = "标签") + private String label; + + @Schema(description = "开始键值") + private String starValue; + + @Schema(description = "结束键值") + private String endValue; + + @Schema(description = "排序") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", example = "1") + private Integer status; + + @Schema(description = "颜色类型", example = "2") + private String colorType; + + @Schema(description = "css 样式") + private String cssClass; + + @Schema(description = "备注", example = "你说的对") + private String remark; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/vo/PointRuleItemRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/vo/PointRuleItemRespVO.java new file mode 100644 index 000000000..97d632c2a --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/vo/PointRuleItemRespVO.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointruleitem.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 规则明细 Response VO") +@Data +@ExcelIgnoreUnannotated +public class PointRuleItemRespVO { + + @Schema(description = "编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "25327") + @ExcelProperty("编码") + private Integer id; + + @Schema(description = "编码") + @ExcelProperty("编码") + private Long code; + + @Schema(description = "规则类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @ExcelProperty("规则类型") + private String type; + + @Schema(description = "标签", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("标签") + private String label; + + @Schema(description = "开始键值") + @ExcelProperty("开始键值") + private String starValue; + + @Schema(description = "结束键值", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("结束键值") + private String endValue; + + @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("排序") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @ExcelProperty("状态(0正常 1停用)") + private Integer status; + + @Schema(description = "颜色类型", example = "2") + @ExcelProperty("颜色类型") + private String colorType; + + @Schema(description = "css 样式") + @ExcelProperty("css 样式") + private String cssClass; + + @Schema(description = "备注", example = "你说的对") + @ExcelProperty("备注") + private String remark; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/vo/PointRuleItemSaveReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/vo/PointRuleItemSaveReqVO.java new file mode 100644 index 000000000..3abeb7b99 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/pointruleitem/vo/PointRuleItemSaveReqVO.java @@ -0,0 +1,50 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.pointruleitem.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.util.*; + +@Schema(description = "管理后台 - 规则明细新增/修改 Request VO") +@Data +public class PointRuleItemSaveReqVO { + + @Schema(description = "编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "25327") + private Integer id; + + + @Schema(description = "规则类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "2") + @NotEmpty(message = "规则类型不能为空") + private String type; + + @Schema(description = "标签", requiredMode = Schema.RequiredMode.REQUIRED) + @NotEmpty(message = "标签不能为空") + private String label; + + @Schema(description = "开始键值") + private String starValue; + + @Schema(description = "结束键值", requiredMode = Schema.RequiredMode.REQUIRED) + private String endValue; + + @Schema(description = "排序", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "排序不能为空") + private Integer sort; + + @Schema(description = "状态(0正常 1停用)", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") + @NotNull(message = "状态(0正常 1停用)不能为空") + private Integer status; + + @Schema(description = "颜色类型", example = "2") + private String colorType; + + @Schema(description = "css 样式") + private String cssClass; + + @Schema(description = "备注", example = "你说的对") + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/UserBlackController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/UserBlackController.java new file mode 100644 index 000000000..34e4f4af4 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/UserBlackController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userblack; + +import org.springframework.web.bind.annotation.*; + +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hshy.controller.admin.userblack.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userblack.UserBlackDO; +import cn.iocoder.yudao.module.hshy.service.userblack.UserBlackService; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +@Tag(name = "管理后台 - 会员黑名单") +@RestController +@RequestMapping("/hshy/user-black") +@Validated +public class UserBlackController { + + @Resource + private UserBlackService userBlackService; + + @PostMapping("/create") + @Operation(summary = "批量创建会员黑名单") + @PreAuthorize("@ss.hasPermission('member:user-black-list:create')") + public CommonResult createUserBlackList(@Valid @RequestBody UserBlackSaveReqVO createReqVO) { + return success(userBlackService.createUserBlack(createReqVO)); + } + + + @PutMapping("/update") + @Operation(summary = "更新会员黑名单") + @PreAuthorize("@ss.hasPermission('hshy:user-black:update')") + public CommonResult updateUserBlack(@Valid @RequestBody UserBlackSaveReqVO updateReqVO) { + userBlackService.updateUserBlack(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "批量删除会员黑名单") + @PreAuthorize("@ss.hasPermission('member:user-black-list:delete')") + public CommonResult deleteUserBlackList(@Valid @RequestBody UserBlackSaveReqVO deleteReqVO) { + userBlackService.deleteUserBlack(deleteReqVO); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员黑名单") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-black:query')") + public CommonResult getUserBlack(@RequestParam("id") Integer id) { + return success(userBlackService.getUserBlack(id)); + + } + + @GetMapping("/page") + @Operation(summary = "获得会员黑名单分页") + @PreAuthorize("@ss.hasPermission('hshy:user-black:query')") + public CommonResult> getUserBlackPage(@Valid UserBlackPageReqVO pageReqVO) { + PageResult pageResult = userBlackService.getUserBlackPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, UserBlackRespVO.class)); + } + +// @GetMapping("/export-excel") +// @Operation(summary = "导出会员黑名单 Excel") +// @PreAuthorize("@ss.hasPermission('hshy:user-black:export')") +// @ApiAccessLog(operateType = EXPORT) +// public void exportUserBlackExcel(@Valid UserBlackPageReqVO pageReqVO, +// HttpServletResponse response) throws IOException { +// pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); +// List list = userBlackService.getUserBlackPage(pageReqVO).getList(); +// // 导出 Excel +// ExcelUtils.write(response, "会员黑名单.xls", "数据", UserBlackRespVO.class, +// BeanUtils.toBean(list, UserBlackRespVO.class)); +// } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/vo/UserBlackPageReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/vo/UserBlackPageReqVO.java new file mode 100644 index 000000000..c53a6559a --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/vo/UserBlackPageReqVO.java @@ -0,0 +1,25 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userblack.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 会员黑名单分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class UserBlackPageReqVO extends PageParam { + + @Schema(description = "会员编号", example = "1034") + private Long memberUserId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/vo/UserBlackRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/vo/UserBlackRespVO.java new file mode 100644 index 000000000..6dcf9b3ec --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/vo/UserBlackRespVO.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userblack.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 会员黑名单 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserBlackRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "11987") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "会员编号", example = "1034") + @ExcelProperty("会员编号") + private Long memberUserId; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/vo/UserBlackSaveReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/vo/UserBlackSaveReqVO.java new file mode 100644 index 000000000..dd31cce38 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userblack/vo/UserBlackSaveReqVO.java @@ -0,0 +1,15 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userblack.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; + +@Schema(description = "管理后台 - 会员黑名单新增/修改 Request VO") +@Data +public class UserBlackSaveReqVO { + + @Schema(description = "会员编号", example = "8642") + private List memberUserIds; + + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigBalanceController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigBalanceController.java new file mode 100644 index 000000000..16e00e17e --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigBalanceController.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigBalanceRespVO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import cn.iocoder.yudao.module.hshy.service.userconfig.UserConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 会员消费返余额") +@RestController +@RequestMapping("/hshy/user-config-Balance") +@Validated +public class UserConfigBalanceController { + @Resource + private UserConfigService userConfigService; + + @PostMapping("/create") + @Operation(summary = "创建会员消费返余额") + @PreAuthorize("@ss.hasPermission('hshy:user-config:create')") + public CommonResult creatBalance(@Valid @RequestBody UserConfigBalanceRespVO createReqVO) { + return success(userConfigService.creatBalance(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员消费返余额") + @PreAuthorize("@ss.hasPermission('hshy:user-config:update')") + public CommonResult updateBalance(@Valid @RequestBody UserConfigBalanceRespVO updateReqVO) { + userConfigService.updateBalance(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员消费返余额") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:user-config:delete')") + public CommonResult deleteUserConfig(@RequestParam("id") Integer id) { + userConfigService.deleteUserConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员消费返余额") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-config:query')") + public CommonResult getUserConfig(@RequestParam("id") Integer id) { + UserConfigDO userConfig = userConfigService.getUserConfig(id); + return success(BeanUtils.toBean(userConfig, UserConfigBalanceRespVO.class)); + } + + + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigBonusController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigBonusController.java new file mode 100644 index 000000000..bce96450d --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigBonusController.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigBonusRespVO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import cn.iocoder.yudao.module.hshy.service.userconfig.UserConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 会员充值奖励") +@RestController +@RequestMapping("/hshy/user-config-Bonus") +@Validated +public class UserConfigBonusController { + @Resource + private UserConfigService userConfigService; + + @PostMapping("/create") + @Operation(summary = "创建会员充值奖励") + @PreAuthorize("@ss.hasPermission('hshy:user-config:create')") + public CommonResult creatBonus(@Valid @RequestBody UserConfigBonusRespVO createReqVO) { + return success(userConfigService.creatBonus(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员充值奖励") + @PreAuthorize("@ss.hasPermission('hshy:user-config:update')") + public CommonResult updateBonus(@Valid @RequestBody UserConfigBonusRespVO updateReqVO) { + userConfigService.updateBonus(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员充值奖励") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:user-config:delete')") + public CommonResult deleteUserConfig(@RequestParam("id") Integer id) { + userConfigService.deleteUserConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员充值奖励") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-config:query')") + public CommonResult getUserConfig(@RequestParam("id") Integer id) { + UserConfigDO userConfig = userConfigService.getUserConfig(id); + return success(BeanUtils.toBean(userConfig, UserConfigBonusRespVO.class)); + } + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigController.java new file mode 100644 index 000000000..19274a36f --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigController.java @@ -0,0 +1,95 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig; + +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import cn.iocoder.yudao.module.hshy.service.userconfig.UserConfigService; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; + +@Tag(name = "管理后台 - 会员条件配置") +@RestController +@RequestMapping("/hshy/user-config") +@Validated +public class UserConfigController { + + @Resource + private UserConfigService userConfigService; + + @PostMapping("/create") + @Operation(summary = "创建会员条件配置") + @PreAuthorize("@ss.hasPermission('hshy:user-config:create')") + public CommonResult createUserConfig(@Valid @RequestBody UserConfigSaveReqVO createReqVO) { + return success(userConfigService.createUserConfig(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员条件配置") + @PreAuthorize("@ss.hasPermission('hshy:user-config:update')") + public CommonResult updateUserConfig(@Valid @RequestBody UserConfigSaveReqVO updateReqVO) { + userConfigService.updateUserConfig(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员条件配置") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:user-config:delete')") + public CommonResult deleteUserConfig(@RequestParam("id") Integer id) { + userConfigService.deleteUserConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员条件配置") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-config:query')") + public CommonResult getUserConfig(@RequestParam("id") Integer id) { + UserConfigDO userConfig = userConfigService.getUserConfig(id); + return success(BeanUtils.toBean(userConfig, UserConfigRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得会员条件配置分页") + @PreAuthorize("@ss.hasPermission('hshy:user-config:query')") + public CommonResult> getUserConfigPage(@Valid UserConfigPageReqVO pageReqVO) { + PageResult pageResult = userConfigService.getUserConfigPage(pageReqVO); + return success(BeanUtils.toBean(pageResult, UserConfigRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出会员条件配置 Excel") + @PreAuthorize("@ss.hasPermission('hshy:user-config:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportUserConfigExcel(@Valid UserConfigPageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = userConfigService.getUserConfigPage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "会员条件配置.xls", "数据", UserConfigRespVO.class, + BeanUtils.toBean(list, UserConfigRespVO.class)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigCycleController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigCycleController.java new file mode 100644 index 000000000..393e764f8 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigCycleController.java @@ -0,0 +1,60 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigCycleRespVO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import cn.iocoder.yudao.module.hshy.service.userconfig.UserConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +@Tag(name = "管理后台 - 会员周期奖励") +@RestController +@RequestMapping("/hshy/user-config-Cycle") +@Validated +public class UserConfigCycleController { + @Resource + private UserConfigService userConfigService; + + @PostMapping("/create") + @Operation(summary = "创建会员周期奖励") + @PreAuthorize("@ss.hasPermission('hshy:user-config:create')") + public CommonResult creatCycle(@Valid @RequestBody UserConfigCycleRespVO createReqVO) { + return success(userConfigService.creatCycle(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员周期奖励") + @PreAuthorize("@ss.hasPermission('hshy:user-config:update')") + public CommonResult updateCycle(@Valid @RequestBody UserConfigCycleRespVO updateReqVO) { + userConfigService.updateCycle(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员周期奖励") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:user-config:delete')") + public CommonResult deleteUserConfig(@RequestParam("id") Integer id) { + userConfigService.deleteUserConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员周期奖励") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-config:query')") + public CommonResult getUserConfig(@RequestParam("id") Integer id) { + UserConfigDO userConfig = userConfigService.getUserConfig(id); + return success(BeanUtils.toBean(userConfig, UserConfigCycleRespVO.class)); + } + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigDownController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigDownController.java new file mode 100644 index 000000000..29c03b7d7 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigDownController.java @@ -0,0 +1,60 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigFreeRespVO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import cn.iocoder.yudao.module.hshy.service.userconfig.UserConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 会员降级") +@RestController +@RequestMapping("/hshy/user-config-Down") +@Validated +public class UserConfigDownController { + @Resource + private UserConfigService userConfigService; + + @PostMapping("/create") + @Operation(summary = "创建会员包邮") + @PreAuthorize("@ss.hasPermission('hshy:user-config:create')") + public CommonResult creatFree(@Valid @RequestBody UserConfigFreeRespVO createReqVO) { + return success(userConfigService.creatFree(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员包邮") + @PreAuthorize("@ss.hasPermission('hshy:user-config:update')") + public CommonResult updateFree(@Valid @RequestBody UserConfigFreeRespVO updateReqVO) { + userConfigService.updateFree(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员包邮") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:user-config:delete')") + public CommonResult deleteUserConfig(@RequestParam("id") Integer id) { + userConfigService.deleteUserConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员包邮") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-config:query')") + public CommonResult getUserConfig(@RequestParam("id") Integer id) { + UserConfigDO userConfig = userConfigService.getUserConfig(id); + return success(BeanUtils.toBean(userConfig, UserConfigFreeRespVO.class)); + } +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigFreeController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigFreeController.java new file mode 100644 index 000000000..5a33ead20 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigFreeController.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigFreeRespVO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import cn.iocoder.yudao.module.hshy.service.userconfig.UserConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 会员包邮") +@RestController +@RequestMapping("/hshy/user-config-Free") +@Validated +public class UserConfigFreeController { + @Resource + private UserConfigService userConfigService; + + @PostMapping("/create") + @Operation(summary = "创建会员包邮") + @PreAuthorize("@ss.hasPermission('hshy:user-config:create')") + public CommonResult creatFree(@Valid @RequestBody UserConfigFreeRespVO createReqVO) { + return success(userConfigService.creatFree(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员包邮") + @PreAuthorize("@ss.hasPermission('hshy:user-config:update')") + public CommonResult updateFree(@Valid @RequestBody UserConfigFreeRespVO updateReqVO) { + userConfigService.updateFree(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员包邮") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:user-config:delete')") + public CommonResult deleteUserConfig(@RequestParam("id") Integer id) { + userConfigService.deleteUserConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员包邮") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-config:query')") + public CommonResult getUserConfig(@RequestParam("id") Integer id) { + UserConfigDO userConfig = userConfigService.getUserConfig(id); + return success(BeanUtils.toBean(userConfig, UserConfigFreeRespVO.class)); + } + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigGradeController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigGradeController.java new file mode 100644 index 000000000..80ea36d62 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigGradeController.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig; + + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigGradeRespVO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import cn.iocoder.yudao.module.hshy.service.userconfig.UserConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 会员升级") +@RestController +@RequestMapping("/hshy/user-config-Grade") +@Validated +public class UserConfigGradeController { + @Resource + private UserConfigService userConfigService; + + @PostMapping("/create") + @Operation(summary = "创建会员升级") + @PreAuthorize("@ss.hasPermission('hshy:user-config:create')") + public CommonResult creatGrade(@Valid @RequestBody UserConfigGradeRespVO createReqVO) { + return success(userConfigService.creatGrade(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员升级") + @PreAuthorize("@ss.hasPermission('hshy:user-config:update')") + public CommonResult updateGrade(@Valid @RequestBody UserConfigGradeRespVO updateReqVO) { + userConfigService.updateGrade(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员升级") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:user-config:delete')") + public CommonResult deleteUserConfig(@RequestParam("id") Integer id) { + userConfigService.deleteUserConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员升级") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-config:query')") + public CommonResult getUserConfig(@RequestParam("id") Integer id) { + UserConfigDO userConfig = userConfigService.getUserConfig(id); + return success(BeanUtils.toBean(userConfig, UserConfigGradeRespVO.class)); + } +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigLevelController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigLevelController.java new file mode 100644 index 000000000..5783ffc47 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigLevelController.java @@ -0,0 +1,61 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigOnlyRespVO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import cn.iocoder.yudao.module.hshy.service.userconfig.UserConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 会员升级礼包") +@RestController +@RequestMapping("/hshy/user-config-Level") +@Validated +public class UserConfigLevelController { + @Resource + private UserConfigService userConfigService; + + @PostMapping("/create") + @Operation(summary = "创建会员专享客服") + @PreAuthorize("@ss.hasPermission('hshy:user-config:create')") + public CommonResult creatOnly(@Valid @RequestBody UserConfigOnlyRespVO createReqVO) { + return success(userConfigService.creatOnly(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员专享客服") + @PreAuthorize("@ss.hasPermission('hshy:user-config:update')") + public CommonResult updateOnly(@Valid @RequestBody UserConfigOnlyRespVO updateReqVO) { + userConfigService.updateOnly(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员专享客服") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:user-config:delete')") + public CommonResult deleteUserConfig(@RequestParam("id") Integer id) { + userConfigService.deleteUserConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员专享客服") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-config:query')") + public CommonResult getUserConfig(@RequestParam("id") Integer id) { + UserConfigDO userConfig = userConfigService.getUserConfig(id); + return success(BeanUtils.toBean(userConfig, UserConfigOnlyRespVO.class)); + } + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigOnlyController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigOnlyController.java new file mode 100644 index 000000000..71fc8b3f7 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigOnlyController.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigOnlyRespVO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import cn.iocoder.yudao.module.hshy.service.userconfig.UserConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 会员专享客服") +@RestController +@RequestMapping("/hshy/user-config-Only") +@Validated +public class UserConfigOnlyController { + @Resource + private UserConfigService userConfigService; + + @PostMapping("/create") + @Operation(summary = "创建会员专享客服") + @PreAuthorize("@ss.hasPermission('hshy:user-config:create')") + public CommonResult creatOnly(@Valid @RequestBody UserConfigOnlyRespVO createReqVO) { + return success(userConfigService.creatOnly(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员专享客服") + @PreAuthorize("@ss.hasPermission('hshy:user-config:update')") + public CommonResult updateOnly(@Valid @RequestBody UserConfigOnlyRespVO updateReqVO) { + userConfigService.updateOnly(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员专享客服") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:user-config:delete')") + public CommonResult deleteUserConfig(@RequestParam("id") Integer id) { + userConfigService.deleteUserConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员专享客服") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-config:query')") + public CommonResult getUserConfig(@RequestParam("id") Integer id) { + UserConfigDO userConfig = userConfigService.getUserConfig(id); + return success(BeanUtils.toBean(userConfig, UserConfigOnlyRespVO.class)); + } + + + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigPontsController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigPontsController.java new file mode 100644 index 000000000..7bb89d46f --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/UserConfigPontsController.java @@ -0,0 +1,74 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigPageReqVO; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigPontsRespVO; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigRespVO; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.UserConfigSaveReqVO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import cn.iocoder.yudao.module.hshy.service.userconfig.UserConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; +import java.io.IOException; +import java.util.List; + +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "管理后台 - 会员消费返积分") +@RestController +@RequestMapping("/hshy/user-config-Ponts") +@Validated +public class UserConfigPontsController { + @Resource + private UserConfigService userConfigService; + + @PostMapping("/create") + @Operation(summary = "创建会员消费返积分") + @PreAuthorize("@ss.hasPermission('hshy:user-config:create')") + public CommonResult creatPonts(@Valid @RequestBody UserConfigPontsRespVO createReqVO) { + return success(userConfigService.creatPonts(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员消费返积分") + @PreAuthorize("@ss.hasPermission('hshy:user-config:update')") + public CommonResult updatePonts(@Valid @RequestBody UserConfigPontsRespVO updateReqVO) { + userConfigService.updatePonts(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员消费返积分") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:user-config:delete')") + public CommonResult deleteUserConfig(@RequestParam("id") Integer id) { + userConfigService.deleteUserConfig(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员消费返积分") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-config:query')") + public CommonResult getUserConfig(@RequestParam("id") Integer id) { + UserConfigDO userConfig = userConfigService.getUserConfig(id); + return success(BeanUtils.toBean(userConfig, UserConfigPontsRespVO.class)); + } + + + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigBalanceRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigBalanceRespVO.java new file mode 100644 index 000000000..b027daad5 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigBalanceRespVO.java @@ -0,0 +1,82 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 会员余额 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserConfigBalanceRespVO { + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13162") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + @Schema(description = "业务类型", example = "1") + @ExcelProperty("业务类型") + private String bizType; + + @Schema(description = "业务规格", example = "1") + @ExcelProperty("业务规格") + private String proType; + + @Schema(description = "返余额比例") + @ExcelProperty("返余额比例") + private BigDecimal yBalanceRatio; + + @Schema(description = "消费余额") + @ExcelProperty("消费余额") + private Boolean yIsBalance; + + @Schema(description = "可提现余额") + @ExcelProperty("可提现余额") + private Boolean yIsFundsBalance; + + @Schema(description = "订单支付成功后") + @ExcelProperty("订单支付成功后") + private Boolean isOrderSuccessful; + + @Schema(description = "订单发货后") + @ExcelProperty("订单发货后") + private Boolean isOrderShipped; + + @Schema(description = "订单发货并已过维权期") + @ExcelProperty("订单发货并已过维权期") + private Boolean isOrderLaw; + + @Schema(description = "全部商品") + @ExcelProperty("全部商品") + private Boolean isFull; + + @Schema(description = "部分商品") + @ExcelProperty("部分商品") + private Boolean isPortion; + + @Schema(description = "部分不参与商品") + @ExcelProperty("部分不参与商品") + private Boolean isNoPortion; + + @Schema(description = "门店参与") + @ExcelProperty("门店参与") + private Boolean isStore; + + @Schema(description = "门店不参与") + @ExcelProperty("门店不参与") + private Boolean isNoStore; + + @Schema(description = "商品spuid", example = "15740") + @ExcelProperty("商品spuid") + private Long spuId; + + @Schema(description = "商品skuid", example = "17464") + @ExcelProperty("商品skuid") + private Long skuId; + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigBonusRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigBonusRespVO.java new file mode 100644 index 000000000..8e834ba3d --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigBonusRespVO.java @@ -0,0 +1,65 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; + + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +@Schema(description = "管理后台 - 会员充值 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserConfigBonusRespVO { + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13162") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + @Schema(description = "业务类型", example = "1") + @ExcelProperty("业务类型") + private String bizType; + + @Schema(description = "业务规格", example = "1") + @ExcelProperty("业务规格") + private String proType; + + @Schema(description = "是否满充值奖励") + private Boolean cIsRechargeBonus; + + @Schema(description = "满充值奖励(元)") + @ExcelProperty("满充值奖励(元)") + private BigDecimal cRechargeBonus; + + @Schema(description = "积分") + @ExcelProperty("积分") + private Boolean isPoints; + + @Schema(description = "积分") + @ExcelProperty("积分") + private Integer points; + + @Schema(description = "余额") + @ExcelProperty("余额") + private Boolean isBalance; + + @Schema(description = "余额") + @ExcelProperty("余额") + private Integer balance; + + @Schema(description = "余额类型", example = "1") + @ExcelProperty("余额类型") + private String balanceType; + + @Schema(description = "优惠券") + @ExcelProperty("优惠券") + private Boolean isCoupon; + + @Schema(description = "优惠券集合") + @ExcelProperty("优惠券集合") + private String couponJson; + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigCycleRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigCycleRespVO.java new file mode 100644 index 000000000..f69e3c3f0 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigCycleRespVO.java @@ -0,0 +1,65 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; + + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 会员充值 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserConfigCycleRespVO { + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13162") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + @Schema(description = "周期奖励") + @ExcelProperty("周期奖励") + private Integer zCycle; + + @Schema(description = "积分") + @ExcelProperty("积分") + private Boolean isPoints; + + @Schema(description = "积分") + @ExcelProperty("积分") + private Integer points; + + @Schema(description = "余额") + @ExcelProperty("余额") + private Boolean isBalance; + + @Schema(description = "余额") + @ExcelProperty("余额") + private Integer balance; + + @Schema(description = "礼品卡") + @ExcelProperty("礼品卡") + private Boolean isCard; + + @Schema(description = "礼品卡集合") + @ExcelProperty("礼品卡集合") + private String cardJson; + + @Schema(description = "商品") + @ExcelProperty("商品") + private Boolean isPro; + + @Schema(description = "商品spuid", example = "15740") + @ExcelProperty("商品spuid") + private Long spuId; + + @Schema(description = "商品skuid", example = "17464") + @ExcelProperty("商品skuid") + private Long skuId; + + + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigDownRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigDownRespVO.java new file mode 100644 index 000000000..a6dd2f7e6 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigDownRespVO.java @@ -0,0 +1,104 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +@Schema(description = "管理后台 - 会员充值 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserConfigDownRespVO { + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13162") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + @Schema(description = "业务类型", example = "1") + @ExcelProperty("业务类型") + private String bizType; + + @Schema(description = "业务规格", example = "1") + @ExcelProperty("业务规格") + private String proType; + + + @Schema(description = "是否开启降级策略") + @ExcelProperty("是否开启降级策略") + private Boolean dIsStrategy; + + @Schema(description = "策略类型", example = "1") + @ExcelProperty("策略类型") + private String dStrategyType; + + @Schema(description = "降级时间") + @ExcelProperty("降级时间") + private LocalDateTime dStrategyTime; + + @Schema(description = "等级保护期", example = "15123") + @ExcelProperty("等级保护期") + private Integer dStrategyCount; + + @Schema(description = "满足以下任意条件") + @ExcelProperty("满足以下任意条件") + private Boolean dIsAnyCondition; + + @Schema(description = "满足以下任意条件天数", example = "14555") + @ExcelProperty("满足以下任意条件天数") + private Integer dAnyConditionCount; + + @Schema(description = "单笔消费") + @ExcelProperty("单笔消费") + private Boolean dIsSingle; + + @Schema(description = "消费") + @ExcelProperty("消费") + private Integer dSingle; + + @Schema(description = "累积消费") + @ExcelProperty("累积消费") + private Boolean dIsAddSingle; + + @Schema(description = "消费") + @ExcelProperty("消费") + private Integer dAddSingle; + + @Schema(description = "单笔充值") + @ExcelProperty("单笔充值") + private Boolean dIsRecharge; + + @Schema(description = "充值") + @ExcelProperty("充值") + private Integer dRecharge; + + @Schema(description = "累积充值") + @ExcelProperty("累积充值") + private Boolean dIsAddRecharge; + + @Schema(description = "充值") + @ExcelProperty("充值") + private Integer dAddRecharge; + + @Schema(description = "指定商品") + @ExcelProperty("指定商品") + private Boolean dIsPro; + + @Schema(description = "商品spuid", example = "15740") + @ExcelProperty("商品spuid") + private Long spuId; + + @Schema(description = "商品skuid", example = "17464") + @ExcelProperty("商品skuid") + private Long skuId; + + @Schema(description = "降级类型", example = "1") + @ExcelProperty("降级类型") + private Boolean dType; + + @Schema(description = "指定等级") + @ExcelProperty("指定等级") + private String dTypeLevel; +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigFreeRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigFreeRespVO.java new file mode 100644 index 000000000..e5d125566 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigFreeRespVO.java @@ -0,0 +1,70 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; + + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +@Schema(description = "管理后台 - 会员包邮 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserConfigFreeRespVO { + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13162") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + @Schema(description = "业务类型", example = "1") + @ExcelProperty("业务类型") + private String bizType; + + @Schema(description = "业务规格", example = "1") + @ExcelProperty("业务规格") + private String proType; + + + @Schema(description = "无门槛包邮") + @ExcelProperty("无门槛包邮") + private Boolean bIsFreeShipping; + + @Schema(description = "有门槛包邮") + @ExcelProperty("有门槛包邮") + private Boolean bIsNoFreeShipping; + + @Schema(description = "有门槛包邮(元)") + @ExcelProperty("有门槛包邮(元)") + private Integer bNoFreeShipping; + + @Schema(description = "全部商品") + @ExcelProperty("全部商品") + private Boolean isFull; + + @Schema(description = "部分商品") + @ExcelProperty("部分商品") + private Boolean isPortion; + + @Schema(description = "部分不参与商品") + @ExcelProperty("部分不参与商品") + private Boolean isNoPortion; + + @Schema(description = "门店参与") + @ExcelProperty("门店参与") + private Boolean isStore; + + @Schema(description = "门店不参与") + @ExcelProperty("门店不参与") + private Boolean isNoStore; + + @Schema(description = "商品spuid", example = "15740") + @ExcelProperty("商品spuid") + private Long spuId; + + @Schema(description = "商品skuid", example = "17464") + @ExcelProperty("商品skuid") + private Long skuId; +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigGradeRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigGradeRespVO.java new file mode 100644 index 000000000..55dc8ea97 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigGradeRespVO.java @@ -0,0 +1,79 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + + +@Schema(description = "管理后台 - 会员条件配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserConfigGradeRespVO { + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13162") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + @Schema(description = "业务类型", example = "1") + @ExcelProperty("业务类型") + private String bizType; + + @Schema(description = "业务规格", example = "1") + @ExcelProperty("业务规格") + private String proType; + + @Schema(description = "满足以下任意条件") + @ExcelProperty("满足以下任意条件") + private Boolean gAnyCondition; + + @Schema(description = "满足以下全部条件") + @ExcelProperty("满足以下全部条件") + private Boolean gAllCondition; + + @Schema(description = "商品spuid", example = "15740") + @ExcelProperty("商品spuid") + private Long spuId; + + @Schema(description = "商品skuid", example = "17464") + @ExcelProperty("商品skuid") + private Long skuId; + + @Schema(description = "商品") + @ExcelProperty("商品") + private Boolean isPro; + + @Schema(description = "单笔消费") + @ExcelProperty("单笔消费") + private Boolean dIsSingle; + + @Schema(description = "消费") + @ExcelProperty("消费") + private Integer dSingle; + + @Schema(description = "累积消费") + @ExcelProperty("累积消费") + private Boolean dIsAddSingle; + + @Schema(description = "消费") + @ExcelProperty("消费") + private Integer dAddSingle; + + @Schema(description = "单笔充值") + @ExcelProperty("单笔充值") + private Boolean dIsRecharge; + + @Schema(description = "充值") + @ExcelProperty("充值") + private Integer dRecharge; + + @Schema(description = "累积充值") + @ExcelProperty("累积充值") + private Boolean dIsAddRecharge; + + @Schema(description = "充值") + @ExcelProperty("充值") + private Integer dAddRecharge; +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigLevelRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigLevelRespVO.java new file mode 100644 index 000000000..9aedbb063 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigLevelRespVO.java @@ -0,0 +1,57 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; + + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 会员充值 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserConfigLevelRespVO { + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13162") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + + @Schema(description = "积分") + @ExcelProperty("积分") + private Boolean isPoints; + + @Schema(description = "积分") + @ExcelProperty("积分") + private Integer points; + + @Schema(description = "余额") + @ExcelProperty("余额") + private Boolean isBalance; + + @Schema(description = "余额") + @ExcelProperty("余额") + private Integer balance; + + @Schema(description = "礼品卡") + @ExcelProperty("礼品卡") + private Boolean isCard; + + @Schema(description = "礼品卡集合") + @ExcelProperty("礼品卡集合") + private String cardJson; + + @Schema(description = "商品") + @ExcelProperty("商品") + private Boolean isPro; + + @Schema(description = "商品spuid", example = "15740") + @ExcelProperty("商品spuid") + private Long spuId; + + @Schema(description = "商品skuid", example = "17464") + @ExcelProperty("商品skuid") + private Long skuId; + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigOnlyRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigOnlyRespVO.java new file mode 100644 index 000000000..43203e0c8 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigOnlyRespVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +@Schema(description = "管理后台 - 会员充值 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserConfigOnlyRespVO { + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13162") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + @Schema(description = "业务类型", example = "1") + @ExcelProperty("业务类型") + private String bizType; + + @Schema(description = "业务规格", example = "1") + @ExcelProperty("业务规格") + private String proType; +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigPageReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigPageReqVO.java new file mode 100644 index 000000000..60714c70e --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigPageReqVO.java @@ -0,0 +1,183 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; + +import lombok.*; +import java.util.*; +import io.swagger.v3.oas.annotations.media.Schema; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 会员条件配置分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class UserConfigPageReqVO extends PageParam { + + @Schema(description = "会员编码", example = "9045") + private Long memberUserId; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + @Schema(description = "业务类型", example = "1") + private String bizType; + + @Schema(description = "业务规格", example = "1") + private String proType; + + @Schema(description = "满足以下任意条件") + private Boolean gAnyCondition; + + @Schema(description = "满足以下全部条件") + private Boolean gAllCondition; + + @Schema(description = "是否开启降级策略") + private Boolean dIsStrategy; + + @Schema(description = "策略类型", example = "1") + private String dStrategyType; + + @Schema(description = "降级时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] dStrategyTime; + + @Schema(description = "等级保护期", example = "15123") + private Integer dStrategyCount; + + @Schema(description = "满足以下任意条件") + private Boolean dIsAnyCondition; + + @Schema(description = "满足以下任意条件天数", example = "14555") + private Integer dAnyConditionCount; + + @Schema(description = "单笔消费") + private Boolean dIsSingle; + + @Schema(description = "消费") + private Integer dSingle; + + @Schema(description = "累积消费") + private Boolean dIsAddSingle; + + @Schema(description = "消费") + private Integer dAddSingle; + + @Schema(description = "单笔充值") + private Boolean dIsRecharge; + + @Schema(description = "充值") + private Integer dRecharge; + + @Schema(description = "累积充值") + private Boolean dIsAddRecharge; + + @Schema(description = "充值") + private Integer dAddRecharge; + + @Schema(description = "指定商品") + private Boolean dIsPro; + + @Schema(description = "降级类型", example = "1") + private Boolean dType; + + @Schema(description = "指定等级") + private String dTypeLevel; + + @Schema(description = "商品折扣", example = "30326") + private BigDecimal pDiscount; + + @Schema(description = "返积分比例") + private BigDecimal jPointsRatio; + + @Schema(description = "返余额比例") + private BigDecimal yBalanceRatio; + + @Schema(description = "消费余额") + private Boolean yIsBalance; + + @Schema(description = "可提现余额") + private Boolean yIsFundsBalance; + + @Schema(description = "订单支付成功后") + private Boolean isOrderSuccessful; + + @Schema(description = "订单发货后") + private Boolean isOrderShipped; + + @Schema(description = "订单发货并已过维权期") + private Boolean isOrderLaw; + + @Schema(description = "满充值奖励(元)") + private BigDecimal cRechargeBonus; + + @Schema(description = "积分") + private Boolean isPoints; + + @Schema(description = "积分") + private Integer points; + + @Schema(description = "余额") + private Boolean isBalance; + + @Schema(description = "余额") + private Integer balance; + + @Schema(description = "余额类型", example = "1") + private String balanceType; + + @Schema(description = "优惠券") + private Boolean isCoupon; + + @Schema(description = "优惠券集合") + private String couponJson; + + @Schema(description = "无门槛包邮") + private Boolean bIsFreeShipping; + + @Schema(description = "有门槛包邮") + private Boolean bIsNoFreeShipping; + + @Schema(description = "有门槛包邮(元)") + private Integer bNoFreeShipping; + + @Schema(description = "周期奖励") + private Integer zCycle; + + @Schema(description = "礼品卡") + private Boolean isCard; + + @Schema(description = "礼品卡集合") + private String cardJson; + + @Schema(description = "全部商品") + private Boolean isFull; + + @Schema(description = "部分商品") + private Boolean isPortion; + + @Schema(description = "部分不参与商品") + private Boolean isNoPortion; + + @Schema(description = "门店参与") + private Boolean isStore; + + @Schema(description = "门店不参与") + private Boolean isNoStore; + + @Schema(description = "商品spuid", example = "15740") + private Long spuId; + + @Schema(description = "商品skuid", example = "17464") + private Long skuId; + + @Schema(description = "商品") + private Boolean isPro; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigPontsRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigPontsRespVO.java new file mode 100644 index 000000000..a411022a4 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigPontsRespVO.java @@ -0,0 +1,62 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 会员消费积分 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserConfigPontsRespVO { + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13162") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + @Schema(description = "业务类型", example = "1") + @ExcelProperty("业务类型") + private String bizType; + + @Schema(description = "业务规格", example = "1") + @ExcelProperty("业务规格") + private String proType; + + @Schema(description = "返积分比例") + @ExcelProperty("返积分比例") + private BigDecimal jPointsRatio; + + @Schema(description = "全部商品") + @ExcelProperty("全部商品") + private Boolean isFull; + + @Schema(description = "部分商品") + @ExcelProperty("部分商品") + private Boolean isPortion; + + @Schema(description = "部分不参与商品") + @ExcelProperty("部分不参与商品") + private Boolean isNoPortion; + + @Schema(description = "门店参与") + @ExcelProperty("门店参与") + private Boolean isStore; + + @Schema(description = "门店不参与") + @ExcelProperty("门店不参与") + private Boolean isNoStore; + + @Schema(description = "商品spuid", example = "15740") + @ExcelProperty("商品spuid") + private Long spuId; + + @Schema(description = "商品skuid", example = "17464") + @ExcelProperty("商品skuid") + private Long skuId; + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigRespVO.java new file mode 100644 index 000000000..028deb6f7 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigRespVO.java @@ -0,0 +1,235 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; +import com.alibaba.excel.annotation.*; + +@Schema(description = "管理后台 - 会员条件配置 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserConfigRespVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13162") + @ExcelProperty("编号") + private Integer id; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + @Schema(description = "会员编码", example = "9045") + @ExcelProperty("会员编码") + private Long memberUserId; + + @Schema(description = "业务类型", example = "1") + @ExcelProperty("业务类型") + private String bizType; + + @Schema(description = "业务规格", example = "1") + @ExcelProperty("业务规格") + private String proType; + + @Schema(description = "满足以下任意条件") + @ExcelProperty("满足以下任意条件") + private Boolean gAnyCondition; + + @Schema(description = "满足以下全部条件") + @ExcelProperty("满足以下全部条件") + private Boolean gAllCondition; + + @Schema(description = "是否开启降级策略") + @ExcelProperty("是否开启降级策略") + private Boolean dIsStrategy; + + @Schema(description = "策略类型", example = "1") + @ExcelProperty("策略类型") + private String dStrategyType; + + @Schema(description = "降级时间") + @ExcelProperty("降级时间") + private LocalDateTime dStrategyTime; + + @Schema(description = "等级保护期", example = "15123") + @ExcelProperty("等级保护期") + private Integer dStrategyCount; + + @Schema(description = "满足以下任意条件") + @ExcelProperty("满足以下任意条件") + private Boolean dIsAnyCondition; + + @Schema(description = "满足以下任意条件天数", example = "14555") + @ExcelProperty("满足以下任意条件天数") + private Integer dAnyConditionCount; + + @Schema(description = "单笔消费") + @ExcelProperty("单笔消费") + private Boolean dIsSingle; + + @Schema(description = "消费") + @ExcelProperty("消费") + private Integer dSingle; + + @Schema(description = "累积消费") + @ExcelProperty("累积消费") + private Boolean dIsAddSingle; + + @Schema(description = "消费") + @ExcelProperty("消费") + private Integer dAddSingle; + + @Schema(description = "单笔充值") + @ExcelProperty("单笔充值") + private Boolean dIsRecharge; + + @Schema(description = "充值") + @ExcelProperty("充值") + private Integer dRecharge; + + @Schema(description = "累积充值") + @ExcelProperty("累积充值") + private Boolean dIsAddRecharge; + + @Schema(description = "充值") + @ExcelProperty("充值") + private Integer dAddRecharge; + + @Schema(description = "指定商品") + @ExcelProperty("指定商品") + private Boolean dIsPro; + + @Schema(description = "降级类型", example = "1") + @ExcelProperty("降级类型") + private Boolean dType; + + @Schema(description = "指定等级") + @ExcelProperty("指定等级") + private String dTypeLevel; + + @Schema(description = "商品折扣", example = "30326") + @ExcelProperty("商品折扣") + private BigDecimal pDiscount; + + @Schema(description = "返积分比例") + @ExcelProperty("返积分比例") + private BigDecimal jPointsRatio; + + @Schema(description = "返余额比例") + @ExcelProperty("返余额比例") + private BigDecimal yBalanceRatio; + + @Schema(description = "消费余额") + @ExcelProperty("消费余额") + private Boolean yIsBalance; + + @Schema(description = "可提现余额") + @ExcelProperty("可提现余额") + private Boolean yIsFundsBalance; + + @Schema(description = "订单支付成功后") + @ExcelProperty("订单支付成功后") + private Boolean isOrderSuccessful; + + @Schema(description = "订单发货后") + @ExcelProperty("订单发货后") + private Boolean isOrderShipped; + + @Schema(description = "订单发货并已过维权期") + @ExcelProperty("订单发货并已过维权期") + private Boolean isOrderLaw; + + @Schema(description = "满充值奖励(元)") + @ExcelProperty("满充值奖励(元)") + private BigDecimal cRechargeBonus; + + @Schema(description = "积分") + @ExcelProperty("积分") + private Boolean isPoints; + + @Schema(description = "积分") + @ExcelProperty("积分") + private Integer points; + + @Schema(description = "余额") + @ExcelProperty("余额") + private Boolean isBalance; + + @Schema(description = "余额") + @ExcelProperty("余额") + private Integer balance; + + @Schema(description = "余额类型", example = "1") + @ExcelProperty("余额类型") + private String balanceType; + + @Schema(description = "优惠券") + @ExcelProperty("优惠券") + private Boolean isCoupon; + + @Schema(description = "优惠券集合") + @ExcelProperty("优惠券集合") + private String couponJson; + + @Schema(description = "无门槛包邮") + @ExcelProperty("无门槛包邮") + private Boolean bIsFreeShipping; + + @Schema(description = "有门槛包邮") + @ExcelProperty("有门槛包邮") + private Boolean bIsNoFreeShipping; + + @Schema(description = "有门槛包邮(元)") + @ExcelProperty("有门槛包邮(元)") + private Integer bNoFreeShipping; + + @Schema(description = "周期奖励") + @ExcelProperty("周期奖励") + private Integer zCycle; + + @Schema(description = "礼品卡") + @ExcelProperty("礼品卡") + private Boolean isCard; + + @Schema(description = "礼品卡集合") + @ExcelProperty("礼品卡集合") + private String cardJson; + + @Schema(description = "全部商品") + @ExcelProperty("全部商品") + private Boolean isFull; + + @Schema(description = "部分商品") + @ExcelProperty("部分商品") + private Boolean isPortion; + + @Schema(description = "部分不参与商品") + @ExcelProperty("部分不参与商品") + private Boolean isNoPortion; + + @Schema(description = "门店参与") + @ExcelProperty("门店参与") + private Boolean isStore; + + @Schema(description = "门店不参与") + @ExcelProperty("门店不参与") + private Boolean isNoStore; + + @Schema(description = "商品spuid", example = "15740") + @ExcelProperty("商品spuid") + private Long spuId; + + @Schema(description = "商品skuid", example = "17464") + @ExcelProperty("商品skuid") + private Long skuId; + + @Schema(description = "商品") + @ExcelProperty("商品") + private Boolean isPro; + + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) + @ExcelProperty("创建时间") + private LocalDateTime createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigSaveReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigSaveReqVO.java new file mode 100644 index 000000000..82624d381 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/admin/userconfig/vo/UserConfigSaveReqVO.java @@ -0,0 +1,176 @@ +package cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.*; +import java.util.*; +import java.math.BigDecimal; +import org.springframework.format.annotation.DateTimeFormat; +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 会员条件配置新增/修改 Request VO") +@Data +public class UserConfigSaveReqVO { + + @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "13162") + private Integer id; + + @Schema(description = "会员等级编号", example = "9045") + private Long levelId; + + @Schema(description = "会员编码", example = "9045") + private Long memberUserId; + + @Schema(description = "业务类型", example = "1") + private String bizType; + + @Schema(description = "业务规格", example = "1") + private String proType; + + @Schema(description = "满足以下任意条件") + private Boolean gAnyCondition; + + @Schema(description = "满足以下全部条件") + private Boolean gAllCondition; + + @Schema(description = "是否开启降级策略") + private Boolean dIsStrategy; + + @Schema(description = "策略类型", example = "1") + private String dStrategyType; + + @Schema(description = "降级时间") + private LocalDateTime dStrategyTime; + + @Schema(description = "等级保护期", example = "15123") + private Integer dStrategyCount; + + @Schema(description = "满足以下任意条件") + private Boolean dIsAnyCondition; + + @Schema(description = "满足以下任意条件天数", example = "14555") + private Integer dAnyConditionCount; + + @Schema(description = "单笔消费") + private Boolean dIsSingle; + + @Schema(description = "消费") + private Integer dSingle; + + @Schema(description = "累积消费") + private Boolean dIsAddSingle; + + @Schema(description = "消费") + private Integer dAddSingle; + + @Schema(description = "单笔充值") + private Boolean dIsRecharge; + + @Schema(description = "充值") + private Integer dRecharge; + + @Schema(description = "累积充值") + private Boolean dIsAddRecharge; + + @Schema(description = "充值") + private Integer dAddRecharge; + + @Schema(description = "指定商品") + private Boolean dIsPro; + + @Schema(description = "降级类型", example = "1") + private Boolean dType; + + @Schema(description = "指定等级") + private String dTypeLevel; + + @Schema(description = "商品折扣", example = "30326") + private BigDecimal pDiscount; + + @Schema(description = "返积分比例") + private BigDecimal jPointsRatio; + + @Schema(description = "返余额比例") + private BigDecimal yBalanceRatio; + + @Schema(description = "消费余额") + private Boolean yIsBalance; + + @Schema(description = "可提现余额") + private Boolean yIsFundsBalance; + + @Schema(description = "订单支付成功后") + private Boolean isOrderSuccessful; + + @Schema(description = "订单发货后") + private Boolean isOrderShipped; + + @Schema(description = "订单发货并已过维权期") + private Boolean isOrderLaw; + + @Schema(description = "满充值奖励(元)") + private BigDecimal cRechargeBonus; + + @Schema(description = "积分") + private Boolean isPoints; + + @Schema(description = "积分") + private Integer points; + + @Schema(description = "余额") + private Boolean isBalance; + + @Schema(description = "余额") + private Integer balance; + + @Schema(description = "余额类型", example = "1") + private String balanceType; + + @Schema(description = "优惠券") + private Boolean isCoupon; + + @Schema(description = "优惠券集合") + private String couponJson; + + @Schema(description = "无门槛包邮") + private Boolean bIsFreeShipping; + + @Schema(description = "有门槛包邮") + private Boolean bIsNoFreeShipping; + + @Schema(description = "有门槛包邮(元)") + private Integer bNoFreeShipping; + + @Schema(description = "周期奖励") + private Integer zCycle; + + @Schema(description = "礼品卡") + private Boolean isCard; + + @Schema(description = "礼品卡集合") + private String cardJson; + + @Schema(description = "全部商品") + private Boolean isFull; + + @Schema(description = "部分商品") + private Boolean isPortion; + + @Schema(description = "部分不参与商品") + private Boolean isNoPortion; + + @Schema(description = "门店参与") + private Boolean isStore; + + @Schema(description = "门店不参与") + private Boolean isNoStore; + + @Schema(description = "商品spuid", example = "15740") + private Long spuId; + + @Schema(description = "商品skuid", example = "17464") + private Long skuId; + + @Schema(description = "商品") + private Boolean isPro; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/pointexchange/vo/AppPointExchangeController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/pointexchange/vo/AppPointExchangeController.java new file mode 100644 index 000000000..56ecb655f --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/pointexchange/vo/AppPointExchangeController.java @@ -0,0 +1,96 @@ +package cn.iocoder.yudao.module.hshy.controller.app.pointexchange.vo; + +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import org.springframework.security.access.prepost.PreAuthorize; +import io.swagger.v3.oas.annotations.tags.Tag; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.Operation; + + +import java.util.*; +import java.io.IOException; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; + +import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog; +import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*; + +import cn.iocoder.yudao.module.hshy.controller.admin.pointexchange.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointexchange.PointExchangeDO; +import cn.iocoder.yudao.module.hshy.service.pointexchange.PointExchangeService; + +import jakarta.annotation.Resource; +import jakarta.servlet.http.HttpServletResponse; +import jakarta.validation.Valid; + +@Tag(name = "管理后台 - 会员积分兑换") +@RestController +@RequestMapping("/hshy/point-exchange") +@Validated +public class AppPointExchangeController { + + @Resource + private PointExchangeService pointExchangeService; + + @PostMapping("/create") + @Operation(summary = "创建会员积分兑换") + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:create')") + public CommonResult createPointExchange(@Valid @RequestBody PointExchangeSaveReqVO createReqVO) { + return success(pointExchangeService.createPointExchange(createReqVO)); + } + + @PutMapping("/update") + @Operation(summary = "更新会员积分兑换") + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:update')") + public CommonResult updatePointExchange(@Valid @RequestBody PointExchangeSaveReqVO updateReqVO) { + pointExchangeService.updatePointExchange(updateReqVO); + return success(true); + } + + @DeleteMapping("/delete") + @Operation(summary = "删除会员积分兑换") + @Parameter(name = "id", description = "编号", required = true) + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:delete')") + public CommonResult deletePointExchange(@RequestParam("id") Integer id) { + pointExchangeService.deletePointExchange(id); + return success(true); + } + + @GetMapping("/get") + @Operation(summary = "获得会员积分兑换") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:query')") + public CommonResult getPointExchange(@RequestParam("id") Integer id) { + PointExchangeDO pointExchange = pointExchangeService.getPointExchange(id); + return success(BeanUtils.toBean(pointExchange, PointExchangeRespVO.class)); + } + + @GetMapping("/page") + @Operation(summary = "获得会员积分兑换分页") + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:query')") + public CommonResult> getPointExchangePage(@Valid PointExchangePageReqVO pageReqVO) { + PageResult pageResult = pointExchangeService.getPointExchangePage(pageReqVO); + return success(BeanUtils.toBean(pageResult, PointExchangeRespVO.class)); + } + + @GetMapping("/export-excel") + @Operation(summary = "导出会员积分兑换 Excel") + @PreAuthorize("@ss.hasPermission('hshy:point-exchange:export')") + @ApiAccessLog(operateType = EXPORT) + public void exportPointExchangeExcel(@Valid PointExchangePageReqVO pageReqVO, + HttpServletResponse response) throws IOException { + pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE); + List list = pointExchangeService.getPointExchangePage(pageReqVO).getList(); + // 导出 Excel + ExcelUtils.write(response, "会员积分兑换.xls", "数据", PointExchangeRespVO.class, + BeanUtils.toBean(list, PointExchangeRespVO.class)); + } + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/AppUserBlackController.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/AppUserBlackController.java new file mode 100644 index 000000000..b2323b624 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/AppUserBlackController.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.hshy.controller.app.userblack; + +import cn.iocoder.yudao.framework.common.pojo.CommonResult; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.controller.app.userblack.vo.UserBlackPageReqVO; +import cn.iocoder.yudao.module.hshy.controller.app.userblack.vo.UserBlackRespVO; +import cn.iocoder.yudao.module.hshy.controller.app.userblack.vo.UserBlackSaveReqVO; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userblack.UserBlackDO; +import cn.iocoder.yudao.module.hshy.service.userblack.UserBlackService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import jakarta.annotation.Resource; +import jakarta.validation.Valid; + +import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; + +@Tag(name = "APP后台 - 会员黑名单") +@RestController +@RequestMapping("/hshy/user-black") +@Validated +public class AppUserBlackController { + + @Resource + private UserBlackService userBlackService; + + @GetMapping("/get") + @Operation(summary = "APP获得会员黑名单") + @Parameter(name = "id", description = "编号", required = true, example = "1024") + @PreAuthorize("@ss.hasPermission('hshy:user-black:query')") + public CommonResult getUserBlack(@RequestParam("id") Integer id) { + return success(userBlackService.getUserBlack(id)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/vo/UserBlackPageReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/vo/UserBlackPageReqVO.java new file mode 100644 index 000000000..417907415 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/vo/UserBlackPageReqVO.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.hshy.controller.app.userblack.vo; + +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.ToString; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND; + +@Schema(description = "管理后台 - 会员黑名单分页 Request VO") +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +public class UserBlackPageReqVO extends PageParam { + + @Schema(description = "会员编号", example = "1034") + private Long memberUserId; + + @Schema(description = "创建时间") + @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) + private LocalDateTime[] createTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/vo/UserBlackRespVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/vo/UserBlackRespVO.java new file mode 100644 index 000000000..4b6ebf9cd --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/vo/UserBlackRespVO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.hshy.controller.app.userblack.vo; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.time.LocalDateTime; + +@Schema(description = "管理后台 - 会员黑名单 Response VO") +@Data +@ExcelIgnoreUnannotated +public class UserBlackRespVO { + @Schema(description = "会员编号", example = "1034") + @ExcelProperty("会员编号") + private Long memberUserId; +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/vo/UserBlackSaveReqVO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/vo/UserBlackSaveReqVO.java new file mode 100644 index 000000000..9b71cbcda --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/controller/app/userblack/vo/UserBlackSaveReqVO.java @@ -0,0 +1,16 @@ +package cn.iocoder.yudao.module.hshy.controller.app.userblack.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.util.List; + +@Schema(description = "管理后台 - 会员黑名单新增/修改 Request VO") +@Data +public class UserBlackSaveReqVO { + + @Schema(description = "会员编号", example = "8642") + private List memberUserIds; + + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/convert/SnowflakeIdWorker.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/convert/SnowflakeIdWorker.java new file mode 100644 index 000000000..e46ebee4f --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/convert/SnowflakeIdWorker.java @@ -0,0 +1,103 @@ +package cn.iocoder.yudao.module.hshy.convert; + +public class SnowflakeIdWorker { + + // 开始时间戳(毫秒级) + private final long twepoch = 1288834974657L; + + // 机器ID所占的位数 + private final long workerIdBits = 10L; + + // 数据中心ID所占的位数 + private final long datacenterIdBits = 10L; + + // 支持的最大机器ID,结果是1023 + private final long maxWorkerId = -1L ^ (-1L << workerIdBits); + + // 支持的最大数据中心ID,结果是1023 + private final long maxDatacenterId = -1L ^ (-1L << datacenterIdBits); + + // 序列号所占的位数 + private final long sequenceBits = 12L; + + // 机器ID左移12位 + private final long workerIdShift = sequenceBits; + + // 数据中心ID左移22位 + private final long datacenterIdShift = sequenceBits + workerIdBits; + + // 时间戳左移32位 + private final long timestampLeftShift = sequenceBits + workerIdBits + datacenterIdBits; + + // 序列号掩码 + private final long sequenceMask = -1L ^ (-1L << sequenceBits); + + // 上次生成ID的时间戳 + private long lastTimestamp = -1L; + + // 机器ID + private long workerId; + + // 数据中心ID + private long datacenterId; + + // 序列号 + private long sequence = 0L; + + // 构造函数 + public SnowflakeIdWorker(long workerId, long datacenterId) { + if (workerId > maxWorkerId || workerId < 0) { + throw new IllegalArgumentException(String.format("worker Id can't be greater than %d or less than 0", maxWorkerId)); + } + if (datacenterId > maxDatacenterId || datacenterId < 0) { + throw new IllegalArgumentException(String.format("datacenter Id can't be greater than %d or less than 0", maxDatacenterId)); + } + this.workerId = workerId; + this.datacenterId = datacenterId; + } + + // 获取下一个ID + public synchronized long nextId() { + long timestamp = timeGen(); + + if (timestamp < lastTimestamp) { + throw new RuntimeException(String.format("Clock moved backwards. Refusing to generate id for %d milliseconds", lastTimestamp - timestamp)); + } + + if (lastTimestamp == timestamp) { + sequence = (sequence + 1) & sequenceMask; + if (sequence == 0) { + timestamp = tilNextMillis(lastTimestamp); + } + } else { + sequence = 0L; + } + + lastTimestamp = timestamp; + + return ((timestamp - twepoch) << timestampLeftShift) | (datacenterId << datacenterIdShift) | (workerId << workerIdShift) | sequence; + } + + // 阻塞到下一个毫秒,直到获得新的时间戳 + private long tilNextMillis(long lastTimestamp) { + long timestamp = timeGen(); + while (timestamp <= lastTimestamp) { + timestamp = timeGen(); + } + return timestamp; + } + + // 获取当前时间戳 + private long timeGen() { + return System.currentTimeMillis(); + } + + // 测试 +// public static void main(String[] args) { +// +// for (int i = 0; i < 100; i++) { +// System.out.println(idWorker.nextId()); +// } +// } +} + diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/extend/ExtendDO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/extend/ExtendDO.java new file mode 100644 index 000000000..1f10c219a --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/extend/ExtendDO.java @@ -0,0 +1,64 @@ +package cn.iocoder.yudao.module.hshy.dal.dataobject.extend; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 商品扩展 DO + * + * @author 超级管理员 + */ +@TableName("product_extend") +@KeySequence("product_extend_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ExtendDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Integer id; + /** + * 是否是推广商品(0否 1是) + */ + private Integer isPromotion; + /** + * 是否是指定商品(0否 1是) + */ + private Integer isAppoint; + /** + * 是否是特殊商品(0否 1是) + */ + private Integer isSpecial; + /** + * 状态(0正常 1停用) + */ + private Integer status; + /** + * 说明 + */ + private String remark; + /** + * 商品 SPU 编号 + */ + private Long spuId; + /** + * 商品 SKU 编号 + */ + private Long skuId; + /** + * 删除时间 + */ + private LocalDateTime deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointcongeal/PointCongealDO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointcongeal/PointCongealDO.java new file mode 100644 index 000000000..b2f7cd23f --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointcongeal/PointCongealDO.java @@ -0,0 +1,51 @@ +package cn.iocoder.yudao.module.hshy.dal.dataobject.pointcongeal; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 用户积分金额冻结 DO + * + * @author 超级管理员 + */ +@TableName("member_point_congeal") +@KeySequence("member_point_congeal_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PointCongealDO extends BaseDO { + + /** + * 自增主键 + */ + @TableId + private Integer id; + /** + * 会员编码 + */ + private Long memberUserId; + /** + * 用户积分主键 + */ + private Long pointCongealId; + /** + * 冻结金额 + */ + private Integer amount; + /** + * 冻结积分 + */ + private Integer point; + /** + * 描述 + */ + private String description; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointexchange/PointExchangeDO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointexchange/PointExchangeDO.java new file mode 100644 index 000000000..027070a49 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointexchange/PointExchangeDO.java @@ -0,0 +1,101 @@ +package cn.iocoder.yudao.module.hshy.dal.dataobject.pointexchange; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 会员积分兑换 DO + * + * @author 超级管理员 + */ +@TableName("member_point_exchange") +@KeySequence("member_point_exchange_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PointExchangeDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Integer id; + /** + * 会员Id + */ + private Long memberUserId; + /** + * 会员类型 + */ + private String userType; + /** + * 业务类型(余额,商品,其他) + * + * 枚举 {@link TODO member_point_exchange_type 对应的类} + */ + private String bizType; + /** + * 规则明细 + */ + private String jsonRule; + /** + * 余额.积分 + */ + private Integer balance; + /** + * 累积支出 + */ + private Integer totalExpense; + /** + * 累积充值 + */ + private Integer totalRecharge; + /** + * 状态(0正常 1停用) + */ + private Integer status; + /** + * 说明 + */ + private String remark; + /** + * 审核状态 + * + * 枚举 {@link TODO member_point_exchange_audit_type 对应的类} + */ + private String auditStatus; + /** + * 审核人 + */ + private String audit; + /** + * 审核时间 + */ + private LocalDateTime auditTime; + /** + * 审核备注 + */ + private String auditNotes; + /** + * 商品 SPU 编号 + */ + private Long spuId; + /** + * 商品 SKU 编号 + */ + private Long skuId; + /** + * 删除时间 + */ + private LocalDateTime deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointrule/PointRuleDO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointrule/PointRuleDO.java new file mode 100644 index 000000000..2311baf10 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointrule/PointRuleDO.java @@ -0,0 +1,52 @@ +package cn.iocoder.yudao.module.hshy.dal.dataobject.pointrule; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 规则 DO + * + * @author 唐 + */ +@TableName("member_point_rule") +@KeySequence("member_point_rule_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PointRuleDO extends BaseDO { + + /** + * 主键 + */ + @TableId + private Integer id; + /** + * 类型(天数,时间,条款,区间,升级,降级) + */ + private String type; + /** + * 名称 + */ + private String name; + /** + * 状态(0正常 1停用) + */ + private Integer status; + /** + * 说明 + */ + private String remark; + /** + * 删除时间 + */ + private LocalDateTime deletedTime; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointruleitem/PointRuleItemDO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointruleitem/PointRuleItemDO.java new file mode 100644 index 000000000..49c35ff5d --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/pointruleitem/PointRuleItemDO.java @@ -0,0 +1,71 @@ +package cn.iocoder.yudao.module.hshy.dal.dataobject.pointruleitem; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 规则明细 DO + * + * @author 唐 + */ +@TableName("member_point_rule_item") +@KeySequence("member_point_rule_item_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class PointRuleItemDO extends BaseDO { + + /** + * 编码 + */ + @TableId + private Integer id; + /** + * 编码 + */ + private Long code; + /** + * 规则类型 + */ + private String type; + /** + * 标签 + */ + private String label; + /** + * 开始键值 + */ + private String starValue; + /** + * 结束键值 + */ + private String endValue; + /** + * 排序 + */ + private Integer sort; + /** + * 状态(0正常 1停用) + */ + private Integer status; + /** + * 颜色类型 + */ + private String colorType; + /** + * css 样式 + */ + private String cssClass; + /** + * 备注 + */ + private String remark; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/userblack/UserBlackDO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/userblack/UserBlackDO.java new file mode 100644 index 000000000..fa062da1b --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/userblack/UserBlackDO.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.hshy.dal.dataobject.userblack; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 会员黑名单 DO + * + * @author 芋道源码 + */ +@TableName("member_user_black_list") +@KeySequence("member_user_black_list_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserBlackDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Integer id; + /** + * 会员编号 + */ + private Long memberUserId; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/userconfig/UserConfigDO.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/userconfig/UserConfigDO.java new file mode 100644 index 000000000..fbb7c66a1 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/dataobject/userconfig/UserConfigDO.java @@ -0,0 +1,256 @@ +package cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig; + +import lombok.*; +import java.util.*; +import java.time.LocalDateTime; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.time.LocalDateTime; +import com.baomidou.mybatisplus.annotation.*; +import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; + +/** + * 会员条件配置 DO + * + * @author 超级管理员 + */ +@TableName("member_user_config") +@KeySequence("member_user_config_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。 +@Data +@EqualsAndHashCode(callSuper = true) +@ToString(callSuper = true) +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class UserConfigDO extends BaseDO { + + /** + * 编号 + */ + @TableId + private Integer id; + + /** + * 会员等级编号 + */ + private Long levelId; + + /** + * 会员编码 + */ + private Long memberUserId; + /** + * 业务类型 + */ + private String bizType; + /** + * 业务规格 + */ + private String proType; + /** + * 满足以下任意条件 + */ + private Boolean gAnyCondition; + /** + * 满足以下全部条件 + */ + private Boolean gAllCondition; + /** + * 是否开启降级策略 + */ + private Boolean dIsStrategy; + /** + * 策略类型 + */ + private String dStrategyType; + /** + * 降级时间 + */ + private LocalDateTime dStrategyTime; + /** + * 等级保护期 + */ + private Integer dStrategyCount; + /** + * 满足以下任意条件 + */ + private Boolean dIsAnyCondition; + /** + * 满足以下任意条件天数 + */ + private Integer dAnyConditionCount; + /** + * 单笔消费 + */ + private Boolean dIsSingle; + /** + * 消费 + */ + private Integer dSingle; + /** + * 累积消费 + */ + private Boolean dIsAddSingle; + /** + * 消费 + */ + private Integer dAddSingle; + /** + * 单笔充值 + */ + private Boolean dIsRecharge; + /** + * 充值 + */ + private Integer dRecharge; + /** + * 累积充值 + */ + private Boolean dIsAddRecharge; + /** + * 充值 + */ + private Integer dAddRecharge; + /** + * 指定商品 + */ + private Boolean dIsPro; + /** + * 降级类型 + */ + private Boolean dType; + /** + * 指定等级 + */ + private String dTypeLevel; + /** + * 商品折扣 + */ + private BigDecimal pDiscount; + /** + * 返积分比例 + */ + private BigDecimal jPointsRatio; + /** + * 返余额比例 + */ + private BigDecimal yBalanceRatio; + /** + * 消费余额 + */ + private Boolean yIsBalance; + /** + * 可提现余额 + */ + private Boolean yIsFundsBalance; + /** + * 订单支付成功后 + */ + private Boolean isOrderSuccessful; + /** + * 订单发货后 + */ + private Boolean isOrderShipped; + /** + * 订单发货并已过维权期 + */ + private Boolean isOrderLaw; + + /** + * 满充值奖励 + */ + private Boolean cIsRechargeBonus; + + /** + * 满充值奖励(元) + */ + private BigDecimal cRechargeBonus; + /** + * 积分 + */ + private Boolean isPoints; + /** + * 积分 + */ + private Integer points; + /** + * 余额 + */ + private Boolean isBalance; + /** + * 余额 + */ + private Integer balance; + /** + * 余额类型 + */ + private String balanceType; + /** + * 优惠券 + */ + private Boolean isCoupon; + /** + * 优惠券集合 + */ + private String couponJson; + /** + * 无门槛包邮 + */ + private Boolean bIsFreeShipping; + /** + * 有门槛包邮 + */ + private Boolean bIsNoFreeShipping; + /** + * 有门槛包邮(元) + */ + private Integer bNoFreeShipping; + /** + * 周期奖励 + */ + private Integer zCycle; + /** + * 礼品卡 + */ + private Boolean isCard; + /** + * 礼品卡集合 + */ + private String cardJson; + /** + * 全部商品 + */ + private Boolean isFull; + /** + * 部分商品 + */ + private Boolean isPortion; + /** + * 部分不参与商品 + */ + private Boolean isNoPortion; + /** + * 门店参与 + */ + private Boolean isStore; + /** + * 门店不参与 + */ + private Boolean isNoStore; + /** + * 商品spuid + */ + private Long spuId; + /** + * 商品skuid + */ + private Long skuId; + /** + * 商品 + */ + private Boolean isPro; + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/extend/ExtendMapper.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/extend/ExtendMapper.java new file mode 100644 index 000000000..4d861061d --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/extend/ExtendMapper.java @@ -0,0 +1,34 @@ +package cn.iocoder.yudao.module.hshy.dal.mysql.extend; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hshy.dal.dataobject.extend.ExtendDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hshy.controller.admin.extend.vo.*; + +/** + * 商品扩展 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface ExtendMapper extends BaseMapperX { + + default PageResult selectPage(ExtendPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(ExtendDO::getIsPromotion, reqVO.getIsPromotion()) + .eqIfPresent(ExtendDO::getIsAppoint, reqVO.getIsAppoint()) + .eqIfPresent(ExtendDO::getIsSpecial, reqVO.getIsSpecial()) + .eqIfPresent(ExtendDO::getStatus, reqVO.getStatus()) + .eqIfPresent(ExtendDO::getRemark, reqVO.getRemark()) + .eqIfPresent(ExtendDO::getSpuId, reqVO.getSpuId()) + .eqIfPresent(ExtendDO::getSkuId, reqVO.getSkuId()) + .betweenIfPresent(ExtendDO::getCreateTime, reqVO.getCreateTime()) + .betweenIfPresent(ExtendDO::getDeletedTime, reqVO.getDeletedTime()) + .orderByDesc(ExtendDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointcongeal/PointCongealMapper.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointcongeal/PointCongealMapper.java new file mode 100644 index 000000000..cd19be268 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointcongeal/PointCongealMapper.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.hshy.dal.mysql.pointcongeal; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointcongeal.PointCongealDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hshy.controller.admin.pointcongeal.vo.*; + +/** + * 用户积分金额冻结 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface PointCongealMapper extends BaseMapperX { + + default PageResult selectPage(PointCongealPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PointCongealDO::getMemberUserId, reqVO.getMemberUserId()) + .eqIfPresent(PointCongealDO::getPointCongealId, reqVO.getPointCongealId()) + .eqIfPresent(PointCongealDO::getAmount, reqVO.getAmount()) + .eqIfPresent(PointCongealDO::getPoint, reqVO.getPoint()) + .eqIfPresent(PointCongealDO::getDescription, reqVO.getDescription()) + .betweenIfPresent(PointCongealDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(PointCongealDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointexchange/PointExchangeMapper.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointexchange/PointExchangeMapper.java new file mode 100644 index 000000000..c59b695f4 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointexchange/PointExchangeMapper.java @@ -0,0 +1,42 @@ +package cn.iocoder.yudao.module.hshy.dal.mysql.pointexchange; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointexchange.PointExchangeDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hshy.controller.admin.pointexchange.vo.*; + +/** + * 会员积分兑换 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface PointExchangeMapper extends BaseMapperX { + + default PageResult selectPage(PointExchangePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PointExchangeDO::getMemberUserId, reqVO.getMemberUserId()) + .eqIfPresent(PointExchangeDO::getUserType, reqVO.getUserType()) + .eqIfPresent(PointExchangeDO::getBizType, reqVO.getBizType()) + .eqIfPresent(PointExchangeDO::getJsonRule, reqVO.getJsonRule()) + .eqIfPresent(PointExchangeDO::getBalance, reqVO.getBalance()) + .eqIfPresent(PointExchangeDO::getTotalExpense, reqVO.getTotalExpense()) + .eqIfPresent(PointExchangeDO::getTotalRecharge, reqVO.getTotalRecharge()) + .eqIfPresent(PointExchangeDO::getStatus, reqVO.getStatus()) + .eqIfPresent(PointExchangeDO::getRemark, reqVO.getRemark()) + .eqIfPresent(PointExchangeDO::getAuditStatus, reqVO.getAuditStatus()) + .eqIfPresent(PointExchangeDO::getAudit, reqVO.getAudit()) + .betweenIfPresent(PointExchangeDO::getAuditTime, reqVO.getAuditTime()) + .eqIfPresent(PointExchangeDO::getAuditNotes, reqVO.getAuditNotes()) + .eqIfPresent(PointExchangeDO::getSpuId, reqVO.getSpuId()) + .eqIfPresent(PointExchangeDO::getSkuId, reqVO.getSkuId()) + .betweenIfPresent(PointExchangeDO::getCreateTime, reqVO.getCreateTime()) + .betweenIfPresent(PointExchangeDO::getDeletedTime, reqVO.getDeletedTime()) + .orderByDesc(PointExchangeDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointrule/PointRuleMapper.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointrule/PointRuleMapper.java new file mode 100644 index 000000000..03f611ae2 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointrule/PointRuleMapper.java @@ -0,0 +1,31 @@ +package cn.iocoder.yudao.module.hshy.dal.mysql.pointrule; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointrule.PointRuleDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hshy.controller.admin.pointrule.vo.*; + +/** + * 规则 Mapper + * + * @author 唐 + */ +@Mapper +public interface PointRuleMapper extends BaseMapperX { + + default PageResult selectPage(PointRulePageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PointRuleDO::getType, reqVO.getType()) + .likeIfPresent(PointRuleDO::getName, reqVO.getName()) + .eqIfPresent(PointRuleDO::getStatus, reqVO.getStatus()) + .eqIfPresent(PointRuleDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(PointRuleDO::getCreateTime, reqVO.getCreateTime()) + .betweenIfPresent(PointRuleDO::getDeletedTime, reqVO.getDeletedTime()) + .orderByDesc(PointRuleDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointruleitem/PointRuleItemMapper.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointruleitem/PointRuleItemMapper.java new file mode 100644 index 000000000..911d78f9f --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/pointruleitem/PointRuleItemMapper.java @@ -0,0 +1,35 @@ +package cn.iocoder.yudao.module.hshy.dal.mysql.pointruleitem; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointruleitem.PointRuleItemDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hshy.controller.admin.pointruleitem.vo.*; + +/** + * 规则明细 Mapper + * + * @author 唐 + */ +@Mapper +public interface PointRuleItemMapper extends BaseMapperX { + + default PageResult selectPage(PointRuleItemPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(PointRuleItemDO::getType, reqVO.getType()) + .eqIfPresent(PointRuleItemDO::getLabel, reqVO.getLabel()) + .eqIfPresent(PointRuleItemDO::getStarValue, reqVO.getStarValue()) + .eqIfPresent(PointRuleItemDO::getEndValue, reqVO.getEndValue()) + .eqIfPresent(PointRuleItemDO::getSort, reqVO.getSort()) + .eqIfPresent(PointRuleItemDO::getStatus, reqVO.getStatus()) + .eqIfPresent(PointRuleItemDO::getColorType, reqVO.getColorType()) + .eqIfPresent(PointRuleItemDO::getCssClass, reqVO.getCssClass()) + .eqIfPresent(PointRuleItemDO::getRemark, reqVO.getRemark()) + .betweenIfPresent(PointRuleItemDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(PointRuleItemDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/userblack/UserBlackMapper.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/userblack/UserBlackMapper.java new file mode 100644 index 000000000..2e74fa9a9 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/userblack/UserBlackMapper.java @@ -0,0 +1,27 @@ +package cn.iocoder.yudao.module.hshy.dal.mysql.userblack; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userblack.UserBlackDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hshy.controller.admin.userblack.vo.*; + +/** + * 会员黑名单 Mapper + * + * @author 芋道源码 + */ +@Mapper +public interface UserBlackMapper extends BaseMapperX { + + default PageResult selectPage(UserBlackPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(UserBlackDO::getMemberUserId, reqVO.getMemberUserId()) + .betweenIfPresent(UserBlackDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(UserBlackDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/userconfig/UserConfigMapper.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/userconfig/UserConfigMapper.java new file mode 100644 index 000000000..cae4942ba --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/dal/mysql/userconfig/UserConfigMapper.java @@ -0,0 +1,78 @@ +package cn.iocoder.yudao.module.hshy.dal.mysql.userconfig; + +import java.util.*; + +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import org.apache.ibatis.annotations.Mapper; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.*; + +/** + * 会员条件配置 Mapper + * + * @author 超级管理员 + */ +@Mapper +public interface UserConfigMapper extends BaseMapperX { + + default PageResult selectPage(UserConfigPageReqVO reqVO) { + return selectPage(reqVO, new LambdaQueryWrapperX() + .eqIfPresent(UserConfigDO::getMemberUserId, reqVO.getMemberUserId()) + .eqIfPresent(UserConfigDO::getBizType, reqVO.getBizType()) + .eqIfPresent(UserConfigDO::getProType, reqVO.getProType()) + .eqIfPresent(UserConfigDO::getGAnyCondition, reqVO.getGAnyCondition()) + .eqIfPresent(UserConfigDO::getGAllCondition, reqVO.getGAllCondition()) + .eqIfPresent(UserConfigDO::getDIsStrategy, reqVO.getDIsStrategy()) + .eqIfPresent(UserConfigDO::getDStrategyType, reqVO.getDStrategyType()) + .betweenIfPresent(UserConfigDO::getDStrategyTime, reqVO.getDStrategyTime()) + .eqIfPresent(UserConfigDO::getDStrategyCount, reqVO.getDStrategyCount()) + .eqIfPresent(UserConfigDO::getDIsAnyCondition, reqVO.getDIsAnyCondition()) + .eqIfPresent(UserConfigDO::getDAnyConditionCount, reqVO.getDAnyConditionCount()) + .eqIfPresent(UserConfigDO::getDIsSingle, reqVO.getDIsSingle()) + .eqIfPresent(UserConfigDO::getDSingle, reqVO.getDSingle()) + .eqIfPresent(UserConfigDO::getDIsAddSingle, reqVO.getDIsAddSingle()) + .eqIfPresent(UserConfigDO::getDAddSingle, reqVO.getDAddSingle()) + .eqIfPresent(UserConfigDO::getDIsRecharge, reqVO.getDIsRecharge()) + .eqIfPresent(UserConfigDO::getDRecharge, reqVO.getDRecharge()) + .eqIfPresent(UserConfigDO::getDIsAddRecharge, reqVO.getDIsAddRecharge()) + .eqIfPresent(UserConfigDO::getDAddRecharge, reqVO.getDAddRecharge()) + .eqIfPresent(UserConfigDO::getDIsPro, reqVO.getDIsPro()) + .eqIfPresent(UserConfigDO::getDType, reqVO.getDType()) + .eqIfPresent(UserConfigDO::getDTypeLevel, reqVO.getDTypeLevel()) + .eqIfPresent(UserConfigDO::getPDiscount, reqVO.getPDiscount()) + .eqIfPresent(UserConfigDO::getJPointsRatio, reqVO.getJPointsRatio()) + .eqIfPresent(UserConfigDO::getYBalanceRatio, reqVO.getYBalanceRatio()) + .eqIfPresent(UserConfigDO::getYIsBalance, reqVO.getYIsBalance()) + .eqIfPresent(UserConfigDO::getYIsFundsBalance, reqVO.getYIsFundsBalance()) + .eqIfPresent(UserConfigDO::getIsOrderSuccessful, reqVO.getIsOrderSuccessful()) + .eqIfPresent(UserConfigDO::getIsOrderShipped, reqVO.getIsOrderShipped()) + .eqIfPresent(UserConfigDO::getIsOrderLaw, reqVO.getIsOrderLaw()) + .eqIfPresent(UserConfigDO::getCRechargeBonus, reqVO.getCRechargeBonus()) + .eqIfPresent(UserConfigDO::getIsPoints, reqVO.getIsPoints()) + .eqIfPresent(UserConfigDO::getPoints, reqVO.getPoints()) + .eqIfPresent(UserConfigDO::getIsBalance, reqVO.getIsBalance()) + .eqIfPresent(UserConfigDO::getBalance, reqVO.getBalance()) + .eqIfPresent(UserConfigDO::getBalanceType, reqVO.getBalanceType()) + .eqIfPresent(UserConfigDO::getIsCoupon, reqVO.getIsCoupon()) + .eqIfPresent(UserConfigDO::getCouponJson, reqVO.getCouponJson()) + .eqIfPresent(UserConfigDO::getBIsFreeShipping, reqVO.getBIsFreeShipping()) + .eqIfPresent(UserConfigDO::getBIsNoFreeShipping, reqVO.getBIsNoFreeShipping()) + .eqIfPresent(UserConfigDO::getBNoFreeShipping, reqVO.getBNoFreeShipping()) + .eqIfPresent(UserConfigDO::getZCycle, reqVO.getZCycle()) + .eqIfPresent(UserConfigDO::getIsCard, reqVO.getIsCard()) + .eqIfPresent(UserConfigDO::getCardJson, reqVO.getCardJson()) + .eqIfPresent(UserConfigDO::getIsFull, reqVO.getIsFull()) + .eqIfPresent(UserConfigDO::getIsPortion, reqVO.getIsPortion()) + .eqIfPresent(UserConfigDO::getIsNoPortion, reqVO.getIsNoPortion()) + .eqIfPresent(UserConfigDO::getIsStore, reqVO.getIsStore()) + .eqIfPresent(UserConfigDO::getIsNoStore, reqVO.getIsNoStore()) + .eqIfPresent(UserConfigDO::getSpuId, reqVO.getSpuId()) + .eqIfPresent(UserConfigDO::getSkuId, reqVO.getSkuId()) + .eqIfPresent(UserConfigDO::getIsPro, reqVO.getIsPro()) + .betweenIfPresent(UserConfigDO::getCreateTime, reqVO.getCreateTime()) + .orderByDesc(UserConfigDO::getId)); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/framework/security/config/SecurityConfiguration.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/framework/security/config/SecurityConfiguration.java new file mode 100644 index 000000000..44d5d810f --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/framework/security/config/SecurityConfiguration.java @@ -0,0 +1,40 @@ +package cn.iocoder.yudao.module.hshy.framework.security.config; + + +import cn.iocoder.yudao.framework.security.config.AuthorizeRequestsCustomizer; +import cn.iocoder.yudao.module.product.enums.ApiConstants; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.security.config.annotation.web.builders.HttpSecurity; +import org.springframework.security.config.annotation.web.configurers.AuthorizeHttpRequestsConfigurer; + +/** + * Product 模块的 Security 配置 + */ +@Configuration("productSecurityConfiguration") +public class SecurityConfiguration { + + @Bean("productAuthorizeRequestsCustomizer") + public AuthorizeRequestsCustomizer authorizeRequestsCustomizer() { + return new AuthorizeRequestsCustomizer() { + + @Override + public void customize(AuthorizeHttpRequestsConfigurer.AuthorizationManagerRequestMatcherRegistry registry) { + // Swagger 接口文档 + registry.requestMatchers("/v3/api-docs/**").permitAll() + .requestMatchers("/webjars/**").permitAll() + .requestMatchers("/swagger-ui").permitAll() + .requestMatchers("/swagger-ui/**").permitAll(); + // Spring Boot Actuator 的安全配置 + registry.requestMatchers("/actuator").permitAll() + .requestMatchers("/actuator/**").permitAll(); + // Druid 监控 + registry.requestMatchers("/druid/**").permitAll(); + // RPC 服务的安全配置 + registry.requestMatchers(ApiConstants.PREFIX + "/**").permitAll(); + } + + }; + } + +} diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/extend/ExtendService.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/extend/ExtendService.java new file mode 100644 index 000000000..92fe58810 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/extend/ExtendService.java @@ -0,0 +1,55 @@ +package cn.iocoder.yudao.module.hshy.service.extend; + +import java.util.*; +import jakarta.validation.Valid; +import cn.iocoder.yudao.module.hshy.controller.admin.extend.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.extend.ExtendDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +/** + * 商品扩展 Service 接口 + * + * @author 超级管理员 + */ +public interface ExtendService { + + /** + * 创建商品扩展 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createExtend(@Valid ExtendSaveReqVO createReqVO); + + /** + * 更新商品扩展 + * + * @param updateReqVO 更新信息 + */ + void updateExtend(@Valid ExtendSaveReqVO updateReqVO); + + /** + * 删除商品扩展 + * + * @param id 编号 + */ + void deleteExtend(Integer id); + + /** + * 获得商品扩展 + * + * @param spuId 编号 + * @return 商品扩展 + */ + ExtendDO getExtend(Integer spuId); + + /** + * 获得商品扩展分页 + * + * @param pageReqVO 分页查询 + * @return 商品扩展分页 + */ + PageResult getExtendPage(ExtendPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/extend/ExtendServiceImpl.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/extend/ExtendServiceImpl.java new file mode 100644 index 000000000..f44810164 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/extend/ExtendServiceImpl.java @@ -0,0 +1,76 @@ +package cn.iocoder.yudao.module.hshy.service.extend; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.stereotype.Service; +import jakarta.annotation.Resource; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.extend.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.extend.ExtendDO; +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.module.hshy.dal.mysql.extend.ExtendMapper; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hshy.enums.ErrorCodeConstants.*; + +/** + * 商品扩展 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class ExtendServiceImpl implements ExtendService { + + @Resource + private ExtendMapper extendMapper; + + @Override + public Integer createExtend(ExtendSaveReqVO createReqVO) { + // 插入 + ExtendDO extend = BeanUtils.toBean(createReqVO, ExtendDO.class); + extendMapper.insert(extend); + // 返回 + return extend.getId(); + } + + @Override + public void updateExtend(ExtendSaveReqVO updateReqVO) { + // 校验存在 + validateExtendExists(updateReqVO.getId()); + // 更新 + ExtendDO updateObj = BeanUtils.toBean(updateReqVO, ExtendDO.class); + extendMapper.updateById(updateObj); + } + + @Override + public void deleteExtend(Integer id) { + // 校验存在 + validateExtendExists(id); + // 删除 + extendMapper.deleteById(id); + } + + private void validateExtendExists(Integer id) { + if (extendMapper.selectById(id) == null) { + throw exception(EXTEND_NOT_EXISTS); + } + } + + @Override + public ExtendDO getExtend(Integer spuId) { + return extendMapper.selectOne(new LambdaQueryWrapper<>(ExtendDO.class) + .eq(ExtendDO::getSpuId, spuId)); + } + + @Override + public PageResult getExtendPage(ExtendPageReqVO pageReqVO) { + return extendMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointcongeal/PointCongealService.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointcongeal/PointCongealService.java new file mode 100644 index 000000000..d1b019d85 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointcongeal/PointCongealService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.hshy.service.pointcongeal; + +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.pointcongeal.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointcongeal.PointCongealDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import jakarta.validation.Valid; + +/** + * 用户积分金额冻结 Service 接口 + * + * @author 超级管理员 + */ +public interface PointCongealService { + + /** + * 创建用户积分金额冻结 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createPointCongeal(@Valid PointCongealSaveReqVO createReqVO); + + /** + * 更新用户积分金额冻结 + * + * @param updateReqVO 更新信息 + */ + void updatePointCongeal(@Valid PointCongealSaveReqVO updateReqVO); + + /** + * 删除用户积分金额冻结 + * + * @param id 编号 + */ + void deletePointCongeal(Integer id); + + /** + * 获得用户积分金额冻结 + * + * @param id 编号 + * @return 用户积分金额冻结 + */ + PointCongealDO getPointCongeal(Integer id); + + /** + * 获得用户积分金额冻结分页 + * + * @param pageReqVO 分页查询 + * @return 用户积分金额冻结分页 + */ + PageResult getPointCongealPage(PointCongealPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointcongeal/PointCongealServiceImpl.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointcongeal/PointCongealServiceImpl.java new file mode 100644 index 000000000..e3451ceb5 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointcongeal/PointCongealServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.hshy.service.pointcongeal; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.pointcongeal.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointcongeal.PointCongealDO; +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.module.hshy.dal.mysql.pointcongeal.PointCongealMapper; + +import jakarta.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hshy.enums.ErrorCodeConstants.*; + +/** + * 用户积分金额冻结 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class PointCongealServiceImpl implements PointCongealService { + + @Resource + private PointCongealMapper pointCongealMapper; + + @Override + public Integer createPointCongeal(PointCongealSaveReqVO createReqVO) { + // 插入 + PointCongealDO pointCongeal = BeanUtils.toBean(createReqVO, PointCongealDO.class); + pointCongealMapper.insert(pointCongeal); + // 返回 + return pointCongeal.getId(); + } + + @Override + public void updatePointCongeal(PointCongealSaveReqVO updateReqVO) { + // 校验存在 + validatePointCongealExists(updateReqVO.getId()); + // 更新 + PointCongealDO updateObj = BeanUtils.toBean(updateReqVO, PointCongealDO.class); + pointCongealMapper.updateById(updateObj); + } + + @Override + public void deletePointCongeal(Integer id) { + // 校验存在 + validatePointCongealExists(id); + // 删除 + pointCongealMapper.deleteById(id); + } + + private void validatePointCongealExists(Integer id) { + if (pointCongealMapper.selectById(id) == null) { + throw exception(POINT_CONGEAL_NOT_EXISTS); + } + } + + @Override + public PointCongealDO getPointCongeal(Integer id) { + return pointCongealMapper.selectById(id); + } + + @Override + public PageResult getPointCongealPage(PointCongealPageReqVO pageReqVO) { + return pointCongealMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointexchange/PointExchangeService.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointexchange/PointExchangeService.java new file mode 100644 index 000000000..82be6da13 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointexchange/PointExchangeService.java @@ -0,0 +1,64 @@ +package cn.iocoder.yudao.module.hshy.service.pointexchange; + +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.pointexchange.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointexchange.PointExchangeDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import jakarta.validation.Valid; + +/** + * 会员积分兑换 Service 接口 + * + * @author 超级管理员 + */ +public interface PointExchangeService { + + /** + * 创建会员积分兑换 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createPointExchange(@Valid PointExchangeSaveReqVO createReqVO); + + /** + * 更新会员积分兑换 + * + * @param updateReqVO 更新信息 + */ + void updatePointExchange(@Valid PointExchangeSaveReqVO updateReqVO); + + + /** + * 更新会员积分兑换 + * + * @param auditReqVO 更新信息 + */ + void auditPointExchange(@Valid PointExchangeAuditReqVO auditReqVO); + + /** + * 删除会员积分兑换 + * + * @param id 编号 + */ + void deletePointExchange(Integer id); + + /** + * 获得会员积分兑换 + * + * @param id 编号 + * @return 会员积分兑换 + */ + PointExchangeDO getPointExchange(Integer id); + + /** + * 获得会员积分兑换分页 + * + * @param pageReqVO 分页查询 + * @return 会员积分兑换分页 + */ + PageResult getPointExchangePage(PointExchangePageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointexchange/PointExchangeServiceImpl.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointexchange/PointExchangeServiceImpl.java new file mode 100644 index 000000000..31acd6aab --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointexchange/PointExchangeServiceImpl.java @@ -0,0 +1,90 @@ +package cn.iocoder.yudao.module.hshy.service.pointexchange; + +import cn.iocoder.yudao.framework.security.core.LoginUser; +import cn.iocoder.yudao.framework.web.core.util.WebFrameworkUtils; +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 cn.iocoder.yudao.module.hshy.controller.admin.pointexchange.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointexchange.PointExchangeDO; +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.module.hshy.dal.mysql.pointexchange.PointExchangeMapper; + +import jakarta.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hshy.enums.ErrorCodeConstants.*; + +/** + * 会员积分兑换 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class PointExchangeServiceImpl implements PointExchangeService { + + @Resource + private PointExchangeMapper pointExchangeMapper; + + @Override + public Integer createPointExchange(PointExchangeSaveReqVO createReqVO) { + // 插入 + PointExchangeDO pointExchange = BeanUtils.toBean(createReqVO, PointExchangeDO.class); + pointExchangeMapper.insert(pointExchange); + // 返回 + return pointExchange.getId(); + } + + @Override + public void updatePointExchange(PointExchangeSaveReqVO updateReqVO) { + // 校验存在 + validatePointExchangeExists(updateReqVO.getId()); + // 更新 + PointExchangeDO updateObj = BeanUtils.toBean(updateReqVO, PointExchangeDO.class); + pointExchangeMapper.updateById(updateObj); + } + + @Override + public void auditPointExchange(PointExchangeAuditReqVO auditReqVO) { + + // 校验存在 + validatePointExchangeExists(auditReqVO.getId()); + // 更新 + PointExchangeDO updateObj = BeanUtils.toBean(auditReqVO, PointExchangeDO.class); + updateObj.setAuditTime(LocalDateTime.now()); + updateObj.setAudit(WebFrameworkUtils.getLoginUserId().toString()); + pointExchangeMapper.updateById(updateObj); + } + + @Override + public void deletePointExchange(Integer id) { + // 校验存在 + validatePointExchangeExists(id); + // 删除 + pointExchangeMapper.deleteById(id); + } + + private void validatePointExchangeExists(Integer id) { + if (pointExchangeMapper.selectById(id) == null) { + throw exception(POINT_EXCHANGE_NOT_EXISTS); + } + } + + @Override + public PointExchangeDO getPointExchange(Integer id) { + return pointExchangeMapper.selectById(id); + } + + @Override + public PageResult getPointExchangePage(PointExchangePageReqVO pageReqVO) { + return pointExchangeMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointrule/PointRuleService.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointrule/PointRuleService.java new file mode 100644 index 000000000..780172487 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointrule/PointRuleService.java @@ -0,0 +1,56 @@ +package cn.iocoder.yudao.module.hshy.service.pointrule; + +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.pointrule.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointrule.PointRuleDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import jakarta.validation.Valid; + +/** + * 规则 Service 接口 + * + * @author 唐 + */ +public interface PointRuleService { + + /** + * 创建规则 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createPointRule(@Valid PointRuleSaveReqVO createReqVO); + + /** + * 更新规则 + * + * @param updateReqVO 更新信息 + */ + void updatePointRule(@Valid PointRuleSaveReqVO updateReqVO); + + /** + * 删除规则 + * + * @param id 编号 + */ + void deletePointRule(Integer id); + + /** + * 获得规则 + * + * @param id 编号 + * @return 规则 + */ + PointRuleDO getPointRule(Integer id); + + /** + * 获得规则分页 + * + * @param pageReqVO 分页查询 + * @return 规则分页 + */ + PageResult getPointRulePage(PointRulePageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointrule/PointRuleServiceImpl.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointrule/PointRuleServiceImpl.java new file mode 100644 index 000000000..3fbdf4bb1 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointrule/PointRuleServiceImpl.java @@ -0,0 +1,75 @@ +package cn.iocoder.yudao.module.hshy.service.pointrule; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.pointrule.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointrule.PointRuleDO; +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.module.hshy.dal.mysql.pointrule.PointRuleMapper; + +import jakarta.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hshy.enums.ErrorCodeConstants.*; + +/** + * 规则 Service 实现类 + * + * @author 唐 + */ +@Service +@Validated +public class PointRuleServiceImpl implements PointRuleService { + + @Resource + private PointRuleMapper pointRuleMapper; + + @Override + public Integer createPointRule(PointRuleSaveReqVO createReqVO) { + // 插入 + PointRuleDO pointRule = BeanUtils.toBean(createReqVO, PointRuleDO.class); + pointRuleMapper.insert(pointRule); + // 返回 + return pointRule.getId(); + } + + @Override + public void updatePointRule(PointRuleSaveReqVO updateReqVO) { + // 校验存在 + validatePointRuleExists(updateReqVO.getId()); + // 更新 + PointRuleDO updateObj = BeanUtils.toBean(updateReqVO, PointRuleDO.class); + pointRuleMapper.updateById(updateObj); + } + + @Override + public void deletePointRule(Integer id) { + // 校验存在 + validatePointRuleExists(id); + // 删除 + pointRuleMapper.deleteById(id); + } + + private void validatePointRuleExists(Integer id) { + if (pointRuleMapper.selectById(id) == null) { + throw exception(POINT_RULE_NOT_EXISTS); + } + } + + @Override + public PointRuleDO getPointRule(Integer id) { + return pointRuleMapper.selectById(id); + } + + @Override + public PageResult getPointRulePage(PointRulePageReqVO pageReqVO) { + return pointRuleMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointruleitem/PointRuleItemService.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointruleitem/PointRuleItemService.java new file mode 100644 index 000000000..0bc12af28 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointruleitem/PointRuleItemService.java @@ -0,0 +1,66 @@ +package cn.iocoder.yudao.module.hshy.service.pointruleitem; + +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.pointruleitem.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointruleitem.PointRuleItemDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; +import jakarta.validation.Valid; + + +/** + * 规则明细 Service 接口 + * + * @author 唐 + */ +public interface PointRuleItemService { + + /** + * 创建规则明细 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createPointRuleItem(@Valid PointRuleItemSaveReqVO createReqVO); + + /** + * 更新规则明细 + * + * @param updateReqVO 更新信息 + */ + void updatePointRuleItem(@Valid PointRuleItemSaveReqVO updateReqVO); + + /** + * 删除规则明细 + * + * @param id 编号 + */ + void deletePointRuleItem(Integer id); + + /** + * 获得规则明细 + * + * @param id 编号 + * @return 规则明细 + */ + PointRuleItemDO getPointRuleItem(Integer id); + + + /** + * 根据规则类型获取规则明细 + * + * @param type 编号 + * @return 规则明细 + */ + List getPointRuleItemList(String type); + + + /** + * 获得规则明细分页 + * + * @param pageReqVO 分页查询 + * @return 规则明细分页 + */ + PageResult getPointRuleItemPage(PointRuleItemPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointruleitem/PointRuleItemServiceImpl.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointruleitem/PointRuleItemServiceImpl.java new file mode 100644 index 000000000..1816b805e --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/pointruleitem/PointRuleItemServiceImpl.java @@ -0,0 +1,86 @@ +package cn.iocoder.yudao.module.hshy.service.pointruleitem; + +import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.hshy.convert.SnowflakeIdWorker; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.pointruleitem.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.pointruleitem.PointRuleItemDO; +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.module.hshy.dal.mysql.pointruleitem.PointRuleItemMapper; + +import jakarta.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hshy.enums.ErrorCodeConstants.*; + +/** + * 规则明细 Service 实现类 + * + * @author 唐 + */ +@Service +@Validated +public class PointRuleItemServiceImpl implements PointRuleItemService { + + @Resource + private PointRuleItemMapper pointRuleItemMapper; + + @Override + public Integer createPointRuleItem(PointRuleItemSaveReqVO createReqVO) { + // 插入 + PointRuleItemDO pointRuleItem = BeanUtils.toBean(createReqVO, PointRuleItemDO.class); + SnowflakeIdWorker idWorker = new SnowflakeIdWorker(0, 0); + pointRuleItem.setCode(idWorker.nextId()); + pointRuleItemMapper.insert(pointRuleItem); + // 返回 + return pointRuleItem.getId(); + } + + @Override + public void updatePointRuleItem(PointRuleItemSaveReqVO updateReqVO) { + // 校验存在 + validatePointRuleItemExists(updateReqVO.getId()); + // 更新 + PointRuleItemDO updateObj = BeanUtils.toBean(updateReqVO, PointRuleItemDO.class); + pointRuleItemMapper.updateById(updateObj); + } + + @Override + public void deletePointRuleItem(Integer id) { + // 校验存在 + validatePointRuleItemExists(id); + // 删除 + pointRuleItemMapper.deleteById(id); + } + + private void validatePointRuleItemExists(Integer id) { + if (pointRuleItemMapper.selectById(id) == null) { + throw exception(POINT_RULE_ITEM_NOT_EXISTS); + } + } + + @Override + public PointRuleItemDO getPointRuleItem(Integer id) { + return pointRuleItemMapper.selectById(id); + } + + @Override + public List getPointRuleItemList(String type) { + return pointRuleItemMapper.selectList(new LambdaQueryWrapper<>(PointRuleItemDO.class) + .eq(PointRuleItemDO::getType, type)); + } + + @Override + public PageResult getPointRuleItemPage(PointRuleItemPageReqVO pageReqVO) { + return pointRuleItemMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userblack/UserBlackService.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userblack/UserBlackService.java new file mode 100644 index 000000000..c46c9d255 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userblack/UserBlackService.java @@ -0,0 +1,63 @@ +package cn.iocoder.yudao.module.hshy.service.userblack; + +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.userblack.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userblack.UserBlackDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import jakarta.validation.Valid; + +/** + * 会员黑名单 Service 接口 + * + * @author 芋道源码 + */ +public interface UserBlackService { + + /** + * 创建会员黑名单 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Boolean createUserBlack(@Valid UserBlackSaveReqVO createReqVO); + + /** + * 更新会员黑名单 + * + * @param updateReqVO 更新信息 + */ + void updateUserBlack(@Valid UserBlackSaveReqVO updateReqVO); + + /** + * 删除会员黑名单 + * + * @param deleteReqVO 编号 + */ + void deleteUserBlack(UserBlackSaveReqVO deleteReqVO); + + /** + * 获得会员黑名单 + * + * @param id 编号 + */ + Boolean getUserBlack(long id); + + + + /** + * 获得所有会员黑名单 + * + */ + List listUserBlack(); + + /** + * 获得会员黑名单分页 + * + * @param pageReqVO 分页查询 + * @return 会员黑名单分页 + */ + PageResult getUserBlackPage(UserBlackPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userblack/UserBlackServiceImpl.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userblack/UserBlackServiceImpl.java new file mode 100644 index 000000000..288d801fb --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userblack/UserBlackServiceImpl.java @@ -0,0 +1,85 @@ +package cn.iocoder.yudao.module.hshy.service.userblack; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.userblack.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userblack.UserBlackDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.util.object.BeanUtils; +import cn.iocoder.yudao.module.hshy.dal.mysql.userblack.UserBlackMapper; +import jakarta.annotation.Resource; +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hshy.enums.ErrorCodeConstants.*; + +/** + * 会员黑名单 Service 实现类 + * + * @author tpj + */ +@Service +@Validated +public class UserBlackServiceImpl implements UserBlackService { + + @Resource + private UserBlackMapper userBlackMapper; + + @Override + public Boolean createUserBlack(UserBlackSaveReqVO createReqVO) { + // 批量插入 + List list = new ArrayList<>(); + //查询会员是否存在 + List validList = + userBlackMapper.selectList(new LambdaQueryWrapper().in(UserBlackDO::getMemberUserId, createReqVO.getMemberUserIds())); + for (Long memberUserId : createReqVO.getMemberUserIds()) { + //查询会员是否存在 + boolean isExists = validList.stream().anyMatch(userBlackListDO -> userBlackListDO.getMemberUserId().equals(memberUserId)); + if (isExists) { + continue; + } + UserBlackDO userBlackListDO = new UserBlackDO(); + userBlackListDO.setMemberUserId(memberUserId); + list.add(userBlackListDO); + } + return userBlackMapper.insertBatch(list); + } + + @Override + public void updateUserBlack(UserBlackSaveReqVO updateReqVO) { + // 校验存在 + // validateUserBlackExists(updateReqVO.getId()); + // 更新 + UserBlackDO updateObj = BeanUtils.toBean(updateReqVO, UserBlackDO.class); + userBlackMapper.updateById(updateObj); + } + + @Override + public void deleteUserBlack(UserBlackSaveReqVO deleteReqVO) { + // 校验存在 + userBlackMapper.deleteByIds(deleteReqVO.getMemberUserIds()); + } + + private Boolean validateUserBlackExists(long id) { + List list= userBlackMapper.selectList(new LambdaQueryWrapper().eq(UserBlackDO::getMemberUserId,id)); + //判断list + return list != null && !list.isEmpty(); + } + + @Override + public Boolean getUserBlack(long id) { + return validateUserBlackExists(id); + } + + @Override + public List listUserBlack() { + + return userBlackMapper.selectList(new LambdaQueryWrapper<>()); + } + + @Override + public PageResult getUserBlackPage(UserBlackPageReqVO pageReqVO) { + return userBlackMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userconfig/UserConfigService.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userconfig/UserConfigService.java new file mode 100644 index 000000000..34219480e --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userconfig/UserConfigService.java @@ -0,0 +1,178 @@ +package cn.iocoder.yudao.module.hshy.service.userconfig; + +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.framework.common.pojo.PageParam; + +import jakarta.validation.Valid; + +/** + * 会员条件配置 Service 接口 + * + * @author 超级管理员 + */ +public interface UserConfigService { + + /** + * 创建会员条件配置 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer createUserConfig(@Valid UserConfigSaveReqVO createReqVO); + + /** + * 创建会员消费积分 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer creatPonts(@Valid UserConfigPontsRespVO createReqVO); + /** + * 创建会员消费返余额 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer creatBalance(@Valid UserConfigBalanceRespVO createReqVO); + + /** + * 创建会员充值奖励 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer creatBonus(@Valid UserConfigBonusRespVO createReqVO); + + /** + * 创建会员包邮 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer creatFree(@Valid UserConfigFreeRespVO createReqVO); + + + + /** + * 创建会员升级礼包 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer creatGrade(@Valid UserConfigGradeRespVO createReqVO); + + /** + * 创建会员专属客服 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer creatOnly(@Valid UserConfigOnlyRespVO createReqVO); + + + /** + * 创建会员周期奖励 + * + * @param createReqVO 创建信息 + * @return 编号 + */ + Integer creatCycle(@Valid UserConfigCycleRespVO createReqVO); + + + + + + + /** + * 跟新会员消费积分 + * + * @param updateReqVO 跟新信息 + * @return 编号 + */ + void updatePonts(@Valid UserConfigPontsRespVO updateReqVO); + /** + * 跟新会员消费返余额 + * + * @param updateReqVO 跟新信息 + * @return 编号 + */ + void updateBalance(@Valid UserConfigBalanceRespVO updateReqVO); + + /** + * 跟新会员充值奖励 + * + * @param updateReqVO 跟新信息 + * @return 编号 + */ + void updateBonus(@Valid UserConfigBonusRespVO updateReqVO); + + /** + * 跟新会员包邮 + * + * @param updateReqVO 跟新信息 + * @return 编号 + */ + void updateFree(@Valid UserConfigFreeRespVO updateReqVO); + + + + /** + * 跟新会员升级礼包 + * + * @param updateReqVO 跟新信息 + * @return 编号 + */ + void updateGrade(@Valid UserConfigGradeRespVO updateReqVO); + + /** + * 跟新会员专属客服 + * + * @param updateReqVO 跟新信息 + * @return 编号 + */ + void updateOnly(@Valid UserConfigOnlyRespVO updateReqVO); + + + /** + * 跟新会员周期奖励 + * + * @param updateReqVO 跟新信息 + * @return 编号 + */ + void updateCycle(@Valid UserConfigCycleRespVO updateReqVO); + + + /** + * 更新会员条件配置 + * + * @param updateReqVO 更新信息 + */ + void updateUserConfig(@Valid UserConfigSaveReqVO updateReqVO); + + /** + * 删除会员条件配置 + * + * @param id 编号 + */ + void deleteUserConfig(Integer id); + + /** + * 获得会员条件配置 + * + * @param id 编号 + * @return 会员条件配置 + */ + UserConfigDO getUserConfig(Integer id); + + /** + * 获得会员条件配置分页 + * + * @param pageReqVO 分页查询 + * @return 会员条件配置分页 + */ + PageResult getUserConfigPage(UserConfigPageReqVO pageReqVO); + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userconfig/UserConfigServiceImpl.java b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userconfig/UserConfigServiceImpl.java new file mode 100644 index 000000000..0c7a18142 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/java/cn/iocoder/yudao/module/hshy/service/userconfig/UserConfigServiceImpl.java @@ -0,0 +1,201 @@ +package cn.iocoder.yudao.module.hshy.service.userconfig; + +import org.springframework.stereotype.Service; +import org.springframework.validation.annotation.Validated; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; +import cn.iocoder.yudao.module.hshy.controller.admin.userconfig.vo.*; +import cn.iocoder.yudao.module.hshy.dal.dataobject.userconfig.UserConfigDO; +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.module.hshy.dal.mysql.userconfig.UserConfigMapper; + +import jakarta.annotation.Resource; + +import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.module.hshy.enums.ErrorCodeConstants.*; + +/** + * 会员条件配置 Service 实现类 + * + * @author 超级管理员 + */ +@Service +@Validated +public class UserConfigServiceImpl implements UserConfigService { + + @Resource + private UserConfigMapper userConfigMapper; + + @Override + public Integer createUserConfig(UserConfigSaveReqVO createReqVO) { + // 插入 + UserConfigDO userConfig = BeanUtils.toBean(createReqVO, UserConfigDO.class); + userConfigMapper.insert(userConfig); + // 返回 + return userConfig.getId(); + } + + @Override + public Integer creatPonts(UserConfigPontsRespVO createReqVO) { + // 插入 + UserConfigDO userConfig = BeanUtils.toBean(createReqVO, UserConfigDO.class); + userConfigMapper.insert(userConfig); + // 返回 + return userConfig.getId(); + } + + @Override + public Integer creatBalance(UserConfigBalanceRespVO createReqVO) { + // 插入 + UserConfigDO userConfig = BeanUtils.toBean(createReqVO, UserConfigDO.class); + userConfigMapper.insert(userConfig); + // 返回 + return userConfig.getId(); + } + + @Override + public Integer creatBonus(UserConfigBonusRespVO createReqVO) { + // 插入 + UserConfigDO userConfig = BeanUtils.toBean(createReqVO, UserConfigDO.class); + userConfigMapper.insert(userConfig); + // 返回 + return userConfig.getId(); + } + + @Override + public Integer creatFree(UserConfigFreeRespVO createReqVO) { + // 插入 + UserConfigDO userConfig = BeanUtils.toBean(createReqVO, UserConfigDO.class); + userConfigMapper.insert(userConfig); + // 返回 + return userConfig.getId(); + } + + @Override + public Integer creatGrade(UserConfigGradeRespVO createReqVO) { + // 插入 + UserConfigDO userConfig = BeanUtils.toBean(createReqVO, UserConfigDO.class); + userConfigMapper.insert(userConfig); + // 返回 + return userConfig.getId(); + } + + @Override + public Integer creatOnly(UserConfigOnlyRespVO createReqVO) { + // 插入 + UserConfigDO userConfig = BeanUtils.toBean(createReqVO, UserConfigDO.class); + userConfigMapper.insert(userConfig); + // 返回 + return userConfig.getId(); + } + + @Override + public Integer creatCycle(UserConfigCycleRespVO createReqVO) { + // 插入 + UserConfigDO userConfig = BeanUtils.toBean(createReqVO, UserConfigDO.class); + userConfigMapper.insert(userConfig); + // 返回 + return userConfig.getId(); + } + + @Override + public void updatePonts(UserConfigPontsRespVO updateReqVO) { + // 校验存在 + validateUserConfigExists(updateReqVO.getId()); + // 更新 + UserConfigDO updateObj = BeanUtils.toBean(updateReqVO, UserConfigDO.class); + userConfigMapper.updateById(updateObj); + } + + @Override + public void updateBalance(UserConfigBalanceRespVO updateReqVO) { + // 校验存在 + validateUserConfigExists(updateReqVO.getId()); + // 更新 + UserConfigDO updateObj = BeanUtils.toBean(updateReqVO, UserConfigDO.class); + userConfigMapper.updateById(updateObj); + } + + @Override + public void updateBonus(UserConfigBonusRespVO updateReqVO) { + // 校验存在 + validateUserConfigExists(updateReqVO.getId()); + // 更新 + UserConfigDO updateObj = BeanUtils.toBean(updateReqVO, UserConfigDO.class); + userConfigMapper.updateById(updateObj); + } + + @Override + public void updateFree(UserConfigFreeRespVO updateReqVO) { + // 校验存在 + validateUserConfigExists(updateReqVO.getId()); + // 更新 + UserConfigDO updateObj = BeanUtils.toBean(updateReqVO, UserConfigDO.class); + userConfigMapper.updateById(updateObj); + } + + @Override + public void updateGrade(UserConfigGradeRespVO updateReqVO) { + // 校验存在 + validateUserConfigExists(updateReqVO.getId()); + // 更新 + UserConfigDO updateObj = BeanUtils.toBean(updateReqVO, UserConfigDO.class); + userConfigMapper.updateById(updateObj); + } + + @Override + public void updateOnly(UserConfigOnlyRespVO updateReqVO) { + // 校验存在 + validateUserConfigExists(updateReqVO.getId()); + // 更新 + UserConfigDO updateObj = BeanUtils.toBean(updateReqVO, UserConfigDO.class); + userConfigMapper.updateById(updateObj); + } + + @Override + public void updateCycle(UserConfigCycleRespVO updateReqVO) { + // 校验存在 + validateUserConfigExists(updateReqVO.getId()); + // 更新 + UserConfigDO updateObj = BeanUtils.toBean(updateReqVO, UserConfigDO.class); + userConfigMapper.updateById(updateObj); + } + + @Override + public void updateUserConfig(UserConfigSaveReqVO updateReqVO) { + // 校验存在 + validateUserConfigExists(updateReqVO.getId()); + // 更新 + UserConfigDO updateObj = BeanUtils.toBean(updateReqVO, UserConfigDO.class); + userConfigMapper.updateById(updateObj); + } + + @Override + public void deleteUserConfig(Integer id) { + // 校验存在 + validateUserConfigExists(id); + // 删除 + userConfigMapper.deleteById(id); + } + + private void validateUserConfigExists(Integer id) { + if (userConfigMapper.selectById(id) == null) { + throw exception(USER_CONFIG_NOT_EXISTS); + } + } + + @Override + public UserConfigDO getUserConfig(Integer id) { + return userConfigMapper.selectById(id); + } + + @Override + public PageResult getUserConfigPage(UserConfigPageReqVO pageReqVO) { + return userConfigMapper.selectPage(pageReqVO); + } + +} \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/application-dev.yaml b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/application-dev.yaml new file mode 100644 index 000000000..a38cd37be --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/application-dev.yaml @@ -0,0 +1,115 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号8 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 5 # 初始连接数 + min-idle: 10 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://192.168.1.128/hs-mall-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: hs-rootadmin + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://192.168.1.128/hs-mall-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: hs-rootadmin + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + redis: + host: 192.168.1.128 # 地址 + port: 6379 # 端口 + database: 1 # 数据库索引 +# password: hs-rootadmin # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### +xxl: + job: + admin: + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + # Spring Boot Admin Server 服务端的相关配置 + context-path: /admin # 配置 Spring + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + demo: true # 开启演示模式 diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/application-local.yaml b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/application-local.yaml new file mode 100644 index 000000000..2dd782011 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/application-local.yaml @@ -0,0 +1,137 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号8 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 1.0.0 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: dev # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + - com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceAutoConfigure # 排除 Druid 的自动配置,使用 dynamic-datasource-spring-boot-starter 配置多数据源 + - de.codecentric.boot.admin.client.config.SpringBootAdminClientAutoConfiguration # 禁用 Spring Boot Admin 的 Client 的自动配置 + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 1 # 初始连接数 + min-idle: 1 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://192.168.1.128/hs-mall-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://192.168.1.128/hs-mall-cloud?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 + # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 + # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 + # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 + # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 + username: root + password: hs-rootadmin + # username: sa # SQL Server 连接的示例 + # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 + # username: SYSDBA # DM 连接的示例 + # password: SYSDBA # DM 连接的示例 + slave: # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://192.168.1.128/hs-mall-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + username: root + password: hs-rootadmin + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + redis: + host: 192.168.1.128 # 地址 + port: 6379 # 端口 + database: 0 # 数据库索引 +# password: hs-rootadmin # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + enabled: true # 是否开启调度中心,默认为 true 开启 + admin: + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + +# 日志文件配置 +logging: + level: + # 配置自己写的 MyBatis Mapper 打印日志 + cn.iocoder.yudao.module.hshy.dal.mysql: debug + org.springframework.context.support.PostProcessorRegistrationDelegate: ERROR # TODO 芋艿:先禁用,Spring Boot 3.X 存在部分错误的 WARN 提示 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + env: # 多环境的配置项 + tag: ${HOSTNAME} + security: + mock-enable: true + access-log: # 访问日志的配置项 + enable: false \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/application.yaml b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/application.yaml new file mode 100644 index 000000000..00f32d2a0 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/application.yaml @@ -0,0 +1,127 @@ +spring: + application: + name: hshy-server + + profiles: + active: local + + main: + allow-circular-references: true # 允许循环依赖,因为项目是三层架构,无法避免这个情况。 + allow-bean-definition-overriding: true # 允许 Bean 覆盖,例如说 Feign 等会存在重复定义的服务 + + config: + import: + - optional:classpath:application-${spring.profiles.active}.yaml # 加载【本地】配置 + - optional:nacos:${spring.application.name}-${spring.profiles.active}.yaml # 加载【Nacos】的配置 + + # Servlet 配置 + servlet: + # 文件上传相关配置项 + multipart: + max-file-size: 16MB # 单个文件大小 + max-request-size: 32MB # 设置总上传的文件大小 + + # Jackson 配置项 + jackson: + serialization: + write-dates-as-timestamps: true # 设置 LocalDateTime 的格式,使用时间戳 + write-date-timestamps-as-nanoseconds: false # 设置不使用 nanoseconds 的格式。例如说 1611460870.401,而是直接 1611460870401 + write-durations-as-timestamps: true # 设置 Duration 的格式,使用时间戳 + fail-on-empty-beans: false # 允许序列化无属性的 Bean + + # Cache 配置项 + cache: + type: REDIS + redis: + time-to-live: 1h # 设置过期时间为 1 小时 + +server: + port: 48099 + +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 + +--- #################### 接口文档配置 #################### + +springdoc: + api-docs: + enabled: true # 1. 是否开启 Swagger 接文档的元数据 + path: /v3/api-docs + swagger-ui: + enabled: true # 2.1 是否开启 Swagger 文档的官方 UI 界面 + path: /swagger-ui + default-flat-param-object: true # 参见 https://doc.xiaominfo.com/docs/faq/v4/knife4j-parameterobject-flat-param 文档 + +knife4j: + enable: true # 2.2 是否开启 Swagger 文档的 Knife4j UI 界面 + setting: + language: zh_cn + +# MyBatis Plus 的配置项 +mybatis-plus: + configuration: + map-underscore-to-camel-case: true # 虽然默认为 true ,但是还是显示去指定下。 + global-config: + db-config: + id-type: NONE # “智能”模式,基于 IdTypeEnvironmentPostProcessor + 数据源的类型,自动适配成 AUTO、INPUT 模式。 + # id-type: AUTO # 自增 ID,适合 MySQL 等直接自增的数据库 + # id-type: INPUT # 用户输入 ID,适合 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库 + # id-type: ASSIGN_ID # 分配 ID,默认使用雪花算法。注意,Oracle、PostgreSQL、Kingbase、DB2、H2 数据库时,需要去除实体类上的 @KeySequence 注解 + logic-delete-value: 1 # 逻辑已删除值(默认为 1) + logic-not-delete-value: 0 # 逻辑未删除值(默认为 0) + banner: false # 关闭控制台的 Banner 打印 + type-aliases-package: ${yudao.info.base-package}.dal.dataobject + encryptor: + password: XDV71a+xqStEA3WH # 加解密的秘钥,可使用 https://www.imaegoo.com/2020/aes-key-generator/ 网站生成 + +mybatis-plus-join: + banner: false # 关闭控制台的 Banner 打印 + +# Spring Data Redis 配置 +spring: + data: + redis: + repositories: + enabled: false # 项目未使用到 Spring Data Redis 的 Repository,所以直接禁用,保证启动速度 + +# VO 转换(数据翻译)相关 +easy-trans: + is-enable-global: true # 启用全局翻译(拦截所有 SpringMVC ResponseBody 进行自动翻译 )。如果对于性能要求很高可关闭此配置,或通过 @IgnoreTrans 忽略某个接口 + +--- #################### RPC 远程调用相关配置 #################### + +--- #################### MQ 消息队列相关配置 #################### + +--- #################### 定时任务相关配置 #################### + +xxl: + job: + executor: + appname: ${spring.application.name} # 执行器 AppName + logpath: ${user.home}/logs/xxl-job/${spring.application.name} # 执行器运行日志文件存储磁盘路径 + accessToken: default_token # 执行器通讯TOKEN + +--- #################### 芋道相关配置 #################### + +yudao: + info: + version: 1.0.0 + base-package: cn.iocoder.yudao.module.hshy + web: + admin-ui: + url: http://dashboard.yudao.iocoder.cn # Admin 管理后台 UI 的地址 + xss: + enable: false + exclude-urls: # 如下 url,仅仅是为了演示,去掉配置也没关系 + - ${management.endpoints.web.base-path}/** # 不处理 Actuator 的请求 + swagger: + title: 管理后台 + description: 提供管理员管理的所有功能 + version: ${yudao.info.version} + tenant: # 多租户相关配置项 + enable: true + ignore-urls: + ignore-tables: + +debug: false diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/logback-spring.xml b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/logback-spring.xml new file mode 100644 index 000000000..b1b9f3faf --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/logback-spring.xml @@ -0,0 +1,76 @@ + + + + + + + + + +       + + + ${PATTERN_DEFAULT} + + + + + + + + + + ${PATTERN_DEFAULT} + + + + ${LOG_FILE} + + + ${LOGBACK_ROLLINGPOLICY_FILE_NAME_PATTERN:-${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz} + + ${LOGBACK_ROLLINGPOLICY_CLEAN_HISTORY_ON_START:-false} + + ${LOGBACK_ROLLINGPOLICY_MAX_FILE_SIZE:-10MB} + + ${LOGBACK_ROLLINGPOLICY_TOTAL_SIZE_CAP:-0} + + ${LOGBACK_ROLLINGPOLICY_MAX_HISTORY:-30} + + + + + + 0 + + 256 + + + + + + + + ${PATTERN_DEFAULT} + + + + + + + + + + + + + + + + + + + + + + diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/extend/ExtendMapper.xml b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/extend/ExtendMapper.xml new file mode 100644 index 000000000..4ad54b0ee --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/extend/ExtendMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointcongeal/PointCongealMapper.xml b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointcongeal/PointCongealMapper.xml new file mode 100644 index 000000000..13f4492fb --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointcongeal/PointCongealMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointexchange/PointExchangeMapper.xml b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointexchange/PointExchangeMapper.xml new file mode 100644 index 000000000..9e33e5fc3 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointexchange/PointExchangeMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointrule/PointRuleMapper.xml b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointrule/PointRuleMapper.xml new file mode 100644 index 000000000..1c39f57bd --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointrule/PointRuleMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointruleitem/PointRuleItemMapper.xml b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointruleitem/PointRuleItemMapper.xml new file mode 100644 index 000000000..23355677e --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/pointruleitem/PointRuleItemMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/userblack/UserBlackMapper.xml b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/userblack/UserBlackMapper.xml new file mode 100644 index 000000000..d7f768e21 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/userblack/UserBlackMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/userconfig/UserConfigMapper.xml b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/userconfig/UserConfigMapper.xml new file mode 100644 index 000000000..79f4c7b40 --- /dev/null +++ b/yudao-module-mall/yudao-module-hshy-biz/src/main/resources/mapper/userconfig/UserConfigMapper.xml @@ -0,0 +1,12 @@ + + + + + + + \ No newline at end of file diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/resources/application-dev.yaml b/yudao-module-mall/yudao-module-product-biz/src/main/resources/application-dev.yaml index faf59ed11..4060583b4 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-mall/yudao-module-product-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -67,7 +67,7 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -78,7 +78,7 @@ spring: xxl: job: admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-mall/yudao-module-product-biz/src/main/resources/application-local.yaml b/yudao-module-mall/yudao-module-product-biz/src/main/resources/application-local.yaml index c86fc9920..2e514568a 100644 --- a/yudao-module-mall/yudao-module-product-biz/src/main/resources/application-local.yaml +++ b/yudao-module-mall/yudao-module-product-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -90,7 +90,7 @@ xxl: job: enabled: false # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/application-dev.yaml b/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/application-dev.yaml index faf59ed11..4060583b4 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -67,7 +67,7 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -78,7 +78,7 @@ spring: xxl: job: admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/application-local.yaml b/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/application-local.yaml index d18c98a48..b55baffdd 100644 --- a/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/application-local.yaml +++ b/yudao-module-mall/yudao-module-promotion-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -90,7 +90,7 @@ xxl: job: enabled: false # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-mall/yudao-module-statistics-biz/src/main/resources/application-dev.yaml b/yudao-module-mall/yudao-module-statistics-biz/src/main/resources/application-dev.yaml index faf59ed11..4060583b4 100644 --- a/yudao-module-mall/yudao-module-statistics-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-mall/yudao-module-statistics-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -67,7 +67,7 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -78,7 +78,7 @@ spring: xxl: job: admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-mall/yudao-module-statistics-biz/src/main/resources/application-local.yaml b/yudao-module-mall/yudao-module-statistics-biz/src/main/resources/application-local.yaml index a9e0fec07..6e0bbf277 100644 --- a/yudao-module-mall/yudao-module-statistics-biz/src/main/resources/application-local.yaml +++ b/yudao-module-mall/yudao-module-statistics-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -90,7 +90,7 @@ xxl: job: enabled: false # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/resources/application-dev.yaml b/yudao-module-mall/yudao-module-trade-biz/src/main/resources/application-dev.yaml index afa775453..01d28cbac 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -67,7 +67,7 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -78,7 +78,7 @@ spring: xxl: job: admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-mall/yudao-module-trade-biz/src/main/resources/application-local.yaml b/yudao-module-mall/yudao-module-trade-biz/src/main/resources/application-local.yaml index ec712893c..4abf2bfb3 100644 --- a/yudao-module-mall/yudao-module-trade-biz/src/main/resources/application-local.yaml +++ b/yudao-module-mall/yudao-module-trade-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -90,7 +90,7 @@ xxl: job: enabled: false # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/application-dev.yaml b/yudao-module-member/yudao-module-member-biz/src/main/resources/application-dev.yaml index faf59ed11..4060583b4 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -67,7 +67,7 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -78,7 +78,7 @@ spring: xxl: job: admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-member/yudao-module-member-biz/src/main/resources/application-local.yaml b/yudao-module-member/yudao-module-member-biz/src/main/resources/application-local.yaml index 2acca0511..e802968bc 100644 --- a/yudao-module-member/yudao-module-member-biz/src/main/resources/application-local.yaml +++ b/yudao-module-member/yudao-module-member-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -90,7 +90,7 @@ xxl: job: enabled: false # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-mp/yudao-module-mp-biz/src/main/resources/application-dev.yaml b/yudao-module-mp/yudao-module-mp-biz/src/main/resources/application-dev.yaml index b8f26e609..19e847680 100644 --- a/yudao-module-mp/yudao-module-mp-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-mp/yudao-module-mp-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -67,7 +67,7 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 diff --git a/yudao-module-mp/yudao-module-mp-biz/src/main/resources/application-local.yaml b/yudao-module-mp/yudao-module-mp-biz/src/main/resources/application-local.yaml index 9404a1f79..6c10a709e 100644 --- a/yudao-module-mp/yudao-module-mp-biz/src/main/resources/application-local.yaml +++ b/yudao-module-mp/yudao-module-mp-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/resources/application-dev.yaml b/yudao-module-pay/yudao-module-pay-biz/src/main/resources/application-dev.yaml index 17c1e1521..f3750e1e6 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -67,7 +67,7 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 diff --git a/yudao-module-pay/yudao-module-pay-biz/src/main/resources/application-local.yaml b/yudao-module-pay/yudao-module-pay-biz/src/main/resources/application-local.yaml index 0160ebfa0..73a5e402a 100644 --- a/yudao-module-pay/yudao-module-pay-biz/src/main/resources/application-local.yaml +++ b/yudao-module-pay/yudao-module-pay-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -89,7 +89,7 @@ xxl: job: enabled: false # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-report/yudao-module-report-biz/src/main/resources/application-dev.yaml b/yudao-module-report/yudao-module-report-biz/src/main/resources/application-dev.yaml index 044b873a9..3e154d954 100644 --- a/yudao-module-report/yudao-module-report-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-report/yudao-module-report-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -67,7 +67,7 @@ spring: # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 diff --git a/yudao-module-report/yudao-module-report-biz/src/main/resources/application-local.yaml b/yudao-module-report/yudao-module-report-biz/src/main/resources/application-local.yaml index 2aa55ecd0..8d6cb2c22 100644 --- a/yudao-module-report/yudao-module-report-biz/src/main/resources/application-local.yaml +++ b/yudao-module-report/yudao-module-report-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml index 4c8dca646..8b5ef734d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-dev.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -55,19 +55,19 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 + password: hs-rootadmin slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 username: root - password: 123456 + password: hs-rootadmin # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 400-infra.server.iocoder.cn # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 1 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -76,15 +76,15 @@ spring: # rocketmq 配置项,对应 RocketMQProperties 配置类 rocketmq: - name-server: 127.0.0.1:9876 # RocketMQ Namesrv + name-server: 192.168.1.128:9876 # RocketMQ Namesrv spring: # RabbitMQ 配置项,对应 RabbitProperties 配置类 rabbitmq: - host: 127.0.0.1 # RabbitMQ 服务的地址 + host: 192.168.1.128 # RabbitMQ 服务的地址 port: 5672 # RabbitMQ 服务的端口 - username: guest # RabbitMQ 服务的账号 - password: guest # RabbitMQ 服务的密码 + username: admin # RabbitMQ + password: hsrabbitmq # 服务的密码 # Kafka 配置项,对应 KafkaProperties 配置类 kafka: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 @@ -93,7 +93,7 @@ spring: xxl: job: admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml index c58e49029..bc383d94e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-local.yaml @@ -3,9 +3,9 @@ spring: cloud: nacos: - server-addr: 127.0.0.1:8848 # Nacos 服务器地址 - username: # Nacos 账号 - password: # Nacos 密码 + server-addr: 192.168.1.128:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 discovery: # 【配置中心】配置项 namespace: dev # 命名空间。这里使用 dev 开发环境 group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP @@ -56,28 +56,28 @@ spring: primary: master datasource: master: - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 - # url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + # url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=true&allowPublicKeyRetrieval=true&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&rewriteBatchedStatements=true # MySQL Connector/J 5.X 连接的示例 # url: jdbc:postgresql://127.0.0.1:5432/ruoyi-vue-pro # PostgreSQL 连接的示例 # url: jdbc:oracle:thin:@127.0.0.1:1521:xe # Oracle 连接的示例 # url: jdbc:sqlserver://127.0.0.1:1433;DatabaseName=ruoyi-vue-pro # SQLServer 连接的示例 # url: jdbc:dm://10.211.55.4:5236?schema=RUOYI_VUE_PRO # DM 连接的示例 username: root - password: 123456 + password: hs-rootadmin # username: sa # SQL Server 连接的示例 # password: JSm:g(*%lU4ZAkz06cd52KqT3)i1?H7W # SQL Server 连接的示例 # username: SYSDBA # DM 连接的示例 # password: SYSDBA # DM 连接的示例 slave: # 模拟从库,可根据自己需要修改 lazy: true # 开启懒加载,保证启动速度 - url: jdbc:mysql://127.0.0.1:3306/ruoyi-vue-pro?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true username: root - password: 123456 + password: hs-rootadmin # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 data: redis: - host: 127.0.0.1 # 地址 + host: 192.168.1.128 # 地址 port: 6379 # 端口 database: 0 # 数据库索引 # password: 123456 # 密码,建议生产环境开启 @@ -86,15 +86,15 @@ spring: # rocketmq 配置项,对应 RocketMQProperties 配置类 rocketmq: - name-server: 127.0.0.1:9876 # RocketMQ Namesrv + name-server: 192.168.1.128:9876 # RocketMQ Namesrv spring: # RabbitMQ 配置项,对应 RabbitProperties 配置类 rabbitmq: - host: 127.0.0.1 # RabbitMQ 服务的地址 + host: 192.168.1.128 # RabbitMQ 服务的地址 port: 5672 # RabbitMQ 服务的端口 - username: guest # RabbitMQ 服务的账号 - password: guest # RabbitMQ 服务的密码 + username: admin # RabbitMQ + password: hsrabbitmq # 服务的密码 # Kafka 配置项,对应 KafkaProperties 配置类 kafka: bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 @@ -105,7 +105,7 @@ xxl: job: enabled: false # 是否开启调度中心,默认为 true 开启 admin: - addresses: http://127.0.0.1:9090/xxl-job-admin # 调度中心部署跟地址 + addresses: http://192.168.1.128:9090/xxl-job-admin # 调度中心部署跟地址 --- #################### 服务保障相关配置 #################### diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/application-prod.yaml b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-prod.yaml new file mode 100644 index 000000000..670f3e6bc --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/application-prod.yaml @@ -0,0 +1,184 @@ +--- #################### 注册中心 + 配置中心相关配置 #################### + +spring: + cloud: + nacos: + server-addr: 47.120.50.36:8848 # Nacos 服务器地址 + username: nacos # Nacos 账号 + password: nacos # Nacos 密码 + discovery: # 【配置中心】配置项 + namespace: sys-prod # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + metadata: + version: 2.4.3 # 服务实例的版本号,可用于灰度发布 + config: # 【注册中心】配置项 + namespace: sys-prod # 命名空间。这里使用 dev 开发环境 + group: DEFAULT_GROUP # 使用的 Nacos 配置分组,默认为 DEFAULT_GROUP + +--- #################### 数据库相关配置 #################### +spring: + # 数据源配置项 + autoconfigure: + exclude: + datasource: + druid: # Druid 【监控】相关的全局配置 + web-stat-filter: + enabled: true + stat-view-servlet: + enabled: true + allow: # 设置白名单,不填则允许所有访问 + url-pattern: /druid/* + login-username: # 控制台管理用户名和密码 + login-password: + filter: + stat: + enabled: true + log-slow-sql: true # 慢 SQL 记录 + slow-sql-millis: 100 + merge-sql: true + wall: + config: + multi-statement-allow: true + dynamic: # 多数据源配置 + druid: # Druid 【连接池】相关的全局配置 + initial-size: 5 # 初始连接数 + min-idle: 10 # 最小连接池数量 + max-active: 20 # 最大连接池数量 + max-wait: 600000 # 配置获取连接等待超时的时间,单位:毫秒 + time-between-eviction-runs-millis: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位:毫秒 + min-evictable-idle-time-millis: 300000 # 配置一个连接在池中最小生存的时间,单位:毫秒 + max-evictable-idle-time-millis: 900000 # 配置一个连接在池中最大生存的时间,单位:毫秒 + validation-query: SELECT 1 FROM DUAL # 配置检测连接是否有效 + test-while-idle: true + test-on-borrow: false + test-on-return: false + primary: master + datasource: + master: + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: 123456 + slave: # 模拟从库,可根据自己需要修改 # 模拟从库,可根据自己需要修改 + lazy: true # 开启懒加载,保证启动速度 + url: jdbc:mysql://192.168.1.128:3306/hs-admin-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true&rewriteBatchedStatements=true # MySQL Connector/J 8.X 连接的示例 + username: root + password: 123456 + + # Redis 配置。Redisson 默认的配置足够使用,一般不需要进行调优 + data: + redis: + host: 172.21.56.253 # 地址 + port: 6379 # 端口 + database: 1 # 数据库索引 +# password: 123456 # 密码,建议生产环境开启 + +--- #################### MQ 消息队列相关配置 #################### + +# rocketmq 配置项,对应 RocketMQProperties 配置类 +rocketmq: + name-server: 172.21.56.254:9876;172.21.56.255:9876 # RocketMQ Namesrv + +spring: + # RabbitMQ 配置项,对应 RabbitProperties 配置类 + rabbitmq: + host: 192.168.1.128 # RabbitMQ 服务的地址 + port: 5672 # RabbitMQ 服务的端口 + username: admin # RabbitMQ + password: hsrabbitmq # 服务的密码 + # Kafka 配置项,对应 KafkaProperties 配置类 + kafka: + bootstrap-servers: 127.0.0.1:9092 # 指定 Kafka Broker 地址,可以设置多个,以逗号分隔 + +--- #################### 定时任务相关配置 #################### +xxl: + job: + admin: + addresses: http://47.113.223.77:9300/xxl-job-admin,http://47.115.220.15:9300/xxl-job-admin # 调度中心部署跟地址 + +--- #################### 服务保障相关配置 #################### + +# Lock4j 配置项 +lock4j: + acquire-timeout: 3000 # 获取分布式锁超时时间,默认为 3000 毫秒 + expire: 30000 # 分布式锁的超时时间,默认为 30 毫秒 + +--- #################### 监控相关配置 #################### + +# Actuator 监控端点的配置项 +management: + endpoints: + web: + base-path: /actuator # Actuator 提供的 API 接口的根目录。默认为 /actuator + exposure: + include: '*' # 需要开放的端点。默认值只打开 health 和 info 两个端点。通过设置 * ,可以开放所有端点。 + +# Spring Boot Admin 配置项 +spring: + boot: + admin: + # Spring Boot Admin Client 客户端的相关配置 + client: + instance: + service-host-type: IP # 注册实例时,优先使用 IP [IP, HOST_NAME, CANONICAL_HOST_NAME] + # Spring Boot Admin Server 服务端的相关配置 + context-path: /admin # 配置 Spring + +# 日志文件配置 +logging: + file: + name: ${user.home}/logs/${spring.application.name}.log # 日志文件名,全路径 + +--- #################### 微信公众号、小程序相关配置 #################### +wx: + mp: # 公众号配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-mp-spring-boot-starter/README.md 文档 + # app-id: wx041349c6f39b268b + # secret: 5abee519483bc9f8cb37ce280e814bd0 + app-id: wx5b23ba7a5589ecbb # 测试号 + secret: 2a7b3b20c537e52e74afd395eb85f61f + # 存储配置,解决 AccessToken 的跨节点的共享 + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wx # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + miniapp: # 小程序配置(必填),参见 https://github.com/Wechat-Group/WxJava/blob/develop/spring-boot-starters/wx-java-miniapp-spring-boot-starter/README.md 文档 + # appid: wx62056c0d5e8db250 + # secret: 333ae72f41552af1e998fe1f54e1584a + appid: wx63c280fe3248a3e7 # wenhualian的接口测试号 + secret: 6f270509224a7ae1296bbf1c8cb97aed + config-storage: + type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取 + key-prefix: wa # Redis Key 的前缀 + http-client-type: HttpClient # 采用 HttpClient 请求微信公众号平台 + +--- #################### 芋道相关配置 #################### + +# 芋道配置项,设置当前项目所有自定义的配置 +yudao: + demo: true # 开启演示模式 + +justauth: + enabled: true + type: + DINGTALK: # 钉钉 + client-id: dingvrnreaje3yqvzhxg + client-secret: i8E6iZyDvZj51JIb0tYsYfVQYOks9Cq1lgryEjFRqC79P3iJcrxEwT6Qk2QvLrLI + ignore-check-redirect-uri: true + WECHAT_ENTERPRISE: # 企业微信 + client-id: wwd411c69a39ad2e54 + client-secret: 1wTb7hYxnpT2TUbIeHGXGo7T0odav1ic10mLdyyATOw + agent-id: 1000004 + ignore-check-redirect-uri: true + # noinspection SpringBootApplicationYaml + WECHAT_MINI_APP: # 微信小程序 + client-id: ${wx.miniapp.appid} + client-secret: ${wx.miniapp.secret} + ignore-check-redirect-uri: true + ignore-check-state: true # 微信小程序,不会使用到 state,所以不进行校验 + WECHAT_MP: # 微信公众号 + client-id: ${wx.mp.app-id} + client-secret: ${wx.mp.secret} + ignore-check-redirect-uri: true + cache: + type: REDIS + prefix: 'social_auth_state:' # 缓存前缀,目前只对 Redis 缓存生效,默认 JUSTAUTH::STATE:: + timeout: 24h # 超时时长,目前只对 Redis 缓存生效,默认 3 分钟 diff --git a/yudao-ui/yudao-ui-admin-uniapp/README.md b/yudao-ui/yudao-ui-admin-uniapp/README.md index 9f722091f..e69de29bb 100644 --- a/yudao-ui/yudao-ui-admin-uniapp/README.md +++ b/yudao-ui/yudao-ui-admin-uniapp/README.md @@ -1,4 +0,0 @@ -基于 Vue + uni-app 实现的管理后台。仓库地址: - -* Gitee: -* GitHub: diff --git a/yudao-ui/yudao-ui-admin-vben/README.md b/yudao-ui/yudao-ui-admin-vben/README.md index c6a866cca..7166f23b6 100644 --- a/yudao-ui/yudao-ui-admin-vben/README.md +++ b/yudao-ui/yudao-ui-admin-vben/README.md @@ -1,4 +1 @@ -基于 Vue3 + vben(ant-design-vue) 实现的管理后台。仓库地址: - -* Gitee: -* GitHub: +基于 Vue3 + vben(ant-design-vue) 实现的管理后台。 \ No newline at end of file diff --git a/yudao-ui/yudao-ui-admin-vue2/README.md b/yudao-ui/yudao-ui-admin-vue2/README.md index f1fbdadd0..e69de29bb 100644 --- a/yudao-ui/yudao-ui-admin-vue2/README.md +++ b/yudao-ui/yudao-ui-admin-vue2/README.md @@ -1,4 +0,0 @@ -基于 Vue2 + element-ui 实现的管理后台。仓库地址: - -* Gitee: -* GitHub: diff --git a/yudao-ui/yudao-ui-admin-vue3/README.md b/yudao-ui/yudao-ui-admin-vue3/README.md index 6983c52eb..7d631d56b 100644 --- a/yudao-ui/yudao-ui-admin-vue3/README.md +++ b/yudao-ui/yudao-ui-admin-vue3/README.md @@ -1,4 +1,2 @@ 基于 Vue3 + element-plus 实现的管理后台。仓库地址: -* Gitee: -* GitHub: diff --git a/yudao-ui/yudao-ui-mall-uniapp/README.md b/yudao-ui/yudao-ui-mall-uniapp/README.md index 57b18686a..e69de29bb 100644 --- a/yudao-ui/yudao-ui-mall-uniapp/README.md +++ b/yudao-ui/yudao-ui-mall-uniapp/README.md @@ -1,8 +0,0 @@ -仓库地址: - -* Gitee: -* GitHub: - -功能列表: -* 基于 uniapp 开发,支持微信小程序、微信公众号、H5 移动端,未来会支持支付宝小程序、抖音小程序等 -* 支持 SaaS 多租户,可满足商品、订单、支付、会员、优惠券、秒杀、拼团、砍价、分销、积分等多种经营需求